实验二用FFT做谱分析一、实验目的1、进一步加深DFT算法原理和基本性质的理解(因为FFT只是DF的一种快速算法,所以FFT的运算结果必然满足DFT的基本性质)。2、熟悉FFT算法原理和FFT子程序的应用。3、学习用FFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。二、实验原理用FFT对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重要问题是频谱分辨率D和分析误差。频谱分辨率直接和FFT的变换区间N有关,因为FFT能够实现的频率分辨率是2π/N≤D。可以根据此时选择FFT的变换区间N。误差主要来自于用FFT作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N较大时离散谱的包络才能逼近于连续谱,因此N要适当选择大一些。周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。对模拟信号的频谱时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。三、实验内容和步骤1、对以下典型信号进行谱分析:其它nnnnnnx其它nnnnnnxnRnx,074,330,4)(,074,830,1)()()(32414()cos4xnn5()cos(/4)cos(/8)xnnn6()cos8cos16cos20xtttt2、对于以上信号,x1(n)~x5(n)选择FFT的变换区间N为8和16两种情况进行频谱分析。分别打印其幅频特性曲线。并进行对比、分析和讨论;;x6(t)为模拟周期信号,选择采样频率HzFs64,变换区间N=16,32,64三种情况进行谱分析。分别打印其幅频特性,并进行分析和讨论。3、令x7(n)=x4(n)+x5(n),用FFT计算8点和16点离散傅里叶变换X(k)=DFT[x(n)],并根据DFT的对称性,由X(k)求出X4(k)=DFT[x4(n)]和X5(k)=DFT[x5(n)]。4、令x8(n)=x4+jx5(n),重复(3)。四、实验结果及数据分析1、实验程序:%实验二,用FFT做谱分析b=menu('请选择信号x1(n)--x8(n)','x1(n)','x2(n)','x3(n)','x4(n)','x5(n)','x6(n)','x7=x4+x5','x8=x4+jx5','Exit');ifb==9b=0;endi=0;closeall;while(b)ifb==6temp=menu('请选择FFT变换区间长度N','N=16','N=32','N=64');iftemp==1N=16;elseiftemp==2N=32;elseN=64;endfs=64;n=0:N-1;x=cos(8*pi*n/fs)+cos(16*pi*n/fs)+cos(20*pi*n/fs);elsetemp=menu('请选择FFT变换区间长度N','N=8','N=16','N=32');iftemp==1N=8;elseiftemp==2N=16;elseN=32;endifb==1x=[11110000];elseifb==2x=[12344321];elseifb==3x=[43211234];elseifb==4n=0:N-1;x=cos(0.25*pi*n);elseifb==5n=0:N-1;x=sin((pi*n)/8);elseifb==7n=0:N-1;x=cos(n*pi/4)+sin(n*pi/8);elseifb==8n=0:N-1;x=cos(n*pi/4)+j*sin(n*pi/8);endendendendendendendend%%TOCalculateFFTf=fft(x,N);i=i+1;figure(i);printf(x,abs(f),abs(N),abs(b));ifN==16ifb==7k=conj(f);x4=(f+k)/2;%Re[X7(k)=x4(k)figure(i+2);subplot(2,2,1);stem(abs(x4),'.');xlabel('k');ylabel('|X4(k)|');title('恢复后的X4(k)');x5=(f-k)/2;%jIm[X7(k)=X5(k)subplot(2,2,3);Stem(abs(x5),'.');xlabel('k');ylabel('|X5(k)|');title('恢复后的X5(k)');endifb==8k(1)=conj(f(1));form=2:Nk(m)=conj(f(N-m+2));endfe=(x+k)/2;%求X8(k)的共轭对称分量fo=(x-k)/2;%求X8(k)的共轭反对称分量xr=ifft(fe,N);%xr=x4(n)b=4;figure(i+1)printf(xr,abs(fe),abs(N),abs(b));xi=ifft(fo,N)/j;%xi=x5(n)b=5;figure(i+2)printf(xi,abs(f),abs(N),abs(b));endendb=menu('请选择信号x1(n)--x8(n)','x1(n)','x2(n)','x3(n)','x4(n)','x5(n)','x6(n)','x7=x4+x5','x8=x4+jx5','Exit');ifb==9b=0;endcloseall;end2、实验结果图图1x1(n)的8点DFT图2x1(n)的16点DFT图3x2(n)的8点DFT图4x2(n)的16点DFT图5x3(n)的8点DFT图6x3(n)的16点DFT图7x4(n)的8点DFT图8x4(n)的16点DFT图9x5(n)的8点DFT图10x5(n)的16点DFT图11x6(n)的16点DFT图12x6(n)的32点DFT图13x6(n)的64点DFT图14x7(n)的8点DFT图15x7(n)的16点DFT图16|X4(k)|和|X5(k)|图17x8(n)的8点DFT图18x8(n)的16点DFT图19x8e(k)的IDFT[X8e(k)]3、分析结果:(1)图1和图2说明14()()xnRn的8点DFT和16点DFT分别是1()xn的频谱函数的8点和16点采样;(2)因为3288()((3))()xnxnRn,所以,3()xn与2()xn的8点DFT的模相等,如图3和图5。但是,当N=16时,3()xn与2()xn不满足循环移位关系,所以图4和图6的模不同。(2)4()cos4xnn的周期为8,所以N=8和N=16均是其周期的整数倍,得到正确的单一频率正弦波的频谱,仅在0.25π处有1根单一谱线。如图7和图8所示。(4)5()cos(/4)cos(/8)xnnn的周期为16,所以N=8不是其周期的整数倍,得到的频谱不正确,如图9所示。N=16是其一个周期,得到正确的频谱,仅在0.25π和0.125π处有2根单一谱线,如图10所示。051015-0.500.51nx(n)x4(n)的波形0510150246Kx4(n)的N=16点FFT|X(k)|(5)6()xt有3个频率成分,1234,8,10fHzfHzfHz。所以6()xt的周期为0.5s。采样频率123641686.4sFHzfff。变换区间N=16时,观察时间Tp=16T=0.25s,不是6()xt的整数倍周期,所以所得频谱不正确,如图11所示。变换区间N=32,64时,观察时间Tp=0.5s,1s,是6()xt的整数周期,所以所得频谱正确,如图12和13所示。图中3根谱线正好位于4,8,10HzHzHz处。变换区间N=64时频谱幅度是变换区间N=32时2倍,这种结果正好验证了用DFT对中期序列谱分析的理论。注意:(1)用DFT(或FFT)对模拟信号分析频谱时,最好将X(k)的自变量k换算成对应的模拟频率fk,作为横坐标绘图,便于观察频谱。这样,不管变换区间N取信号周期的几倍,画出的频谱图中有效离散谐波谱线所在的频率值不变,如图12和13所示。11,0,1,2,,1skpFfkkkkNNNTT(2)本程序直接画出采样序列N点DFT的模值,实际上分析频谱时最好画出归一化幅度谱,这样就避免了幅度值随变换区间N变化的缺点。本实验程序这样绘图只要是为了验证了用DFT对中期序列谱分析的理论。五、思考题1、当N=8时,x2n和x3n的幅频特性会相同吗?为什么?N=16呢?答:当n=8时,幅频特性相同。因为它们函数表达的相同。当N=16时,模值不相同。2、对于周期序列,如果周期不知道,如何用FFT进行谱分析?答:设一个定长的值m与2m分析后误差大则取4n,4m的谱分析与2m比较,直到mn2与mn12谱分析相差不多时便认为mn2次谱分析近似原来的谱分析。