数字信号除处理课程设计DFT在信号频谱分析中的应用.pdf
百度文库-好好学习,天天向上课程设计课程设计课程名称课程名称数字信号处理数字信号处理系系别:别:计算机科学系计算机科学系专业班级:专业班级:通信一班通信一班题题目:目:DFT DFT 在信号频谱分析中的应用在信号频谱分析中的应用目目录录-1百度文库-好好学习,天天向上1 1、设计题目设计题目 3 32 2、设计目的设计目的 3 33 3、设计原理设计原理 3 34 4、实现方法实现方法 3 35 5、设计内容及结果设计内容及结果 6 66 6、改进建议改进建议 12127 7、思考题及解答思考题及解答 15158 8、设计体会设计体会 15159 9、参考文献参考文献 1616.设计题目设计题目DFT 在信号频谱分析中的应用-2百度文库-好好学习,天天向上.设计目的设计目的掌握离散傅里叶变换的有关性质,利用Matlab 实现 DFT 变换。了解DFT 应用,用DFT 对序列进行频谱分析,了解 DFT 算法存在的问题及改进方法。学习并掌握 FFT 的应用。.设计原理设计原理所谓信号的频谱分析就是计算信号的傅里叶变换。连续信号与系统的傅里叶分析显然不便于直接用计算机进行计算,使其应用受到限制,而DFT 是一种时域和频域均离散化的变换,适合数值运算,成为分析离散信号和系统的有力工具。工程实际中,经常遇到的连续信号 Xa(t),其频谱函数 Xa(jW)也是连续函数。数字计算机难于处理,因而我们采用DFT 来对连续时间信号的傅里叶变换进行逼近,进而分析连续时间信号的频谱。.实现方法实现方法离散傅里叶变换是有限长序列的傅里叶变换,它相当于把信号的傅里叶变换进行等频率间隔采样,并且有限长序列的离散傅里叶变换和周期序列的离散傅里叶级数本质是一样的。快速傅里叶变换(FFT)并不是一种新的变换,它是离散傅里叶变换的一种快速算法,并且主要是基于这样的思路而发展起来的:(1)把长度为 N 的序列的 DFT 逐次分解成长度较短的序列的 DFT 来计算。(2)利用 WN(nk)的周期性和对称性,在DFT 运算中适当的分类,以提高运算速度。(对称性WNr 为任意整数,WNnrNnkN2n(rNk)nrNnknknkWNWNWN,WN2 1;周期性WN WNN1)离散傅里叶变换的推导:离散傅里叶变换的推导:1离散傅里叶级数定义为xp(n)N将N 1n0 xp(k)ek 0N 1nkj2N(1-1)上式两端乘以enm j2N并对nN 1在0N-1求和可得xp(n)enm j2N1NXn0 k0N 1 N 1p(k)en(km)j2Nn(km)1N 1 j2NXp(k)Nek0n0-3百度文库-好好学习,天天向上因为1NN1n0en 0pN 1j2n(k m)N1 1-e(k m)j2NN1-e(k m)Nj2N1k m0k mN 1n0所以x(n)eN1n0nm j2NXp(k)(k m)这样Xp(m)xp(n)ek0nk j2NN1nm j2N用k代替m得XP(k)xp(n)e(1-2)令WN e j2N则(1-2)成为 DFSxp(n)Xp(k)xn0N1n0N1nk(n)WpN(1-3)1(1-1)成为 IDFSXp(k)xp(n)NXpnk(k)WN(1-4)式(1-3)、(1-4)式构成周期序列傅里叶级数变换关系。其中xp(n)、Xp(k)都是周期为 N的周期序列,DFS表示离散傅里叶级数正变换,IDFS表示离散傅里叶级数反变换。习惯上,对于长为N 的周期序列,把0nN-1 区间称为主值区,把xp(0)xp(N 1)称为xp(n)的主值序列,同样也称Xp(0)Xp(N 1)为Xp(k)的主值序列。由于x(n)xp(n)RN(n),对于周期序列xp(n)仅有 N 个独立样值,对于任何一个周期进行研究就可以得到它的全部信息。在主值区研究xp(n)与x(n)是等价的,因此在主值区计算DFS 和 DFT 是相等的,所以 DFT 计算公式形式与 DFS 基本相同。其关系为x(n)xp(n)RN(n)X(k)Xp(k)RN(k)所以离散傅里叶正变换Xk DFTxnxnWN0kN-1nkn0N1离散傅里叶变换(离散傅里叶变换(DFTDFT)定义:)定义:设有限长序列 x(n)长为 N(0nN-1),其离散傅里叶变换是一个长为 N 的频率有限长序列(0kN-1),其正变换为Xk DFT xn2jxnWnk0kN-1(WNeN)NN1n0离散傅里叶变换的实质是:把有限长序列当做周期序列的主值序列进行 DFS 变换,x(n)、X(k)的长度均为 N,都是 N 个独立值,因此二者具有的信息量是相等的。已知 x(n)可以唯一确定 X(k),已知 X(k)可以唯一确定 x(n)。虽然离散傅里叶变换是两个有限长序列之间的变化,但它们是利用DFS 关系推导出来的,因而隐含着周期性。-4百度文库-好好学习,天天向上构造离散傅里叶变换的构造离散傅里叶变换的 MatlabMatlab 实现程序如下实现程序如下:functionXk=dft(xn,N)n=0:1:N-1;k=n;WN=exp(-j*2*pi/N);nk=n*k;WNnk=WN.nk;Xk=xn*WNnk快速傅里叶变换(快速傅里叶变换(FFTFFT)并不是与 DFT 不同的另外一种变换,而是为了减少DFT 计算次数的一种快速有效的算法共轭对称性:共轭对称性:设有限长序列x(n)的长度为 N,以 N 为周期的周期延拓列为x(n)x(n)N周期序列x(n)的共轭对称分量xe(n)和共轭反对称分量xo(n)分别为*11 xe(n)x(n)x(n)x(n)N x*(N n)N(1-5)22*11 xo(n)x(n)x(n)x(n)N x*(N n)N(1-6)22同样可以证明,它们满足xe(n)xe(n)(1-7)xo(n)xo(n)(1-8)则有限长序列x(n)的圆周共轭对称分量xep(n)和圆周共轭反对称分量xop(n)分别定义为:*1xep(n)xe(n)RN(n)x(n)N x*(N n)NRN(n)(1-9)21xop(n)xo(n)RN(n)x(n)N x*(N n)NRN(n)(1-10)2由于满足x(n)xe(n)xo(n)故x(n)x(n)RN(n)xe(n)x(n)RN(n)xep(n)xop(n)(1-11)显然,长度为 N 的有限长序列x(n)可以分解为圆周共轭对称分量xep(n)和圆周共轭反对称分量xop(n)之和,xep(n)和xop(n)的长度皆为 N。利用有限长序列与周期序列的共轭对称分量和反对称分量的关系式(1-9)和式(1-10),以及式(1-11)可以推导出DFT 的一系列的对称性质*(1)DFTx(n)X(k)X(n K)式中x(n)表示x(n)的共轭复序列。证明:DFTx(n)x(n)W*n0N1nkNN1nk*x(n)WN X(k)n0又因为-5百度文库-好好学习,天天向上nNWN e j(2N)nN e j2 nN1*(Nk)n*X(N k)1所以 DFTx(n)x(n)WNn01X(k)X*(N k)212*(2)复序列实部的 DFT 等于 DFT 的圆周共轭对称部分,即DFTRex(n)Xep(k)证明:*DFTRex(n)DFT1=2x(n)x(n)12DFTx(n)+DFTx(n)=*X(k)X*(N k)Xep(k)利用 DFT 的对称性可求得cos0n的 DFT:设x(n)cos0n jsin0n eN 1n 0j0n则Nk1 ejoNWNDFT x(n)X(k)因为cos0n Rex(n)所以j0nnkeWN1 ejokWN1 ejoNk1 ejoWNDFTcos0nDFTRex(n)Xep(k)1 ejoNk1ejoWNX(k)X*(Nk)2=1 e joNk1 e joWN2kk1 cos0N WNcos0WNcos(N 1)0k2 k1 2WNcos0WN.设计内容及结果设计内容及结果1.1.用用 MATLABMATLAB语言编写计算序列语言编写计算序列 x(n)x(n)的的 N N 点点 DFTDFT 的的 mm 函数文件。函数文件。并与并与 MATLABMATLAB中的内中的内部函数文件作比较。部函数文件作比较。解:x(n)的 N 点 DFT 的 m 函数文件functionXk=dft(xn,N)n=0:1:N-1;k=n;WN=exp(-j*2*pi/N);nk=n*k;WNnk=WN.nk;Xk=xn*WNnkMatlab 中的内部函数文件文件function varargout=fft(varargin)if nargout=0builtin(fft,varargin:);-6百度文库-好好学习,天天向上elsevarargout1:nargout=builtin(fft,varargin:);end运算量估计:对于 N=2点序列进行时间抽选奇偶分解 FFT 计算,需分 M 级,每级计算 N/2 个蝶。每一级需 N/2 次复乘、N 次复加,因此总共需要进行:复乘:N2M N2Mlog2N复加:NM N log2N2直接计算 N 点的 DFT,需要N次复乘、N(N-1)次复加。N 值越大,时间抽选奇偶分解 FFT算法越优越。例如当 N=2048 点时,时间抽选奇偶分解 FFT 算法比直接计算 DFT 速度快 300多倍可以用一下 Matlab 程序比较 DFT 和 FFT 的运算时间N=2048;M=11;x=1:M,zeros(1,N-M);t=cputime;y1=fft(x,N);Time_fft=cputime-tt1=cputime;y2=dft(x,N);Time_dft=cputime-t1t2=cputime;运行结果:Time_fft=Time_dft=由此可见 FFT 算法比直接计算 DFT 速度快得多2.2.对离散确定信号对离散确定信号x(n)cos(0.48n)cos(0.52n)作如下谱分析:作如下谱分析:X(k)k。截取截取x(n)使使x(n)成为有限长序列成为有限长序列 N(N(0 n N-1),(长度长度 N N 自己选自己选)写程序计算出写程序计算出x(n)的的N N 点点 DFTDFTX(k),画出时域序列图画出时域序列图 xnxnn n 和相应的幅频图和相应的幅频图-7百度文库-好好学习,天天向上解:1)求 x(n)的前 10 点数据对应的 X(ejw)、X(k)。MATLAB程序如下:N=10;n=0:1:N-1;xn=cos*pi*n)+cos*pi*n);Xk=dft(xn,N);subplot(3,1,1)stem(n,xn,.k);title(时域序列图 xn);xlabel(n);axis(0,10,);w=2*pi*(0:1:2047)/2048;Xw=xn*exp(-j*n*w);subplot(3,1,2);plot(w/pi,abs(Xw);title(幅频特性曲线 X(ejw);xlabel(w);axis(0,1,0,10);subplot(3,1,3)k1=0:1:9;w1=2*pi/10*k1;stem(w1/pi,abs(Xk),.k);title(频域序列图 Xk);xlabel(频率(单位:pi));axis(0,1,0,10);x(n)的前 10 点数据对应的 x(n)、X(ejw)、X(k)如图 1-1 所示。-8百度文库-好好学习,天天向上图 1-1x(n)的前 10 点数据对应的 x(n)、X(ejw)、X(k)由图可见,由于截断函数的频谱混叠作用,X(k)不能正确分辨 w1=、w2=这两个频率分量。2)将 x(n)补零至 100 点,求 N=100 点的 X(ejw)、X(k)。MATLAB主要程序如下:N=10;n=0:N-1;xn=cos*pi*n)+cos*pi*n);N1=100;n1=0:N1-1;x1=xn(1:10)zeros(1,90);subplot(3,1,1)stem(n1,x1,.k);title(时域序列图 x1);xlabel(n);axis(0,100,);w=2*pi*(0:2047)/2048;X1=x1*exp(-j*n1*w);subplot(3,1,2);plot(w/pi,abs(X1);title(幅频特性曲线 X(ejw);-9百度文库-好好学习,天天向上xlabel(w);axis(0,1,0,10);subplot(3,1,3)Xk=dft(x1,N1);k1=0:1:49;w1=2*pi/100*k1;stem(w1/pi,abs(Xk(1:1:50),.k);title(频域序列图 Xk);xlabel(频率(单位:pi));axis(0,1,0,10);x(n)补零至 100 点对应的 x(n)、X(ejw)、X(k)如图 1-2 所示。图 1-2x(n)补零至 100 点对应的 x(n)、X(ejw)、X(k)x(n)补零至 100 点对应的 x(n)、X(ejw)、X(k)如图 1-2 所示。由图可见,x(n)补零至 100点,只是改变 X(k)的密度,截断函数的频谱混叠作用没有改变,这时的物理分辨率使X(k)仍不能正确分辨 w1=、w2=这两个频率分量。这说明,补零仅仅是提高了计算分辨率,得到的是高密度频谱,而得不到高分辨率谱。3)求 x(n)的前 100 点数据,求 N=100 点的 X(ejw)、X(k)。MATLAB主要程序如下:N=100;-10百度文库-好好学习,天天向上n=0:1:N-1;xn=cos*pi*n)+cos*pi*n);Xk=dft(xn,N);subplot(3,1,1)stem(n,xn,.k);title(时域序列图 xn);xlabel(n);axis(0,100,);w=2*pi*(0:1:2047)/2048;Xw=xn*exp(-j*n*w);subplot(3,1,2);plot(w/pi,abs(Xw);title(幅频特性曲线 X(ejw);xlabel(w);axis(0,1,0,50);subplot(3,1,3);k1=0:1:49;w1=2*pi/100*k1;stem(w1/pi,abs(Xk(1:1:50),.k);title(频域序列图 Xk);xlabel(频率(单位:pi));axis(0,1,0,50);100 点 x(n)对应的 x(n)、X(ejw)、X(k)如图 1-3 所示图 1-3100 点 x(n)对应的 x(n)、X(ejw)、X(k)由图可见,截断函数的加宽且为周期序列的整数倍,改变了频谱混叠作用,提高了物理分-11百度文库-好好学习,天天向上辨率,使 X(k)能正确分辨 w1=、w2=这两个频率分量。这说明通过增加数据的记录长度 Tp 来提高物理分辨率可以得到分辨率谱。.改进及建议改进及建议由图 1-1、图 1-2、图 1-3 可以看出。当取 0=n=9 时,从相应的图中几乎无法看出有关信号频谱的信号;将 x(n)补 90 个零点后作 N=100 点的 DFT,从相应的 X(k)图中可以看出,这时的谱线相当密,故称为高密度谱线图,但是从中很难看出信号的频谱部分;对x(n)加长取样数据,得到长度为 N=100 的序列,此时相应的 X(k)图中可以清晰地看到信号的频谱成分,这称为高分辨频谱。为了得到更高的分辨率,增加N 点的取值进行改进取 x(n)的前 128 点数据,求 N=128 点的 X(ejw)、X(k)。MATLAB主要程序如下:N=128;n=0:1:N-1;xn=cos*pi*n)+cos*pi*n);Xk=dft(xn,N);subplot(3,1,1)stem(n,xn,.k);title(时域序列图 xn);xlabel(n);axis(0,100,);w=2*pi*(0:1:2047)/2048;Xw=xn*exp(-j*n*w);subplot(3,1,2);plot(w/pi,abs(Xw);title(幅频特性曲线 X(ejw);xlabel(w);axis(0,1,0,70);subplot(3,1,3);k1=0:1:63;w1=2*pi/128*k1;stem(w1/pi,abs(Xk(1:1:64),.k);title(频域序列图 Xk);xlabel(频率(单位:pi));axis(0,1,0,70);128 点 x(n)对应的 x(n)、X(ejw)、X(k)如图 1-4 所示-12百度文库-好好学习,天天向上图 1-4128 点 x(n)对应的 x(n)、X(ejw)、X(k)128 点 x(n)的数据对应的 x(n)、X(ejw)、X(k)如图 1-4 所示。由图可见,截断函数虽然进一步加宽,但不是周期序列的整数倍,所以尽管 X(k)能正确分辨 w1=、w2=这两个频率分量,但还呈现频谱泄露。分辨率提高了,但仍出现了频谱泄露现象,故要求N 取值为周期序列的整数倍。取 x(n)的前 150 点数据,求 N=150 点的 X(ejw)、X(k)。N=150;n=0:1:N-1;xn=cos*pi*n)+cos*pi*n);Xk=dft(xn,N);subplot(3,1,1)stem(n,xn,.k);title(时域序列图 xn);xlabel(n);axis(0,100,);w=2*pi*(0:1:2047)/2048;Xw=xn*exp(-j*n*w);subplot(3,1,2);plot(w/pi,abs(Xw);-13百度文库-好好学习,天天向上title(幅频特性曲线 X(ejw);xlabel(w);axis(0,1,0,80);subplot(3,1,3);k1=0:1:74;w1=2*pi/150*k1;stem(w1/pi,abs(Xk(1:1:75),.k);title(频域序列图 Xk);xlabel(频率(单位:pi));axis(0,1,0,80);15 点 x(n)对应的 x(n)、X(ejw)、X(k)如图 1-5 所示图 1-5150 点 x(n)对应的 x(n)、X(ejw)、X(k)150 点 x(n)的数据对应的 x(n)、X(ejw)、X(k)如图 1-4 所示。由图可见,截断函数进一步加宽,X(k)也正确清晰分辨 w1=、w2=这两个频率分量,达到了很好的效果。.思考题及解答思考题及解答-14百度文库-好好学习,天天向上(1)(1)对比设计内容对比设计内容 2 2 中中(1)(2)(3)(1)(2)(3)的图,说明补零的图,说明补零 DFTDFT 的作用。的作用。由图(1-1)、(1-2)、(1-3)可知 DFT 是有限长序列的频谱等间隔采样所得到的样本值,这就相当于透过一个栅栏去观察原来信号的频谱,因此必然有一些地方被栅栏所遮挡,这些被遮挡的部分就是未被采样到的部分,这种现象称为栅栏效应。如下图由于栅栏效应总是存在的,因而可能会使信号频率中某些较大的频率分量由于被“遮挡”二无法得到反映。此时,通常在有限长序列的尾部增补若干个零值,介意改变原序列的长度。这样加长的序列作 DFT 时,由于点数增加就相当于调整了原来栅栏的间隙即间隔频率,可以使得原来的不到反映的那些较大的频率分量落在采样点上而得到反映。但要注意,由于栅栏效应,使得被分析的频谱变得较为稀疏,为此,在采样样本序列 x(n)后补零,在数据长度Tp不变的情况下,可以改变频谱的频率取样密度,得到高密度频谱。(2)(2)解释设计内容解释设计内容 3 3中中X1(ej)图和图和X2(ej)图有什么区别?补零图有什么区别?补零 DFTDFT能否提高能否提高信号的频谱分辨率,说明提高频谱密度、频谱分辨率的措施各是什么?信号的频谱分辨率,说明提高频谱密度、频谱分辨率的措施各是什么?图(1-2)在图(1-1)的基础上提高了频谱密度和计算分辨率,但是频谱的包络没有发生变化所以X1(ej)图和X2(ej)图没有区别。补零作用不能提高信号的频谱分辨率,因在 x(n)后面补零并没有增加新的信息量,改善的仅是栅栏效应,所以补零是不能提高频率分辨率的,即得不到高分辨率谱。这说明,补零仅仅是提高了计算分辨率,得到的是高密度频谱,而要得到高分辨率谱,则要通过增加数据的记录长度Tp来提高物理分辨率。.设计体会及心得设计体会及心得计算机是进行数字信号处理的主要工具,计算机只能处理有限长序列,这就决定了有限长序列处理在数字信号处理中的重要地位。离散傅里叶变换建立了有限长序列与其近似频谱之间的联系,在理论上具有重要意义。离散傅里叶变换DFT 在数字通信、语音处理、图像处理、谱估计、仿真、系统分析、雷达、光学影像、地震等各个领域得到广泛应用,但是这都是以卷积和相关运算,对连续信号和序列进行谱分析为基础的。通过该课程设计,我们受益匪浅,对DFT 在进行频谱的分析上有了根深刻的理解和掌握。DFT 实现了频域采样,同时DFT 存在快速算法 FFT,所以在实际应用中,可以利用计算机,用 DFT 来逼近连续时间信号的傅里叶变换,进而分析连续时间信号频谱。同时知道了补零点的作用,其仅仅是提高了计算分辨率,得到的是高密度频谱,并不能得到高分辨率-15百度文库-好好学习,天天向上谱,要提高频率分辨率,则要通过增加数据记录长度来提高物理分辨率。在编程实现中,遇到了一些问题,为此我们翻阅一些了参考书,并通过讨论一一解决。期间我们不仅学到了许多课本上的知识,还有课本以外的内容,学到了许多课本上所没提到的东西,这些东西都让我们耳目一新,开阔了视野,拓宽了知识面。从以前仅仅掌握离散傅里叶变换的概念,到现在渐渐领悟到离散傅里叶变换的一些实际应用,更明白它在实际设计中的作用,从理论到实践的逐步过渡,增了动手能力。知道了到团队精神的重要性,大家互相讨论,分工合作,享受了合作的乐趣。.参考文献参考文献1余成波,陶红艳.数字信号处理及 MATLAB 实现(第二版).北京:清华大学出版社.王艳芬,王刚.数字信号处理原理及实现.北京:清华大学出版社.从玉良,王宏志.数字信号处理原理及其 MATLAB 实现(第 2 版).北京:电子工业出版社.-16