用FFT对信号作频谱分析_实验报告
1. 实验目的与原理
(1) 进一步加深DFT算法原理和基本性质的理解(因为FFT只是DFT的一种快速算法, 所以FFT的运算结果必然满足DFT的基本性质)。
(2) 熟悉FFT算法原理和FFT子程序的应用。
(3) 学习用FFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
2. 实验内容与步骤
(1)复习DFT的定义、 性质和用DFT作谱分析的有关内容。
(2)复习FFT算法原理与编程思想, 并对照DIT-FFT运算流图和程序框图。
(3)编制信号产生程序,并逐个进行谱分析(即画出幅频特性)。 下面给出针对各信号的FFT变换区间N以及对连续信号x6(t)的采样频率fs, 供实验时参考。
x1(n), x2(n), x3(n), x4(n), x5(n): N=8, 16
x6(t): fs=64(Hz), N=16, 32, 64(n=0:1:69)
x1(n)?R4(n)
?n?1,?x2(n)??8?n
??0
?4?n?x3(n)??n?3
?0?0?n?34?n?70?n?34?n?7
x4(n)?cos
x5(n)?sin?4nn,0?n?19,0?n?19?
8
x6(t)?cos8?t?cos16?t?cos20?t
(4)令x(n)=x4(n)+x5(n),用FFT计算8点和16点离散傅里叶变换,X(k)=DFT[x(n)]
(5)令x(n)=x4(n)+jx5(n),重复(2)。
3. 实验原程序
n1=0:3;
x1=[1,1,1,1];%产生信号
figure,subplot(311),stem(n1,x1),xlabel('n'),ylabel('x_1(n)'),title('原始序列'); subplot(312),stem(0:7,abs(fft(x1,8)),'r'),title('x_1(n)8点DFT');%8点FFT subplot(313),stem(0:15,abs(fft(x1,16)),'g'),title('x_1(n)16点DFT');%16点FFT
n2=0:7,
x2=[1,2,3,4,4,3,2,1];%产生信号
figure,subplot(311),stem(n2,x2),xlabel('n'),ylabel('x_2(n)'),title('原始序列'); subplot(312),stem(0:7,abs(fft(x2,8)),'r'),title('x_1(n)8点DFT');%8点FFT subplot(313),stem(0:15,abs(fft(x2,16)),'g'),title('x_1(n)16点DFT');%16点FFT
n3=0:7,
x3=[4,3,2,1,1,2,3,4];%产生信号
figure,subplot(311),stem(n3,x3),xlabel('n'),ylabel('x_3(n)'),title('原始序列'); subplot(312),stem(0:7,abs(fft(x3,8)),'r'),title('x_1(n)8点DFT');%8点FFT subplot(313),stem(0:15,abs(fft(x3,16)),'g'),title('x_1(n)16点DFT');%16点FFT
n4=0:19;
x4=cos(n4*pi/4);
figure,subplot(311),stem(n4,x4),xlabel('n'),ylabel('x_4(n)'),title('原始序列'); subplot(312),stem(0:7,abs(fft(x4,8)),'r'),title('x_4(n)8点DFT');%8点FFT subplot(313),stem(0:15,abs(fft(x4,16)),'g'),title('x_4(n)16点DFT');%16点FFT
n5=0:19;
x5=sin(n5*pi/8);%产生信号
figure,subplot(311),stem(n5,x5),xlabel('n'),ylabel('x_5(n)'),title('原始序列'); subplot(312),stem(0:7,abs(fft(x5,8)),'r'),title('x_5(n)8点DFT');%8点FFT subplot(313),stem(0:15,abs(fft(x5,16)),'g'),title('x_5(n)16点DFT');%16点FFT
n6=0:69;
x6=cos(pi/8*n6)+cos(pi/4*n6)+cos(pi/16*5*n6);%产生信号
figure,subplot(221);stem(n6,abs(x6)),xlabel('n'),ylabel('x_6(n)'),title('原始序列'); subplot(222),stem(0:15,abs(fft(x6,16)),'r'),title('x_6(n)16点DFT');%16点FFT subplot(223),stem(0:31,abs(fft(x6,32)),'r'),title('x_6(n)32点DFT');%32点FFT subplot(224),stem(0:63,abs(fft(x6,64)),'r'),title('x_6(n)64点DFT');%64点FFT
n7=0:19;
x=x4+x5;%产生信号
figure,subplot(311),stem(n7,x),xlabel('n'),ylabel('x'),title('原始序列'); subplot(312),stem(0:7,abs(fft(x,8)),'r'),title('x8点DFT');%8点FFT
subplot(313),stem(0:15,abs(fft(x,16)),'g'),title('x16点DFT');%16点aFFT
n8=0:19;
xk=x4+j*x5;%产生信号
figure,subplot(311),stem(n8,x),xlabel('n'),ylabel('xk'),title('原始序列'); subplot(312),stem(0:7,abs(fft(xk,8)),'r'),title('xk8点DFT');%8点FFT
subplot(313),stem(0:15,abs(fft(xk,16)),'g'),title('xk16点DFT');%16点aFFT
第二篇:用FFT对信号作频谱分析的程序
实验(1)
function shiyan1
x1=[1,1,1,1];
n1=0:3;
n2=4:7;
xa=n1+1;
xb=8-n2;
x2=[xa,xb];
xa1=4-n1;
xb1=n2-3;
x3=[xa1,xb1];
X18=fft(x1,8);
k1=0:8-1;
subplot(3,2,1);
stem(k1,abs(X18),'.');
axis([0,8,0,1.2*max(abs(X18))]);
title('8点DFT[x1]');ylabel('幅度');
X116=fft(x1,16);
k2=0:16-1;
subplot(3,2,2);
stem(k2,abs(X116),'.');
axis([0,16,0,1.2*max(abs(X116))]);
title('16点DFT[x1]');ylabel('幅度');
X28=fft(x2,8);
subplot(3,2,3);
stem(k1,abs(X28),'.');
axis([0,8,0,1.2*max(abs(X28))]);
title('8点DFT[x2]');ylabel('幅度');
X216=fft(x2,16);
subplot(3,2,4);
stem(k2,abs(X216),'.');
axis([0,16,0,1.2*max(abs(X216))]);
title('16点DFT[x2]');ylabel('幅度');
X38=fft(x3,8);
subplot(3,2,5);
stem(k1,abs(X38),'.');
axis([0,8,0,1.2*max(abs(X38))]);
title('8点DFT[x3]');ylabel('幅度');
X316=fft(x3,16);
subplot(3,2,6);
stem(k2,abs(X316),'.');
axis([0,16,0,1.2*max(abs(X316))]);
title('16点DFT[x3]');ylabel('幅度');
实验(2)
function shiyan2
n1=0:8-1;
n2=0:16-1;
x48=cos(pi/4*n1);
x58=cos(pi/4*n1)+cos(pi/8*n1);
x416=cos(pi/4*n2);
x516=cos(pi/4*n2)+cos(pi/8*n2);
X48=fft(x48,8);
X416=fft(x416,16);
X58=fft(x58,8);
X516=fft(x516,16);
k1=0:8-1;
k2=0:16-1;
subplot(2,2,1);
stem(k1,abs(X48),'.');
axis([0,8,0,5]);
title('8点DFT[x4]');ylabel('幅度');
subplot(2,2,2);
stem(k2,abs(X416),'.');
axis([0,16,0,10]);
title('16点DFT[x4]');ylabel('幅度');
subplot(2,2,3);
stem(k1,abs(X58),'.');
axis([0,8,0,10]);
title('8点DFT[x5]');ylabel('幅度');
subplot(2,2,4);
stem(k2,abs(X516),'.');
axis([0,16,0,10]);
title('16点DFT[x5]');ylabel('幅度');
实验(3)
function shiyan3
Fs=64;T=1/Fs;
N1=16;N2=32;N3=64;
n1=0:N1-1;
n2=0:N2-1;
n3=0:N3-1;
x816=cos(8*pi*n1*T)+cos(16*pi*n1*T)+cos(20*pi*n1*T);
x832=cos(8*pi*n2*T)+cos(16*pi*n2*T)+cos(20*pi*n2*T);
x864=cos(8*pi*n3*T)+cos(16*pi*n3*T)+cos(20*pi*n3*T);
X816=fft(x816,16);
X816=fftshift(X816);
X832=fft(x832,32);
X832=fftshift(X832);
X864=fft(x864,64);
X864=fftshift(X864);
Tp=N1*T;F=1/Tp;
k=-N1/2:N1/2-1;fk=k*F;
subplot(3,1,1);stem(fk,abs(X816),'.');
title('16点DFTx8');xlabel('f(Hz)');ylabel('幅度');
Tp=N2*T;F=1/Tp;
k=-N2/2:N2/2-1;fk=k*F;
subplot(3,1,2);stem(fk,abs(X832),'.');
title('32点DFTX8');xlabel('f(Hz)');ylabel('幅度');
Tp=N3*T;F=1/Tp;
k=-N3/2:N3/2-1;fk=k*F;
subplot(3,1,3);stem(fk,abs(X864),'.');
title('64点DFTX8');xlabel('f(Hz)');ylabel('幅度');