第 3 章:窗函数 / Window Functions

3.1 为什么需要窗函数

DFT 处理的是有限长序列——即从无限长信号中"截取"一段。这个截断操作等价于在时域乘以一个矩形窗 (Rectangular Window)

$$x_w[n] = x[n] \cdot w_{rect}[n]$$

时域乘积对应频域卷积。矩形窗的频谱是一个 sinc 函数,其旁瓣 (Sidelobe) 导致信号能量"泄漏"到相邻频率 bin——这就是频谱泄漏 (Spectral Leakage)

核心矛盾:理想的频谱分析需要无限长观测,工程中只能截取有限段。窗函数是在有限观测条件下,控制频谱泄漏程度的关键工具。

flowchart LR
    A["无限长信号 x[n]"] -->|"× w[n]"| B["有限长截断"]
    B -->|"DFT"| C["频谱 X_w[k]"]
    D["窗频谱 W(ω)"] -->|"频域卷积"| C
    style A fill:#1565C0,color:#fff
    style B fill:#E65100,color:#fff
    style C fill:#C62828,color:#fff
    style D fill:#5E35B1,color:#fff

3.2 频谱泄漏的本质

设信号包含一个频率为 $f_0$ 的正弦分量。若 $f_0$ 恰好对齐某个 DFT 频率 bin($f_0 = k \cdot f_s/N$),则该分量精确出现在 $X[k]$ 中。

但如果 $f_0$ 落在两个 bin 之间,矩形窗的 sinc 频谱旁瓣会将能量扩散到所有频率 bin,幅度估计出现偏差。

根本原因:矩形窗在时域两端存在突变(从 0 跳到 1,再从 1 跳回 0),这种不连续性产生了丰富的高频分量(即 sinc 的旁瓣)。

解决思路:让窗函数的两端平滑过渡到零,减少不连续性 → 旁瓣降低,但主瓣变宽。


3.3 窗函数的评价指标

3.3.1 主瓣宽度 (Mainlobe Width)

主瓣越窄,频率分辨率越高——能区分更接近的两个频率分量。通常以 -3 dB 宽度归一化宽度(以 bin 为单位) 衡量。

3.3.2 旁瓣电平 (Sidelobe Level)

最高旁瓣相对于主瓣峰值的衰减量,单位 dB。旁瓣越低,频谱泄漏越小——能检测到强信号附近的弱信号。

3.3.3 旁瓣衰减速率 (Sidelobe Roll-off Rate)

旁瓣随频率远离主瓣的衰减速度,单位 dB/octave 或 dB/decade。

3.3.4 核心矛盾

窄主瓣 ↔ 低旁瓣,二者不可兼得。窗函数设计本质是在这对矛盾中寻找适合具体应用的平衡点。

指标高分辨率需求低泄漏需求
主瓣宽度越窄越好可接受较宽
旁瓣电平可接受较高越低越好

3.4 常见窗函数详解

3.4.1 矩形窗 (Rectangular Window)

$$w[n] = 1, \quad 0 \leq n \leq N-1$$

  • 主瓣宽度:$4\pi/N$(最窄)
  • 最高旁瓣:-13 dB
  • 特点:频率分辨率最高,但泄漏最严重

3.4.2 汉宁窗 (Hanning / Hann Window)

$$w[n] = 0.5 - 0.5\cos!\left(\frac{2\pi n}{N-1}\right), \quad 0 \leq n \leq N-1$$

  • 主瓣宽度:$8\pi/N$(矩形窗的 2 倍)
  • 最高旁瓣:-31 dB
  • 特点:通用首选,两端平滑过渡到零

3.4.3 汉明窗 (Hamming Window)

$$w[n] = 0.54 - 0.46\cos!\left(\frac{2\pi n}{N-1}\right)$$

  • 主瓣宽度:$8\pi/N$
  • 最高旁瓣:-41 dB
  • 特点:旁瓣低于 Hann,但不到零(最小值 ≈ 0.08),适合语音处理

3.4.4 布莱克曼窗 (Blackman Window)

$$w[n] = 0.42 - 0.5\cos!\left(\frac{2\pi n}{N-1}\right) + 0.08\cos!\left(\frac{4\pi n}{N-1}\right)$$

  • 主瓣宽度:$12\pi/N$(矩形窗的 3 倍)
  • 最高旁瓣:-57 dB
  • 特点:极低旁瓣,但分辨率损失大

3.4.5 凯撒窗 (Kaiser Window)

$$w[n] = \frac{I_0!\left(\beta\sqrt{1 - \left(\frac{2n}{N-1} - 1\right)^2}\right)}{I_0(\beta)}, \quad 0 \leq n \leq N-1$$

其中 $I_0(\cdot)$ 是零阶修正贝塞尔函数

  • 可调参数 $\beta$ 控制旁瓣衰减与主瓣宽度的权衡:
    • $\beta = 0$:退化为矩形窗
    • $\beta \approx 6$:接近 Hann 窗
    • $\beta \approx 8.6$:接近 Blackman 窗
    • $\beta > 10$:极低旁瓣

