利用MATLAB编写卷积函数myconv

利用MATLAB编写卷积函数myconv
利用MATLAB编写卷积函数myconv

一、实验目的

1.了解MATLAB的基本操作。

2.利用MATLAB实现正弦信号采样;

3.利用MATLAB编写卷积函数myconv。

二、实验条件

PC机,MATLAB7.0

三、实验内容

(一)函数文件与脚本文件的定义,正弦信号的采样

函数文件代码:

function seqs=mysampling(Fs,L,Fx)

t=1/Fs:1/Fs:L/Fs;

t1=0:0.001:L/Fs;

x=sin(2*pi*Fx*t);

x1=sin(2*pi*Fx*t1);

plot(t1,x1),hold on;stem(t,x,'r');hold off;

脚本文件代码:

Fs=40;

Fx=20;

L=15;

for Fx=20:10:80,

mysampling(Fs,L,Fx);

pause,

End

运行结果:

实验中遇到的问题及改正:

function seqs=mysampling(Fs,L,Fx)

t=1/Fs:1/Fs:L/Fs;

x=sin(2*pi*Fx*t);

plot(t,x),hold on;stem(t,x,'r');hold off;

一开始并没有添加t1=0:0.001:L/Fs;x1=sin(2*pi*Fx*t1);两行代码,想利用t=1/Fs:1/Fs:L/Fs;x=sin(2*pi*Fx*t);生成的函数直接作为需要抽样的原函数,但是t的采样间隔太大,没法生成平滑的正弦曲线,所以导致最后仿真出来的图像中出现不光滑的正弦曲线。经过思考找出问题后,另外编写了一个正弦函数,设定的采样间隔为0.001后,仿真出来的图像中就出现了光滑的正弦曲线。

(二)编写卷积函数myconv

Conv函数代码:

function y=myconv1(h,x)

n=length(x);

k=length(h); %定义序列长度

for m=1:1:(n-1)

A(m)=0;

end

for m=n:1:n+k-1

A(m)=h(m-n+1); %给h序列添(n-1)个0

end

B=hankel(A);

for i=1:1:n

C(:,i)=B(:,i);%抽取B矩阵中从第1列到第n列的矩阵end

D=fliplr(C); %C矩阵左右翻转

E=D'; %转置

y(n+k-1)=0;

for a=1:1:n+k-1

for b=1:1:n

numble(b)=x(b)*E(b,a);

y(a)=numble(b)+y(a);

end

numble=[0 0 0]; %清零

end

y

stem(y);

脚本代码:

x=[1 -2 3 1];

h=[-3 2 -1 4]; %定义x,h序列

myconv1(h,x);

运行结果:

四、实验结论和讨论

通过本次实验运用MATLAB实现采样以及自行编写卷积函数,基本能熟悉运用MATLAB来进行实验,并且对于采样以及卷积的认识更加的深入。

在进行本次卷积实验之前,我一直只知道利用MATLAB本身自有的conv函数来进行卷积的运算,并没有想过conv函数的卷积运算功能是如何实现的。通过这次自己编写卷积函数的代码,不仅熟知了hankel,fliplr以及转置等MATLAB中及其有用的用法,而且对于卷积函数有了更深一步的了解。

并且通过自己所写的myconv1函数与系统自带函数conv的比较,发现自己所编写的函数的运行时间要多于conv函数运行的时间,意识到MATLAB的深奥之处,也发现自己的能力还远远不足,需要在进一步的努力。

matlab实现卷积运算

2、试求下列图片的卷积波形12()()f t f t * 2() f t t 1 -1 1() f t t 1 -1 列出编程步骤: p=0.01; k1=0:p:1; f1=ones(1,length(k1)); k2=-1:p:1; f2= (k2+1).*(k2<0)+(-k2+1).*(k2>=0); [f,k]=sconv(f1,f2,k1,k2,p) function [f,k]=sconv(f1,f2,k1,k2,p) 3、试求下列图片的卷积波形12()()f t f t *

1() f t t 1 0.5- 2() f t t 12 1 p=0.01; k1=-0.5:p:1; f1=ones(1,length(k1)); k2=0:p:2; f2= 0.5*k2; [f,k]=sconv(f1,f2,k1,k2,p) 4、试求下列图片的卷积波形12()()f t f t *

1() f t t 2 2 - 2() f t t 3-2 -3 21 p=0.01; k1=-2:p:2; f1= (k1==-2)+(k1==2); k2=-3:p:3; f2=(k2+3).*(k2<-2)+(-k2-1).*(k2>=-2).*(k2<=-1)+(k2-1).*(k2>=1).*(k2<=2)+(-k2+3).*(k2>2); [f,k]=sconv(f1,f2,k1,k2,p); 5、试求下列图片的卷积波形12()()f t f t *

