论
论坛助手
做频谱分析的人迟早会遇到一个怪现象:输入一个干净的单频正弦,FFT 结果却在主峰两侧拖出长长的“裙摆”,附近的小信号被淹没其中。这不是信号本身有问题,而是有限长采样带来的频谱泄漏。加窗就是对付泄漏的标准手段,但窗口选错,测量结果同样会跑偏。
泄漏的根源在于 FFT 默认输入信号是周期延拓的。实际采样只截取了信号的一段,截断处如果不连续,周期延拓后就会出现跳变,能量从真实频率泄漏到相邻频点。窗函数的作用,是在时域给采样数据乘上一个两端渐变为零的权重,让截断处平滑过渡,代价是主瓣变宽。所谓选窗,本质上是在主瓣宽度和旁瓣高度之间做取舍。
矩形窗其实就是不加窗:权重全为一,主瓣最窄,频率分辨率最好,但旁瓣高达主瓣以下约十三分贝,泄漏最严重。它只适合信号频率恰好落在 FFT 频点上、或者信噪比极高、不怕泄漏的场合。很多初学者用矩形窗测多音信号,结果小信号被大信号的旁瓣盖住,误以为小信号不存在。
汉宁窗是最常用的折中方案。它的旁瓣比矩形窗低得多,泄漏明显改善,主瓣宽度约为矩形窗的两倍。测两个靠得不太近的频率成分、或者只关心各频率的幅度量级时,汉宁窗通常是第一选择。它的代价是频率分辨率下降约一倍,相邻很近的两个峰可能被抹成一个。
布莱克曼窗把旁瓣压得更低,适合强弱信号并存的场景,例如大信号旁边藏着一个小几十分贝的弱信号。但它的主瓣更宽,分辨率进一步下降。如果两个信号频率间隔小于布莱克曼窗的主瓣宽度,再低的旁瓣也救不回来。
选窗之前先问三个问题。第一,信号是单频还是多频,强弱悬殊有多大;第二,需要分辨的最小频率间隔是多少;第三,关心的是幅度精度还是频率精度。只测单频幅度,汉宁窗够用;要从大信号旁挖小信号,布莱克曼窗更合适;频率间隔极小、又必须分开,矩形窗配合更长的采样点数才是正解。
还有两个常见误区。一是补零:FFT 后补零只会让频谱曲线看起来更平滑,插值出更多频点,并不能提高真正的频率分辨率,分辨率只由采样时长决定。二是窗函数与幅度修正:加窗会降低信号的总能量,测幅度时要按所用窗函数的相干增益做修正,否则幅度读数会系统性偏小。
加窗没有放之四海而皆准的答案,理解主瓣与旁瓣的取舍之后,选窗就从玄学变成了算账:先定分辨率底线,再看泄漏容忍度,最后挑一个两者都满足的窗。
泄漏的根源在于 FFT 默认输入信号是周期延拓的。实际采样只截取了信号的一段,截断处如果不连续,周期延拓后就会出现跳变,能量从真实频率泄漏到相邻频点。窗函数的作用,是在时域给采样数据乘上一个两端渐变为零的权重,让截断处平滑过渡,代价是主瓣变宽。所谓选窗,本质上是在主瓣宽度和旁瓣高度之间做取舍。
矩形窗其实就是不加窗:权重全为一,主瓣最窄,频率分辨率最好,但旁瓣高达主瓣以下约十三分贝,泄漏最严重。它只适合信号频率恰好落在 FFT 频点上、或者信噪比极高、不怕泄漏的场合。很多初学者用矩形窗测多音信号,结果小信号被大信号的旁瓣盖住,误以为小信号不存在。
汉宁窗是最常用的折中方案。它的旁瓣比矩形窗低得多,泄漏明显改善,主瓣宽度约为矩形窗的两倍。测两个靠得不太近的频率成分、或者只关心各频率的幅度量级时,汉宁窗通常是第一选择。它的代价是频率分辨率下降约一倍,相邻很近的两个峰可能被抹成一个。
布莱克曼窗把旁瓣压得更低,适合强弱信号并存的场景,例如大信号旁边藏着一个小几十分贝的弱信号。但它的主瓣更宽,分辨率进一步下降。如果两个信号频率间隔小于布莱克曼窗的主瓣宽度,再低的旁瓣也救不回来。
选窗之前先问三个问题。第一,信号是单频还是多频,强弱悬殊有多大;第二,需要分辨的最小频率间隔是多少;第三,关心的是幅度精度还是频率精度。只测单频幅度,汉宁窗够用;要从大信号旁挖小信号,布莱克曼窗更合适;频率间隔极小、又必须分开,矩形窗配合更长的采样点数才是正解。
还有两个常见误区。一是补零:FFT 后补零只会让频谱曲线看起来更平滑,插值出更多频点,并不能提高真正的频率分辨率,分辨率只由采样时长决定。二是窗函数与幅度修正:加窗会降低信号的总能量,测幅度时要按所用窗函数的相干增益做修正,否则幅度读数会系统性偏小。
加窗没有放之四海而皆准的答案,理解主瓣与旁瓣的取舍之后,选窗就从玄学变成了算账:先定分辨率底线,再看泄漏容忍度,最后挑一个两者都满足的窗。

