实验6FFT算法的应用实验目的:加深对离散信号的DFT的理解及其FFT算法的运用。实验原理:N点序列的DFT和IDFT变换定义式如下:10[][]NknNnXkxnW,101[][]NknNkxnXkWN利用旋转因子2jnkknNNWe具有周期性,可以得到快速算法(FFT)。在MATLAB中,可以用函数X=fft(x,N)和x=ifft(X,N)计算N点序列的DFT正、反变换。例1对连续的单一频率周期信号按采样频率采样,截取长度N分别选N=20和N=16,观察其DFT结果的幅度谱。解此时离散序列,即k=8。用MATLAB计算并作图,函数fft用于计算离散傅里叶变换DFT,程序如下:k=8;n1=[0:1:19];xa1=sin(2*pi*n1/k);subplot(2,2,1)plot(n1,xa1)xlabel('t/T');ylabel('x(n)');xk1=fft(xa1);xk1=abs(xk1);subplot(2,2,2)stem(n1,xk1)xlabel('k');ylabel('X(k)');n2=[0:1:15];xa2=sin(2*pi*n2/k);subplot(2,2,3)plot(n2,xa2)xlabel('t/T');ylabel('x(n)');xk2=fft(xa2);xk2=abs(xk2);subplot(2,2,4)stem(n2,xk2)xlabel('k');ylabel('X(k)');计算结果示于图2.1,(a)和(b)分别是N=20时的截取信号和DFT结果,由于截取了两个半周期,频谱出现泄漏;(c)和(d)分别是N=16时的截取信号和DFT结果,由于截取了两个整周期,得到单一谱线的频谱。上述频谱的误差主要是由于时域中对信号的非整周期截断产生的频谱泄漏。实验内容:(1)2N点实数序列nNnnNnNnx其它,012,...,2,1,0),192cos(21)72cos()(N=64。用一个64点的复数FFT程序,一次算出NnxDFTkX2)]([)(,并绘出)(kX。(2)已知某序列)(nx在单位圆上的N=64等分样点的Z变换为63,...,2,1,0,8.011)()(/2kekXzXNkjk。用N点IFFT程序计算)]([)(_kXIDFTnx,绘出和)(_nx。实验要求:利用MATLAB编程完成计算,绘出相应图形。并与理论计算相比较,说明实验结果的原因。(1)用以下代码实现可得图6-1所示的DFT图。N=64;n=0:2*N-1;x=cos(2*pi*7*n/N)+1/2*cos(2*pi*19*n/N);X=fft(x,128);k=n;stem(k,abs(X))gridxlabel('k');ylabel('|X[k]|');图6-1理论分析如下:由欧拉公式得:)192cos(21)72cos(][nNnNnx)2121(21)19(2192)7(272nNNjnNjnNNjnNjeeee对knNjenp2][,其2N点的DFT变换为:120)2(2212022][][NnmkNnjNnnNmjeenpmp当mk2时,)2(22)2(22211][mkNjmkNNjeemp=0当mk2时,即Nkp2]2[由此可得][kx当k=14,38,90,114时有值,其余为0120(Nk)64]114[]14[xx,32]90[]38[xx与图6-1有相同的结论。(2)用以下代码可得图6-2N=64;k=0:N-1;X=1./(1-0.8*exp(-j*2*pi*k/N));x=ifft(X,64);n=k;stem(n,abs(x))grid图6-2xlabel('n');ylabel('x[n]');理论分析如下:由][][nuanxn,其Z变换为111)(azzX可得][8.0][nunxn,其N=64点的DFT为:630642][][nnkjenxkX=642642648.0118.018.01kjkjee得63,...,2,1,0,8.011)()(/2kekXzXNkjk其IDFT为:nnx8.08.011][64)632,1,0(n比较用IFFT函数时,得其结果是复数求其模值与理论值进行比较得:x1=1/(1-0.8^N)*0.8.^n;delta=x1-abs(x)delta=1.0e-015*Columns1through900.11100.22200.11100.22200.16650.11100.0278-0.0555Columns10through18-0.1110-0.0416-0.0833-0.0833-0.0625-0.0278-0.0347-0.01390.0035Columns19through270.00350.01730.0087-0.0347-0.0755-0.0668-0.0572-0.01000.0507Columns28through360.06940.09820.12120.15940.12320.12310.13170.12760.0911Columns37through450.03950.05380.00980.0245-0.0054-0.0737-0.0950-0.1385-0.1163Columns46through54-0.0917-0.0359-0.0523-0.0418-0.0133-0.0745-0.0846-0.0455-0.0836Columns55through63-0.0689-0.0843-0.1010-0.0895-0.0400-0.0358-0.01560.03870.0588Column640.1080由此可见其delta值即计算值与理论值间差值极小为1510。产生复数差值最重要的原因是计算机的有效字长效应(如果按理论计算那样求和,得出来的离散信号是为实数序列),但由delta来开,其影响极小。