MATLAB小波分析理论基础例程集
项目介绍
本项目汇集了小波分析理论中的核心算法与典型应用例程,旨在帮助学习者直观理解小波变换的数学原理,并提供可直接复用的工程参考代码。项目完全基于MATLAB脚本编写,内容涵盖了一维信号处理(时频分析、去噪、压缩)与二维图像处理(分解、边缘检测)两大领域。
所有数据均在脚本内模拟生成,无需加载外部文件,实现了“开箱即用”的代码演示。
功能特性
本项目通过单一脚本 main.m 串联了以下五大核心功能模块:
- 一维非平稳信号模拟:构建包含基波、间歇性高频、局部突变及线性趋势的复杂信号。
- 连续小波变换 (CWT):演示信号的时频分析,展示时域与频域的局部化特性。
- 多分辨率分析 (MRA):基于Mallat算法实现多层分解,分离近似系数与细节系数。
- 小波阈值去噪:演示硬阈值与软阈值去噪策略,并计算信噪比 (SNR)。
- 压缩与特征提取:利用小波系数稀疏性进行压缩,并提取频带能量比作为特征。
- 二维图像处理:合成几何图像,演示二维小波分解及子带(水平、垂直、对角)特征。
系统要求
- MATLAB R2016b 或更高版本
- Wavelet Toolbox (必须安装,核心函数依赖于此工具箱)
使用方法
- 将
main.m 文件放置于MATLAB当前工作路径或任意文件夹中。 - 直接运行
main.m。 - 程序将依次执行各个模块,并在多个Figure窗口中输出可视化结果,同时在命令行窗口打印处理进度和误差分析数据。
---
代码实现逻辑详解
main.m 按照逻辑流程划分为六个主要部分,具体实现细节如下:
1. 数据模拟与生成
程序首先构建一个频率为1000Hz、时长2秒的一维非平稳信号。该信号由四个部分叠加而成:
- 低频基波:5Hz的正弦波,代表信号的主体趋势。
- 高频调制:50Hz的间歇性正弦波,仅存在于0.5秒至1.5秒之间,用于测试时频定位能力。
- 突变干扰:在特定时间点的人为突变脉冲,用于测试对奇异点的捕捉。
- 趋势项:随时间增长的线性斜坡。
此外,程序生成高斯白噪声并混入原始信号,用于后续的去噪算法验证。
2. 连续小波变换 (CWT) 时频分析
- 算法:采用复Morlet小波 (
cmor1.5-1.0) 对纯净信号进行变换。 - 尺度设置:设定尺度范围为1至64。
- 实现:通过
cwt 函数计算小波系数,若版本不兼容则通过辅助函数处理。 - 可视化:绘制时频分布图(系数模值图),横轴为时间,纵轴为尺度,颜色深浅代表能量强弱,直观展示了50Hz高频分量的出现起止时间和5Hz基波的持续性。
3. 多分辨率分析 (MRA)
- 小波基与层数:选用
db4 (Daubechies) 小波,分解层数为4层。 - 分解过程:使用
wavedec 函数将信号分解为近似系数 (Low Frequency) 和细节系数 (High Frequency)。 - 系数提取:
* 利用
appcoef 提取第4层近似系数 (A4),反映信号的低频概貌。
* 利用
detcoef 提取第1至4层的细节系数 (D1-D4)。D1包含最高频噪声和突变点,D4包含较低频细节。
- 重构验证:使用
waverec 将分解系数还原,计算重构误差以验证算法的无损性质。
4. 信号去噪与平滑
- 小波基切换:此处选用对称性更好的
sym8 小波。 - 噪声估计:基于Donoho的噪声估计算法,利用第一层细节系数 (CD1) 的中位数估计噪声标准差 ($sigma$)。
- 阈值选择:采用通用阈值公式 (Universal Threshold),即 $sigma sqrt{2 ln(N)}$。
- 阈值处理:
*
硬阈值:直接截断小于阈值的系数,保留边缘特征但可能产生吉布斯振荡。
*
软阈值:将系数向零收缩,结果更为平滑。
- 评估:分别计算含噪信号、硬阈值去噪后、软阈值去噪后的信噪比 (SNR) 进行对比。
5. 信号压缩与特征提取
- 稀疏化策略:对分解后的系数绝对值进行降序排列,仅保留能量最大的前5%系数,其余置零。
- 压缩重构:利用稀疏后的系数重构信号,展示小波在数据压缩中的潜力。
- 能量特征提取:计算各层分解系数(A4, D4, D3, D2, D1)的平方和能量,构建能量占比特征向量,这是信号识别中常用的特征提取手段。
6. 二维图像处理
- 图像合成:代码内部生成包含圆形、矩形和高斯噪声的合成图像(256x256像素),不依赖外部图片文件。
- 二维分解:使用
haar 小波进行单层二维离散小波变换 (dwt2)。 - 子带分析:
*
LL (近似分量):图像的低频轮廓。
*
LH (垂直细节):对水平边缘敏感。
*
HL (水平细节):对垂直边缘敏感。
*
HH (对角细节):对角线方向的高频特征。
- 简单处理:演示了对高频子带 (LH, HL, HH) 进行软阈值处理后的图像重构 (
idwt2)。
---
关键函数与算法说明
wavedec / waverec:一维信号的多层小波分解与重构核心函数。appcoef / detcoef:分别用于提取近似系数(低频)和细节系数(高频)。wcwt / cwt:用于计算连续小波变换系数(代码包含兼容性封装)。wthresh:执行阈值操作的关键函数,支持 'h' (hard) 和 's' (soft) 模式。dwt2 / idwt2:二维图像的小波分解与重构。calc_snr:辅助函数,用于量化去噪效果(dB计算)。
注意事项
- 代码中包含一个名为
cwt_legacy_wrapper 的辅助函数,用于处理不同MATLAB版本间 cwt 函数签名的差异,确保代码的兼容性。 - 所有绘图窗口均设置了特定名称,运行后请注意查看不同的Figure窗口以获取完整分析结果。