最后给了一道题,题目如下:
欲解此题,关键掌握以下几点:
第一,分清“截取数据长度”(即窗函数长度)与“DFT点数”二者的不同;
第二,能够根据模拟频率推断出DFT谱峰处对应的序号k的数值,方法如下:
首先,由模拟频率转换为数字域频率:
然后,数字域频率对应到DFT的序号k
综合以上两式,得到:
【题目分析与解答】
我们按照DFT分析信号频谱的三个步骤来分别求解:
第一步:采样。所以首先,我们写出采样后离散时间信号的表达式:
其周期为10。
第二步:时域加窗(即截取)
截取10点长,相当于将该周期信号x(n)与10点长的矩形窗相乘,得到v(n),所以我们求v(n)的DTFT。
先把公式写出来吓吓大家(
)
然后,画图安抚一下大家受伤的心灵(
)
注意,上图中只画出了[-Π,Π] 区间的图形,实际上DTFT是以2Π为周期的(所以吓人的公式中有西格玛求和符号)。
第三步:频域抽样,也就是对V(e^jw)在 [0,2Π] 区间抽取N个点(N为DFT点数,而非第二步中截取的长度)
再次把狐假虎威的公式摆出来(因为有些同学有强迫症,非要看看公式长什么样)
其实V(k) 就是下图中的红点点啦。
好了,那么最后的问题就是,N取不同值时(也就是做不同点数的DFT)这些红点点显然也不同。对于此题来说,这三种N的取值(10、20、128)得到的结果到底是什么呢?
你看到或者听到这里的话,暂停一下,自己算算呗。
我直接把matlab画图的结果给出来。
用前面的公式算一下:f=kfs/N,最后那个128点DFT的图,最高的谱峰序号k是多少?
最后附上matlab程序。
clc;clear all;
f0=1;fs=5;%单位:Hz
n=0:1000;L=10;
xn=cos(2*pi*f0*n/fs);%时域离散时间信号
Xk1=fft(xn(1:L),10);
Xk2=fft(xn(1:L),20);
Xk3=fft(xn(1:L),128);
subplot(311);stem((0:length(Xk1)-1),abs(Xk1));title('10点DFT');
subplot(312);stem((0:length(Xk2)-1),abs(Xk2));title('20点DFT');
subplot(313);stem((0:length(Xk3)-1),abs(Xk3));title('128点DFT');
DFT分析信号频谱,是实际中应用最广泛的数字信号处理算法,还有很多种题目可以出。还是那句话,题目无穷无尽,而原理就那么多,大家只有掌握了其真正含义,才能以不变应万变。