1() f t t 5 -5 33 -2() f t t 3 -2 -3 21 p=0.01; k1=-10:p:10; f1=(k1>=-5).*(k1<=-3)+(k1>=3).*(k1<=5); k2=-3:p:3; f2=(k2+3).*(k2<-2)+(-k2-1).*(k2>=-2).*(k2<=-1)+(k2-1).*(k2>=1).*(k2<=2)+(-k2+3).*(k2>2); [f,k]=sconv(f1,f2,k1,k2,p);

matlab,isrgb函数源代码

function y = isrgb(x) %ISRGB Return true for RGB image. % FLAG = ISRGB(A) returns 1 if A is an RGB truecolor image and % 0 otherwise. % % ISRGB uses these criteria to determine if A is an RGB image: % % - If A is of class double, all values must be in the range % [0,1], and A must be M-by-N-by-3. % % - If A is of class uint8 or uint16, A must be M-by-N-by-3. % % Note that a four-dimensional array that contains multiple RGB % images returns 0, not 1. % % Class Support % ------------- % A can be of class uint8, uint16, or double. If A is of % class logical it is considered not to be RGB. % % See also ISBW, ISGRAY, ISIND. % Copyright 1993-2003 The MathWorks, Inc. % $Revision: 1.15.4.2 $ $Date: 2003/08/23 05:52:55 $ wid = sprintf('Images:%s:obsoleteFunction',mfilename); str1= sprintf('%s is obsolete and may be removed in the future.',mfilename); str2 = 'See product release notes for more information.'; warning(wid,'%s\n%s',str1,str2); y = size(x,3)==3; if y if isa(x, 'logical') y = false; elseif isa(x, 'double') % At first just test a small chunk to get a possible quick negative m = size(x,1); n = size(x,2); chunk = x(1:min(m,10),1:min(n,10),:); y = (min(chunk(:))>=0 && max(chunk(:))<=1); % If the chunk is an RGB image, test the whole image

利用MATLAB实现循环卷积.doc

