基于小波变换模极大值的信号奇异性检测与重构
项目简介
本项目实现了一套基于小波变换模极大值(WTMM)理论的时间序列信号处理系统。系统集成了信号生成、连续小波变换、模极大值提取、奇异点定位以及基于稀疏模极大值的信号迭代重构算法。该方案利用小波变换的多尺度聚焦特性,能够有效地在强噪声背景下识别信号的突变特征(如阶跃、尖峰),并利用Mallat-Zhong交替投影算法的思想从稀疏的特征点恢复原始信号。
功能特性
- 仿真信号生成:能够生成包含平滑正弦分量、阶跃突变和尖峰奇异点的合成信号,并叠加高斯白噪声以模拟真实环境。
- 连续小波变换 (CWT):基于频域(FFT)实现的高效连续小波变换,采用高斯一阶导数作为小波基函数。
- 模极大值检测 (WTMM):自动搜索小波系数在时间轴上的局部极大值,并构建跨尺度的脊线分布,提取信号的关键特征。
- 奇异性检测:利用不同尺度下模极大值的能量分布,定位信号的奇异点(及边缘位置)。
- 迭代信号重构:实现基于交替投影法的信号重构算法,仅利用部分尺度下的模极大值信息恢复原始信号,具有显著的去噪和特征保留能力。
- 多维可视化:提供包含原始信号对比、CWT时频图、模极大值脊线图、奇异点检测与收敛曲线的综合结果展示。
详细功能实现与算法逻辑
本项目主要代码逻辑按以下流程执行,涵盖了从数据输入到分析重构的全过程:
1. 信号模拟与预处理
系统首先构建一个长度为1024点的测试信号。信号主体由正弦波构成,并在特定时间区间叠加了阶跃变化(HeaviSine风格)以及瞬时尖峰(模拟强奇异点)。随后,为了测试算法的鲁棒性,系统在信号中加入了固定随机种子的加性高斯白噪声。
2. 高效连续小波变换
系统自定义了小波变换函数,采用
高斯函数的一阶导数作为小波基。为了提高计算效率,算法没有在时域进行卷积,而是利用卷积定理在
频率域完成计算:
- 构建对应尺度的频域小波滤波器。
- 将信号的频谱与小波滤波器频谱相乘。
- 通过逆傅里叶变换获得时域小波系数。
- 分析采用了精细的连续尺度序列(对数刻度间隔0.2),以便获得高分辨率的时频特征。
3. 模极大值搜索
核心算法模块负责从小波系数中提取模极大值:
- 计算小波系数的模(绝对值)。
- 在每一行(即每个尺度)上进行局部极值判断,寻找显著的大于左右相邻点的系数。
- 引入自适应阈值过滤机制,剔除由背景噪声引起的幅度极小的伪极大值,生成掩膜矩阵。
4. 奇异性分析与定位
利用小波变换在不同尺度下对奇异性响应的差异进行检测。算法主要关注小尺度范围内的模极大值能量:
- 聚合前几个精细尺度的模极大值能量。
- 通过峰值搜索算法定位能量最集中的时间点,这些点对应于信号中的阶跃边缘和尖峰位置。
- 该方法利用了奇异点的高频分量在精细尺度下不衰减(或衰减较慢)的Lipschitz特性。
5. 基于交替投影的信号重构
这是本系统的核心难点实现,采用了
Mallat-Zhong重构算法的变体,使用二进尺度(Dyadic Scales)进行迭代处理:
- 初始化:以零信号或粗略估计作为起点。
- 迭代过程(包含两个关键投影步骤):
1.
逆投影:基于当前的系数估计,利用最小二乘意义下的频域逆变换公式(伪逆算子)重建时域信号。
2.
正投影与约束:对重建信号再次进行小波变换,在已知的模极大值位置强制替换为原始观测值(硬约束),而在非极大值位置保留当前演化值,使其满足再生核希尔伯特空间(RKHS)的约束。
- 幅度校正:由于使用近似逆变换算子,重构结束后通过线性拟合对信号的幅度和偏置进行最终校正。
6. 结果可视化
系统运行结束后会生成包含6个子图的综合分析窗口:
- 输入信号:展示原始纯净信号与加噪后的信号。
- CWT系数图:以热力图形式展示尺度-时间的能量分布。
- 模极大值分布:仅绘制提取出的极大值点,展示了著名的“脊线”结构。
- 奇异点检测:在小尺度系数背景上标记出自动检测到的奇异点位置。
- 收敛曲线:显示重构过程中RMSE(均方根误差)随迭代次数下降的趋势。
- 重构结果:将迭代重构后的信号与原始无噪信号进行对比,直观展示去噪和边缘保持效果。
主要函数解析
- main: 主控逻辑,负责参数定义、流程调度以及最终绘图。
- my_cwt: 实现频域内的高斯一阶导数连续小波变换,处理多尺度卷积。
- find_modulus_maxima: 在时频平面上搜索局部极大值,并应用阈值去噪。
- detect_singularities: 基于小尺度下的能量聚集特征,识别信号突变点。
- mallat_zhong_reconstruction: 执行迭代重构循环,管理正反变换及约束施加。
- inverse_cwt_projection: 基于最小二乘原理,实现从多尺度小波系数回归到时域信号的近似逆变换。
使用方法
- 确保MATLAB环境已安装并配置好信号处理工具箱(部分基础函数依赖)。
- 直接运行主脚本。
- 程序将自动输出处理进度的日志信息,并在处理完成后弹出可视化结果窗口。
系统要求
- MATLAB R2016b 或更高版本。
- 建议安装 Signal Processing Toolbox(用于
findpeaks 等辅助函数)。