嗯?这么好的问题!

叫什么张总,叫怼总!

其实这个问题非常的有用,做工程,科研的谁没有见过上面 FFT,窗函数啥的,但是来龙去脉倒是散步在各种文章的角落里面,没有人来一篇综述一样的文章。

首先 FFT 真的是是一种非常非常牛逼的算法,说一天一夜也说不完

但是它最牛逼还是第一个 F=Fast,就是快,快就以为着效率高。那为什么会有这么多窗函数,其实源自 频域指标之间的“矛盾”,不同窗函数就是在这些矛盾中找到不同的折中。不可能“三全其美”:主瓣窄 / 旁瓣低 / 幅度准 → 无法同时满足。

里面的图的颜色是模仿 LT 的风格

窗函数的基本作用

在做 FFT 频谱分析 时,如果信号频率不是整数 bin,就会发生 谱泄漏(能量扩散到所有 bin)。 加窗函数的目的就是:

降低旁瓣(sidelobe) → 抑制泄漏,把能量限制在主瓣附近。

改善幅度估计 → 减少 scalloping loss,保证幅度更准确。

控制 ENBW(噪声带宽) → 影响噪声地板,决定噪声测量的准确性。

影响主瓣宽度 → 决定频率分辨率(能不能区分两条很近的谱线)。

窗函数之间的矛盾(关键指标)

主瓣宽度 vs 旁瓣高度

  1. 主瓣窄 → 分辨率高,但旁瓣就会高(Rect 窗就是极端)。
  2. 主瓣宽 → 泄漏抑制强(BH4/Nuttall),但分辨率下降。

幅度精度 vs 噪声带宽

  1. Flat-top 窗让主瓣“平”,幅度几乎无误差,但 ENBW 超大(噪声地板高)。
  2. Hann 窗 ENBW 小,噪声地板低,但 scalloping loss 仍有 −1.4 dB。

ENBW vs 动态范围

  1. ENBW 小(Rect、Hann) → SNR 测量更准,但旁瓣高会污染动态范围。
  2. ENBW 大(BH4、Flat-top) → 动态范围好,但噪声被“放大”。

因此需要“很多种窗”

不同窗函数就是在 主瓣宽度 / 旁瓣高度 / ENBW / 幅度精度 之间做取舍:

  1. Rect:分辨率最好,但泄漏严重,只能在相干采样下用。
  2. Hann/Hamming:折中,常用于 ENOB/SNR 测试。
  3. Blackman/Blackman-Harris/Nuttall:牺牲分辨率,换取超低旁瓣,适合做 SFDR/THD。
  4. Flat-top:幅度精度最优,适合校准。
  5. Kaiser:加了一个参数 β,可以在“分辨率–旁瓣–ENBW”之间灵活调整。

换句话说: 没有一种窗能在所有场景下最优,所以才会有这么多选择;可以把“窗函数”理解成“不同滤波器设计”(FIR 的):

Rect = 硬切 → 最锐利但振铃(泄漏)

Hann = 温和过渡 → 常用折中

BH4/Nuttall = 高级滤波器 → 抑制振铃,代价是带宽更宽

Flat-top = 为幅度测量专门优化

Kaiser = 可调设计,用参数 β 决定“锐利还是平滑”

其中在频谱分析里,最核心的矛盾就是:

主瓣宽度(决定分辨率) → 越窄越能分辨相邻谱线,但泄漏容易扩散;

首旁瓣高度(决定泄漏抑制) → 越低越能看清弱小谐波,但主瓣就会变宽。

如果把“主瓣宽度”画在横轴,“旁瓣高度(dB)”画在纵轴,不同窗函数就在图上落在不同的区域。

越往右 → 主瓣越宽(分辨率降低)越往下 → 旁瓣越低(泄漏抑制越强)

数学推导(离散窗化 FFT 的核心结论)

信号、窗口与 DFT

采样长度 ,采样频率 ,设输入为单一余弦

加窗  后做  点 DFT:

把余弦写成指数并整理,可得(令  为“归一化频率(以 bin 为单位)”):

其中

窗口的离散频响

当  时,第一项占主导,因此谱泄漏的形状完全由  决定:矩形窗对应的  是 Dirichlet 核,旁瓣高;多项式余弦窗(Hann/Blackman/Blackman-Harris/Nuttall…)把旁瓣压低、但主瓣变宽。

一致性增益(Coherent Gain, CG)与幅度还原

