资源描述:
《循环卷积与线性卷积实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验五循环卷积与线性卷积的实现一、实验目的(1)进一步理解并掌握循环卷积与线性卷积的概念;(2)理解掌握二者的关系。二、实验原理两个序列的点的循环卷积定义为从定义中可以看到,循环卷积和线性卷积的不同之处在于:两个点序列的点循环卷积结果仍为点序列,而它们的线性卷积的结果长度则为2-1;循环卷积对序列的移位采取循环移位,而线性卷积对序列采取线性移位。正是这些不同,导致了线性卷积和循环卷积有不同的结果和性质。两个序列的点循环卷积是它们的线性卷积以为周期的周期延拓。设序列的长度为,序列的长度为,此时线性卷积结果
2、的序列点数为;因此如果循环卷积的点数小于,那么上述周期性延拓的结果就会产生混叠,从而两种卷积会有不同的结果。而如果满足的条件,就有循环卷积与线性卷积的结果在范围内相同。根据DFT循环卷积性质中的卷积定理因此可以根据性质先分别求两个序列的点DFT,并相乘,然后取IDFT以得到循环卷积。三、实验分析例题:已知有限长序列与如下图所示,(1)画出两者之间的线性卷积(2)8点圆卷积。(3)5点圆卷积。解析如下:(1)与的线性卷积,由公式可知:与的图形如下:利用方格平移法:1111132100由方格平移法可知:当时
3、,当时,当时,当时,当时,当时,当时,当时,当时,得到图形如下:(2)与的8点圆卷积,由公式可知:与的图形如下:根据下面图表可计算得到圆卷积:当时:111110000000321000003000取和得到圆卷积为3。当时:111110000000032100000000取和得到圆卷积为0。当时:111110001000003200000000取和得到圆卷积为1。当时:111110002100000321000000取和得到圆卷积为3。当时:111110003210000032100000取和得到圆卷积为
4、6。当时:111110000321000003210000取和得到圆卷积为6。当时:111110000032100000321000取和得到圆卷积为6。当时:111110000003210000032000取和得到圆卷积为5。得到波形如下:(2)与的5点圆卷积,由公式可知:与的图形如下:根据图标可计算得到圆卷积:当时:111110321003210取和得到圆卷积为6。当时:111110032100321取和得到圆卷积为6。当时:111111003210032取和得到圆卷积为6。当时:1111121003
5、21003取和得到圆卷积为6。当时:111113210032100取和得到圆卷积为6。画出波形如下:一、仿真实验Matlab程序设计如下:编写的循环卷积程序:方法一:直接根据定义计算,程序编辑如下:functiony=circonv1(x1,x2,N)iflength(x1)>Nerror('Nmustnotbelessthanlengthofx1')endiflength(x2)>Nerror('Nmustnotbelessthanlengthofx2')endx1=[x1,zeros(1,N-len
6、gth(x1))];x2=[x2,zeros(1,N-length(x2))];n=[0:1:N-1];x2=x2(mod(-n,N)+1);H=zeros(N,N);forn=1:1:NH(n,:)=cd(x2,n-1,N);endy=x1*H';functiony=cd(x,m,N)iflength(x)>Nerrorendx=[xzeros(1,N-length(x))];n=[0:1:N-1];n=mod(n-m,N);y=x(n+1);方法二:根据性质先分别求两个序列的N点DFT,并相乘,然后
7、取IDFT以得到循环卷积functiony=circonv2(x1,x2,N)iflength(x1)>Nerror('Nmustnotbelessthanlengthofx1')endiflength(x2)>Nerror('Nmustnotbelessthanlengthofx2')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编
8、写的主程序:n=[0:1:4];m=[0:1:4];N1=length(n);N2=length(m);xn=ones(1,5);hn=[0,0,1,2,3];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