实验13离散傅里叶变换的性质(完美格式版,本人自己完成,所有语句正确,不排除极个别错误,特别适用于山大,勿用冰点等工具下载,否则下载之后的word格式会让很多部分格式错误,谢谢)XXXX学号姓名处XXXX一、实验目的1加深对离散傅里叶变换(DFT)基本性质的理解。2了解有限长序列傅里叶变换(DFT)性质的研究方法。3掌握用MATLAB语言进行离散傅里叶变换性质分析时程序编写的方法。二、实验内容1线性性质。2循环移位性质。3循环折叠性质。4时域和频域循环卷积特性。5循环对称性。三、实验环境MATLAB7.0四、实验原理1线性性质如果两个有限长序列分别为x1(n)和x2(n),长度分别为N1和N2,且y(n)=ax1(n)+bx2(n)(a、b均为常数)则该y(n)的N点DFT为Y(k)=DFT[y(n)]=aX1(k)+bX2(k)0≤k≤N-1其中:N=max[N1,N2],X1(k)和X2(k)分别为x1(n)和x2(n)的N点DFT。例13-1已知x1(n)=[0,1,2,4],x2(n)=[1,0,1,0,1],求:(1)y(n)=2x1(n)+3x2(n),再由y(n)的N点DFT获得Y(k);(2)由x1(n)、x2(n)求X1(k)、X2(k),再求Y(k)=2X1(k)+3X2(k)。用图形分别表示以上结果,将两种方法求得的Y(k)进行比较,由此验证有限长序列傅里叶变换(DFT)的线性性质。解MATLAB程序如下:xn1=[0,1,2,4];%建立xn1序列xn2=[1,0,1,0,1];%建立xn2序列N1=length(xn1);N2=length(xn2);N=max(N1,N2);%确定NifN1N2xn2=[xn2,zeros(1,N1-N2)];%对长度短的序列补0elseifN2N1xn1=[xn1,zeros(1,N2-N1)];endyn=2*xn1+3*xn2;%计算ynn=0:N-1;k=0:N-1;Yk1=yn*(exp(-j*2*pi/N)).^(n'*k);%求yn的N点DFTXk1=xn1*(exp(-j*2*pi/N)).^(n'*k);%求xn1的N点DFTXk2=xn2*(exp(-j*2*pi/N)).^(n'*k);%求xn2的N点DFTYk2=2*Xk1+3*Xk2;%由Xk1、Xk2求Yksubplot(4,2,1),stem(n,xn1);title('x1(n)');subplot(3,2,2),stem(n,Xk1);title('X1(k)');subplot(4,2,3),stem(n,xn2);title('x2(n)');subplot(3,2,4),stem(n,Xk2);title('X1(k)');subplot(4,2,5),stem(n,yn);title('yn');subplot(3,2,6),stem(n,Yk2);title('2*Xk1+3*Xk2');subplot(4,2,7),stem(n,Yk1);title('DFT[y(n)]');求得的Y(k),如下所示:Yk=23.0000-7.5902+1.5388i3.5902-0.3633i3.5902+0.3633i-7.5902-1.5388i运行结果如图13-1所示。图13-1例13-1有限长序列的傅里叶变换的线性性质2循环移位性质如果有限长序列为x(n),长度为N,将x(n)左移m位,则y(n)=x((n+m)N)RN(n)x(n)左移m位的过程可由以下步骤获得:(1)将x(n)以N为周期进行周期延拓,得到(n)x~=x((n)N);(2)将(n)x~左移m位,得到m)(nx~;(3)取m)(nx~的主值序列,得到x(n)循环移位序列y(n)。有限长序列的移位也称为循环移位,原因是将x(n)左移m位时,移出的m位又依次从右端进入主值区。下面举例说明。例13-2已知有限长序列x(n)=[1,2,3,4,5,6],求x(n)左移2位成为新的向量y(n),并画出循环移位的中间过程。解MATLAB程序如下:xn=[1,2,3,4,5,6];%建立xn序列Nx=length(xn);nx=0:Nx-1;nx1=-Nx:2*Nx-1;%设立周期延拓的范围x1=xn(mod(nx1,Nx)+1);%建立周期延拓序列ny1=nx1-2;y1=x1;%将x1左移2位,得到y1RN=(nx1=0)&(nx1Nx);%在x1的位置向量nx1上设置主值窗RN1=(ny1=0)&(ny1Nx);%在y1的位置向量ny1上设置主值窗subplot(4,1,1),stem(nx1,RN.*x1);%画出x1的主值部分subplot(4,1,2),stem(nx1,x1);%画出x1subplot(4,1,3),stem(ny1,y1);%画出y1subplot(4,1,4),stem(ny1,RN1.*y1);%画出y1的主值部分运行结果如图13-2所示。-6-4-20246810120510-6-4-20246810120510-8-6-4-202468100510-8-6-4-202468100510图13-2例13-2有限长序列的循环移位3循环折叠性质如果要把有限长N点序列x(n)直接进行折叠,则x的下标(-n)将不在0≤n≤N-1区域内。但根据有限长序列傅里叶变换隐含的周期性,可以对变量(-n)进行N求余运算。即在MATLAB中,序列x(n)的折叠可以由y=x(mod(-nx,N)+1)得到。有限长N点序列x(n)的循环折叠序列y(n)定义为1-Nn1)n-Nx(0=nx(0))n)x((y(n)N-=可以想像成,序列x(n)以反时针方向等间隔放置在一个圆周上,则x(-n)是将x(n)沿着圆周顺时针方向等间隔放置。循环折叠性质同样适用于频域。经循环折叠后,序列的DFT由下式给出:1-Nk1k)-X(N0=kX(0))k)((X)]n)DFT[x((Y(k)NN就是说,在时域循环折叠后的函数,其对应的DFT在频域也作循环折叠,并取X(k)的共轭。例13-3求x(n)=[1,2,3,4,5,6,7],循环长度分别取N=7,N=10。(1)画出x(n)的图形;(2)画出x(-n)的图形。解MATLAB程序如下:x1=[1,2,3,4,5,6,7];%建立x(n),N=7序列N1=length(x1);n1=0:N1-1;y1=x1(mod(-n1,N1)+1);%建立x(-n),N=7序列N2=10;x2=[x1,zeros(1,N2-N1)];%建立x(n),N=10序列n2=0:N2-1;y2=x2(mod(-n2,N2)+1);%建立x(-n),N=10序列subplot(2,2,1),stem(n1,x1,'k');%画x(n),N=7title('x(n),N=7');subplot(2,2,3),stem(n1,y1,'k');%画x(-n),N=7title('x(-n),N=7');subplot(2,2,2),stem(n2,x2,'k');%画x(n),N=10title('x(n),N=10');subplot(2,2,4),stem(n2,y2,'k');%画x(-n),N=10title('x(-n),N=10');运行结果如图13-3所示。024602468x(n),N=7024602468x(-n),N=7051002468x(n),N=10051002468x(-n),N=10图13-3例13-3离散序列的循环折叠例13-4如例13-3求x(n)=[1,2,3,4,5,6,7],循环长度取N=7。求证:在时域循环折叠后的函数x(-n),其对应的DFT在频域也作循环折叠,并取X(k)的共轭。解MATLAB程序如下:x1=[1,2,3,4,5,6,7];%建立x(n),N=7序列N=length(x1);n=0:N-1;k=0:N-1;y1=x1(mod(-n,N)+1);%建立x(-n),N=7序列Xk=x1*exp(-j*2*pi/N).^(n'*k)%求x(n)的DFTYk=y1*exp(-j*2*pi/N).^(n'*k)%求x(-n)的DFT运行结果:Xk=Columns1through528.0000-3.5000+7.2678i-3.5000+2.7912i-3.5000+0.7989i-3.5000-0.7989iColumns6through7-3.5000-2.7912i-3.5000-7.2678iYk=Columns1through528.0000-3.5000-7.2678i-3.5000-2.7912i-3.5000-0.7989i-3.5000+0.7989iColumns6through7-3.5000+2.7912i-3.5000+7.2678i4时域和频域循环卷积特性离散傅里叶变换的循环卷积特性也称为圆周卷积,分为时域卷积和频域卷积两类。1)时域循环卷积假定x(n)、h(n)都是N点序列,则时域循环卷积的结果y(n)也是N点序列:x(n)y(n)Nh(n)若x(n)、h(n)和y(n)的DFT分别为X(k)、H(k)和Y(k),则Y(k)=X(k)H(k)2)频域循环卷积利用时域和频域的对称性,可以得到频域卷积特性。若y(n)=x(n)h(n)则X(k)Y(k)H(k)N下面重点讨论时域循环卷积。时域循环卷积的方法有多种:方法1:直接使用时域循环卷积。由于有限长序列可以看成是周期序列的主值,因此,时域圆周卷积的结果可以由对应的周期序列卷积和取主值部分获得,请参考例11-4。方法2:用频域DFT相乘再求逆变换。即先分别求x1(n)、x2(n)的DFTX1(k)、X2(k),再求Y(k)的IDFT获得y(n)。方法3:用FFT和IFFT进行循环卷积。基本思路同方法2,但直接使用了MATLAB提供的fft和ifft子函数来实现。见后面的快速傅里叶变换实验。例13-5将例11-4已知的两个时域周期序列分别取主值,得到x1=[1,1,1,0,0,0],x2=[0,1,2,3,0,0],求时域循环卷积y(n)并用图形表示。解本例采用方法2。程序如下:xn1=[0,1,2,3,0,0];%建立x1(n)序列xn2=[1,1,1,0,0,0];%建立x2(n)序列N=length(xn1);n=0:N-1;k=0:N-1;Xk1=xn1*(exp(-j*2*pi/N)).^(n'*k);%由x1(n)的DFT求X1(k)Xk2=xn2*(exp(-j*2*pi/N)).^(n'*k);%由x2(n)的DFT求X2(k)Yk=Xk1.*Xk2;%Y(k)=X1(k)X2(k)yn=Yk*(exp(j*2*pi/N)).^(n'*k)/N;%由Y(k)的IDFT求y(n)yn=abs(yn)%取模值,消除DFT带来的微小复数影响subplot(2,3,1),stem(n,xn1);title('x1(n)')subplot(2,3,2),stem(n,xn2);title('x2(n)')subplot(2,3,3),stem(n,yn);title('y(n)')subplot(2,3,4),stem(n,Xk1);title('X1(k)')subplot(2,3,5),stem(n,Xk2);title('X2(k)')subplot(2,3,6),stem(n,Yk);title('Y(k)')得到:yn=0.00001.00003.00006.00005.0000