若 相干采样 为整数),主瓣峰值位于 ,有

定义

于是幅度无偏还原公式(单纯看峰值)是

当 非相干采样)时,能量分散到邻近 bin(泄漏),单 bin 幅度会低估。工程上常配合峰值插值(如三点抛物/Quinn/IpDFT)改善  和 

ENBW(等效噪声带宽)与处理增益

把窗口看作一个 FIR:对白噪声,一个 FFT bin 的期望噪声功率与窗口平方和成正比。结论:

换算到 Hz:

同样,处理增益(噪声地板相对时域的下降量):

所以:ENBW 越小,噪声地板越低;但通常伴随旁瓣较高或主瓣较窄/宽的权衡。

主瓣宽度、旁瓣与分辨率/动态范围

频率分辨率:主瓣越窄、越容易分开相近的两根谱线(以“零点到零点”或“3 dB 宽度”衡量)。

动态范围/泄漏抑制:首旁瓣越低、越不“污染”远处频点(计算 THD/SFDR/SNR 时更干净)。

典型趋势:Rect 主瓣最窄但旁瓣高;Hann/Blackman 逐步降低旁瓣、主瓣也随之变宽;Blackman-Harris 4-term / Nuttall 4-term 旁瓣可达 −90 dB 级别;Flat-top 强调平顶以减小“半 bin 频偏的幅度起伏”。

Scalloping Loss(波峰起伏)与插值

当正弦频率恰好落在两个 bin 的正中间),若只取“最近整数 bin 的峰值 + CG 还原”,会产生最糟糕的幅度低估,称 scalloping loss。理想幅度 0 dB,对不同窗会出现 −3.9 dB(Rect)到约 −0.01…−0.5 dB(Flat-top/高阶窗)的差异。

插值(如三点抛物)可以明显缓解,但 Flat-top 天生让主瓣更“平”,因此对幅度测量最友好

在默认非相干采样场景:

幅度最准确(做幅度/增益标定)Flat-top(5-term)。scalloping 极小,插值后 MAPE 最低;缺点是主瓣很宽、ENBW 大(噪声地板抬高、近线可分性变差)。

通用 SNR/ENOB 测试Hann 是业界常用折中(ENBW≈1.5 bin、旁瓣约 −31 dB)。

要极低泄漏/做 THD、SFDRBlackman-Harris 4-term 或 Nuttall 4-term(首旁瓣 ~ −90 dB 级),代价是更宽主瓣、略大 ENBW。

只要分辨率(两线很近)且“严格相干采样”Rect(或加上整周采样)。这时没有泄漏,主瓣最窄;非相干则最不稳。

希望可调旁瓣/主瓣折中Kaiser(调 ),例如  可得 ~ −60 dB 旁瓣。

其中要估计频率、又要抑制泄漏 → BH4 / Nuttall4(插值配合);如果相邻谐波很近(电机/逆变器) → 先考虑更长记录 ;若  受限,偏向主瓣较窄的窗(Hann/Hamming),并结合谱峰拟合/多谱融合。

ADC采样做FFT 的时候选哪种窗函数?(YUNSWJ 解读)

来看看仿真结果:

窗口指标4096 点:包含

STDOUT/STDERR
窗口指标(4096 点)
         Window       CG  ENBW (bins)  Mainlobe 3dB width (bins)  First sidelobe (dB)  Scalloping @0.5 bin (dB)
           Rect 1.000000     1.000000                   0.453125             0.000000                 -3.925724
        Hamming 0.539888     1.363065                   0.656250             0.000000                 -1.751259
           Hann 0.499878     1.500366                   0.734375             0.000000                 -1.422916
  Kaiser(β=8.6) 0.420698     1.721792                   0.828125             0.000000                 -1.108702
       Blackman 0.419897     1.727179                   0.828125             0.000000                 -1.098338
     BH(4-term) 0.358662     2.004842                   0.953125             0.000000                 -0.825168
Nuttall(4-term) 0.355681     2.021726                   0.968750             0.000000                 -0.811357
Flattop(5-term) 0.999756     3.771085                   1.875000            -0.000725                 -0.015598

一致性增益 CG

ENBW(以 bin 为单位)

3 dB 主瓣宽度(bin)

首旁瓣电平(dB) (这里还有一个文章)

0.5 bin 频偏时的 scalloping loss(dB)

Monte Carlo(200 次随机频偏)三点抛物插值的幅度 MAPE

典型地,会看到(示意):

