DFT在信号频谱分析中的应用目录Ⅰ.设计题目 (1)Ⅱ.设计目的 (1)Ⅲ.设计原理 (1)Ⅳ.实现方法 (1)Ⅴ.设计内容及结果 (5)Ⅵ.改进及建议 (11)Ⅶ.思考题及解答 (14)Ⅷ.设计体会及心得 (15)Ⅸ.参考文献 (16)Ⅰ.设计题目DFT 在信号频谱分析中的应用Ⅱ.设计目的掌握离散傅里叶变换的有关性质,利用Matlab 实现DFT 变换。
了解DFT 应用,用DFT 对序列进行频谱分析,了解DFT 算法存在的问题及改进方法。
学习并掌握FFT 的应用。
Ⅲ.设计原理所谓信号的频谱分析就是计算信号的傅里叶变换。
连续信号与系统的傅里叶分析显然不便于直接用计算机进行计算,使其应用受到限制,而DFT 是一种时域和频域均离散化的变换,适合数值运算,成为分析离散信号和系统的有力工具。
工程实际中,经常遇到的连续信号Xa(t),其频谱函数Xa(jW)也是连续函数。
数字计算机难于处理,因而我们采用DFT 来对连续时间信号的傅里叶变换进行逼近,进而分析连续时间信号的频谱。
Ⅳ.实现方法离散傅里叶变换是有限长序列的傅里叶变换,它相当于把信号的傅里叶变换进行等频率间隔采样,并且有限长序列的离散傅里叶变换和周期序列的离散傅里叶级数本质是一样的。
快速傅里叶变换(FFT )并不是一种新的变换,它是离散傅里叶变换的一种快速算法,并且主要是基于这样的思路而发展起来的:(1)把长度为N 的序列的DFT 逐次分解成长度较短的序列的DFT 来计算。
(2)利用WN(nk)的周期性和对称性,在DFT 运算中适当的分类,以提高运算速度。
(对称性nkNnk NW W N-=+2,12-=NN W ;周期性nkN nk N nrN N k rN n NW W W W ---==)(,r 为任意整数,1=nrNN W )离散傅里叶变换的推导:离散傅里叶级数定义为nk j N k p p ek x Nn x N21)(1)(π∑-==(1-1) 将上式两端乘以nm j Neπ2-并对n在0~N-1求和可得⎥⎦⎤⎢⎣⎡==∑∑∑∑∑-=---=-=-=---=-10)(110101)(1N2N2N2)()(1)(N n m k n j N N k p N n N k m k n j pN n nm j pe k X ek XNen xπππ 因为{m k 1mk 0)(N )(1)(N 2N2N2-1-1N 11=≠---=-==∑m k j m k j N n m k n je eeNπππ所以∑∑-=-=--=110)()()(N2N k p N n nm j p m k k X en x δπ 这样∑-=-=10N2)()(N n nm j p p en x m X π用k 代替m 得∑-=-=1N2)()(N n nk j p P en x k X π(1-2)令N2πj N eW -=则(1-2)成为DFS []∑-===10)()()(N n nkN p p p W n x k X n x (1-3)(1-1)成为IDFS []∑-=-==1)(1)()(N n nkN pp p W k XNn x k X (1-4)式(1-3)、(1-4)式构成周期序列傅里叶级数变换关系。
其中)()(k X n x p p 、都是周期为N 的周期序列,DFS[·]表示离散傅里叶级数正变换,IDFS[·]表示离散傅里叶级数反变换。
习惯上,对于长为N 的周期序列,把0≤n ≤N-1区间称为主值区,把)1(~)0(-N x x p p 称为)(n x p 的主值序列,同样也称)1(~)0(-N X X p p 为)(k X p 的主值序列。
由于)()()(n R n x n x N p =,对于周期序列)(n x p 仅有N 个独立样值,对于任何一个周期进行研究就可以得到它的全部信息。
在主值区研究)(n x p 与)(n x 是等价的,因此在主值区计算DFS 和DFT 是相等的,所以DFT 计算公式形式与DFS 基本相同。
其关系为)()()(n R n x n x N p = )()()(k R k X k X N p =所以离散傅里叶正变换()()[]()W nkN N n n x n x DFT k X ∑-===10≤k ≤N-1离散傅里叶变换(DFT )定义:设有限长序列x (n) 长为N (0≤n ≤N-1),其离散傅里叶变换是一个长为N 的频率有限长序列(0≤k ≤N-1),其正变换为()()[]()W nkN N n n x n x DFT k X ∑-===100≤k ≤N-1 (WeNjN π2-=)离散傅里叶变换的实质是:把有限长序列当做周期序列的主值序列进行DFS 变换,x(n)、X(k)的长度均为N ,都是N 个独立值,因此二者具有的信息量是相等的。
已知x(n)可以唯一确定X(k),已知X(k)可以唯一确定x(n)。
虽然离散傅里叶变换是两个有限长序列之间的变化,但它们是利用DFS 关系推导出来的,因而隐含着周期性。
构造离散傅里叶变换的Matlab 实现程序如下:function[Xk]=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快速傅里叶变换(FFT )并不是与DFT 不同的另外一种变换,而是为了减少DFT 计算次数的一种快速有效的算法共轭对称性:设有限长序列)(n x 的长度为N ,以N 为周期的周期延拓列为N n x n x ))(()(~= 周期序列)(~n x 的共轭对称分量)(~n x e 和共轭反对称分量)(~n x o 分别为[]N N e n N x n x n x n x n x ))(())((21)()(21)(**~~~-+=⎥⎦⎤⎢⎣⎡-+= (1-5)[]N N o n N x n x n x n x n x ))(())((21)()(21)(**~~~--=⎥⎦⎤⎢⎣⎡--= (1-6)同样可以证明,它们满足)()(*~~n x n x e e -= (1-7) )()(*~~n x n x o o --= (1-8) 则有限长序列)(n x 的圆周共轭对称分量)(n x ep 和圆周共轭反对称分量)(n x op 分别定义为:)(]))(())(([21)()()(*~n R n N x n x n R n x n x N N N N e ep -+== (1-9))(]))(())(([21)()()(*~n R n N x n x n R n x n x N N N N o op --== (1-10)由于满足)()()(~~~n x n x n x o e += 故)()()()]()([)()()(~~~n x n x n R n x n x n R n x n x op ep N e N +=+== (1-11)显然,长度为N 的有限长序列)(n x 可以分解为圆周共轭对称分量)(n x ep 和圆周共轭反对称分量)(n x op 之和,)(n x ep 和)(n x op 的长度皆为N 。
利用有限长序列与周期序列的共轭对称分量和反对称分量的关系式(1-9)和式(1-10),以及式(1-11)可以推导出DFT 的一系列的对称性质(1)DFT )()()]([***K n X k X n x -=-= 式中)(*n x 表示)(n x 的共轭复序列。
证明:DFT )()()()]([*1010**k X W n x Wn x n x N n N n nk N nk N-=⎥⎦⎤⎢⎣⎡==∑∑-=-= 又因为12)(N 2===--nj nNj nNN e e W ππ 所以DFT )()()]([**10)(*k N X W n x n x N n n k N N-=⎥⎦⎤⎢⎣⎡=∑-=-(2)复序列实部的DFT 等于DFT 的圆周共轭对称部分,即DFT )]()([21)()]}({Re[*k N X k X k X n x ep -+==证明:DFT =)]}({Re[n x DFT )]}()([{*21n x n x +=21{DFT )]([n x +DFT )]([*n x }=)()]()([*21k X k N X k X ep =-+利用DFT 的对称性可求得n 0cos ω的DFT: 设n j e n j n n x 000sin cos )(ωωω=+= 则 DFT kNo j oNj kNo j NkN N o j W e e N n W e W e nk N n j W e k X n x ωωωωω---=--====∑111110)()]([因为 )](Re[cos 0n x n =ω 所以DFT =][cos 0n ωDFT 2)()(*)()]}({Re[k N X k X ep k X n x -+===kNk N kN k N k NW o j e No j e k NW o j e No j e W W N W W N 200001111cos 21)1cos(cos cos 12][+--+--+=------ωωωωωωωωⅤ.设计内容及结果1. 用MATLAB 语言编写计算序列x(n)的N 点DFT 的m 函数文件dft.m 。
并与MATLAB 中的内部函数文件fft.m 作比较。
解: x (n) 的N 点DFT 的m 函数文件dft.m function[Xk]=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 中的内部函数文件fft.m 文件 function [varargout] = fft(varargin) if nargout == 0builtin('fft', varargin{:}); else[varargout{1:nargout}] = builtin('fft', varargin{:}); end运算量估计:对于N=M 2点序列进行时间抽选奇偶分解FFT 计算,需分M 级,每级计算N/2个蝶。
每一级需N/2次复乘、N 次复加,因此总共需要进行: 复乘:N M NN 222log =复加:N N NM 2log =直接计算N 点的DFT ,需要2N 次复乘、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-t t1=cputime; y2=dft(x,N); Time_dft=cputime-t1 t2=cputime; 运行结果: Time_fft =0.0469Time_dft =15.2031由此可见FFT 算法比直接计算DFT 速度快得多2. 对离散确定信号 ()cos(0.48)cos(0.52)x n n n ππ=+ 作如下谱分析: 截取()x n 使()x n 成为有限长序列N(0≤≤n N -1),(长度N 自己选)写程序计算出()x n 的N 点DFT ()X k ,画出时域序列图xn ~n 和相应的幅频图()~X k k 。