一、实验目的 1.利用MATLAB 实现循环卷积。 2.比较循环卷积与线性卷积的区别。 二、实验条件 PC 机,MATLAB7.0 三、实验内容 1)循环卷积的定义:两个序列的N 点循环卷积定义为: )0()()()]()([1 0N n m n x m h n x n h N k N N <≤-=?∑-= 利用MATLAB 实现两个序列的循环卷积可以分三个步骤完成: (1)初始化:确定循环点数N ,测量输入2个序列的长度。 (2)循环右移函数:将序列x(n)循环右移,一共移N 次(N 为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V 。 (3)相乘:将x(n)移位后组成的矩阵V 与第二个序列h(n)对应相乘,即得循环卷积结果。程序如下: 程序一: clear;close all ; N=10; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1); stem(xxn1,x1); subplot(3,1,2); stem(xxn2,x2); x11=fft(x1,N);

x12=fft(x2,N); y11=x11.*x12; y1=ifft(y11,N); subplot(3,1,3); n=0:length(y1)-1; stem(n,y1,'.'); title('循环卷积的结果'); xlabel('n');ylabel('y1(n)'); 运行后所得图形如下: 观察所得的循环卷积结果发现并没有呈现周期性的序列,因此将程序做下列改变。程序二: clear;close all; N=40; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; x2=[x2,x2,x2,x2]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1);

matlab代码大全

MATLAB主要命令汇总 MATLAB函数参考 附录1.1 管理用命令 函数名功能描述函数名功能描述 addpath 增加一条搜索路径 rmpath 删除一条搜索路径 demo 运行Matlab演示程序 type 列出.M文件 doc 装入超文本文档 version 显示Matlab的版本号 help 启动联机帮助 what 列出当前目录下的有关文件 lasterr 显示最后一条信息 whatsnew 显示Matlab的新特性 lookfor 搜索关键词的帮助 which 造出函数与文件所在的目录 path 设置或查询Matlab路径 附录1.2管理变量与工作空间用命令 函数名功能描述函数名功能描述 clear 删除内存中的变量与函数 pack 整理工作空间内存 disp 显示矩阵与文本 save 将工作空间中的变量存盘 length 查询向量的维数 size 查询矩阵的维数 load 从文件中装入数据 who,whos 列出工作空间中的变量名 附录1.3文件与操作系统处理命令 函数名功能描述函数名功能描述 cd 改变当前工作目录 edit 编辑.M文件 delete 删除文件 matlabroot 获得Matlab的安装根目录 diary 将Matlab运行命令存盘 tempdir 获得系统的缓存目录 dir 列出当前目录的内容 tempname 获得一个缓存(temp)文件 ! 执行操作系统命令 附录1.4窗口控制命令 函数名功能描述函数名功能描述 echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面format 设置输出格式 附录1.5启动与退出命令 函数名功能描述函数名功能描述 matlabrc 启动主程序 quit 退出Matlab环境 startup Matlab自启动程序 附录2 运算符号与特殊字符附录 2.1运算符号与特殊字符 函数名功能描述函数名功能描述

几种常见窗函数及其MATLAB程序实现

几种常见窗函数及其MATLAB程序实现 2013-12-16 13:58 2296人阅读评论(0) 收藏举报 分类: Matlab(15) 数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算。具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换、相关分析等数学处理。信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。在FFT分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。 泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。 频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。图1是几种常用的窗函数的时域和频域波形,其中矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率等;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。表1 是几种常用的窗函数的比较。 如果被测信号是随机或者未知的,或者是一般使用者对窗函数不大了解,要求也不是特别高时,可以选择汉宁窗,因为它的泄漏、波动都较小,并且选择性也较高。但在用于校准时选用平顶窗较好,因为它的通带波动非常小,幅度误差也较小。

(仅供参考)Matlab编写与调用函数

MATLAB 学习指南 第六章.编写与调用函数 在这一章中,我们讨论如何用多源代码文件来构造一个程序。首先,解释代码文件在MATLAB中如何工作。在编译语言中,例如FORTRAN,C ,或C++,代码被存储在一个或多个源文件中,在进行编译的时候,这些源文件组合在一起 形成了一个单独的可执行文件。作为一种解释型语言,MATLAB以一种更广泛的方式来处理多个源文件。MATLAB代码被放入带有扩展名.m的ASCII文件(或称m-文件)中。MATLAB 6 有一个集成字处理与调试应用程序,尽管会用到其它编辑程序如vi或emacs,集成字处理与调试应用程序仍是编译m-文件的首选程序。 有两种不同的m-文件。一种是脚本文件,它是一种最简单的文件,仅仅将MATLAB中的指令收集在一起。当在交互提示符处输入文件名执行脚本文件时,MATLAB在m-文件内读取并执行指令,就好像指令是我们输入的。而且,似乎我们能够削减m-文件的内容并将削减过的内容传到MATLAB指令窗口中。这种m-文件的用法将在6.1节中给予概述。 在6.2节中要讨论的第二种m-文件包含一个单一函数,此函数名与此m-文件名相同。这种m-文件包含一段独立的代码,这段代码具有一个明确规定的输入/输出界面;那就是说,传给这段代码一列空变量arg1,arg2,…,这段独立代码就能够被调用,然后返回输出值out1,out2,…。一个函数m-文件的第一个非注释行包含函数标头,其形式如下: 此m-文件以返回指令结束,将执行程序返回到函数被调用的位置。或者在交互指令提示符处或者在另一个m-文件内,无论何时用下列指令调用函数代码,函数代码都将被执行。 输入映射到空变量:arg1=var1,arg2=var2,等等。在函数主体内,输出值被分配给了变量out1,out2,等等。当遇到返回值时,当前值out1,out2,…在函数被调用处被映射到变量outvar1,outvar2,…。在用可变长度自变量和输出变量列表编写函数时,MATLAB允许更多的自由。例如,也可以使用下列指令来调用函数。 在此情况下,仅返回一个单一输出变量,这个变量在出口处包含函数变量out1的值。输入和输出自变量可能是字符串,数值,向量,矩阵,或者更高级的数据结构。 为什么使用函数呢?因为从每门计算机科学课程中可知,把一个大的程序分割 成多个可以单独执行一个被明确规定的和被注释过的任务的小程序会使大程序 易读,易于修改,不易于出错。在MATLAB中,先为程序编写一个主文件,或者是一个脚本文件或者更好的话,是一个能够返回一个单一整数的函数m-文件(返回1表示程序执行成功,0表示不完全程序执行,负值表示出现运行误差),这个主文件是程序的进入点。通过把m-文件当作函数来调用,此程序文件可以

基于Matlab实现线性卷积等

线性卷积与循环卷积 一、作品目的 通过matlab的强大功能展示线性卷积和循环卷积过程中方方面面的计算和变化,让大家对这两种卷积有一个更加完美的认识。 二、概念简介 卷积是一种典型的乘累加运算。 1.线性卷积 线性卷积是对线性移不变(LSI)系统的输入输出关系的描述,体现系统的特性。 线性卷积的表达式为 一般情况,现实的系统为因果系统,有k<0时,恒有h(k)=0,则 若x(n)是一个N点序列,h(n)是一个m点序列,则卷积的结果y(n)将是L=N+M-1点的序列。 2.循环卷积

设x1(n) 和x2(n) 是两个长度为L、M的有限长序列,它们的N 点循环卷积x3(n) 定义为: 注意:其中N>=Max{L,M}如果其中一个序列(或者两个序列)的长度没有所求N点循环卷积的长度长,那在该序列后面补零,直到长度达到N。 三、设计思路及程序 1. 线性卷积: (1)以输入序列x(n)=[5,4,3,2,1],脉冲响应h(n)=[1,1,1,1]为列进行演示。 (2)计算输入序列和脉冲响应的长度。 (3)画出补零后的输入序列和脉冲响应 (4)设计一个循环,在循环中实现反转、位移和计算。并画出反转后的图像变化和卷积图像,将每一次移位结果保存为fig图。(5)最后将上一步所生成的所有fig图合起来生成一张gif图 程序展示: clear; clc; close all; (1)(2)

xn=[5,4,3,2,1]; M=length(xn);%输入任意序列并计算长度M hn=[1,1,1,1]; N=length(hn);%输入任意脉冲响应并计算长度N m=[-(M-1):M+N-2];%设置代换变量的范围以便x(m)翻转和移位(3) xm=[zeros(1,M-1),xn,zeros(1,N-1)];%补零以便与m对应绘图 subplot(2,2,1);stem(m,xm,'r.');%%绘输入序列x(m) ylabel('x(m)'); grid on; title('(a)输入序列x(m)'); hm=[zeros(1,M-1),hn,zeros(1,M-1)];%补零以便与m对应绘图 subplot(2,2,2);stem(m,hm,'r.');%绘脉冲响应 ylabel('h(m)'),grid,title('(b)脉冲响应h(m)');%%加标签网格和标题 yn=zeros(1,2*M+N-2);%卷积输出初始化 (4) for n=0:M+N-2;%逐个计算卷积输出 if n==0; xmfy=[fliplr(xn),zeros(1,M+N-2)];%实现翻转 else for k=M:-1:1;

matlab中s函数编写心得(转)(最新整理)

matlab中s函数编写心得(转) Part I: 所谓s函数是system Function的简称, 用它来写自己的simulink模块. s函数可以用matlab、C、C++、Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单)< xmlnamespace prefix ="o" ns ="urn:schemas- microsoft-com:office:office" /> 先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等 先介绍一下simulink的仿真过程(以便理解s函数),simulink 的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束. 在matlab的workspace里输入edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构.