工程优势:凯撒窗是唯一可以连续调节旁瓣/主瓣权衡的窗函数,在滤波器设计中广泛应用。

3.4.6 平顶窗 (Flat-Top Window)

$$w[n] = a_0 - a_1\cos!\left(\frac{2\pi n}{N-1}\right) + a_2\cos!\left(\frac{4\pi n}{N-1}\right) - a_3\cos!\left(\frac{6\pi n}{N-1}\right) + a_4\cos!\left(\frac{8\pi n}{N-1}\right)$$

其中 $a_0=0.2156$, $a_1=0.4160$, $a_2=0.2781$, $a_3=0.0836$, $a_4=0.0069$。

  • 主瓣宽度:非常宽(~$20\pi/N$)
  • 特点:通带最平坦,幅值估计精度最高
  • 适用:校准和精确幅值测量

3.4.7 窗函数对比表

窗函数主瓣宽度最高旁瓣 (dB)衰减速率 (dB/oct)相干增益
矩形$4\pi/N$-1361.00
Hann$8\pi/N$-31180.50
Hamming$8\pi/N$-4160.54
Blackman$12\pi/N$-57180.42
Kaiser ($\beta=8$)$12\pi/N$-58~6~0.40
平顶$20\pi/N$-44~6~0.22

3.5 窗函数选择指南

频谱分析场景

应用需求推荐窗函数理由
通用频谱分析Hann均衡性能,旁瓣足够低
高动态范围(强+弱信号)Blackman / Kaiser($\beta>8$)极低旁瓣,避免弱信号被泄漏掩盖
精确幅值测量平顶最平坦通带,幅值偏差最小
频率精确对齐 bin矩形无窗即最优,零泄漏
未知信号探索Hann → Kaiser先用 Hann 快速查看,再用 Kaiser 调参细化

滤波器设计场景

应用需求推荐窗函数理由
标准低通/带通Kaiser可调 $\beta$ 精确控制阻带衰减
简单 FIR 设计Hamming经典选择,旁瓣足够低
高性能滤波器Blackman最小通带波纹

3.6 工程应用

3.6.1 加窗频谱分析流程

flowchart TB
    A["原始信号 x[n]"] --> B["截取 N 点"]
    B --> C["乘以窗函数 w[n]"]
    C --> D["可选:补零"]
    D --> E["FFT"]
    E --> F["计算 |X_w[k]|"]
    F --> G["幅度修正
除以相干增益"] G --> H["输出频谱"] style A fill:#1565C0,color:#fff style C fill:#E65100,color:#fff style E fill:#5E35B1,color:#fff style H fill:#228B22,color:#fff

3.6.2 幅度修正:相干增益

窗函数对信号施加了加权平均,等效降低了信号幅度。相干增益 (Coherent Gain) 定义为:

$$C_g = \frac{1}{N}\sum_{n=0}^{N-1} w[n]$$

修正后的幅度 = $\frac{|X_w[k]|}{N \cdot C_g}$

3.6.3 Scalloping Loss

当信号频率恰好落在两个 DFT bin 正中间时,幅度估计的最大误差称为 scalloping loss:

  • 矩形窗:-3.92 dB
  • Hann 窗:-1.42 dB
  • 平顶窗:-0.01 dB(几乎无损失)

3.6.4 凯撒窗参数选择

给定所需的阻带衰减 $A_s$(dB),Kaiser 提出了经验公式:

$$\beta = \begin{cases} 0.1102(A_s - 8.7) & A_s > 50 \ 0.5842(A_s - 21)^{0.4} + 0.07886(A_s - 21) & 21 \leq A_s \leq 50 \ 0 & A_s < 21 \end{cases}$$

所需滤波器长度:

$$N \geq \frac{A_s - 7.95}{2.285 \cdot \Delta\omega}$$

其中 $\Delta\omega$ 为归一化过渡带宽度。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
伪代码:选择凯撒窗参数
Input:  阻带衰减 A_s (dB), 过渡带宽度 Δω
Output: β, N

if A_s > 50:
    β = 0.1102 * (A_s - 8.7)
else if A_s >= 21:
    β = 0.5842 * (A_s - 21)^0.4 + 0.07886 * (A_s - 21)
else:
    β = 0

N = ceil((A_s - 7.95) / (2.285 * Δω))
return β, N

3.7 小结

概念关键要点
频谱泄漏有限截断 → 时域突变 → 频域旁瓣
核心矛盾窄主瓣(高分辨率)↔ 低旁瓣(低泄漏)
矩形窗最窄主瓣,最差旁瓣 (-13 dB)
Hann/Hamming通用推荐,旁瓣 -31~-41 dB
Blackman极低旁瓣 (-57 dB),代价是宽主瓣
Kaiser唯一可调窗,$\beta$ 连续权衡
平顶幅值精度最高,分辨率最低
相干增益加窗后需修正幅度
Scalloping loss信号在 bin 之间时的幅度误差