1. 加深对 DFT 原理的理解,熟悉DFT的性质。
2. 掌握离散傅里叶变换的有关性质,利用Matlab实现DFT变换 3. 深刻理解利用 DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法
三,实验原理:
所谓信号的频谱分析就是计算信号的傅里叶变换。连续信号与系统的傅里叶分析显然不便于直接用计算机进行计算,使其应用受到限制,而DFT是一种时域和频域均离散化的变换,适合数值运算,成为分析离散信号和系统的有力工具。工程实际中,经常遇到的连续信号Xa(t),其频谱函数Xa(jW)也是连续函数。数字计算机难于处理,因而我们采用DFT来对连续时间信号的傅里叶变换进行逼近,进而分析连续时间信号的频谱。
离散傅里叶变换是有限长序列的傅里叶变换,它相当于把信号的
傅里叶变换进行等频率间隔采样,并且有限长序列的离散傅里叶变换和周期序列的离散傅里叶级数本质是一样的。快速傅里叶变换(FFT)并不是一种新的变换,它是离散傅里叶变换的一种快速算法,并且主要是基于这样的思路而发展起来的:(1)把长度为N的序列的DFT逐次分解成长度较短的序列的DFT来计算。(2)利用WN(nk)的周期性和对称性,在DFT运算中适当的分类,以提高运算速度。(对称性
WnkN2Nn(rNk)nrNnknkW,WN1;周期性WNWNWNWN,r为任意整数
nkNN2,WNnrN1)
离散傅里叶变换的推导:
1离散傅里叶级数定义为 xp(n)Nxk0N1p(k)eπnkj2N (1-1) 并对n在0~N-1
将上式两端乘以ej求和可得 xp(n)en0N1πnmj2N2πnmN1NXp(k)en0k0N1N1πn(km)j2N1Xp(k)Nk0N1en0N1πn(km)j2N 1因为
NN1n0en0N1j2πNn(km)11-eNπ(km)j2NN1-ej2π(km)N1 km0 km
N1n0πnmj2N所以xp(n)eπnmj2NXp(k)(km) 这样Xp(m)xp(n)ek0N1n0πnkj2NN1用k
代替m得 XP(k)xp(n)e令WNeπj2N (1-2)
N1n0,则(1-2)成为DFS xp(n)Xp(k)xp(n)WNnk(1-3)
1(1-1)成为 IDFSXp(k)xp(n)NXn0N1pnk(k)WN (1-4)
式(1-3)、(1-4)式构成周期序列傅里叶级数变换关系。其中
xp(n)、Xp(k)都是周期为N的周期序列,DFS[·]表示离散傅里叶级数
正变换,IDFS[·]表示离散傅里叶级数反变换。习惯上,对于长为N的周期序列,把0nN-1区间称为主值区,把xp(0)~xp(N1)称为xp(n)的主值序列,同样也称Xp(0)~Xp(N1)为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),所以离散傅里叶正变换
XkDFTxnxnWN 0kN-1
nkn0N1离散傅里叶变换(DFT)定义:设有限长序列x (n) 长为N(0nN-1),其离散傅里叶变换是一个长为N的频率有限长序列(0kN-1),其正变换为
XkDFTxnxnWN 0kN-1 (
nkn0N1WNej2πN)
离散傅里叶变换的实质是:把有限长序列当做周期序列的主值序列进行DFS变换,x(n)、X(k)的长度均为N,都是N个独立值,因此二者具有的信息量是相等的。已知x(n)可以唯一确定X(k),已知X(k)可以唯一确定x(n)。
虽然离散傅里叶变换是两个有限长序列之间的变化,但它们是利用DFS关系推导出来的,因而隐含着周期性
四,实验内容与程序:
1,对离散确定信号 x(n)cos(0.48n)cos(0.52n) 作如下谱分析: 截取x(n)使x(n)成为有限长序列N(0nN-1),(长度N自己选)写程序计算出x(n)的N点DFTX(k) ,画出时域序列图xn~n和相应的幅频X(k)~k图。 解:
1)求x(n)的前10点数据对应的X(ejw)、X(k)。 MATLAB程序: N=10; n=0:1:N-1;
xn=cos(0.48*pi*n)+cos(0.52*pi*n);
Xk=dft(xn,N); subplot(3,1,1) stem(n,xn,'.k'); title('时域序列图xn'); xlabel('n');
axis([0,10,-2.5,2.5]); 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所示。
图1-1 x(n)的前10点数据对应的x(n)、X(ejw)、X(k) 2)将x(n)补零至100点,求N=100点的X(ejw)、X(k)。 MATLAB主要程序如下: N=10; n=0:N-1;
xn=cos(0.48*pi*n)+cos(0.52*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,-2.5,2.5]); w=2*pi*(0:2047)/2048; X1=x1*exp(-j*n1'*w); subplot(3,1,2); plot(w/pi,abs(X1));
title('幅频特性曲线X(ejw)'); 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-2 x(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=0.48π、w2=0.52π这两个频率分量。这说明,补零仅仅是提高了计算分辨率,得到的是高密度频谱,而得不到高分辨率谱。 3)求x(n)的前100点数据,求N=100点的X(ejw)、X(k)。 MATLAB主要程序如下: N=100; n=0:1:N-1;
xn=cos(0.48*pi*n)+cos(0.52*pi*n);
Xk=dft(xn,N); subplot(3,1,1) stem(n,xn,'.k'); title('时域序列图xn'); xlabel('n');
axis([0,100,-2.5,2.5]); 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-3 100点x(n)对应的x(n)、X(ejw)、X(k)
由图可见,截断函数的加宽且为周期序列的整数倍,改变了频谱混叠作用,提高了物理分辨率,使X(k)能正确分辨w1=0.48π、w2=0.52π这两个频率分量。这说明通过增加数据的记录长度Tp来提高物理分辨率可以得到分辨率谱。
2,离散序列x (n ) = cos(0 .48πn ) + cos(0 .52πn ) 1) 0 ≤ n ≤ 10时,用 DFT 估计 x (n )的频谱;将 x (n )补零加长到长度为 100点序列用 DFT估计 x (n )的频谱。要求画出相应波形。
2) 0 ≤ n ≤ 100时,用 DFT 估计 x (n )的频谱,并画出波形
MATLAB 程序:n=[0:10];
x=cos(0.48*pi*n)+cos(0.52*pi*n);
y=fft(x); subplot(3,1,1); stem(n,y,'filled');
xn=[x,zeros(1,90)]; yn=fft(xn); hold on; nn=[0:100]; subplot(3,1,2); stem(nn,yn,'filled'); n1=[0:100];
x1=cos(0.48*pi*n1)+cos(0.52*pi*n1); y1=fft(x1); subplot(3,1,3); stem(n1,y1,'filled'); 运行结果:
86420-2012345678910
0102030405060708090100151050-540
200-200102030405060708090100
五,实验结果思考分析:
1,将实验内容的1中(1)(2) (3)的图,说明补零DFT的作用。 答:由图(1-1)、(1-2)、(1-3)可知DFT是有限长序列的频谱等间隔采样所得到的样本值,这就相当于透过一个栅栏去观察原来信号的频谱,因此必然有一些地方被栅栏所遮挡,这些被遮挡的部分就是未被采样到的部分,这种现象称为栅栏效应。如下图
由于栅栏效应总是存在的,因而可能会使信号频率中某些较大的频率分量由于被“遮挡”二无法得到反映。此时,通常在有限长序列的尾部增补若干个零值,介意改变原序列的长度。这样加长的序列作DFT时,由于点数增加就相当于调整了原来栅栏的间隙即间隔频率,可以使得原来的不到反映的那些较大的频率分量落在采样点上而得到反映。但要注意,由于栅栏效应,使得被分析的频谱变得较为稀疏,为此,在采样样本序列x(n)后补零,在数据长度Tp不变的情况下,可以改变频谱的频率取样密度,得到高密度频谱。
2,分析第 2题实验结果,思考利用 DFT 计算频谱时如何提高频谱的分辨率;对序列补零加长是否能提高频谱的分辨率。
答:更长的时域信号能够提供更高的频域分辨率,因为一个N点的时域信号能被分解为N/2+1个余弦信号和N/2+1个正弦信号,N增大则(N/2+1)也增大,频域间隔(1/2的时域采样频率)/(N/2+1)减小,
所以频域分辨率提高了。所以利用DFT计算频谱时增加取样点的长度范围可以提高分辨率。补零加长并不会改变频域的间隔,所以不能提高分辨率。
六,实验心得
过该课程设计,我们受益匪浅,对DFT在进行频谱的分析上有了根深刻的理解和掌握。DFT实现了频域采样,同时DFT存在快速算法FFT,所以在实际应用中,可以利用计算机,用DFT来逼近连续时间信号的傅里叶变换,进而分析连续时间信号频谱。
在编程的实现中,遇到了一些问题,为此我们翻阅一些了参考书,并通过讨论一一解决。期间我们不仅学到了许多课本上的知识,还有课本以外的内容,学到了许多课本上所没提到的东西,这些东西都让我们耳目一新,开阔了视野,拓宽了知识面。从以前仅仅掌握离散傅里叶变换的概念,到现在渐渐领悟到离散傅里叶变换的一些实际应用,更明白它在实际设计中的作用,从理论到实践的逐步过渡,增了动手能力。大家互相讨论,分工合作,享受了合作的乐趣。
因篇幅问题不能全部显示,请点此查看更多更全内容