汉宁窗在 FFT频谱分析中的应用验证
本文分析了汉宁窗在 FFT 频谱分析中的应用,重点探讨了其在处理非同步信号时的影响。实验以 AD7606B 采样 49.8Hz 正弦波为例,比较了加窗前后的频谱特性。结果表明,汉宁窗有效抑制了旁瓣泄漏,使噪声基底降低 70% 以上,同时也引发了主瓣展宽效应,导致相邻频点出现能量分布变化。文中通过数学计算和代码实现,验证了汉宁窗的补偿效果,并提供了动态补偿算法优化建议。最后,总结了汉宁窗的工程应用场景,为继电保护设备的 FFT 处理提供参考。
一、测试条件与信号参数
1.1 核心参数配置
参数 |
值 |
说明 |
|---|---|---|
| 信号类型 | 纯净正弦波 | 继保仪输出 |
| 信号频率 | 49.8Hz | 偏离工频 50Hz |
| 采样点数 | 256 点 | 固定窗口长度 |
| 采样时间 | 20ms | 等效采样率 12.8kHz |
| 频率分辨率 | 50Hz | Δf=1/0.02s=50Hz |
| 窗函数类型 | 汉宁窗 | 对称余弦窗 |
1.2 改进的汉宁窗代码
|
|
二、关键数据对比(前 10 个频点)
2.1 频谱数据对照表
| 频点 | 加窗后幅值 |
原始幅值 |
频率成分 |
现象说明 |
|---|---|---|---|---|
| 1 | 2.403354 | 2.403959 | 50Hz | 主频点幅值保持稳定 |
| 2 | 1.202682 | 0.009593 | 100Hz | 主瓣展宽效应 |
| 3 | 0.001550 | 0.005021 | 150Hz | 旁瓣泄漏抑制 98.9% |
| 4 | 0.000861 | 0.003416 | 200Hz | 噪声基底降低 74.8% |
| 5 | 0.000526 | 0.002653 | 250Hz | 典型旁瓣抑制效果 |
| 6 | 0.000396 | 0.002161 | 300Hz | 连续衰减趋势 |
| 7 | 0.000214 | 0.001815 | 350Hz | 频谱纯净度显著提升 |
| 8 | 0.000220 | 0.001617 | 400Hz | 加窗后数据更接近真实噪声 |
| 9 | 0.000136 | 0.001443 | 450Hz | 无谐波特征 |
| 10 | 0.000133 | 0.001254 | 500Hz | 高频成分有效抑制 |
三、关键现象解释
3.1 主瓣展宽效应(频点 2 异常)
测试信号没有添加谐波,就是49.8Hz的正弦波信号,但加窗后再频点2(100Hz)的位置出现幅值为1.202,主要原因如下:
-
频率偏移:49.8Hz 未对齐 50Hz 频点 FFT 计算时,通常假设信号的频率与采样点数匹配(即整数倍的频率分辨率),这样 FFT 计算出的频谱会集中在一个清晰的频点上。 但是,在本实验中,测试信号的实际频率为49.8Hz,而 FFT 分辨率的基本单位是 Δf = 1 / 采样时间 = 50Hz,因此 49.8Hz 不能严格对齐 FFT 计算出的 50Hz 频点,导致信号能量分布到多个频点,而不是完全集中在 50Hz 处。这种情况称为 频谱泄漏(Spectral Leakage)。
-
主瓣覆盖:汉宁窗主瓣宽度 = 3 × Δf = 150Hz 窗函数的作用是减少频谱泄漏,但也会导致主瓣展宽。对于 汉宁窗(Hann Window),其主瓣宽度可以近似计算为: -$$ \text{主瓣宽度} = 3 \times \Delta f = 3 \times 50\text{Hz} = 150\text{Hz} $$ 这意味着,原本应该只集中在 50Hz 附近的能量,实际上在 0 ~ 150Hz 之间都能检测到。这导致 FFT 计算时,在 100Hz(频点2) 处仍然能观测到较高的幅值。
-
能量分配:主瓣能量按 sinc 函数分布 汉宁窗的频谱特性决定了其主瓣的能量分布遵循 sinc 函数(sin(x)/x),即信号能量不会严格集中在 50Hz,而是按照 sinc 函数的衰减特性分布到周围频率上。
这就意味着,虽然原始信号是 49.8Hz 的纯净正弦波,但由于窗函数的影响,FFT 计算出来的能量会以 sinc 形状 扩展到多个频点,特别是在 100Hz 处形成次峰值,导致我们看到 1.202 的幅值。
数学验证:
|
|
3.2 旁瓣抑制效果
|
|
结论:实测旁瓣衰减 -10.2dB,接近汉宁窗理论值 -31dB/dec 的衰减特性。
四、工程应用建议
4.1 加窗决策矩阵
场景 |
推荐操作 |
说明 |
|---|---|---|
| 频率严格同步 | 可不加窗 | 避免主瓣展宽干扰 |
| 频率偏移 > 0.5Hz | 必须加窗 | 抑制旁瓣泄漏 |
| 存在背景噪声 | 必须加窗 | 降低噪声基底 70%+ |
| 检测 100Hz 谐波 | 需主瓣补偿算法 | 区分真实谐波与泄漏 |
4.2 代码优化方向
1. 动态补偿算法
|
|
五、结论
通过49.8Hz非同步信号的对比实验,可得出以下结论:
-
1.汉宁窗的核心价值:
- 使噪声基底从 0.001482 降至 0.000317,提升谐波检测灵敏度 2.3 倍
- 主瓣展宽效应导致 100Hz 处出现 1.202 的伪信号,需通过阈值算法排除
-
2.工程实践指导:
- 在继电保护装置中,当频率偏移超过0.2Hz时必须启用加窗处理
- 对100Hz成分的检测阈值建议设置为1.8×A₁₀₀ₕ理论值
-
3.改进验证方法:
- 注入1%的100Hz谐波(幅值≈0.024),观察加窗后频点2幅值是否超过1.802
- 调整采样时间为24ms(Δf≈41.67Hz),验证能量分布规律
最终建议:在电力系统频率监测场景中,汉宁窗配合动态补偿算法是平衡计算复杂度与检测精度的最优方案。