前言

今天介绍一下 FFT 的窗函数,案例及图示来自 Hideo Okawara 的教程,并结合了 TI 的教程加以补充说明。


FFT 的局限

FFT 提供了信号在频域维度的观察,但 FFT 有一个隐含假设,即,信号在时域无限延伸。然而,实际采样却是有限的时间片段。所以,需要通过 “Coherent Sampling”(相干采样)逼近理论条件,不然就会产生偏差,这是 FFT 的局限。

Coherent Sampling 对信号频率、采样频率与采样点数之间存在要求。用文字表述就是:信号频率 F、采样频率 Fs 与 采样点数 N,满足 F = m * Fs / N 的条件,其中 m 为整数,这样能确保时间片段内包含了 m 为整数倍的信号周期。

Hideo Okawara 的文中(参考资料[1])举了一个例子,以 Fs 采样 512 个点,在这个时间片段内有两种情况:情况 (1) 恰好采集到 23 个完整的正弦波周期,下图中用绿线表示;情况 (2) 采集了 23.3 个周期,用黄线表示。前者满足 Coherent Sampling,后者不满足。仔细看的话,在这个时间片段内 23.3 个周期的信号存在首尾跳变。

图1 满足与不满足 Coherent Sampling 的时域情况

图1 满足与不满足 Coherent Sampling 的时域情况,来源[1]

然后,对这两种情况进行 FFT,结果如下:

图2 满足与不满足 Coherent Sampling 的频域情况

图2 满足与不满足 Coherent Sampling 的频域情况,来源[1]

可以看到,情况 (1) 满足 Coherent Sampling ,信号频谱频谱很干净,有很多清晰线条,峰值出现在 bin = 23 的位置;情况 (2) 不满足 Coherent Sampling, 信号频谱则很拖尾,虽然在 bin = 23(23.3)的位置上也有峰值,但是谐波或杂散分量被淹没在 FFT 底噪之中,无法辨识。

这是因为 23.3 个周期的信号首尾跳变,会在 FFT 中产生正弦信号原本不存在的频率分量,频谱能量更为复杂,且向其他 bin 扩散,致使频谱曲线看上去更宽、底噪更多,这种现象称为 “Spectral Leakage”(频谱泄漏)。

为了避免 Spectral Leakage,如果做不到 Coherent Sampling,那就需要通过“窗函数”来抑制该现象。


窗函数及加窗效果

窗函数(Window function)在首尾两端趋于零或极小值,中间呈现某种特殊形状。当将这种函数与信号相乘时,相当于时域波形加权,可以消除信号首尾跳变,使其在周期延伸时变得连续。

Hideo Okawara 举例了 Hanning(更多称 Hann,中文“汉宁”)、Flat_Top 与 Hamming 等三种窗函数的形态:

图3 典型窗函数

图3 典型窗函数,来源[1]

当 Hann 窗函数施加在上述 23.3 个周期的信号后,再做 FFT 的频谱如下:

图4 Hanning 窗函数之后的 FFT

图4 Hanning 窗函数之后的 FFT,来源[1]

如图可见,与不加窗函数相比,频谱(红色)无明显拖尾,虽然不及 23 个周期的信号频谱(蓝色)那么丝丝分明,但也能清晰看见谐波和杂散的“包络”。

不过,窗函数毕竟改变了 FFT 的原始信号,波形的功率受到影响,导致能量幅度表述不准确。在图中特别指出了 Hann 窗函数的峰值比 23 个周期的信号要小。

随后,文中又展示了 Flat_Top 窗函数的加窗效果:

图5 Flat_Top 窗函数之后的 FFT

图5 Flat_Top 窗函数之后的 FFT,来源[1]

如图可见,Flat_Top 窗函数将信号的能量幅度得到修正,非常接近理想情况,但是包络要比 Hanning 窗函数更加宽一些。

于是就说到窗函数的特性,这种特性从频域上更能体现出来。


窗函数的频域特性

窗函数在频域上表现为连续频谱,由一个主瓣(Main lobe)和若干旁瓣(Side lobes)组成。

旁瓣的增益反映了窗函数对信号峰值频率附近成分的影响,即,更低的旁瓣可以更大程度减少 FFT 中的泄漏,但是更低的旁瓣也意味着更宽的主瓣,后者则会影响 FFT 频谱分辨率。

TI 的文中(参考资料[2])中列举了一些窗函数的频域特性,如 Hanning(等同 Hann)、Hamming、Backman-Harris、No Window(即不加窗)等:

图6 典型窗函数频谱特性

图6 典型窗函数频谱特性,来源[2]

我们着重看一下 Hann 与 Hamming。

前文图 3 在 Hideo Okawara 的文中已经展现了这两个窗函数的时域特性,如果仔细看图 3,可以发现 Hann 在时域两端完全归零(紫色),可完全消除信号首尾的不连续性;而 Hamming 两端并未完全归零(蓝色),所以信号仍存在轻微的不连续性。

这种差异反应在图 6 中,Hamming 对最邻近旁瓣的抑制效果优于 Hann,但对更远旁瓣的抑制效果较弱,也就是旁瓣衰减不快。

TI 在文中说 Four-Term(4阶) Blackman-Harris 是优秀的窗函数,旁瓣抑制能力可达 90 dB,主瓣宽度适中;Seven-Term(7阶) Blackman-Harris 则有极高的动态范围,旁瓣抑制能力更强,代价是主瓣进一步展宽,主要在单音正弦信号测试精密 ADC 时最常用。

上述是窗函数本身的频域特性,那么,窗函数又是怎么影响信号的频谱的?

我们知道时域两个信号相乘,对应频域上的卷积。由于原始信号的频谱表现为若干峰值(如图4、图5),加窗后信号的频谱等于窗函数自身的频谱平移至这些峰值所在的位置。然后,通过旁瓣影响泄露,通过主瓣影响分辨率。


总结

TI 在文中总结了一些窗函数的特性及应用场景:

图7 典型窗函数应用场景

图7 典型窗函数应用场景,来源[2]

图8 典型窗函数带宽与增益

图8 典型窗函数带宽与增益,来源[2]

Hann、Hamming、Blackman-Harris 是众多 FFT 分析软件、示波器中自带的窗函数,落到具体应用:

  • 信号中有远离目标频率的干扰噪声,选择旁瓣衰减快的窗函数;
  • 信号中有干扰噪声且靠近目标频率,选择最大旁瓣低的窗函数;
  • 信号中目标频率区域有多个邻近信号,为提升分辨率,选择主瓣窄的窗函数;

最后,如果是为了抑制频谱泄露等通用场景,那就优先尝试 Hann 窗函数,它适合绝大多数情况。


参考资料

  1. Hideo Okawara_Mixed Signal Lecture Series_ DSP-Based Testing Fundamentals 11 - Windowing: https://www3.advantest.com/documents/11348/57115a59-cbf4-4ec0-bb93-28b35e408bfd
  2. TI Precision Labs – ADCs - Fast Fourier Transforms (FFTs) and Windowing: https://www.ti.com/content/dam/videos/external-videos/ja-jp/2/3816841626001/5834902778001.mp4/subassets/adcs-fast-fourier-transforms-and-windowing-presentation-quiz.pdf

相关前文


欢迎关注我的微信公众号“疯狂的运放”,及时收到最新的推文。