斯坦福大学 Wavelab 小波分析工具箱 (Wavelab850) 仿真实现
项目简介
本项目是基于斯坦福大学 David Donoho 和 Iain Johnstone 教授团队开发的经典 Wavelab850 工具箱的核心功能仿真实现。Wavelab 被誉为学术界小波分析领域的权威代码库,本项目通过 MATLAB 脚本复现了其核心算法,旨在展示时频分析、信号处理、图像压缩和统计估计方面的关键技术。
代码通过一个高度集成的脚本,模拟了正交小波变换、小波包分析、Donoho 阈值去噪以及匹配追踪(Matching Pursuit)稀疏表示等高级功能。
功能特性
本项目在单一脚本中实现了以下核心数学工具和算法:
- 正交小波变换体系:实现了基于 Mallat 算法的一维 (
FWT_PO) 和二维 (FWT2_PO) 正交小波变换及其逆变换。 - 经典去噪算法:内置了 Donoho 团队提出的 VisuShrink 策略,支持软阈值 (
SoftThresh) 和硬阈值 (HardThresh) 处理,用于非平稳信号的噪声抑制。 - 信号生成库:复现了 Wavelab 中经典的测试信号生成器,包括
Blocks(分段常数)、Doppler(变频信号)和 HeaviSine(含跳变正弦)。 - 小波包分析:实现了全树结构的分解算法,用于精细的时频能量分析。
- 稀疏表示与追踪:包含匹配追踪(Matching Pursuit)算法,结合 Gabor 过完备字典进行信号的稀疏分解。
使用方法
- 启动程序:直接运行
main.m 函数。 - 执行流程:程序将自动清理环境,并依次执行四个主要演示模块。
- 结果展示:程序会生成四个独立的图形窗口,分别展示去噪效果、小波包能量谱、稀疏追踪系数以及二维图像的小波系数。
仿真演示详解 (Main Script)
main.m 包含四个主要的演示部分,全面展示了工具箱的实际应用能力:
演示 1:基础小波变换与 Donoho 阈值去噪
- 信号源:生成长度为 1024 的经典
Blocks 信号,并叠加高斯白噪声(Sigma=1)。 - 变换核心:使用
Symmlet 8 滤波器(Daubechies Symmlet 8 阶)进行 4 层正交小波分解。 - 去噪策略:采用通用阈值(Universal Threshold, $sigma sqrt{2log(N)}$)进行软阈值处理,保留了粗尺度的低频系数。
- 结果:通过逆变换重构信号,并计算信噪比(SNR),直观对比原始信号、含噪信号与去噪后的重构信号。
演示 2:小波包全树分解分析
- 信号源:使用
Doppler 信号,该信号频率随时间剧烈变化。 - 分析方法:执行深度为 4 的小波包分解 (
WP_Decomp),生成完整的系数树。 - 可视化:统计并绘制最后一层(第 4 层)所有节点(频带)的能量分布直方图,展示信号在不同频段的能量集中特性。
演示 3:匹配追踪 (Matching Pursuit) 稀疏分解
- 信号源:生成长度为 256 的
HeaviSine 信号。 - 字典构建:创建一个包含多频率、多相位 Gabor 原子和 Dirac 脉冲的简化过完备字典。
- 算法执行:运行迭代次数为 20 次的匹配追踪算法,逐步提取与信号残差相关性最强的原子。
- 可视化:展示原始信号、迭代结束后的残差信号以及前 20 个被选中的稀疏系数(Stem图)。
演示 4:二维图像小波分解
- 数据源:合成一个
Zone Plate 图像(同心圆波纹),模拟复杂的纹理特征。 - 算法:调用二维正交小波变换 (
FWT2_PO),采用行列分离变换法。 - 处理与显示:对变换后的系数矩阵进行对数变换(Log Scale)以增强显示效果,并抑制低频部分亮度,清晰展示高频细节系数的空间分布。
核心算法与实现细节
代码内部实现了一套自包含的函数库,无需依赖 MATLAB 官方小波工具箱:
1. 信号与滤波器
- MakeSignal: 依据 Wavelab 标准公式生成测试信号。已归一化信号标准差。
- MakeONFilter: 构造正交镜像滤波器(QMF)。硬编码了
Symmlet 8 的系数,能够提供比 Haar 小波更平滑的基函数。
2. 变换内核
- DownDyad / UpDyad: 实现了加权下采样和上采样卷积。
* 利用
conv 函数进行卷积操作。
* 通过周期延拓(Wrap-around)处理边界问题,模拟 Wavelab 的 Periodized Orthogonal (PO) 模式。
*
DownDyad: 分解步骤,输出低频近似系数(Beta)和高频细节系数(Alpha)。
*
UpDyad: 重构步骤,利用对偶滤波器进行插值重建。
- FWT_PO / IWT_PO: 迭代调用 Dyad 核心,实现多尺度金字塔分解与重构。数据存储结构前半部分为低频,后半部分为高频。
3. 阈值与分析
- SoftThresh: 实现 $y = text{sign}(x)(|x| - t)_+$ 逻辑,将小于阈值的系数置零,大于阈值的系数向零收缩。
- WP_Decomp: 递归构建小波包树。不同于普通小波变换仅分解低频部分,该函数对高频和低频部分均进行分解,存储于 Cell 数组结构中。
- MatchingPursuit: 实现了贪婪迭代逻辑。在每一步寻找与当前残差内积最大的原子,更新系数并剥离信号成分。
系统要求
- MATLAB: 任意版本(推荐 R2016b 及以上以获得更好的图形支持)。
- 工具箱依赖: 本项目为纯算法实现,不依赖 MATLAB 的 Wavelet Toolbox 即可运行。