第 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$ | -13 | 6 | 1.00 |
| Hann | $8\pi/N$ | -31 | 18 | 0.50 |
| Hamming | $8\pi/N$ | -41 | 6 | 0.54 |
| Blackman | $12\pi/N$ | -57 | 18 | 0.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$ 为归一化过渡带宽度。
| |
3.7 小结
| 概念 | 关键要点 |
|---|---|
| 频谱泄漏 | 有限截断 → 时域突变 → 频域旁瓣 |
| 核心矛盾 | 窄主瓣(高分辨率)↔ 低旁瓣(低泄漏) |
| 矩形窗 | 最窄主瓣,最差旁瓣 (-13 dB) |
| Hann/Hamming | 通用推荐,旁瓣 -31~-41 dB |
| Blackman | 极低旁瓣 (-57 dB),代价是宽主瓣 |
| Kaiser | 唯一可调窗,$\beta$ 连续权衡 |
| 平顶 | 幅值精度最高,分辨率最低 |
| 相干增益 | 加窗后需修正幅度 |
| Scalloping loss | 信号在 bin 之间时的幅度误差 |