《数字信号处理实验报告--(基于MATLAB语言).docx》由会员分享,可在线阅读,更多相关《数字信号处理实验报告--(基于MATLAB语言).docx(40页珍藏版)》请在第一文库网上搜索。
1、数字信号处理实验报告(基于MAT1AB语言)实验1基2-FFT算法实现一、实验目的1 .掌握基2-FFT的原理及具体实现方法。2 .编程实现基2-FFT算法。3 .加深理解FFT算法的特点。二、实验设备与环境计算机、MAT1AB软件环境。三、实验基础理论FFT是DFT的一种快速算法,能使DFT的计算大大简化,运算时间缩短。FFT利用了阙Ik的三个固有特性,即对称性、周期性和可约性,将长序列的DFT分解为短序列的DFT,合并了DFT运算中的某些项,从而减少了DFT的运算量。FFT算法基本上可以分为两大类,即按时间抽取法和按频率抽取法。在实现FFT算法时,要重点考虑两个问题,注意数据的读取和存储:
2、(1)输入输出的排序;(2)碟形运算的实现。按时间抽取算法中输入反序输出顺序,按频率抽取算法中输入顺序输出反序;运算过程中的每一级都由N/2个碟形运算构成,每一个碟形运算单元中,两个节点变量运算后得到的结果为下一列相同位置的节点变量,而和其他节点变量无关,可以采用原位运算,节省存储单元。另外,碟形运算中的复系数可以存储为能及时查阅的系数表,这样可以节约计算量,但是需要N/2个复数存储器。MAT1AB中提供了用于计算FFT的函数fft,可将实验中所得到的结果与利用MAT1AB中fft函数计算的结果相比较,以此验证结果的正确性。四、实验内容1 .编程实现序列长度为N=8的按时间抽取的基2-FFT算
3、法。给定一个8点序列,采用编写的程序计算其DFT,并与MAT1AB中fft函数计算的结果相比较,以验证结果的正确性。实验过程与实验结果:设序列为0,1,2,3,4,5,6,7)编程实现序列长度为N=8的按时间抽取的基2-FET算法%输入数据并计算常量x=0,1,2,3,4,5,6,7;M=nextpow2(1ength(xn),N=2M,form=0:N/2-1;WN(m+1)=exp(-j*2*piN)m;endA=xn,zeros(1,N-Iength(xn);%数据倒序操作J=0;forI=O:N-I;ifKJ;T=A(I+1)1(I+1)=A(J+1)j(J+1)=T;endK=N2;
4、whi1eJ=K;J=J-K;K=K/2;endJ=J+K;end%分级按序依次进行蝶形运算for1=I:M;B=2(1-I);forR=OzB-I;P=2(M-1)*R;forK=R:21:N-2;T=A(K+1)+A(K+B+1)*WN(P+1);A(K+B+1)=A(K+1)-A(K+B+1)*WN(P+1);A(K+1)=T;endendendXk=A运行结果为:Xk=Co1umns1through28.0000-4.0000+9.6569i-4.0000+4.0000i-4.0000+1.6569i-4.0000Co1umns6-4.0000-through1.6569i-4.000
5、0-4.0000i-4.0000-9.6569i调用函数fft计算:fftxn=fft(xn,N)运行结果为:fftxn=Co1umns1through528.0000-4.00009.6569i-4.0000+4.0000i-4.0000+1.6569i-4.0000Co1umns6through8-4.0000-1.6569i-4.00004.0000i-4.0000-9.6569i实验结果分析:两种计算方法结果一样,结果正确。2.编程实现序列长度为N=8的按频率抽取的基2-FFT算法。给定一个8点序列,采用编写的程序计算其DFT,并与MAT1AB中fft函数计算的结果相比较,以验证结果的
6、正确性。实验过程与实验结果:设序列为7,6,5,4,3,2,1,0)编程实现序列长度为N=8的按频率抽取的基2-FFT算法xn=7,6,5,4,3,2,1,0;N=8;M=1og2(N);fork1=0:M-1D=2k1;E=N2k1;F=N2(k1+1);G=N2(k1+1)-1;Wn=exp(-j*2*piE);forg1:DH1=(g-1)*E;H2=(g-1)*E+F;forr=0:G;k=r+1;xn(k+H1)=xn(k+H1)+xn(k+H2);xn(k+H2)=xn(k+H1)-xn(k+H2)-xn(k+H2)*Wnr;endendendn1=f1ip1r(dec2bin(O
7、:N-1);n2=bin2dec(n1);fori=1:NXk(i)=xn(n2(i)+1);endXk运行结果为:Xk=Co1umns1through528.00004.0000-9.6569i4.0000-4.0000i4.0000-1.6569i4.0000Co1umns6through84.0000+1.6569i4.0000+4.0000i4.0000+9.6569i调用函数fft计算:fftxn=fft(xn,N)运行结果为:fftxn=Co1umns1through528.00004.0000-9.6569i4.0000-4.0000i4.0000-1.6569i4.0000Co
8、1umns6through84.0000+1.6569i4.0000+4.0000i4.0000+9.6569i实验结果分析:两种计算方法结果一样,结果正确。3.将上述FFT程序推广到序列长度为N=2的情况,要求利用原位运算。实验过程与实验结果:按时间抽取:xn=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);M=nextpow2(1ength(xn);N=2M;form=0:N/2-1WN(m+1)=exp(-j*2*piN)m;endDF1=xn,zeros(1,N-Iength(xn);H=0;forI=O:N-I;ifI=K;H=H-K;K=K2;endH
9、=H+K;endforG=I:M;F=2(G-I);forS=O:F-I;P=2(M-G)*S;forK=S:2AG:N-2;T=DF1(K+1)+DF1(K+F+1)*WN(P+1);DF1(K+F+1)=DF1(K+1)-DF1(K+F+1)*WN(P+1);DF1(K+1)=T;endendendDF1运行结果为:DF1=1.0c+02*Co1umns1through51.2000-0.0800+0.4022i-0.0800+0.1931i-0.0800+0.1197i-0.0800+0.0800iCo1umns6through10-0.0800+0.0535i-0.0800+0.033
10、1i-0.0800+0.0159i-0.0800-0.0800-0.0159iCo1umns11through15-0.0800-0.033Ii-0.0800-0.0535i-0.0800-0.0800i-0.0800-0.1197i-0.0800-0.1931iCo1umn16-0.0800-0.4022i按频率抽取:xn=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;M=nextpow2(1ength(xn);N=2M;M=1og2(N);fork1=0:M-1D=2k1;E=N2k1;F=N2(k1+1);G=N2(k1+1)-1;Wn=exp(-j*2*p
11、iE);forg=1:DH1=(g-1)*E;H2=(g-1)*E+F;forr=0:G;k=r+1;xn(k+H1)=xn(k+H1)+xn(k+H2);xn(k+H2)=xn(k+H1)-xn(k+H2)-xn(k+H2)*Wnr;endendendn1=f1ip1r(dec2bin(0:N-1);n2=bin2dec(n1);fori=1:NXk(i)=xn(n2(i)+1);endXk运行结果为:Xk=1. 0e+02*Co1umns1through51.2000-0.0800+0.0800i-0.0800+0.4022i-0.0800+0.1931i-0.0800+0.1197iCo
12、1umns6through10-0.0800+0.0535i-0.0800+0.033Ii-0.0800+0.0159i-0.0800-0.0800-0.0159iCo1umns11through15-0.0800-0.033Ii-0.0800-0.0535i-0.0800-0.0800i-0.0800-0.1197i-0.0800-0.1931iCo1umn16-0.0800-0.4022i五、收获与体会通过本次实验,我掌握基2-FFT的原理及具体实现方法,通过自己动手编程实现基2-FFT算法,加深了对FFT算法的特点的理解,也熟悉了fft函数的调用,对从数字信号处理课上学到的理论知识有了一
13、个更深入的认识。由于是第一次做数字信号处理实验,有很多地方都不太清楚,在与同学的交流中收获了不少,为接下来的实验积累了不少经验。实验2利用DFT分析信号频谱一、实验目的1加深对DFT原理的理解。2 .应用DFT分析信号频谱。3 .深刻理解利用DFT分析信号频谱的原理,分析现实过程现象及解决办法。二、实验设备与环境计算机、MAT1AB软件环境。三、实验基础理论1 .DFT与DTFT的关系有限长序列X(n)(0nN-1)的离散时间傅里叶变换X(ej)在频率区间(OW2)的N个等间隔分布的点k3=2kN(OkNT)上的N个取样值可以由下式表示:NT-i-knXeftU1=(止N=X(Q4=0UkN-
14、1由上式可知,序列x(n)的N点DFTX(k),实际上就是x(n)序列的DTFT在N个等间隔频率点上样本X(k)。2 .利用DFT求DTFT方法1:由X(k)恢复出X(k)的方法如图2.1所示:IDm.(。)图2.1由N点DFT恢复频谱DTFT的流程由图2.1所示流程可知:Xd)=Sx(2M=XgW尚=-CNrt=_c_n=_o_由上式可以得:Xd)=x(kyKs-警)其中方法2:实际在MAT1AB计算中,上述插值运算不见得是最好的办法。由于DFT是DTFT的取样值,其相邻两个频率样本点的间距为2乃/N,所以如果我们增加数据的长度N,使得到的DFT谱线就更加精细,其包络就越接近DTFT的结果,这样就可以利用DFT计算DTFTo如果没有更多的数据,可以通过补零来增加数据长度。3 .利用DFT分析连续信号的频谱采用计算机分析连续时间信号的频谱,第一步就是把连续信号离散化,这里需要进行两个操作:一是采样,二是截断。对于连续时间非周期信号