Question 1
已知信号
这里,N=25,Q= 0.9+j0.3。可以推导出 ,
首先根据这个式子计算
X(k) 的理论值,然后计算输入序列
x(n)的32个值,再利用基2时间抽选的FFT算法,计算
x(n)的离散傅里叶变换(DFT)
X(k),与
X(k) 的理论值比较(要求计算结果最少6位有效数字)。
代码
format long;
Q=complex(0.9,0.3);
n=0:24;
xn=Q.^n;
WN=exp(-j*2*pi/25);
Xk=(1-Q.^25)./(1-Q.*WN.^n);
xn=[xn,zeros(1,7)];
Xk1=fft(xn,32);
subplot(3,1,1);
stem(n,abs(Xk));
title('N=25 Use Definition');
subplot(3,1,2);
stem(0:31,abs(Xk1));
title('N=32 Use DIT-FFT');
Xk=[Xk,zeros(1,7)];
subplot(3,1,3);
stem(0:31,abs(Xk1-Xk));
title('Difference');
图像
由图像可知,FFT计算得到的X(k)与理论值基本一致,但也存在较大误差。这可能与计算机运算的舍入有关。
Question 2
假设信号
x(n)由下述信号组成:
x(n)=0.001cos(0.45nπ)+sin(0.3nπ)−cos(0.302π−π4)
这个信号有两根主谱线
0.3π 和
0.302π靠的非常近,而另一根谱线
0.45π的幅度很小,请选择合适的长度
N和窗函数,用 DFT 分析其频谱,得到清楚的三根谱线。
分析
由于
2πω1=2π0.45π=409
2πω2=2π0.3π=203
2πω3=2π0.302π=1000151
综上,
N取
LowestCommonMultiple40,20,1000=1000.
此时三根谱线分别位于k=225,150,151处.
下面只需要选择合适的窗函数显示谱线即可。
代码
N=1000;
n=[0:N-1];
xn=0.001*cos(0.45*pi*n)+ sin(0.3*pi*n)-cos(0.302*pi*n-pi/4);
Xk=fft(xn,N);
subplot(3,1,1);
stem(0:499,abs(Xk(1:500)));
xlabel(‘k’);
title('X(k)');
subplot(3,1,2);
stem(140:160,abs(Xk(141:161)));
xlabel(‘k’);
title('对0.3pi和0.302pi谱线的放大 对应k=150,151');
subplot(3,1,3);
stem(220:230,abs(Xk(221:231)));
xlabel(‘k’);
title('对0.45pi谱线的放大 对应k=225');
图像
由图像可知,由于
0.45π(k=225)处谱线幅值太小,在该标度下难以体现,而
0.3π(k=150)和
0.302π(k=151)处谱线相距太近,看起来像一条,故直接描绘
X(k)难以分清,选择合适的窗范围,则可分别观察到清晰的谱线。
注
数字信号处理
Matlab实验二