FFT是时频域变换的常用工具,在工程应用中能够很大程度上减少计算量。但是,由于FFT有一个假设前提,即处理的时域信号是周期信号,当我们对一段时域信号做FFT时,FFT会将时域信号做周期性延拓。若实际应用中,待处理信号不满足周期性,则会引发“频谱泄露”问题。
频谱泄露的具体原因以及公式推导这里不再赘述,已经有很多大佬对此展开过讨论。简单来说,是由于周期延拓后信号的不连续性导致的。这里做个简单的仿真验证一下。
对两段时域中的余弦信号做FFT。其中一段符合周期性的条件,另一段不符合周期性条件。通过对比观察频谱泄露效应。
以下为周期信号的时域频域图:
以下为非周期信号的时域频域图:
通过对比不难发现,非周期信号的频谱出现了频谱泄露现象,峰值的能量分散到两侧的频率点上,抬高了旁瓣。
而抑制频谱泄露现象的方法也很简单-----对时域信号加适合的窗函数。原本取一段有限长的时域信号相当于对一段无限长的时域信号加了矩形窗。若截取的信号是非周期的,那么矩形窗造成的频谱泄露是最严重的,因为矩形窗的边界是一个突变的过程,使得信号在边界处会多出许多频率分量。而诸如汉明窗、泰勒窗,其边界的变化没有矩形窗来的突然,而是一个渐变过程,使得频谱泄露也就没那么严重。当然,不同的窗函数的频谱泄露的程度是不同的。以下为对上述非周期信号时域加泰勒窗的仿真结果:
观察发现,频谱泄露的现象得到了很好的抑制。
但是 ,不存在“没有弊端的方法”,任何有效的处理方法我们都需要思考其局限性以及带来的不利因素。那么加窗带来的不利因素是什么呢?
我们观察一下未加窗与加窗的频域图:
虽然加窗后,频谱泄露得到了有效抑制,但是也带来了另一个问题----信噪比的损失。这其实不难理解,当我们对原始时域信号做加窗处理后,时域各点的幅值几乎都受到了抑制。而FFT本质上是对离散各点的信号做相位补偿,并在各个频率点上做积累。而加窗抑制了原始信号的能量,那么势必会使得积累后的总能量降低,压低了信噪比。
这是我们应该注意的地方,若是在实际应用中,譬如雷达信号处理,如果其环境本身信噪比就低,那么就不应该做加窗处理,否则会使得目标无法通过之后的CFAR处理。