实验一:用FFT对信号做频谱分析1、实验目的学习用FFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便正确运用FFT。2、实验原理用FFT对信号做频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重要问题是频谱分析率D和分析误差。频谱分辨率直接和FFT的变换区间N有关,因为FFT能够实现的频率分辨率是2π/N,因此要求2π/N≤D。可以根据此式选择FFT的变换区间N。误差主要来自于用FFT作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N较大时,离散谱的包络才能逼近于连续谱,因此N要适当选择大一些。周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。3、实验步骤及内容(1)对以下序列进行谱分析:𝑥1(𝑛)=𝑅4(𝑛)𝑥2(𝑛)={𝑛+10≤𝑛≤38−𝑛4≤𝑛≤70其它𝑛𝑥3(𝑛)={4−𝑛0≤𝑛≤3𝑛−34≤𝑛≤70其它𝑛选择FFT的变换区间N为8和16两种情况进行频谱分析。分别打印其频谱特性曲线,并进行对比、分析和讨论。(2)对以下周期序列进行谱分析:𝑥4(𝑛)=cos𝜋4𝑛𝑥5(𝑛)=cos𝜋4𝑛+cos𝜋8𝑛选择FFT的变换区间N为8和16两种情况分别对以上序列进行频谱分析。分别打印其频谱特性曲线,并进行对比、分析和讨论。(3)对模拟周期信号进行谱分析:𝑥8(t)=cos8𝜋𝑡+𝑐𝑜𝑠16𝜋𝑡+𝑐𝑜𝑠20𝜋𝑡选择采样频率𝐹𝑠=64𝐻𝑧,对变换区间N=16,32,64三种情况进行谱分析。分别打印其频谱特性曲线,并进行对比、分析和讨论。4、程序清单clc;clear;L=8;N=4;N1=L-N;X1_0=ones(1,N);X1_1=zeros(1,N1);X1=[X1_0X1_1]n=1:L;Y1=fft(X1,L);n=1:L;figure;subplot(2,1,1);stem(n,X1);%针状图subplot(2,1,2);stem(n,abs(Y1));L=16;N=4;N1=L-N;X1_0=ones(1,N);X1_1=zeros(1,N1);X1=[X1_0X1_1];n=1:L;Y1=fft(X1,L);n=1:L;figure;subplot(2,1,1);stem(n,X1);subplot(2,1,2);stem(n,abs(Y1));forn=0:L-1ifn=3x2(n+1)=n+1;endif(n=7)&(n=4)x2(n+1)=8-n;endif(nL)&(n7)x2(n+1)=0;endendx2k_1=fft(x2,L);m=1:L;figure;subplot(2,1,1);stem(m,x2);subplot(2,1,2);stem(m,abs(x2k_1));forn=0:L-1ifn=3x3(n+1)=4-n;endif(n=7)&(n=4)x3(n+1)=n-3;endif(nL)&(n7)x3(n+1)=0;endendx3k_1=fft(x3,L);m=1:L;figure;subplot(2,1,1);stem(m,x3);subplot(2,1,2);stem(m,abs(x3k_1));L=256;n=0:1:L-1;x4=cos(n*pi/4);y4=fft(x4,L);figure;subplot(2,1,1);plot(n,x4);subplot(2,1,2);plot(n,abs(y4));L=256;n=0:1:L-1;x5=cos(n*pi/4)+cos(n*pi/8);y5=fft(x5,L);figure;subplot(2,1,1);plot(n,x5);subplot(2,1,2);plot(n,abs(y5));L=100;m=40;n=0:L-1;t=0:1/64:(m-1/64);%离散化x6=cos(8*pi*t)+cos(16*pi*t)+cos(20*pi*t);y6=fft(x6,L);figure;subplot(2,1,1);plot(t,x6);subplot(2,1,2);plot(n,abs(y6));5、仿真波形(1)𝑥1(𝑛)=𝑅4(𝑛)(2)𝑥2(𝑛)={𝑛+10≤𝑛≤38−𝑛4≤𝑛≤70其它𝑛(3)𝑥3(𝑛)={4−𝑛0≤𝑛≤3𝑛−34≤𝑛≤70其它𝑛1234567800.20.40.60.811234567801234024681012141600.20.40.60.810246810121416012341234567801234123456780510152002468101214160123402468101214160510152012345678012341234567805101520024681012141601234024681012141605101520(4)𝑥4(𝑛)=cos𝜋4𝑛(5)𝑥5(𝑛)=cos𝜋4𝑛+cos𝜋8𝑛(6)𝑥8(t)=cos8𝜋𝑡+𝑐𝑜𝑠16𝜋𝑡+𝑐𝑜𝑠20𝜋𝑡01234567-1-0.500.510123456701234051015-1-0.500.510510150246801234567-2-1012012345670246051015-2-10120510150246802468101214161820-2-1012305101505101502468101214161820-2-10123051015202530350510152002468101214161820-2-101230102030405060700102030406、思考题①对于周期序列,如果周期不知道,如何用FFT进行谱分析?答:先设一个定长序列长度m进行DFT,再设置定长序列2m进行DFT,比较两者的结果,如果两者的差别满足分析误差要求,就可以表示该信号的频谱,如果两者的差别很大不满足误差要求就再设置定长序列4m进行分析,直到结果满足要求为止。②如何选择FFT变换区间?(包括非周期和周期信号)答:对于非周期信号:有频谱分辨率F,而频谱分辨率直接和FFT的变换区间有关,因为FFT能够实现的频率分辨率是2π/N.因此有最小的N2π/F。就可以根据此式选择FFT的变换区间;对于周期信号:周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。③当N=8时,x2(n),x3(n),幅频特性会相同吗?为什么?16呢?答:N=8时相同,因为二者都是8点序列,它们的波形周期延拓之后只是有时间延后,其余相同。N=16时不相同,它们的波形周期延拓之后取主值区间的序列不用。