循环卷积与线性卷积的实现_第1页
循环卷积与线性卷积的实现_第2页
循环卷积与线性卷积的实现_第3页
循环卷积与线性卷积的实现_第4页
循环卷积与线性卷积的实现_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

实验四 循环卷积与线性卷积的实现一、仿真实验目的1)进一步理解并掌握循环卷积与线性卷积的概念;2)理解掌握二者的关系。二、实验分析和计算 两个序列的N点循环卷积定义为 从定义中可以看到,循环卷积和线性卷积的不同之处在于:两个N点序列的N点循环卷积的结果仍为N点序列,而它们的线性卷积的结果的长度为2N-1;循环卷积对序列的移位采取循环移位,而线性卷积对序列采取线性移位。正是这些不同,导致了线性卷积和循环卷积有不同的结果和性质。 循环卷积和线性卷积虽然是不用的概念,但它们之间由一个有意义的公式联系在一起其中。 也就是说,两个序列的N点循环卷积是它们线性卷积以N为周期的周期延拓。设序列还的长度为,序列的长度为,此时,线性卷积结果的序列的点数为;因此如果循环卷积的点数N小于,那么上述周期性延拓的结果就会产生混叠,从而两种卷积会有不同的结果。而如果N满足的条件,就会有 这就意味着时域不会产生混叠。因此,我们得出结论:若通过在序列的末尾填充适当的零值,使得和成为点序列,并作为这两个序列的循环卷积,那么循环卷积与线性卷积的结果在范围内相同。 根据DFT循环卷积性质中卷积定理便可通过两种方法求两个序列的循环卷积:一直直接根据定义计算;二是根据性质先分别求两个序列的N点DFT,并相乘,然后取IDFT以得到循环卷积。第二种方法看起来要经过若干个步骤,但由于求序列的DFT和IDFT都有快速算法,因此它的效率比第一种方法高得多。 同样,根据线性卷积和循环卷积的关系,可以通过计算循环卷积以求得线性卷积,提高计算序列线性卷积的效率。例 已知有限长序列x(n)和h(n)如图题所示,试画出:(1) x(n)和h(n)的线卷积;(2) x(n)和h(n)的9点循环卷积;(3) x(n)和h(n)的5点循环卷积。解:(1)x(n)和h(n)的线卷积m 0 1 2 3 4 h(m) 0 1 2 3 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 最后得出 其线性卷积图形绘于图4-1中。 (2) x(n)和h(n)的9点循环卷积;012345678012340000100001111110000111111000011111100001111110000011111000001111100000111110000011111 最后得出 其线性卷积图形绘于图4-2中。 (3) x(n)和h(n)的5点循环卷积。01234012341111111111111111111111111 最后得出 其线性卷积图形绘于图4-3中。3、 应用MATLAB仿真 所用程序实现如下: 首先得有计算循环卷积的函数。这里,根据上面提到的两种方法,编写两个实现循环卷积的函数。 function y = circonv1(x1,x2,N)if length(x1)Nerror(N must not be less than length of x1)endif length(x2)Nerror(N must not be less than length of x2)endx1=x1,zeros(1,N-length(x1);x2=x2,zeros(1,N-length(x2);n=0:1:N-1;x2=x2(mod(-n,N)+1);H=zeros(N,N);for n=1:1:NH(n,:)=cirshiftd(x2,n-1,N);endy=x1*H;function y=cirshiftd(x,m,N)% 输出序列含循环移位(y=Output sequence contains circular shift。)% 输入序列长度xN error(N 必须大于等于x 的长度!)endx=x zeros(1,N-length(x);n=0:1:N-1;n=mod(n-m,N);y=x(n+1);上述函数直接利用循环函数的定义。本来最简单的方法是用两个for循环嵌套,但是这样的效率显然很低。因此,这里采用矩阵计算的方法,即先生成矩阵H,它的第k行包括序列 ,这样,矩阵H与序列相乘的结果就是两个序列的循环卷积。这种方案的效率有很大的提高。function y =circonv2(x1,x2,N)if length(x1)Nerror(N must not be less than length of x1)endif length(x2)Nerror(N must not be less than length of x2)endX1k=fft(x1,N);X2k=fft(x2,N);Yk=X1k.*X2k;y=ifft(Yk);if(all(imag(x1)=0)&(all(imag(x2)=0);y=real(y);end 该函数采取的是第二种方法。注意到,在该函数的末尾,也判断了是否是两实序列卷积的情形。 下面利用这两种的两个函数来实现循环卷积和线性卷积。计算序列的循环卷积采用conv,因为现在序列都默认从零时刻开始,函数conv正好满足要求。输入以下MATLAB命令:n=0:1:4;m=0:1:4; N1=length(n);N2=length(m);xn=ones(1,N1);hn=m;y1n=conv(xn,hn);y2n=circonv2(xn,hn,N1+N2-1);y3n=circonv1(xn,hn,N1);ny1=0:1:length(y1n)-1;ny2=0:1:length(y3n)-1;subplot(3,1,1);stem(ny1,y1n);subplot(3,1,2);stem(ny1,y2n);subplot

温馨提示

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

评论

0/150

提交评论