参数设置
当 N 不是 2 的幂次时,会取最近的 2 的幂并给出提示。
系数金字塔与重构
蓝=原信号 x[n] / 绿=最终近似系数 a^(L) / 红=各层细节系数 d^(L) / 紫=阈值处理后的重构 x_rec
理论与主要公式
Haar 小波是最简单的正交小波,由相邻两个样本的平均与差定义。
一级分解:近似系数 a 与细节系数 d,为保正交性以 $\sqrt{2}$ 归一化:
$$a_i = \frac{x_{2i} + x_{2i+1}}{\sqrt{2}}, \quad d_i = \frac{x_{2i} - x_{2i+1}}{\sqrt{2}}$$
对 N 个样本递归施加 L 级,每级样本数减半,最终近似系数长度为 $N/2^L$:
$$\text{系数总数} = N, \qquad |a^{(L)}| = N / 2^{L}$$
逆变换对称地重构信号:
$$x_{2i} = \frac{a_i + d_i}{\sqrt{2}}, \quad x_{2i+1} = \frac{a_i - d_i}{\sqrt{2}}$$
压缩:把绝对值小于阈值的细节系数置零,非零系数数减少,MSE 仅略微上升。由于 Haar 是正交基,能量守恒,系数空间的 MSE 等于信号空间的 MSE。
什么是 Haar 小波变换模拟器
🙋
小波变换和傅里叶变换到底有什么不同?我看教科书总是搞不清楚。
🎓
简单说,傅里叶变换告诉你「信号里有哪些频率」,但不告诉你「这些频率是什么时候出现的」。小波则可以同时看时间和频率。Haar 是其中最简单的:把相邻的两个样本相加除以 sqrt(2)(平均)、相减除以 sqrt(2)(差),就这样。把上方模拟器的信号类型改为「2=Chirp」试试,你会发现第 1 级的细节系数在右半部分变大——这表示「高频在信号的后半才出现」,这是傅里叶变换直接看不出来的。
🙋
原来如此。那提高「分解层数」会怎样?我把 L 调到 6,最终近似系数(绿)几乎平了。
🎓
每多一级,近似系数长度就减半。N=256、L=6 时最终近似只有 256/64=4 个样本。越粗略,越只剩下信号的「类似直流的整体形状」。同时最上面的细节 d^(1) 还有 128 个样本,捕捉最精细的高频变化。这就是「多分辨率分析(MRA)」的来历——把信号分层为「粗略形状 + 精细变化 + 更精细变化 + ……」。
🙋
压缩部分也很有趣。阈值设为 0.1 时重构 MSE 还是很小,背后发生了什么?
🎓
好问题。自然信号通常分为「少量大的系数」和「大量小的系数」。把小的置零损失很少——这就是「稀疏性」。Haar 是正交基,所以系数空间的误差正好等于信号空间的误差(帕塞瓦尔定理)。把阈值滑块从 0.0 拖到 0.3 试试,非零系数数量急剧减少,而 MSE 几乎不增。JPEG 2000 用这个原理压缩图像,背后的直觉就是这样。
🙋
信号类型 1 的阶跃信号,提高阈值后重构(紫)在跳变点附近有锯齿,这是什么?
🎓
这是 Haar 的弱点。Haar 基本身就是阶梯函数,处理不连续点很在行,但重构波形也容易呈阶梯状;而对正弦这种平滑曲线,Haar 会留下锯齿。为了解决这个问题,人们开发了更长的 Daubechies (db4、db9/7) 小波,压缩效率和画质都远胜 Haar,但计算成本和滤波器设计的难度也增加——典型的工程权衡。
常见问题
JPEG 2000 有损压缩使用 Daubechies 双正交 db9/7,无损使用 db5/3。Haar 难以逼近连续函数,平坦区域会出现可见的块状重构误差;而 db9/7 消失矩多,可用极少系数表达平滑信号。在同样压缩率下 db9/7 画质明显更好,因此图像标准里几乎不用 Haar。Haar 的舞台是教学和资源极度受限的嵌入式设备的差分编码。
边缘检测、阶跃函数分析以及对速度要求极高的嵌入式应用适合 Haar;图像压缩、音频分析、平滑信号的特征提取则选择 Daubechies (db2, db4, db9/7)、Coiflet 或 Symlet。一条经验法则是「信号平滑则用长滤波器、边缘多则用短滤波器」。在本工具里对比信号类型 1(阶跃)与 0(正弦)的 Haar 重构,可以同时体会其长处与短板。
对 2D 图像,使用「2D 离散小波变换」沿行和列分别施加可分离滤波器。每一级产生 LL(近似)、LH(水平细节)、HL(垂直细节)、HH(对角细节)四个子带,然后对 LL 递归地继续变换。由于细节子带的多数系数较小,结合量化和算术编码即可实现高压缩率。JPEG 2000 和 FBI 指纹数据库(WSQ 压缩)是代表性应用。
细节系数的绝对值对应该位置的局部信号变化量,峰值即边缘。组合多层细节系数即可区分噪声(只在最高分辨率出现)与真实边缘(多个尺度上一致出现)。Mallat 与 Zhong (1992) 的多尺度边缘表示是这一思路的代表。在需要比 Sobel 或 Canny 更稳健检测的医学影像、地震分析、心电图处理等领域被广泛使用。
实际应用
图像压缩(JPEG 2000):2D 离散小波变换是替代 JPEG 的 DCT 的下一代图像压缩核心。原理上不产生块状失真,在相同文件大小下画质比 JPEG 更平滑自然。在画质要求严苛的医学影像存档、数字电影分发(DCP)、卫星影像传输等领域被采纳为标准。
音频与音乐的压缩与分析:相比 MP3 使用的 MDCT,小波对瞬态声(打击乐起音等)更有优势。能用很少的系数准确表达钢琴的发声瞬间或语音辅音之类的短时尖锐变化,也被用于降噪、声源分离、乐器识别等任务。
地震波、脑电、心电的特征提取:非平稳的生理信号或地震波形与「假设平稳」的傅里叶分析不兼容,小波是首选方案。Haar 的差分系数广泛用于地震 P 波的初动检测、心电图 R 波检测、癫痫发作前兆识别等。逐尺度观察细节系数可有效分离噪声与真实特征。
机器学习的特征与降维:在 CNN 普及之前,小波系数作为输入特征曾在图像识别和文本分析中取得优异成绩。如今在资源受限的嵌入式设备上,小波特征 + 轻量分类器仍是高效选择。指纹识别、人脸识别的预处理也有应用例。
常见误解与注意事项
最常见的误解是认为「小波是傅里叶变换的替代品,总是更优」。实际上两者各有所长:对平稳信号需要精确频谱时(正弦纯度测量、共振频率辨识等),傅里叶绝对占优。小波的强项是能同时看「何时出现了什么频率」,最适合瞬态现象与具有局部特征的信号。在本工具里选信号类型 2(Chirp),观察细节系数随时间向右逐级变大,就能感受到傅里叶单独无法表达的时间信息。
其次常见的误解是「分解层数越多分辨率越好」。实际上最终近似系数长度为 $N/2^L$,N=256、L=8 时只剩 1 个样本,整段信号只能看到平均值。本工具将 L 上限设为 6 是一个实用准则:再增加就只会更粗略。实务中需要根据信号长度和关注的频段决定 L,例如 1024 个样本、采样率 1 kHz 时常 L=5 就足够。
最后请记住,阈值越大压缩率越高,但一定伴随信息损失。本工具的 MSE 只是数值上的均方误差,与感知图像质量或音质并不相同。真正的 JPEG 2000、MP3 使用基于心理视觉/听觉模型的非均匀量化,优先削去人不易察觉的高频成分。此外把硬阈值改为「软阈值」(对超过阈值的值减去阈值),可用于去噪(Donoho 的 WaveShrink)。根据用途选择合适的阈值方式,正是小波应用的关键。