MATLAB信号卷积.docx_第1页
MATLAB信号卷积.docx_第2页
MATLAB信号卷积.docx_第3页
MATLAB信号卷积.docx_第4页
MATLAB信号卷积.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

利用MATLAB实现信号的时域卷积 一引言MATLAB具有强大的图形处理功能及符号运算功能,为实现信号的可视化以及时域分析提供了强有力的工具,所以我们要利用MATLAB编程辅助分析与计算。现在我们利用MATLAB 编程辅助计算连续时间信号、离散时间信号的卷积。我们利用MATLAB编制一个M函数dconv(),该函数可以计算离散序列x1n和x2n的卷积xn=x1n*x2n,此程序要计算xn,返回xn的非零点对应向量,还将绘制出序列x1n, x2n和 xn 的时域波形图;我们要验证并调用这个dconv()函数计算“hn=xn=un-u(n-4)”这两个序列的卷积和运算,并绘制图像。现在我们再利用MATLAB编制一个计算连续时间信号卷积积分的M函数ddconv(),此函数要计算出两个连续信号f1(t)和f2(t)的卷积积分f (t)的近似值,并绘制f1(t)、f2(t)和f (t)的时域波形图。编完之后,我们利用ddconv()函数求“et=ut+12-ut-1,ht=12tut-ut-2”这两个连续时间信号的卷积积分运算,并绘制图形。二基本原理对于信号的时域卷积有:(1)离散时间信号的卷积和:它的定义为,离散时间信号x1n和x2n的卷积和为:xn=x1n*x2n=m=-x1(m)x2n-m设序列x1n在区间n1 n2非零,序列x2n在m1 m2非零,那么就有xn=x1n*x2n的非零区间就为n1+m1(n2+m2)并且区间长度为n1+m1-n2+m2+1,则只需计算序列xn的非零区间就可以表示整个序列.那么由上可知,在利用MATLAB的 conv()函数的时候就要注意其卷积后的区间长度已经发生变化,在绘制卷积后的图像的时候就要有意识的先减去扩大的区间长度,不然绘制的卷积后的时域图像就是错误的,和横坐标不是正确的对应关系,并且我们在使用conv()函数的时候要先构造x1n和x2n,让它们有限,才能返回序列xn的非零样值时间序列。对于连续的时间信号f1(t)和f2(t)的卷积积分f (t)其定义为:ft= f1t*f2t=-f1()f2(t-)d那么可以用分段求和来实现,即:ft= f1t*f2t=limt0k=-f1ktf2t-ktt令t=nt则有fnt=t k=-f1ktf2(n-k)t当t足够小的时候,fnt的结果就是连续时间信号ft的较好的近似值。所以当用MATLAB实现f1t和f2t的卷积积分的时候要先对f1t和f2t以t的间隔进行采样,得到它们的离散序列f1nt和f2nt,构造它们相应的时间向量;调用MATLAB系统的函数conv()计算卷积k=-f1ktf2(n-k)t,计算ft的近似值fnt;最后构造fnt的时间向量,并用plot命令将波形图画出来。三实现方法(1)先编制一个M函数dconv(),能是实现两个序列的卷积和,并绘制这两个序列的时域波形图和卷积之后的波形图。编程思路如框图1:从外部获取两个序列做这两个序列的时间向量利用stem命令将这两个序列的图画出来用conv()函数求这两个序列的卷积对应好卷积后的时间向量,用Stem命令将卷积后的图像画出来框图1程序如下所示:function xn=dconv(x1,x2) %任意两序列卷积 x11=-5:length(x1)-6; %设定x1(n)的时间向量x22=-5:length(x2)-6; %设定x2(n)的时间向量subplot(131),stem(x11,x1,fill),grid on; %画x1(n)的图像title(x1(n)=u(n)-u(n-4); xlabel(n);ylabel(x(n);set(gca,xtick,-20:20);axis(min(x11)-1),(max(x11)+1),(min(x1)-1),(max(x1)+1) subplot(132),stem(x22,x2,fill),grid on; %画x2(n)的图像title(x2(n)=u(n)-u(n-4); xlabel(n);ylabel(x(n);set(gca,xtick,-20:20);axis(min(x22)-1),(max(x22)+1),(min(x2)-1),(max(x2)+1) xmin1=min(x11); xmax1=max(x11);xmin2=min(x22); xmax2=max(x22); t=(xmax2+xmax1)-(xmin2+xmin1)+1; xx=-10:(t-6-5); %设定x(n)的时间向量xn=conv(x1,x2) %求x(n)=x1(n)*x2(n)subplot(133),stem(xx,xn,fill),grid on; %画x(n)的图像title(x(n)=x1(n)*x2(n) xlabel(n);ylabel(x(n);set(gca,xtick,-100:100);axis(min(xx)+5),(max(xx)-7),(min(xn)-0.5),(max(xn)+0.5)end(2)再编制一个M函数ddconv(n),求两个连续时间信号的卷积,能是实现两个连续信号的卷积和,并绘制这两个信号的时域波形图和卷积之后的波形图。编程思路如框图2:用conv()函数求这两个信号的卷积再乘以抽样的间隔,就是我们所求从外部获取两个离散化的连续信号做这两个信号离散后的时间向量对应好卷积后的时间向量,用plot命令将卷积后的图像画出来利用plot命令将这两个信号的图像画出来框图2程序在编的时候要注意外部获取的连续信号的抽样频率和抽取信号的长度要与自己所编的ddconv()里面的要一致,特别是横坐标要对应,不然就是错误的,因为卷积之后的区间长度发生变化,卷积完之后要拿掉增加的那一部分,才时间与信号的值是正确的对应关系。卷积完之后的值要乘以抽样频率,才是我们所求那么,程序如下:function ft=ddconv(ft1,ft2) %任意两个连续信号卷积 x1=-3:0.001:4;x2=-3:0.001:4;subplot(131),plot(x1,ft1),grid on;title(f1(t)=u(t+1/2)-u(t-2);axis(min(x1),(max(x1),(min(ft1)-1),(max(ft1)+1) ;set(gca,xtick,-3:1/2:4);xlabel(t);ylabel(f(t)subplot(132),plot(x2,ft2),grid on;title(f2(t)=t/2u(t)-u(t-2);axis(min(x2),(max(x2),(min(ft2)-1),(max(ft2)+1) ;xlabel(t);ylabel(f(t);xmin1=min(x1); xmax1=max(x1);xmin2=min(x2); xmax2=max(x2); t=(xmax2+xmax1)-(xmin2+xmin1); xx=0-6:0.001:t-6; %作卷积后的时间向量,要减去增加的区间长度ft=0.001*conv(ft1,ft2); subplot(133),plot(xx,ft),grid on;title(f1(t)*f2(t);set(gca,xtick,min(xx):1/2:max(xx);xlabel(t);ylabel(f(t);axis(min(xx)+3),(max(xx)-3),(min(ft)-0.5),(max(ft)+0.5)end四结果验证(1)程序编制完成之后,我们用dconv()函数求hn=xn=un-u(n-4)这两个序列的卷积和。在这之前我们不妨再编制一个M函数rectanglestem(),让它产生xn=un-a-u(n-b)序列,编制的时候要注意它是辅助ddconv()函数,所以它的起始点要与ddconv()的一致,所以其程序如下:function f= rectanglestem( a,b)k1=a-5;k2=b+5;p=k1:k2;f=zeros(1,length(k1:x-1),ones(1,length(x:y),zeros(1,length(y+1:k2);stem(p,f),grid on;title(x(n)=u(n)-u(n-4),xlabel(n),ylabel(x(n),set(gca,xtick,k1:k2);axis(k1 k2 min(f)-1 max(f)+1)end现在调用这个rectanglestem()函数让它生成先xn=un-u(n-4),在”名命令窗口输入“x1n=rectanglestem(0,4) ”其生成的图像如图1所示;图 1 xn=un-u(n-4)的图像现在来求“hn=xn=un-u(n-4),h(n)*x(n)”由于已经生成了x1(n),所以我们直接调用dconv()函数,直接在命令窗口输入“xn=dconv(x1n,x1n)”生成的图像如图2所示图 2(2)现在我们利用ddconv()函数来求两个连续时间信号的卷积,着两个连续时间信号分别是“et=ut+12-ut-1,ht=12tut-ut-2”现在我们利用ddconv()求f(t)=e(t)*h(t),在这之前我们同样编制两个函数RectangleWindow()和signal(),他们分别用来产生“f1t=ut-a-u(t-b)”和“f2t=12tut-a-ut-b”具体的程序如下:function f= RectangleWindow( a,b)k1=a-2.5;k2=b+3;p=k1:0.001:k2;f=zeros(1,length(k1:0.001:a-0.001),ones(1,length(a:0.001:b),zeros(1,length(b+0.001:0.001:k2);plot(p,f),grid on;title(f(t)=u(t-a)-u(t_b);xlabel(y);xlabel(t);set(gca,xtick,k1:1/2:k2);axis(k1 k2 min(f)-1 max(f)+1);end和function f= signal(a,b)k1=a-3;k2=b+2;t=k1:0.001:k2;h=zeros(1,length(k1:0.001:a-0.001),ones(1,length(a:0.001:b),zeros(1,length(b+0.001:0.001:k2);g=(1/2).*t;f=g.*h;plot(t,f),grid on;title(f(t)=1/2*t*u(t-a)-u(t_b);xlabel(y);xlabel(t);set(gca,xtick,k1:1/2:k2);axis(k1 k2 min(f)-1 max(f)+1);end现在我们在命令窗口输入“f1t= RectangleWindow( -1/2,1)”再输入“f2t=signal(0,2)”此时生成“f1t=ut+12-ut-1”和“f2t=12tut-ut-2”的图像分别如图3,图4所示:图 3 ut+12-ut-1的图像图 4 12tut-ut-2 的图像现在“f1t=ut+12-ut-1”和“f2t=12tut-ut-2”都已经生成,现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论