引言
Fourier 分析把信号分解为不同频率正弦波的叠加,是信号处理、偏微分方程与概率论共同的基石。但它有一个根本局限:正弦基在时间上无限延展,频率信息完全确定的同时丢失了全部时间定位信息——对于调频信号、瞬态冲击这类「频谱随时间变化」的对象,全局频谱无法回答「什么时刻出现什么频率」。小波分析正是为突破这一局限而发展出的时频局部化工具。本文从 Fourier 变换出发,经由不确定性原理与窗口 Fourier 变换,引出连续小波变换、多分辨分析与 Mallat 快速算法,并用 Haar 小波实现一个完整的信号去噪演示。
理论基础
Fourier 变换及其局限
对 $f \in L^1(\mathbb{R}) cap L^2(\mathbb{R})$,Fourier 变换与逆变换为
$$\hat{f}(\xi) = \int_{-\infty}^{\infty} f(x), e^{-2\pi i x \xi}, dx, \qquad f(x) = \int_{-\infty}^{\infty} \hat{f}(\xi), e^{2\pi i x \xi}, d\xi$$
Parseval 等式 $|f|_2 = |\hat{f}|_2$ 表明变换保持能量,频谱是信号的等价表示。但基函数 $e^{2\pi i x\xi}$ 的模恒为 1,每个频率成分都「铺满」整个时间轴。
不确定性原理
时频不可兼得是数学定理而非工程折中。记 $\sigma_t^2$、$\sigma_\omega^2$ 为信号及其频谱的二阶矩(能量中心化的时间、频率宽度),则
$$\sigma_t, \sigma_\omega \ge \frac{1}{2}$$
等号仅当信号为 Gauss 函数时取得。它限定了任何时频表示的「分辨率单元」面积下限,窗口 Fourier 与小波变换只是以不同方式在这个下限内分配时间与频率分辨率。
窗口 Fourier 与连续小波变换
窗口 Fourier 变换(STFT)用固定窗 $g$ 截取信号再作 Fourier 分析:$V_g f(b, \xi) = \int f(t)\overline{g(t-b)}e^{-2\pi i t\xi}dt$。窗宽一旦选定,所有频率共用同一时间分辨率。连续小波变换改用一族伸缩平移的母小波 $\psi$(要求满足容许条件 $\int \psi, dt = 0$,即零均值振荡):
$$W_f(a, b) = \frac{1}{\sqrt{|a|}} \int_{-\infty}^{\infty} f(t), \overline{\psi!\left(\frac{t - b}{a}\right)}, dt$$
尺度 $a$ 小时窗口窄、分辨高频瞬态;尺度大时窗口宽、分辨低频慢变成分——时频分辨率随频率自适应分配,这是小波区别于 STFT 的本质。
多分辨分析与 Mallat 算法
多分辨分析(MRA)是 $L^2(\mathbb{R})$ 的一列嵌套闭子空间 $\cdots \subset V_{-1} \subset V_0 \subset V_1 \subset \cdots$,满足 $f(t) \in V_j iff f(2t) \in V_{j+1}$,且 $V_0$ 由尺度函数 $\varphi$ 的整数平移张成。记 $W_j$ 为 $V_j$ 在 $V_{j+1}$ 中的正交补,则 $L^2 = \bigoplus_j W_j$,小波 $\psi$ 的伸缩平移构成各 $W_j$ 的标准正交基。尺度函数与小波满足双尺度方程 $\varphi(t) = \sqrt{2}\sum_k h_k \varphi(2t-k)$、$\psi(t) = \sqrt{2}\sum_k g_k \varphi(2t-k)$,系数 ${h_k}$、${g_k}$ 构成一对共轭镜像滤波器。Mallat 算法表明:离散小波变换(DWT)可用低通滤波 + 二抽取、高通滤波 + 二抽取的塔式结构实现,每层复杂度 $\mathcal{O}(N)$,总复杂度优于 FFT 的 $\mathcal{O}(N\log N)$。
数值方法与实现
下面用纯 NumPy 实现 Haar 小波的多层 DWT/逆变换,并演示软阈值去噪:小波系数中信号能量集中于少数大幅值系数,噪声则均匀散布于小幅值系数,阈值收缩即可在保留突变的同时压制噪声。
import numpy as np
def haar_dwt(x):
"""单层 Haar 分解: (近似, 细节)"""
a = (x[0::2] + x[1::2]) / np.sqrt(2.0)
d = (x[0::2] - x[1::2]) / np.sqrt(2.0)
return a, d
def haar_idwt(a, d):
x = np.empty(a.size + d.size)
x[0::2] = (a + d) / np.sqrt(2.0)
x[1::2] = (a - d) / np.sqrt(2.0)
return x
def wavedec(x, level):
coeffs, a = [], x.copy()
for _ in range(level):
a, d = haar_dwt(a)
coeffs.append(d)
return a, coeffs
def waverec(a, coeffs):
for d in reversed(coeffs):
a = haar_idwt(a, d)
return a
rng = np.random.default_rng(1)
N = 1024
t = np.linspace(0, 1, N, endpoint=False)
sig = np.sin(2 * np.pi * 5 * t) + 0.5 * np.sign(np.sin(2 * np.pi * 2 * t)) # 光滑+方波
noisy = sig + 0.4 * rng.standard_normal(N)
a, ds = wavedec(noisy, 4)
ds_thr = [np.sign(d) * np.maximum(np.abs(d) - 0.35, 0.0) for d in ds] # 软阈值
den = waverec(a, ds_thr)
print(f"去噪前 RMSE = {np.sqrt(np.mean((noisy - sig)**2)):.4f}")
print(f"去噪后 RMSE = {np.sqrt(np.mean((den - sig)**2)):.4f}")
含噪信号 RMSE 约 0.4,软阈值处理后明显下降,且方波跳变沿保持锐利——这正是 Fourier 低通滤波做不到的(截断高频会在跳变处产生 Gibbs 振荡并抹平边缘)。
应用案例分析
JPEG2000 标准用 CDF 9/7 双正交小波取代 JPEG 的 DCT 块变换:小波基的多分辨支撑避免了大压缩比下的方块效应,且天然支持渐进传输与感兴趣区域编码。旋转机械故障诊断中,轴承局部缺陷激起的周期性瞬态冲击在频谱上只是宽频噪声,而小波包分解能在特定频带内检出冲击间隔,提取故障特征频率。地震勘探信号处理中,Morlet 小波变换用于刻画各层位反射波到达时刻的瞬时频率,是储层识别的标准工具。下表总结三种时频分析工具的特性:
| 特性 | Fourier 变换 | 窗口 Fourier (STFT) | 小波变换 |
|---|---|---|---|
| 基函数 | 无限长正弦 | 加窗正弦(固定窗) | 伸缩平移小波 |
| 时间分辨率 | 无 | 固定 | 高频高、低频低(自适应) |
| 频率分辨率 | 无限 | 固定 | 低频高、高频低 |
| 适合信号 | 平稳周期 | 缓变非平稳 | 瞬态、突变、分形 |
| 快速算法复杂度 | $\mathcal{O}(N\log N)$ | $\mathcal{O}(N\log N)$ | $\mathcal{O}(N)$ |
结论与展望
Fourier 分析给出信号的全局频率肖像,小波分析则以自适应时频分辨率刻画局部奇异性,二者互补而非替代。值得进一步关注的方向包括:第二代小波(lifting scheme,支持非均匀采样与整数到整数变换)、小波散射网络(对形变稳定的特征表示,为深度网络提供可解释的几何先验),以及随机微分方程小波展开在量化金融中的应用。
发表回复