1. 函数的函数头 函数的第一行:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag) , 先讲输入与输出变量的含义: t是采样时间, x是状态变量, u是输入(是做成simulink模块的输入) , flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等) sys输出根据flag的不同而不同(下面将结合flag来讲sys的含义) , x0是状态变量的初始值, str是保留参数(mathworks公司还没想好该怎么用它, 一般在初始化中将它置空就可以了, str=[]), ts是一个1×2的向量, ts(1)是采样周期, ts(2)是偏移量 2. 函数分析 下面结合sfuntmpl.m中的代码来讲具体的结构: switch flag, %判断flag,看当前处于哪个状态 case 0, [sys,x0,str,ts]=mdlInitializeSizes; // 解释说明 flag=0表示当前处于初始化状态,此时调用函数mdlInitializeSizes进行初始化,此函数在该文件的第149行定义. 其中的参数sys是一个结构体,它用来设置模块的一些参数,各个参 数详细说明如下 size = simsizes;%用于设置模块参数的结构体用simsizes来生

卷积码matlab程序

卷积编码程序: function [output, len_tal] = cnv_encd(secrettext, encodetext) g = [0 0 1 0 0 1 0 0; 0 0 0 0 0 0 0 1; 1 0 0 0 0 0 0 1; 0 1 0 0 1 1 0 1]; k0 = 1; % 读入文本文件并计算文件长度 frr = fopen(secrettext, 'r'); [msg, len] = fread(frr, 'ubit1'); msg = msg'; % check to see if extra zero padding is necessary if rem(length(msg), k0) > 0 msg = [msg, zeros(size(1:k0-rem(length(msg),k0)))]; end n = length(msg)/k0; % 把输入比特按k0分组,n为所得的组数。 % check the size of matrix g if rem(size(g, 2), k0) > 0 error('Error, g is not of the right size.'); end % determine L and n0 L = size(g, 2)/k0; n0 = size(g, 1); % add extra zeros,以保证编码器是从全0开始,并回到全0状态。 u = [zeros(size(1:(L-1)*k0)), msg, zeros(size(1:(L-1)*k0))]; % generate uu, a matrix whose columns are the contents of conv. encoder at % various clock cycles. u1 = u(L*k0: -1 :1); for i = 1:n+L-2 u1 = [u1, u((i+L)*k0:-1:i*k0+1)]; end uu = reshape(u1, L*k0, n+L-1); % determine the output output = reshape(rem(g*uu, 2), 1, n0*(L+n-1)); len_tal = n0*(L + n - 1);

