实验五线性卷积与循环卷积的计算一、实验目的1、进一步加深对线性卷积的理解和分析能力;2、通过编程,上机调试程序,进一步增强使用计算机解决问题的能力;3、掌握线性卷积与循环卷积软件实现的方法,并验证二者之间的关系。二、实验原理1、线性卷积线性时不变系统(LinearTime-InvariantSystem,orL.T.I系统)输入、输出间的关系为:当系统输入序列为)(nx,系统的单位脉冲响应为)(nh,输出序列为)(ny,则系统输出为:mnhnxmnhmxny)(*)()()()(或mnxnhmnxmhny)(*)()()()(上式称为离散卷积或线性卷积。图6.1示出线性时不变系统的输入、输出关系。)(n→L.T.I—→)(nh—→—→图6.1线性时不变系统的输入、输出关系2、循环卷积设两个有限长序列)(1nx和)(2nx,均为N点长)(1nx)(1kX)(2nx)(2kX如果)()()(213kXkXkX则)()(~)(~)(10213nRmnxmxnxNNm1021)()(NmNmnxmx)(1nxN10)(2Nnnx上式称为循环卷积或圆周卷积)(nxL.T.Ih(n)mmnhmxny)()()(DFTDFT注:)(~1nx为)(1nx序列的周期化序列;)()(~1nRnxN为)(~1nx的主值序列。上机编程计算时,)(3nx可表示如下:11210213)()()()()(NnmnmmnNxmxmnxmxnx3、两个有限长序列的线性卷积序列)(1nx为L点长,序列)(2nx为P点长,)(3nx为这两个序列的线性卷积,则)(3nx为mmnxmxnx)()()(213且线性卷积)(3nx的最大长1PL,也就是说当1n和1PLn时0)(3nx。4、循环卷积与线性卷积的关系序列)(1nx为L点长,序列)(2nx为P点长,若序列)(1nx和)(2nx进行N点的循环卷积,其结果是否等于该两序列的线性卷积,完全取决于循环卷积的长度:当1PLN时循环(圆周)卷积等于线性卷积,即)(1nxN)(*)()(212nxnxnx当1PLN时,循环卷积等于两个序列的线性卷积加上相当于下式的时间混叠,即nNnrNnxnxrN其它010)()(33三、实验方法对于无限长序列不能用MATLAB直接计算线性卷积,在MATLAB内部只提供了一个conv函数计算两个有限长序列的线性卷积。对于循环卷积MATLAB内部没有提供现成的函数,我们可以按照定义式直接编程计算。例6.1:已知两序列:求它们的线性卷积yl(n)=h(n)*x(n)和N点的循环卷积yc=[h(n)*x(n)]n,并研究两者之间的关系.MATLAB实现程序:(1)循环卷积的函数其它其它0501)(01108.0)(nnhnnxnfunctionyc=circonv(x1,x2,N)%realizecircularconvolutionusedirectmethod%y=circonv(x1,x2,N)%y:outputsequences%x1,x2:inputsequences%N:circulationlengthiflength(x1)Nerror(‘Nmustnotbelessthanlengthofx1’);endiflength(x2)Nerror(‘Nmustnotbelessthanlengthofx2’);end%以上语句判断两个序列的长度是否小于Nx1=[x1,zeros(1,N-length(x1))];%填充序列x1(n)使其长度为N1+N2-1(序列%h(n)的长度为N1,序列x(n)的长度为N2)x2=[x2,zeros(1,N-length(x2))];%填充序列x2(n)使其长度为N1+N2-1n=[0:1:N-1];x2=x2(mod(-n,N)+1);%生成序列x2((-n))NH=zeros(N,N);forn=1:1:NH(n,:)=cirshiftd(x2,n-1,N);%该矩阵的k行为x2((k-1-n))Nendyc=x1*H’;%计算循环卷functiony=cirshiftd(x,m,N)%directlyrealizecircularshiftforsequencex%y=cirshiftd(x,m,N);%x:inputsequencewhoselengthislessthanN%m:howmuchtoshift%N:circularlength%y:outputshiftedsequenceiflength(x)Nerror('lengthofxmustbelessthanN');endx=[x,zeros(1,N-length(x))];n=[0:1:N-1];y=x(mod(n-m,N)+1);(2)研究两者之间的关系clearall;n=[0:1:11];m=[0:1:5];N1=length(n);N2=length(m);xn=0.8.^n;%生成x(n)hn=ones(1,N2);%生成h(n)yln=conv(xn,hn);%直接用函数conv计算线性卷积ycn=circonv(xn,hn,N1);%用函数circonv计算N1点循环卷积ny1=[0:1:length(yln)-1];ny2=[0:1:length(ycn)-1];subplot(2,1,1);%画图stem(ny1,yln);subplot(2,1,2);stem(ny2,ycn);axis([0,16,0,4]);运行结果024681012141601234线性卷积024681012141601234循环卷积四、实验语句及结果functionyc=circonv(x1,x2,N)iflength(x1)Nerror('N必须大于等于x1的长度');endiflength(x2)Nerror('N必须大于等于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);forn=1:1:NH(n,:)=cirshiftd(x2,n-1,N);endyc=x1*H';%计算圆周卷积functiony=cirshiftd(x,m,N)iflength(x)Nerror('x的长度必须小于N');endx=[x,zeros(1,N-length(x))];n=[0:1:N-1];y=x(mod(n-m,N)+1);①x(n)⑤y(n)clearallxn=[12345];hn=[1212];N1=length(xn);N2=length(hn);y1n=conv(xn,hn);ycn=circonv(xn,hn,5);ny1=[0:1:length(y1n)-1];ny2=[0:1:length(ycn)-1];subplot(2,1,1);stem(ny1,y1n);subplot(2,1,2);stem(ny2,ycn);②x(n)⑥y(n)clearall;N1=5;N2=4;xn=[12345];hn=[1212];yln=conv(xn,hn);ycn=circonv(xn,hn,6);ny1=[0:1:length(yln)-1];ny2=[0:1:length(ycn)-1];subplot(2,1,1);stem(ny1,yln);ylabel('线性卷积');subplot(2,1,2);stem(ny2,ycn);ylabel('圆周卷积');③x(n)⑨y(n)clearall;N1=5;N2=4;xn=[12345];hn=[1212];yln=conv(xn,hn);ycn=circonv(xn,hn,9);ny1=[0:1:length(yln)-1];ny2=[0:1:length(ycn)-1];subplot(2,1,1);stem(ny1,yln);ylabel('线性卷积');subplot(2,1,2);stem(ny2,ycn);ylabel('圆周卷积');④x(n)⑩y(n)clearall;N1=5;N2=4;xn=[12345];hn=[1212];yln=conv(xn,hn);ycn=circonv(xn,hn,10);ny1=[0:1:length(yln)-1];ny2=[0:1:length(ycn)-1];subplot(2,1,1);stem(ny1,yln);ylabel('线性卷积');subplot(2,1,2);stem(ny2,ycn);ylabel('圆周卷积');五、思考题解答(4)线性卷积运算一般步骤为:①求x1(n)与x2(n)的线性卷积;②对x1(m)或x2(m)先进行镜像移位x1(-m),对移位后的序列再进行从左至右的依次平移x(n-m),当n=0,1,2.…N-1时,分别将x(n-m)与x2(m)相乘,并在m=0,1,2.…N-1的区间求和,便得到y(n)。圆周卷积运算一般步骤为:在圆周卷积过程中,求和变量为m,n为参变量,先将x2(m)周期化,形成x2((m))N,再反转形成x2((-m))N,取主值序列则得到x2((-m))NRN(m),通常称之为x2(m)的圆周反转。对x2(m)圆周反转序列圆周右移n,形成x2((n-m))NRN(m),当n=0,1,2,…,N-1时,分别将x1(m)与x2((n-m))NRN(m)相乘,并在m=0到N-1区间内求和,便得到圆周卷积y(n)。(5)采用圆周卷积运算代替线性卷积运算:时域圆周卷积在频域上相当于两序列的DFT的相乘,而计算DFT可以采快速傅立叶变换(FFT),因此圆周卷积和线性卷积相比,计算速度可以得到提高。