Monte Carlo:随机频偏幅度估计平均相对误差
         Window  MAPE (parabolic, %)
Flattop(5-term)             0.689884
     BH(4-term)             1.100685
Nuttall(4-term)             1.101500
  Kaiser(β=8.6)             1.676467
       Blackman             1.730524
           Hann             2.477651
        Hamming             3.729344
           Rect            13.479280
image-20250905172504903

条形图显示了不同窗在随机频偏时的平均相对误差(MAPE),能看出 Flat-top 最稳。

泄漏演示图:同一非相干正弦(同幅度、同频偏),不同窗的谱泄漏“裙摆”可比;展示“真实信号在 FFT 里会被污染成什么样”。

各窗的频响(dB)图:前 30 个 bin 范围,直观看主瓣宽度与旁瓣高度:展示“窗函数自身的滤波特性”,告诉你它在分辨率、泄漏抑制上的取舍。

image-20250905172124628
image-20250905172132319
image-20250905172142924
image-20250905172150093
image-20250905172157832
image-20250905172205513
image-20250905172223812
image-20250905172245710

Rect 窗 → 泄漏最严重,“裙摆”很宽,强信号会掩盖邻近弱信号。

Hann/Hamming → 泄漏明显减轻,裙摆下降到 −30 dB~−40 dB。

BH/Nuttall/Flattop → 泄漏抑制最强,裙摆快速衰减到 −80 dB 甚至 −100 dB,能看清弱谐波。

image-20250905172307324
image-20250905172318229
image-20250905172324792
image-20250905172334642
image-20250905172341226
image-20250905172349580
image-20250905172357610
image-20250905172403778

上面的图是展示每个窗函数本身的频谱特性:

主瓣宽度(决定分辨率,能否分开相近频率)。

首旁瓣高度(决定泄漏抑制能力,动态范围能到多少)。

其中主瓣越窄 → 频率分辨率越好。

如果旁瓣越低 → 谱泄漏越小,动态范围越大。

LT2500 的

上面的图可以对比不同窗的“指标性能”,指导实际应用中怎么选:

做 SNR/ENOB → 选 Hann(主瓣适中,噪声地板低)。

做 THD/SFDR → 选 BH4/Nuttall(旁瓣最低)。

做 幅度精度 → 选 Flattop(scalloping 最小)。

窗的幅度还原(单峰)

再配合抛物插值得到更好的

三点抛物插值(幅度谱)设 ,则

插值后频率估计 ,幅度用  代入上式做还原。

ENBW(bin)

SNR/THD 评估的“排除带”:做总功率积分时,需在基波及其  个 bin(视窗主瓣宽度而定)设置防护带再积分噪声;否则把主瓣“裙摆”当成噪声会高估噪声。

总结一下相干采样就用矩形窗(峰值与功率最“干净”、ENBW=1)

条件:,并尽可能整数周期采样 + 去直流偏置。

非相干且需要幅度准确 → Flat-top + 抛物(或 Quinn)插值。

典型幅度误差 < 1%,对 THD/增益标定友善。

如果做 ENOB/SNR → 多用 Hann(折中);若谐波/邻峰干扰,升到 BH4/Nuttall4;记得用 ENBW 修正噪声谱密度;对主瓣设置足够排除带

如果要区分很近的两条线 → 首先加长记录 N(真正的分辨率是 );若 N 受限,再用主瓣较窄的窗(Hann/Hamming/甚至 Rect,但注意泄漏)。

类别
窗函数
特点
用途
分辨率优先
Rect
主瓣最窄,但旁瓣高(≈−13 dB);scalloping loss 大
仅限相干采样,或要分辨极近谱线时用
折中型
Hann / Hamming
主瓣适中,旁瓣 −30 ~ −40 dB;ENBW 小
常规 ENOB/SNR 测试;工业常用
低泄漏型
Blackman / BH(4-term) / Nuttall(4-term)
旁瓣极低(−60 ~ −90 dB),动态范围好,但主瓣宽,ENBW 大
THD、SFDR 测试,强弱信号共存场景
幅度精度型
Flattop(5-term)
主瓣超宽,ENBW 最大,但 scalloping loss ≈ 0 dB
增益/幅度标定,幅度测量最准确
可调型
Kaiser(β)
参数 β 决定旁瓣和主瓣折中
灵活调节,需要控制旁瓣高度的场合

https://zh./wiki/%E5%BF%AB%E9%80%9F%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2