实验利用DFT分析离散信号频谱

实验二 利用DFT分析离散信号频谱

1. 利用FFT分析信号的频谱;

(1) 确定DFT计算的参数;

(2) 进行理论值与计算值比较,讨论信号频谱分析过程中误差原因及改善方法。

答:(1)信号x[k]的周期N=16,角频率w0=2*pi/N=pi/8;作fft的点数N=16。

(2)计算程序:

N=16;k=0:N-1;
x=cos(3*pi/8*k);
X=fft(x,N);
subplot(2,1,1);
stem(k-N/2,abs(fftshift(X)));
ylabel('幅度谱')
xlabel('m')
subplot(2,1,2);
stem(k-N/2,angle(fftshift(X)));
ylabel('相位谱')
xlabel('m')

计算结果:

我们还可以利用ifft函数进行相应的傅里叶反变换,以得到时域上的x[k],分析程序如下:

N=16;k=0:N-1;
x1=cos(3*pi/8*k);
X=fft(x1,N);
subplot(2,1,1)
stem(k,x1)
ylabel('傅里叶变换前的时域波形')
xlabel('k')
x2=ifft(X,N);
subplot(2,1,2)
stem(k,x2)
ylabel('傅里叶反变换后的时域波形')
xlabel('k')

结果如下:

可以看出:经过傅里叶变换和相应反变换后的信号与原信号的时域波形完全相同。

2. 利用FFT分析信号的频谱;

(1) 确定DFT计算的参数;

(2) 进行理论值与计算值比较,讨论信号频谱分析过程中误差原因及改善方法。

答:(1)信号无限长,因此需要对其进行截短。该序列单调衰减,当k>=10时,序列已几乎衰减为0,因此只取序列在区间[0,10]上的数值进行分析。

(2)计算程序:

k=0:10;
x=(1/2).^k;
subplot(2,1,1);
stem(k,x);
subplot(2,1,2);
w=k-5;
plot(w, abs(fftshift(fft(x))));
ylabel('幅度谱')
xlabel('w')

计算结果:

3. 有限长脉冲序列,利用FFT分析其频谱,并绘出其幅度谱与相位谱。

答:计算程序:

k=0:5;
x=[2 3 3 1 0 5];
w=k-3;
subplot(2,1,1);
stem(w,abs(fftshift(fft(x,6))));
ylabel('幅度谱')
xlabel('w')
subplot(2,1,2);
stem(w,angle(fftshift(fft(x,6))));
ylabel('相位谱')
xlabel('w')

计算结果:

4. 某周期序列由3个频率组成: ,

利用FFT分析其频谱。如何选取FFT的点数N?此3个频率分别对应FFT计算结果X[m]中的哪些点?若选取的N不合适,FFT计算出的频谱X[m]会出现什么情况?

答:序列x[k]的周期为N=32,取FFT的点数N=32进行频谱分析,程序如下:

N=32;k=0:N-1;
x=cos(7*pi/16*k)+cos(9*pi/16*k)+cos(pi/2*k);
X=fft(x,N);
subplot(2,1,1);
stem(k-N/2,abs(fftshift(X)));
ylabel('幅度谱')
xlabel('m')
subplot(2,1,2);
stem(k-N/2,angle(fftshift(X)));
ylabel('相位谱')
xlabel('m’)

分析结果:

信号x[k]的三个频率分别对应FFT计算结果X[m]中的m=7,m=9,m=8

对于离散周期序列进行FFT频谱分析时取计算的点数为序列的周期N,如果计算的点数不是此

离散周期序列的周期时,X[m]会发生变化,此时并不表示序列x[k]的频谱,而相当于将序列

x[k]的周期扩大或者缩减后得到新信号的频谱。在本例中,若取N=20<32,则可得到下图所

示的幅度谱和相位谱:

同理,若取N=40>