参数设置
重置
当 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 \text{最终 } |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}}$$
压缩:将细节系数中绝对值小于阈值的设为 0,可以减少非零系数而 MSE 只略微增大。由于 Haar 是正交基,系数空间的 MSE 等于信号空间的 MSE。
Haar 小波变换模拟器简介
🙋
小波和傅里叶变换有什么区别?看教科书还是搞不太明白。
🎓
简单来说,傅里叶只能告诉你"包含哪些频率",但不能告诉你"这个频率何时出现"。小波能同时看到时间和频率。Haar 是其中最简单的,只需要把相邻两个采样点相加除以 2(平均值),再相减除以 2(差值),仅此而已。在上面的模拟器里,把信号类型改成"2=频率扫描",你会发现第 1 级的细节系数在右半部分变大——这就说明"高频出现在后面",这是傅里叶做不到的。
🙋
那"分解级数"增加会怎样?我试了 L=6,最终近似系数(绿色)几乎是平的。
🎓
每增加一级,近似系数长度就减半。N=256、L=6 时,最终近似只有 256/64=4 个样本。分解级越高,分辨率越粗,只能看到信号的"大体趋势"。反过来,最上面的细节系数 d^(1) 有 128 个样本,捕捉最细微的高频变化。这种分层结构叫"多重分辨率分析"(MRA),就是把信号分解为"大体形状+细微变化+更细微的变化+……"。
🙋
压缩很有意思。阈值设到 0.1 时,重构 MSE 仍然很小,这是为什么?
🎓
这是"稀疏性"在起作用。真实信号通常由"少数大系数"和"大量小系数"组成。小系数设为 0 也损失不了多少信息。Haar 是正交基,所以系数空间的误差等于信号空间的误差(Parseval 定理)。试着把阈值从 0.0 滑到 0.3,非零系数数量会急剧下降,但 MSE 增长不快。这就是 JPEG 2000 压缩的原理所在。
🙋
我注意到,在信号类型 1(阶梯)下,把阈值调高后,重构(紫色)的边界变成了锯齿。这是什么?
🎓
这是 Haar 的弱点。Haar 基本身就是"阶梯函数",所以虽然擅长表示不连续点,但重构的波形容易出现阶梯状。对于光滑曲线(比如正弦波),Haar 重构会留下锯齿。为了解决这个问题,人们开发了 Daubechies (db4、db9/7) 这样更长的滤波器。它们的压缩效率和画质都比 Haar 好得多,但计算成本和设计复杂度也更高——这就是工程中的权衡。
常见问题
JPEG 2000 为什么用 Daubechies 而不是 Haar?
JPEG 2000 的有损压缩采用双正交 Daubechies(db9/7),无损用 db5/3。Haar 在逼近连续函数时效率低,重构误差容易表现为块状伪影,而 db9/7 有更多"消失矩",能用更少系数表示光滑信号。相同压缩率下,db9/7 的画质远超 Haar,这就是为什么 Haar 在图像标准中几乎不用。Haar 的主要用途是教学和极度资源受限的嵌入式差分编码。
Daubechies 和 Haar 怎么选?
边缘检测、阶梯函数分析、计算极端受限的场景用 Haar;图像压缩、音频处理、光滑信号特征提取用 Daubechies (db2, db4, db9/7) 或 Coiflet、Symlet。一般规则:"信号光滑用长滤波器,边缘多用短滤波器"。本工具对比信号类型 1(阶梯)和 0(正弦)的 Haar 重构,可以直观看到优缺点。
图像压缩具体怎么用?
二维图像用"可分离滤波",先对行应用小波,再对列应用小波。每级产生 LL(近似)、LH(水平细节)、HL(竖细节)、HH(对角细节)4 个子带,对 LL 递归分解。细节子带大多是小值,配合量化和算术编码实现高压缩。JPEG 2000 和 FBI 指纹数据库(WSQ)都用这个。
小波用于边缘检测有什么优点?
细节系数的绝对值就是该位置的局部变化量,峰值对应边缘。多层细节系数结合可区分噪声(仅在最高分辨率)和真实边缘(跨多个尺度一致)。Mallat-Zhong (1992) 的多尺度边缘表示是典范。比 Sobel、Canny 更稳健,用于医学影像、地震波分析、心电图等。
实际应用
图像压缩(JPEG 2000): 二维离散小波变换是下一代图像压缩的核心,相比 JPEG 的 DCT,原理上不产生块伪影,相同文件大小画质更自然流畅。医学影像存档、数字电影发行(DCP)、卫星图像传输等对画质要求高的领域标准采用。
音频和音乐压缩: MP3 用 MDCT,而小波对过渡音(如击打乐的起音)更敏感。钢琴发音瞬间、语音辅音这样的短时尖锐变化,小波能用少量系数精确表示。也用于音频去噪、音源分离、乐器识别。
地震波、脑波、心电图特征提取: 非平稳的生物信号和地震记录,傅里叶假设信号定常,效果不好,小波是首选。Haar 差分系数用于 P 波初动检测、心电图 R 波检测、癫痫发作前兆识别,广泛应用。不同尺度细节系数可分离噪声和真实特征。
机器学习特征和降维: CNN 流行前,小波系数作为输入特征在图像识别、文本分析中性能很好。现在在计算资源约束的场景,小波特征+轻量分类器仍是高效选择。用于指纹识别、人脸识别的预处理。
常见误解和注意事项
最常见误解:"小波是傅里叶的升级版,什么都能做得更好" 。实际上各有所长。如果只关心频率成分的精度(如纯正弦波的频率测量、谐振频率同定),傅里叶压倒性优势。小波强项是"何时何地出现什么频率",适合过渡现象和有局部特征的信号。用本工具对比信号类型 2(频率扫描),看各级细节在时间上如何变化,就能体会傅里叶捕捉不到的东西。
其次常见:"分解级数越高分辨率越好"这个误区 。实际上最终近似长度是 $N/2^L$,N=256、L=8 就只剩 1 个样本,只能看平均值。本工具 L 上限是 6,因为实用上"再分解也只是变粗"。实务中根据信号长度和目标频率带来决定 L,比如 1024 采样点、采样率 1 kHz 的信号,L=5 通常足够。
最后:阈值处理越强压缩率越高,但伴随信息损失 。本工具的 MSE 只是"数值平均误差",与人眼感知、人耳听觉不同。真实 JPEG 2000 和 MP3 用心理视觉、心理听觉模型进行非均匀量化,优先删除人感知不到的高频。而且阈值可用"软阈值"(减去阈值再取整),这就是 Donoho 的 WaveShrink 去噪。选对阈值方式和参数,才是小波应用的关键。