目录
1.实验目的
学习用 FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便正确应用 FFT。
2 实验原理
用 FFT 对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重要问题是频谱分辨率 D 和分析误差。频谱分辨率直接和 FFT 的变换区间 N 有关,因为 FFT 能够实现的频率分辨率是2π / N ,因此要求2π / N £ D 。可以根据此式选择 FFT 的变换区间 N。误差主要来自于用 FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当 N 较大时离散谱的包络才能逼近于连续谱,因此 N 要适当选择大一些。
周期信号的频谱是离散谱,只有用整数倍周期的长度作 FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。
对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。
3.实验仪器及设备
计算机,MATLAB 软件
4.实验步骤及内容
(1)对以下序列进行谱分析。
选择 FFT 的变换区间 N 为 8 和 16 两种情况进行频谱分析。分别打印其幅频特性曲线。并进行对比、分析和讨论。
x1=[1 1 1 1];
N1=8;
xk=fft(x1,N1);
subplot(2,2,1);
w=0:7;wk1=2*w/N1;
stem(w,[x1 zeros(1,N1-4)],'.','g');
xlabel('n');
ylabel('x(n)');
title('R4(n)');
axis([0 8 0 1.5]);
subplot(2,2,2);
stem(wk1,abs(xk),'.','g');
xlabel('w/pi');
ylabel('幅度');
axis([0 2 0 5]);
N2=16;
xk=fft(x1,N2);
subplot(2,2,3);
w=0:15;wk2=2*w/N2;
stem(w,[x1 zeros(1,N2-4)],'.','r');
xlabel('n');
ylabel('x(n)');
title('R4(n)');
axis([0 16 0 1.5]);
subplot(2,2,4);
stem(wk2,abs(xk),'.','r');
xlabel('w/pi');
ylabel('幅度');
axis([0 2 0 5]);
x2=[1 2 3 4 4 3 2 1];
N1=8;
xk=fft(x2,N1);
subplot(2,2,1);
w=0:7;wk1=2*w/N1;
stem(w, abs(x2),'.','g');
xlabel('n');
ylabel('x(n)');
title('x2(n)');
axis([0 8 0 5]);
subplot(2,2,2);
stem(wk1,abs(xk),'.','g');
xlabel('w/pi');
ylabel('幅度');
axis([0 2 0 25]);
N2=16;
xk=fft(x2,N2);
subplot(2,2,3);
w=0:15;wk2=2*w/N2;
stem(w,[x2 zeros(1,N2-8)],'.','r');
xlabel('n');
ylabel('x(n)');
title('x2(n)');
axis([0 16 0 5]);
subplot(2,2,4);
stem(wk2,abs(xk),'.','r');
xlabel('w/pi');
ylabel('幅度');
axis([0 2 0 25]);
x3=[4 3 2 1 1 2 3 4];
N1=8;
subplot(2,2,1);
w=0:7;wk=2*w/N1;
stem(w,x3,'.','g');
xlabel('n');
ylabel('x(n)');
title('x3(n)');
axis([0 8 0 5]);
xk=fft(x3,N1);
subplot(2,2,2);
stem(wk,abs(xk),'.','g');
xlabel('w/pi');
ylabel('幅度');
axis([0 2 0 25]);
N2=16;
subplot(2,2,3);
w=0:15;wk=2*w/N2;
stem(w,[x3 zeros(1,N2-8)],'.','r');
xlabel('n');
ylabel('x(n)');
title('x3(n)');
axis([0 16 0 5]);
xk=fft(x3,N2);
subplot(2,2,4);
stem(wk,abs(xk),'.','r');
xlabel('w/pi');
ylabel('幅度');
axis([0 2 0 25]);
(2)对以下周期序列进行谱分析。
选择 FFT 的变换区间 N 为 8 和 16 两种情况分别对以上序列进行频谱分析。分别打印其幅频特性曲线。并进行对比、分析和讨论。
n=0:30;
x4=cos(pi/4*n);
N1=8;
subplot(2,2,1);
w=0:7;wk1=2*w/N1;
stem(0:1:30,x4,'.','g');
xlabel('n');
ylabel('x(n)');
title('x4(n)');
axis([0 30 -1.5 1.5]);
xk=fft(x4,N1);
subplot(2,2,2);
stem(wk1,abs(xk),'.','g');
xlabel('w/pi');
ylabel('幅度');
axis([0 2 0 5]);
N2=16;
subplot(2,2,3);
w=0:15;wk=2*w/N2;
stem(0:1:30,x4,'.','r');
xlabel('n');
ylabel('x(n)');
title('x4(n)');
axis([0 30 -1.5 1.5]);
xk=fft(x4,N2);
subplot(2,2,4);
stem(wk,abs(xk),'.','r');
xlabel('\omega/\pi');
ylabel('幅度');
axis([0 2 0 9]);
n=0:30;
x5=cos(pi/4*n)+cos(pi/8*n);
N1=8;
subplot(2,2,1);
stem(0:1:30,x5,'.','m');
xlabel('n');
ylabel('x(n)');
title('x5(n)');
axis([0 30 -2.2 2.5]);
xk=fft(x5,N1);
subplot(2,2,2);
stem(0:0.25:1.75,abs(xk),'.','m');
xlabel('w/pi');
ylabel('幅度');
axis([0 2 0 7]);
N2=16;
subplot(2,2,3);
stem(0:1:30,x5,'.','r');
xlabel('n');
ylabel('x(n)');
title('x5(n)');
axis([0 30 -2.2 2.5]);
xk=fft(x5,N2);
subplot(2,2,4);
stem(0:0.125:1.875,abs(xk),'.','r');
xlabel('w/pi');
ylabel('幅度');
axis([0 2 0 10]);
(3)对模拟周期信号进行谱分析
选择采样频率,变换区间N=16,32,64 三种情况进行谱分析。分别打印其幅频特性,并进行分析和讨论。
Fs=64;T=1/Fs;
N=16;n=0:N-1;
x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);
X6k16=fftshift(fft(x6nT,16));
Tp=N*T;F=1/Tp;
k=0:N-1;fk1=-32:4:28;
subplot(3,1,1);stem(fk1,abs(X6k16),'.','g');
xlabel('w/pi');
ylabel('幅度');
axis([-32 28 0 12]);
N=32;n=0:N-1;
x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);
X6k32=fftshift(fft(x6nT,32));
Tp=N*T;F=1/Tp;
k=0:N-1;fk2=-32:2:30;
subplot(3,1,2);stem(fk2,abs(X6k32),'.','r');
xlabel('w/pi');
ylabel('幅度');
axis([-32 31 0 20]);
N=64;n=0:N-1;
x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);
X6k64=fftshift(fft(x6nT,64));
Tp=N*T;F=1/Tp;
k=0:N-1;fk3=-32:1:31;
subplot(3,1,3);stem(fk3,abs(X6k64),'.','m');
xlabel('w/pi');
ylabel('幅度');
axis([-32 31 0 40]);