使用DFT进行信号频谱分析导致频谱泄露问题的探究
一,引论
这篇文章里,我将要叙述一个在利用DFT去估计信号频谱时很容易引发的一个问题--频谱泄露。这个名词算是比较专业的词。之所以前面我用了两篇文章去讲时域窗和DTFT/DFT就是为这个问题做铺垫。我决定不在开始就讲他的概念是因为这个概念直接讲出来会很困难,也难以被接受,因为它确实需要模型去论证。初学者如果没有信号理论,DFT,窗的基本常识,直接看这个可能会有点困难,所以建议先打好基础。
二,有限点数DFT的实现过程
通常的DFT用来分析一小段长度有限的离散信号,只是大多数信号肯定不是一小段这么简单,所以欲要进行DFT分析,先要将长信号截断,如何截?很简单嘛,在时域乘以一个窗不就完成了截断嘛。
我们知道,时域乘积对应频域卷积,因此必有:
基于频域卷积这个事实,我们来分析一下最简单的情况,在时域找一个单频信号x(n)=sin(2pi*w0*n),窗就选矩形窗来做个实验。
首先声明,这个图解过程并非直接用的DFT,而是用DTFT来展示,这样做的好处是连续的谱线看起来更直观,事实上当我们对最后的结果Y(w)进行抽样就得到了DFT的离散值。这样稍微的变动并不会影响分析,反而会使分析变得简单。
这个图很具体的展示出了经过频域运算后原信号x(n)的频谱X(w)变成新的截断信号的频谱Y(w)的过程,从图中可以很明显的感觉到Y(w)产生的变化:
(1),原来的X(w)在w0处单一的频率谱线经过窗之后形成的Y(w)变成了被展宽的带状区域,在w0处明显变胖了,毫无疑问这个就是矩形窗固有的主瓣。
(2),因为矩形窗旁瓣的存在,使得运算后的Y(w)引入了很多拖尾(浪花)。
我们似乎能感觉到:窗的引入会使得原信号频谱产生一种可能会影响我们分析DFT的反面功效。试想一下,如果我们选取了一个窗,他的主瓣比较胖,而我们待分析的原始信号有两个相隔很近的频率点,例如:x(n)=sin(0.3pi*n)+sin(0.302pi*n),请问最终的DFT图谱上我们还能看到两个峰值点吗?答案肯定是NO,因为那个太胖的主瓣完全包容了0.3和0.302这两个频率点的微小距离,还能如何把他们区分开来?
再试想另外一种情况,如果我们选了一个窗,它的旁瓣衰减不够猛,旁瓣的高度比较高,正好我们分析的信号其中有一个频率点的功率比较小,例如:x(n)=sin(0.3pi*n)+0.001cos(0.45pi*n),那么请问0.45pi那个频率点的信号会在最终的DFT图谱上展示出来吗?答案必然是NO,因为如果那个旁瓣比较高,那么他完全就把你这个小功率的0.5pi这个点给完全淹没掉。
以上这段解释是我发挥想象来讲述的,事实上这个需要理论论证或者仿真,总之他揭示了窗的反面功效,从侧面告诉我么一个道理--截断信号,进行DFT分析之前,针对不同类型的信号,时域窗类型的选择至关重要。如果我们待截断的信号包含一些相隔很近的频率点,那么必须选取的窗的主瓣不能太胖。如果我们待截断的信号包含一些功率很小的频率点,那么我们选取的窗的旁瓣衰减必须要足够大。
下面我附上信号x(n)=0.01cos(0.45pi*n)+sin(0.3pi*n)+sin(0.302pi*n)通过矩形窗截取,和通过汉明窗截取之后再进行DFT计算之后的异同。
可以看到,矩形窗主瓣过宽,导致有微小偏差0.002pi的两个正弦信号显示不出来,并且由于旁瓣衰减不够大,所以那个小功率的余弦信号也未能展现。
选取汉明窗之后,通过增加窗口点数,使得它主瓣变窄窄,所以具有0.002pi微小频率偏差的两个正弦信号放大之后显形,同时该窗旁瓣衰减的给力,使得小功率点的正弦信号也浮出水面。
三,频谱泄露概念的引出
之所以现在才说什么是频谱泄露也是基于上面的论证过程,其实看到这里想必大家已经知道了究竟什么是频谱泄露了,那就是----采用窗的截取方式去截断信号之后进行DFT分析频谱,可能会因为窗的选取不当或者窗的长度N不够,导致最终DFT频谱图中丢失了原信号应该有的频率成分。
四,结论
欲采用窗的截取方式进行DFT分析离散信号频谱,窗的选取是有原则的。一是对于原有信号存在微小频率偏差的情况,窗的主瓣宽度必须小于信号频率偏差的大小,当然,这可以通过改变窗的长度N去实现。二是,对于原信号中存在小功率频率点,必须考虑窗的旁瓣衰减要给力才行,当然这就要考验窗的本身性能了。本博客在前面已经给出了常见的窗的频域参数,这就是在分析信号的过程中很有必要查阅的一部分表格之一。