Python中加窗与未加窗FFT频谱泄漏差异及N=1600阈值成因分析
FFT加窗效果反转现象成因
该现象本质是整周期采样与非整周期采样的特性差异导致的,具体原理如下:
- 原构造信号包含50Hz、80Hz两个单频分量,采样率为800Hz,当N=1600时,频率分辨率为
Δf = fs/N = 800/1600 = 0.5Hz,50Hz和80Hz均为0.5Hz的整数倍,刚好满足整周期采样条件:采集到的N个信号点刚好覆盖两个单频分量的整数个周期,时域截断边缘不存在信号跳变,此时不加窗的FFT本身就不会产生频谱泄漏,旁瓣天然为0。 - 窗函数的核心作用是缓解非整周期采样带来的截断泄漏,但本身存在固有副作用:会压低主瓣幅度、展宽主瓣宽度、降低频谱幅度测量精度。当处于整周期采样、无天然泄漏的场景下,加窗的收益完全消失,只剩下副作用,所以表现为加窗后的效果反而不如不加窗。
- N<1600时,频率分辨率
Δf = 800/N > 0.5Hz,50Hz和80Hz无法被Δf整除,属于非整周期采样,截断边缘存在信号跳变,天然存在频谱泄漏,此时加窗压低旁瓣的收益远大于主瓣展宽的副作用,因此符合官方示例展示的加窗优化效果。 - 观测到的“分界阈值与采样参数无关”属于场景错觉,阈值本质和测试用的信号频率、采样率强相关:如果换用其他频率的信号、或修改采样率,分界阈值会同步变化,当前测试场景刚好在N=1600时满足整周期采样条件,才会出现固定分界。
对应效果对比:

内容的提问来源于stack exchange,提问作者Kuravi H
相关产品推荐
相关产品推荐

