实验二:用FFT作谱分析
一、 实验目的
1、进一步加深DFT 算法原理和基本性质的理解(因为FFT 只是DFT 的一种快速算 法,所以FFT 的运算结果必然满足DFT 的基本性质)。 2、熟悉FFT 算法原理和FFT 子程序的应用。
3、学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分 析误差及其原因,以便在实际中正确应用FFT。
二.实验步骤
(1) 复习DFT的定义、 性质和用DFT作谱分析的有关内容。
(2) 复习FFT算法原理与编程思想, 并对照DIT-FFT运算流图和程序框图, 读懂本实验提供的FFT子程序。
(3) 编制信号产生子程序, 产生以下典型信号供谱分析用:
x1(n)?R4(n)
?n?1,0?n?3
?x(n)? 2?8?n4?n?7 ?0
?4?n0?n?3 ?x(n)??n?34?n?7 3?0 ??
x4(n)?cosn 4 ?x5(n)?sinn 8 x6(n)?cos8?t?cos16?t?cos20?t如果给出的是连续信号
(t),则首先要根据其最高频率确定采样速率
以及由频率分辨率选择采样点
(t),频率
数N,然后对其进行软件采样(即计算x(n)=
(nT )(0nN ?1),产生对应序列x(n)。对信号
?分辨率的选择要以能分辨开其中的三个频率对应的谱线为准则。对周期序列,最好截取周期的整数倍进行谱分析,否则有可能产生较大的分析误差。 (4) 编写主程序。
(5) 按实验内容要求,上机实验, 并写出实验报告。
三.实验程序
按照实验内容及程序提示键入1~8,分别对(n)~(n)及分析。输出(n)~(n)的波形及其8点DFT和16点DFT,1.
(n)及其8点和16点DFT
ylabel('x1n');
title('x1n的波形’); subplot(1,3,2);
stem(k1,abs(X1),'.'); xlabel('k');
ylabel('|X(k)|');
title('x1n的N=8点FFT'); subplot(1,3,3);
stem(k2,abs(X2),'.'); xlabel('k');
ylabel('|X(k)|');
title('x1n的N=16点FFT');
M=8; N=16; k1=0:M-1; k2=0:N-1; n1=0:8;
x1n=[1,1,1,1,0,0,0,0]; figure(1)
X1=fft(x1n,M); X2=fft(x1n,N);
n1=0:length(x1n)-1; subplot(1,3,1); stem(n1,x1n,'.'); xlabel('n');
(n)=(n)+
(n)、(n)=
(n)+j(n)进行谱
(n)的16点、32点和64点采样序列及其DFT。
2.
(n)及其8点和16点DFT
X1=fft(x2n,M); X2=fft(x2n,N);
n1=0:length(x2n)-1; subplot(1,3,1); stem(n1,x2n,'.'); xlabel('n'); ylabel('x2n');
M=8; N=16; k1=0:M-1; k2=0:N-1; n1=0:8;
x2n=[1,2,3,4,4,3,2,1]; figure(2)
title('x2n的波形'); subplot(1,3,2);
stem(k1,abs(X1),'.'); xlabel('k');
ylabel('|X(k)|');
title('x2n的N=8点FFT');
subplot(1,3,3);
stem(k2,abs(X2),'.'); xlabel('k');
ylabel('|X(k)|');
title('x2n的N=16点FFT');
3.
(n)及其8点和16点DFT
ylabel('x3n'); title('x3的波形'); subplot(1,3,2);
stem(k1,abs(X1),'.'); xlabel('k');
ylabel('|X(k)|');
title('x3n的N=8点FFT'); subplot(1,3,3);
stem(k2,abs(X2),'.'); xlabel('k');
ylabel('|X(k)|');
title('x3n的N=16点FFT');
M=8; N=16; k1=0:M-1; k2=0:N-1; n1=0:8;
x3n=[4,3,2,1,1,2,3,4]; figure(3)
X1=fft(x3n,M); X2=fft(x3n,N);
n1=0:length(x3n)-1; subplot(1,3,1); stem(n1,x3n,'.'); xlabel('n');
4. (n)及其8点和16点DFT M=8; N=16; k1=0:M-1; k2=0:N-1; n1=0:8;
x4n1=cos(0.25*pi*n1); x4n2=cos(0.25*pi*n2); figure(4)
X1=fft(x4n1,M); X2=fft(x4n2,N);
n1=0:length(x4n1)-1; subplot(2,2,1); stem(n1,x4n1,'.'); xlabel('n'); ylabel('x4n');
title('x4n的波形');
subplot(2,2,2);
stem(k1,abs(X1),'.'); xlabel('k');
ylabel('|X(k)|');
title('x4n的N=8点FFT'); n2=0:length(x4n2)-1; subplot(2,2,3); stem(n2,x4n2,'.'); xlabel('n'); ylabel('x4n');
title('x4n的波形'); subplot(2,2,4);
stem(k2,abs(X2),'.'); xlabel('k');
ylabel('|X(k)|');
title('x4n的N=16点FFT');
5. ( (n)及其8点和16点DFT M=8; N=16; k1=0:M-1; k2=0:N-1; n1=0:8;
x5n1=sin(0.125*pi*n1); x5n2=sin(0.125*pi*n2); figure(5)
X1=fft(x5n1,M); X2=fft(x5n2,N);
n1=0:length(x5n1)-1; subplot(2,2,1); stem(n1,x5n1,'.'); xlabel('n'); ylabel('x5n');
title('x5n的波形');
subplot(2,2,2);
stem(k1,abs(X1),'.'); xlabel('k');
ylabel('|X(k)|');
title('x5n的N=8点FFT'); n2=0:length(x5n2)-1; subplot(2,2,3); stem(n2,x5n2,'.'); xlabel('n'); ylabel('x5n');
title('x5n的波形'); subplot(2,2,4);
stem(k2,abs(X2),'.'); xlabel('k');
ylabel('|X(k)|');
title('x5n的N=16点FFT');

