《数字信号处理》实践报告题 目: 实验二 用FFT 做谱分析1. 实验目的(1) 进一步加深DFT 算法原理和基本性质的理解(因为 FFT 只是DFT 的一种快速算法,所以FFT 的运算结果必然满足DFT 的基本性质)。
(2) 熟悉FFT 算法原理和FFT 子程序的应用。
(3) 学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT 。
2. 实验步骤(1) 复习DFT 的定义、性质和用DFT 作谱分析的有关容。
(2) 复习按时间抽选法FFT 算法原理及相应的运算流图 (3) 编制信号产生子程序,产生以下典型信号供谱分析用:x1(n) = R4(n)x 2(n) = ⎪⎩⎪⎨⎧≤≤-≤≤+nn n n n 其他,074,830,1x 3(n) = ⎪⎩⎪⎨⎧≤≤-≤≤-nn n n n 其他,074,330,4 x 4(n) = cos(πn /4) x 5(n) = sin(πn /8)x 6(t) = cos8πt + cos16πt + cos20πt应当注意,如果给出的是连续信号x a (t),则首先要根据其最高频率确定抽样频率f s 以及由频率分辨率选择抽样点数N ,然后对其进行软件抽样(即计算 x(n)=x a (nT),0≤n ≤N-1),产生对应序列 x(n)。
对信x 6(t),频率分辨率的选择要以能分辨开其中的三个频率对应的谱线为准则。
对周期序列,最好截取周期的整数倍进行谱分析,否则有可能产生较大的分析误差。
请实验者根据DFT 的隐含周期性思考这个问题。
(4) 编写主程序。
图2.1 给出了主程序框图,供参考。
对2中所给出的信号逐个进行谱分析。
下面给出针对各信号的FFT变换区间N以及对连续信号x6(t)的抽样频率f s,供实验时参考。
x1(n) , x2(n) , x3(n) , x4(n) , x5(n):N = 8 , 16x6(t):f s = 64(Hz) , N = 16 , 32 , 643、实验容(1)x1(n) = R4(n)程序代码:x1=ones(1,4);N=4;n=[0:1:3];stem(n,x1);X1=fft(x1,8);magX1=abs(X1);k=[0:7];stem(k,magX1);x12=ones(1,4);N=16;n1=[0:3];stem(n1,x12);X12=fft(x12,16);magX12=abs(X12);k1=[0:15];stem(k1,magX12);subplot(2,2,1):stem(n,x1);subplot(2,2,2):stem(n1,x12);subplot(2,2,3):stem(k,magX1);subplot(2,2,4):stem(k1,magX12);(2)x 2(n) = ⎪⎩⎪⎨⎧≤≤-≤≤+nn n n n 其他,074,830,1 程序代码: x2=[1:4,4:-1:1]; n=[0:3,4:7]; stem(n,x2); X2=fft(x2,8); magX2=abs(X2); k=[0:7];stem(k,magX2);x2=[1:4,4:-1:1]; n1=[0:3,4:7]; stem(n,x2); X21=fft(x2,16); magX21=abs(X21); k1=[0:15];stem(k1,magX21);subplot(2,2,1):stem(n,x2); subplot(2,2,2):stem(n1,x2); subplot(2,2,3):stem(k,magX2); subplot(2,2,4):stem(k1,magX21);(3)x 3(n) = ⎪⎩⎪⎨⎧≤≤-≤≤-nn n n n 其他,074,330,4 程序代码:x3=[4:-1:1,1:4];n=[0:3,4:7];stem(n,x3);X3=fft(x3,8);magX3=abs(X3);k=[0:7];stem(k,magX3);x3=[4:-1:1,1:4];n1=[0:3,4:7];stem(n,x3);X31=fft(x3,16);magX31=abs(X31);k1=[0:15];stem(k1,magX31);subplot(2,2,1):stem(n,x3); subplot(2,2,2):stem(n1,x3); subplot(2,2,3):stem(k,magX3); subplot(2,2,4):stem(k1,magX31);(4)x4(n) = cos(πn /4)程序代码:n=[0:7];x4=cos(pi*n/4);stem(n,x4);X4=fft(x4,8);magX4=abs(X4);k=[0:7];stem(k,magX4);n1=[0:15];x41=cos(pi*n1/4);stem(n,x4);X41=fft(x4,16);magX41=abs(X41);k1=[0:15];stem(k1,magX41);subplot(2,2,1):stem(n,x4); subplot(2,2,2):stem(n1,x41); subplot(2,2,3):stem(k,magX4); subplot(2,2,4):stem(k1,magX41);(5)x5(n) = sin(πn /8)程序代码:n=0:1:7;x5=sin(pi*n/8);stem(n,x5);X5=fft(x5,8);magX5=abs(X5);k=[0:7];stem(k,magX5);n1=0:1:15;x51=sin(pi*n1/8);stem(n1,x51);X51=fft(x5,16);magX51=abs(X51);k1=[0:15];stem(k1,magX51);subplot(2,2,1):stem(n,x5); subplot(2,2,2):stem(n1,x51); subplot(2,2,3):stem(k,magX5); subplot(2,2,4):stem(k1,magX51);(6)x6(t) = cos8πt + cos16πt + cos20πtN=32程序代码:fs=64;T=1/fs;t=0:T:1/2-T;x6=cos(2*pi*4*t)+cos(2*pi*8*t)+cos(2*pi*10*t); stem(t,x6);X6=fft(x6,32);magX6=abs(X6);k=[0:31];stem(k,magX6);subplot(2,1,1):stem(t,x6);subplot(2,1,2):stem(k,magX6);N=16程序代码:fs=64;T=1/fs;t=0:T:1/4-T;x6=cos(2*pi*4*t)+cos(2*pi*8*t)+cos(2*pi*10*t); stem(t,x6);X6=fft(x6,16);magX6=abs(X6);k=[0:15];stem(k,magX6);subplot(2,1,1):stem(t,x6);subplot(2,1,2):stem(k,magX6);N=64程序代码:fs=64;T=1/fs;t=0:T:1-T;x6=cos(2*pi*4*t)+cos(2*pi*8*t)+cos(2*pi*10*t); stem(t,x6);X6=fft(x6,64);magX6=abs(X6);k=[0:63];stem(k,magX6);subplot(2,1,1):stem(t,x6);subplot(2,1,2):stem(k,magX6);思考题:1、在N=8时,x2(n )和x3(n )的幅频特性会相同吗?为什么?N=16呢? 答:在N=8时,x 2(n)和x 3(n)的幅频特性相同,x 3(n)= x 2((n-4))8,0≤n ≤7 DFT(x 3(n))= e -j(2π/8)k4X 2[k]=e -j πk X 2[k],所以x 2(n)和x 3(n)的幅频特性相同。
N=16时不相同。
N=16时,x 2(n)和x 3(n)均需补零,不再满足循环位移。
2、通过对x4(n ),x5(n )的分析,你发现这两个信号有哪些频率成分?你得出什么结论?答:DFT 采样结果因采样点数不同而变化。
3、如果周期信号的周期预先不知道,如何用FFT 进行谱分析?答: 如果周期信号的周期预先不知道,可先截取M 点的进行FFT ,即 ~()()()M M x n x n R n =•()[()]M M X k DFT x n =01k M ≤≤- 再将截取长度扩大1倍,截取~22()()()M M x n x n R n =•22()[()]M M X k DFT x n =021k M ≤≤- 比较()M X k 和2()M X k ,如果二者的主谱差别满足分析误差要求,则以()M X k 或2()M X k 可近似表示 ~()x n 的频谱,否则,继续截取长度加倍,直 至前后两次分析所得主谱频率差别满足误差要求。