完整的遗传算法函数Matlab程序

完整的遗传算法函数Matlab程序 function [x,endPop,bPop,traceInfo] = ga(bounds,eevalFN,eevalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps) n=nargin; if n<2 | n==6 | n==10 | n==12 disp('Insufficient arguements') end if n<3 %Default eevalation opts. eevalOps=[]; end if n<5 opts = [1e-6 1 0]; end if isempty(opts) opts = [1e-6 1 0]; end if any(eevalFN<48) %Not using a .m file if opts(2)==1 %Float ga e1str=['x=c1; c1(xZomeLength)=', eevalFN ';']; e2str=['x=c2; c2(xZomeLength)=', eevalFN ';']; else %Binary ga e1str=['x=b2f(endPop(j,:),bounds,bits); endPop(j,xZomeLength)=',... eevalFN ';']; end else %Are using a .m file if opts(2)==1 %Float ga e1str=['[c1 c1(xZomeLength)]=' eevalFN '(c1,[gen eevalOps]);']; e2str=['[c2 c2(xZomeLength)]=' eevalFN '(c2,[gen eevalOps]);']; else %Binary ga e1str=['x=b2f(endPop(j,:),bounds,bits);[x v]=' eevalFN ... '(x,[gen eevalOps]); endPop(j,:)=[f2b(x,bounds,bits) v];']; end end if n<6 %Default termination information termOps=[100];

matlab程序设计实例

MATLAB 程序设计方法及若干程序实例 樊双喜 (河南大学数学与 信息科学学院开封475004) 摘要本文通过对 MATLAB 程序设计中的若干典型问题做简要的分析和总结,并在此基础上着重讨论了有关算法设计、程序的调试与测试、算法与程序的优化以及循环控制等方面的问题.还通过对一些程序实例做具体解析,来方便读者进行编程训练并掌握一些有关MATLAB 程序设计方面的基本概念、基本方法以及某些问题的处理技巧等.此外,在文章的最后还给出了几个常用数学方法的算法程序, 供读者参考使用.希望能对初学者进行 MATLAB 编程训练提供一些可供参考的材料,并起到一定的指导和激励作用,进而为MATLAB 编程入门打下好的基础. 关键字算法设计;程序调试与测试;程序优化;循环控制 1 算法与程序 1.1 算法与程序的关系算法被称为程序的灵魂,因此在介绍程序之前应先了 解什么是算法.所谓算 法就是对特定问题求解步骤的一种描述.对于一个较复杂的计算或是数据处理的问题,通常是先设计出在理论上可行的算法,即程序的操作步骤,然后再按照算法逐步翻译成相应的程序语言,即计算机可识别的语言. 所谓程序设计,就是使用在计算机上可执行的程序代码来有效的描述用于解决特定问题算法的过程.简单来说,程序就是指令的集合.结构化程序设计由于采用了模块分化与功能分解,自顶向下,即分而治之的方法,因而可将一个较复杂的问题分解为若干子问题,逐步求精.算法是操作的过程,而程序结构和程序流程则是算法的具体体现. 1.2MATLAB 语言的特点 MATLAB 语言简洁紧凑,使用方便灵活,库函数极其丰富,其语法规则与科技人员的思维和书写习惯相近,便于操作.MATLAB 程序书写形式自由,利用其丰富

用matlab实现两个离散序列的卷积(不使用conv函数)

