收藏 分销(赏)

循环卷积和圆周卷积.docx

上传人:pc****0 文档编号:9440455 上传时间:2025-03-26 格式:DOCX 页数:9 大小:94.88KB
下载 相关 举报
循环卷积和圆周卷积.docx_第1页
第1页 / 共9页
循环卷积和圆周卷积.docx_第2页
第2页 / 共9页
点击查看更多>>
资源描述
循环卷积与圆周性卷积的实现 一、 实验目的 (1)进一步理解并掌握循环卷积与线性卷积和圆周卷积和的概念。 (2)理解掌握三者的关系。 二、 实验原理 两个序列的N点循环卷积定义为 (9-16) 从定义中可以看到,循环卷积和线性卷积的不同之处在于:两个N点循环卷积的结果仍为N点序列,而它们的线性卷积的结果的长度则为2N-1;循环卷积对序列的移位采取循环移位,而线性卷积对序列采取线性移位。正是这些不同,导致了线性卷积和循环卷积有不同的结果和性质。 循环卷积和线性卷积虽然是不同的概念,但它们之间由一个有意义的公式联系在一起 (9-17) 其中 也就是说,两个序列N点循环卷积是它们的线性卷积以N为周期的周期延拓,设序列h(n)的长度为,序列x(n)的长度为,此时,线性卷积结果的序列的点数为,因此如果循环卷积的点数N小于,那么上述周期延拓的结果就会产生混叠,从而两种卷积会有不同的结果。而如果N满足的条件,就会有 (9-18) 这就意味着在时域不会产生混叠。因此,我们得出结论:若通过在序列的末尾充填适当的零值,使得x(n)和h(n)成为点序列,并作出这两个序列的循环卷积,那么循环卷积与线性卷积的结果在范围内相同。 根据DFT循环卷积性质中的卷积定理 (9-19) 便可通过两种方法求两个序列的循环卷积:一是直接根据定义计算,二是根据性质线分别求两个序列的N点DFT,并相乘,然后取IDFT以得到循环卷积。第二种方法看起来要经过若干过程,但由于序列的DFT和IDFT都有快速算法,因此它的效率比第一种方法高得多。 同样,根据线性卷积和循环卷积的关系,可以通过计算循环卷积以求得线性卷积,提高计算序列线性卷积的效率。 三、例题及理论计算 已知有限长序列x(n)与h(n)如图试画出: (1) x(n)与h(n)的线卷积 (2) x(n)与h(n)的7点圆卷积 (3) x(n)与h(n)的5点圆卷积 五点卷积图 四、matlab仿真 用matlab仿真, 方法一: function y=circonv1(x1,x2,N) %realize circular convolution use dft method if length(x1)>N error('N must not be less than length of x1') end if length(x2)>N error('N must not be less than length of x2') end X1k=[x1,zeros(1,N-length(x1))]; X2k=[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:N; H(n,:)=cirshifted(x2,n-1,N); end y1=x1*H'; function y=cirshifted(x,m,N) if length(x)>N error('N必须大于等于x的长度') end x=[x,zeros(1,N-length(x))]; n=[0:1:N-1]; n=mod(n-m,N); y=x(n+1); 方法二: function y=circonv2(x1,x2,N) %realize circular convolution use dft method if length(x1)>N error('N must not be less than length of x1') end if length(x2)>N error('N must not be less than length of x2') end X1k=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 运行程序: 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=circonv1(xn,hn,N1+N2-1); y3n=circonv2(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(3,1,3); stem(ny2,y3n); axis[0,25,0,6]; 仿真图像为: 圆周卷积题:计算两序列X1(n)={1,2,3,4,5},X2(n)={1,2,3,4,5,4,3,2,1} 的圆周卷积。 function y=circonv2(x1,x2,N) %realize circular convolution use dft method if length(x1)>N     error('N must not be less than length of x1') end if length(x2)>N     error('N must not be less than length of x2') end X1k=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 function[Xk]=dft(xn,N)  %计算离散付利叶变换 %[Xk]=dft(xn,N)   %Xk=在0<=k<=N-1间的DFT系数数组  %xn=N 点有限长度序列  %N=DFT   的长度  n=[0:1:N-1];               %n de hangxiangliang    k=[0:1:N-1];               %k de hangxiangliang    WN=exp(-j*2*pi/N);    nk=n'*k;    WNnk=WN.^nk;      Xk=xn*WNnk; end function [xn]=idft(Xk,N)   %计算离散傅里叶变换  n=[0:1:N-1]; k=[0:1:N-1]; WN=exp(-j*2*pi/N); nk=n'*k;   WNnk=WN.^(-nk); xn=(Xk*WNnk)/N;  end clear all close all clc x1=[1,2,3,4,5]; x2=[1,2,3,4,5,4,3,2,1]; N=length(x1)+length(x2); n=0:N-1; n1=0:N-2; n2=0:N-3; y1=circonvt(x1,x2,N); y2=circonvt(x1,x2,N-1); y3=circonvt(x1,x2,N-2); x1=[x1 zeros(1,N-length(x1))]; x2=[x2 zeros(1,N-length(x2))]; Xf1=dft(x1,N); Xf2=dft(x2,N); Xf=Xf1.*Xf2; x=idft(Xf,N) x=real(x); subplot(231) stem(n,x1); title('x1(n)') subplot(232); stem(n,x2); title('x2(n)') subplot(233); stem(n,x); title('x(n)=IDFT(X(k))') subplot(234) stem(n,y1); title('N点圆周卷积') subplot(235) stem(n1,y2); title('N-1点圆周卷积') subplot(236) stem(n2,y3); title('N-2点圆周卷积') 仿真图像为: 实验结论: (1)通过本次实验仿真,加深了我对循环卷积和圆周卷积的相关概念的理解。 (2)通过和同学的交流,能加深对matlab的理解,更好的学习。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服