题目:
假设信号x(n)=0.001*cos(0.45nπ)+sin(0.3nπ)-cos(0.302nπ-π/4).
请选择合适的长度N和窗函数,用DFT分析频谱,得到6根非零谱线。
clc;clear
n=0:1:1999;
x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);
%T=1000,所以N要取1000的整数倍才能不泄露
%先确定x(n)的1000点DFT
n1=0:1:999; %取1000个点
y1=x(1:1:1000);
subplot(2,2,1);
stem(n1,y1);
title('样本点 x(n), 0<=n<=999');
xlabel('n')
axis([0,1000,-2.5,2.5]);%限制x,y的坐标范围
Y1=fft(y1,1000);
magY1=abs(Y1(1:1:1000));
k1=0:1:999;
w1=2*pi/1000*k1;
%整体,验证是否只有六根非零谱线
subplot(2,2,2);
stem(k1,magY1);
title('样本点的DTFT的模');
xlabel('k1');
axis([0,1000,0,10]);%改x,y坐标轴的范围
%将左半部分非零谱线放大观察
subplot(2,2,4);
stem(k1,magY1);
title('样本点的DTFT的模(放大版)');
xlabel('k1');
axis([140,230,0,2]);%改x,y坐标轴的范围
% %因为N为周期的整数倍,所以图中有6个理想尖峰
经计算该信号周期为1000,所以取样点N要为1000的整数倍才不会发生频谱泄露。
窗函数选择矩形函数直接截取。
编译得到图像如下:
由于0.3pi和0.302pi这两根主谱线相距很近,且0.45pi的谱线幅值很小,因此将左半部分谱线放大进行观看,可以看到清楚的3根谱线。