作业2.用matlab实现离散序列的卷积. N=14; n=[1:N-1]; f=1/16; signal1=5*sin(2*pi*n/8); figure(1); subplot(3,1,1) stem(n,signal1);title( ' 信号1' );xlabel( 'n' );ylabel( axis([0 15 -6 6]) long_M=5; signal2=ones(1,long_M); subplot(3,1,2) stem(signal2);title( ' 信号2' );xlabel( 'n' );ylabel( axis([0 6 -2 2]); grid on; long_N=length(signal1); fk=zeros(0,long_N+long_M+10); if (long_N>long_M) for k=1:1:long_N+long_M-1 a=0; if (k<=long_N) for i=1:1:k if (i>long_M) fk(k)=a; else fk(k)=a+signal2(i)*signal1(k-i+1); a=fk(k); end end else for i=1:1:k if (k-long_N+i>long_M) fk(k)=a; else fk(k)=a+signal2(k-long_N+i)*signal1(long_N-i+1); a=fk(k); end end end end end subplot(3,1,3) stem(fk);title( ' 卷积函数的实现' );xlabel( 'n' );ylabel( 'y(n)' ); 'y(n)' ); 幅度' );

最小二乘法Matlab自编函数实现及示例.docx

、最小二乘拟合原理 x= xl x2 ... xn y= yl y2 ... yn 求m 次拟合 ?力* y 卅…I ZA ; A T A = ZX 茁 X x i - X x i +1 ,- ? ? ? [函Oi …备F =⑷矿丄? A T y 所以m 次拟合曲线为y = a 0 +勿?怎+吐■审+???? +如■牙皿 二、 Matlab 实现程序 function p=funLSM (x, y, m) %x z y 为序列长度相等的数据向量,m 为拟合多项式次数 format short; A=zeros(m+l,m+l); for i=0:m for j=0:m A(i + 1, j + 1)=sum(x.A (i+j)); end b(i+1)=sum(x.A i.*y); end a=A\b 1; p=fliplr (a'); 三、 作业 题1:给出如下数据,使用最小二乘法球一次和二次拟合多项式(取小数点后3位) X 1.36 1.49 1.73 1.81 1.95 2.16 2.28 2.48 Y 14.094 15.069 16.844 17.378 18.435 19.949 20.963 22.495 解:

? x=[1.36 1.49 1.73 1. 81 1. 95 2. 16 2. 28 2. 48]: ? y=[14.094 15.069 16.844 17. 378 18.435 19.949 20.963 22.495]; >> p=funLSM(x, y? 1) P = 7.4639 3.9161 >> p=funLSM(x, y? 2) P = 0.3004 6.3145 4.9763 一次拟合曲线为: y = 7.464x+ 3.91S 二次拟合曲线为: y = +6.315^4-4.976 一次拟合仿真图

用matlab计算序列卷积和并绘图

(一)实验目的:学会用MATLAB对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。 (二)实验原理: 1、离散时间序列f1(k)和f2(k)的卷积和定义: f(k)=f1(k)*f2(k)=∑∞ -∞ = -? i i k f i f) ( 2 ) ( 1 2、在离散信号与系统分析中有两个与卷积和相关的重要结论: a、f(k)= ∑∞ -∞ = -? i i k i f) ( ) (δ=f(k)* δ(k)即离散序列可分解为一系列 幅度由f(k)决定的单位序列δ(k)及其平移序列之积。 b、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状 态响应为y(k),则有:y(k)= ∑∞ -∞ = -? i i k h i f) ( ) ( 3、上机:conv.m用来实现两个离散序列的线性卷积。 其调用格式是:y=conv(x,h) 若x的长度为N,h的长度为M,则y的长度L=N+M-1。 (三)实验内容 1、题一:令x(n)= {}5,4,3,2,1,h(n)={}246326, , , , ,,y(n)=x(n)*h(n),求y(n)。 要求用subplot和stem画出x(n),h(n),y(n)与n的离散序列图形。 源程序: N=5; M=6; L=N+M-1; x=[1,2,3,4,5]; h=[6,2,3,6,4,2]; y=conv(x,h); nx=0:N-1; nh=0:M-1; ny=0:L-1; subplot(131); stem(nx,x,'*k'); xlabel('n'); ylabel('x(n)'); grid on ; subplot(132); stem(nh,h,'*k'); xlabel('n'); ylabel('h(n)'); grid on ; subplot(133); stem(ny,y,'*k'); xlabel('n'); ylabel('y(n)'); grid on ; 实验结果:

MATLAB一些函数实例

1.三角波产生器 t=-3:0.01:3; f1=tripuls(t); subplot(3,1,1); plot(t,f1); axis([-3,3,-0.2,1.2]) set(gcf,'color','w'); f2=tripuls(t,4); subplot(3,1,2); plot(t,f2); axis([-3,3,-0.2,1.2]) %set(gcf,'color','w'); f3=tripuls(t,4,-1); subplot(3,1,3); plot(t,f3); axis([-3,3,-0.2,1.2]) 2.离散序列的相加与相乘 function[x,n]=jxl(x1,x2,n1,n2) n=min(min(n1),min(n2)):max(max(n1),max(n2)); s1=zeros(1,length(n));s2=s1; s1(find((n>=min(n1))&(n<=max(n1))==1))=x1; s2(find((n>=min(n2))&(n<=max(n2))==1))=x2; x=s1+s2;//x=s1.*s2:%序列乘 axis([(min(min(n1),min(n2))-1),(max(max(n1),max(n2))+1),(min(x)-0.5), (max(x)+0.5)]) 3.序列的反摺 function[x,n]=xlfz(x1,n1) x=fliplr(x1);n=fliplr(n1); stem(n,x,'filled') axis([min(n)-1,max(n)+1,min(x)-0.5,max(x)+0.5]) 4.序列的卷积 function[x,n]=gghconv(x1,x2,n1,n2) x=conv(x1,x2) ns=n1(1)+n2(1); leg=length(x1)+length(x2)-2; n=ns:(ns+leg) subplot(2,2,1) stem(n1,x1,'filled') title('x1(n)') xlabel('n') subplot(2,2,2)

MATLAB计算卷积

本科实验报告 实验名称:MATLAB计算卷积 学员:学号: 培养类型:技术类年级: 2008级 专业:电子工程所属学院:电子科学与工程学院指导教员:职称:教授 实验室:实验日期: 2010年12月23日 国防科学技术大学训练部制

实验一 MATLAB 计算卷积 一. 实验目的 通过MATLAB 卷积程序的编写, 学会使用计算机软件编程来处理信号(即信号的采样与计算)并进一步了解信号卷积计算的方法与步骤,以更好地理解信号与系统课程知识理论,加强理论与实践的结合。 二. 实验要求 使用MATLAB 编写主程序和卷积函数,实现两个信号的卷积运算。要求: 1. 程序必须对任意两个函数信号都适用; 2. 结果必须是至少两个信号的卷积。 三. 实验平台 笔记本电脑 MATLAB 软件平台 四. 实验原理 信号卷积的计算公式为 可通过图形变换的方法来计算两个信号的卷积。 用图解法求解卷积的步骤是:翻转、滑动、相乘、积分。 a. 确定卷积结果的分段时限; b. 确定每段中积分的上下限; c. 确定每段中积分函数的表达式具体实现如下图 ()()()()()c t f t g t f g t d τττ ∞-∞ =*= -?

五. 实验内容 对于信号 计算其卷积 六. 实验分析 (1)根据题目要求输入信号,观察信号和卷积结果的波形表示。 信号f 的波形为 2000007 6 6 02 0 0 other Pair 1: = 15 w here 1010 1010 2010ππτ τττ-?+≤≤=? ?-+-==?=?=?* exp()()()()(.)()() .,,./f t kt t s t s t s t s t g t s t f H z s k M H z s

matlab函数计算的一些简单例子1

MATLAB作业一1、试求出如下极限。 (1) 23 25 (2)(3) lim (5) x x x x x x x ++ + →∞ ++ + ,(2) 23 3 1 2 lim () x y x y xy x y →- → + + ,(3) 22 22 22 1cos() lim ()x y x y x y x y e+ → → -+ + 解:(1)syms x; f=((x+2)^(x+2))*((x+3)^(x+3))/((x+5)^(2*x+5)) limit(f,x,inf) =exp(-5) (2)syms x y; f=(x^2*y+x*y^3)/(x+y)^3; limit(limit(f,x,-1),y,2) =-6; (3)syms x y; f=(1-cos(x^2+y^2))/(x^2+y^2)*exp(x^2+y^2); limit(limit(f,x,0),y,0) =0 2、试求出下面函数的导数。 (1 )() y x=, (2)22 atan ln() y x y x =+ 解; (1)syms x; f=sqrt(x*sin(x)*sqrt(1-exp(x))); g= diff(f,x); g== (sin(x)*(1 - exp(x))^(1/2) + x*cos(x)*(1 - exp(x))^(1/2) - (x*exp(x)*sin(x))/(2*(1 - exp(x))^(1/2)))/(2*(x*sin(x)*(1 - exp(x))^(1/2))^(1/2)) pretty(g)= (2)syms x y; f=atan(y/x)-log(x^2+y^2) pretty(-simple(diff(f,x)/diff(f,y)))= 2 x + y =------- x - 2 y (3) 假设1 cos u- =,试验证 22 u u x y y x ?? = ???? 。 解:syms x y; u=1/cos(sqrt(x/y)); diff(diff(u,x),y)-diff(diff(u,y),x)=0; 所以: 22 u u x y y x ?? = ????

实验二优选资料连续时间信号卷积运算的MATLAB实现

实验二连续时间信号卷积运算的M A T L A B实现 一.实验目的 (1)理解掌握卷积的概念及物理意义。 (2)理解单位冲激响应的概念及物理意义。 二.实验原理 三.实验参考程序 用MATLAB实现连续信号f1(t)和f2(t)卷积。首先利用MATLAB实现连续信号卷积的通用函数sconv(): function[f,k]=sconv(f1,f2,k1,k2,p); f=conv(f1,f2); f=f*p; k0=k1(1)+k2(1); k3=length(f1)+length(f2)-2; k=k0:p:k3*p; subplot(2,2,1); plot(k1,f1); title('f1(t)'); xlabel('t'); ylabel('f1(t)'); subplot(2,2,2); plot(k2,f2); title('f2(t)'); xlabel('t'); ylabel('f2(t)'); subplot(2,2,3); plot(k,f); h=get(gca,'position'); h(3)=*h(3); set(gca,'position',h); title('f(t)=f1(t)*f2(t)'); xlabel('t'); ylabel('f(t)'); 例2-1 已知两连续时间信号,试用MATLAB求f(t)=f1(t)*f2(t),并绘出f(t)的时域波形图。 实现上述过程的MATLAB命令如下: p=; k1=0:p:2; f1=*k1;

k2=k1; f2=f1; [f,k]=sconv(f1,f2,k1,k2,p); 运行程序结果图: 而当p=时连续时间信号的波形图为 对比上面两幅图可见,当抽样时间p 足够小时,函数sconv()的计算结果就是连续时间卷积 )(*)()(21t f t f t f =的较好的数值近似。 四.实验要求 在课本卷积部分课后习题中任选两题,完成信号的卷积运算,绘出波形。 已知两连续时间信号如图所示,使用MATLAB 求()()()12f t f t f t =*,并绘出()f t 的时域波形图。 五.实验心得 通过本次实验我学会使用MATLAB 软件,并用软件实现了的连续时间信号的卷积运算,且进一步理解了卷积的概念和物理意义,对我以后学习卷积知识有了很大的帮助。

matlab经典代码大全

哈哈哈 MATLAB 显示正炫余炫图:plot(x,y1,'* r',x,y2,'o b') 定义【0,2π】;t=0:pi/10:2*pi; 定义函数文件:function [返回变量列表]=函数名(输入变量列表) 顺序结构:选择结构 1)if-else-end语句 其格式为: if 逻辑表达式 程序模块1; else 程序模块2; End 图片读取:%选择图片路径 [filename, pathname] = ... uigetfile({'*.jpg';'*.bmp';'*.gif'},'选择图片'); %合成路径+文件名 str=[pathname,filename]; %为什么pathname和filename要前面出现的位置相反才能运行呢???%读取图片 im=imread(str); %使用图片 axes(handles.axes1); %显示图片 imshow(im); 边缘检测: global im str=get(hObject,'string'); axes (handles.axes1); switch str case ' 原图' imshow(im); case 'sobel' BW = edge(rgb2gray(im),'sobel'); imshow(BW); case 'prewitt' BW = edge(rgb2gray(im),'prewitt');

imshow(BW); case 'canny' BW = edge(rgb2gray(im),'canny'); imshow(BW);Canny算子边缘定位精确性和抗噪声能力效果较好,是一个折中方案 end; 开闭运算: se=[1,1,1;1,1,1;1,1,1;1,1,1]; %Structuring Element I=rgb2gray(im); imshow(I,[]);title('Original Image'); I=double(I); [im_height,im_width]=size(I); [se_height,se_width]=size(se); halfheight=floor(se_height/2); halfwidth=floor(se_width/2); [se_origin]=floor((size(se)+1)/2); image_dilation=padarray(I,se_origin,0,'both'); %Image to be used for dilation image_erosion=padarray(I,se_origin,256,'both'); %Image to be used for erosion %%%%%%%%%%%%%%%%%% %%% Dilation %%% %%%%%%%%%%%%%%%%%% for k=se_origin(1)+1:im_height+se_origin(1) for kk=se_origin(2)+1:im_width+se_origin(2) dilated_image(k-se_origin(1),kk-se_origin(2))=max(max(se+image_dilation(k-se_origin(1):k+halfh eight-1,kk-se_origin(2):kk+halfwidth-1))); end end figure;imshow(dilated_image,[]);title('Image after Dilation'); %%%%%%%%%%%%%%%%% %%% Erosion %%% %%%%%%%%%%%%%%%%% se=se'; for k=se_origin(2)+1:im_height+se_origin(2) for kk=se_origin(1)+1:im_width+se_origin(1) eroded_image(k-se_origin(2),kk-se_origin(1))=min(min(image_erosion(k-se_origin(2):k+halfwidth -1,kk-se_origin(1):kk+halfheight-1)-se)); end end figure;imshow(eroded_image,[]);title('Image after Erosion'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Opening(Erosion first, then Dilation) %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

相关文档
最新文档