基于硬阈值的小波变换信号去噪系统
项目介绍
本项目是一个基于小波变换的信号处理系统,专注于利用硬阈值算法对含有加性高斯白噪声的非平稳信号进行去噪。通过对信号进行多分辨率分析,系统能够在不同频率尺度上分离噪声与有用信号分量,特别适用于处理具有瞬态脉冲和频率突变特性的非平稳信号。
功能特性
- 复杂信号仿真:能够合成包含多频率成分(5Hz 和 20Hz 正弦波拼接)及高斯瞬态脉冲的复合信号。
- 自适应阈值计算:系统利用第一层小波细节系数,结合中值绝对偏差(MAD)方法自动估计噪声强度,并据此计算全局统一阈值(Universal Threshold)。
- 非线性硬阈值处理:通过硬阈值算子对小波系数进行加工,有效滤除高频随机噪声,同时最大限度地保留信号的边缘和突变信息。
- 性能量化评估:系统内置信噪比(SNR)和均方误差(MSE)计算功能,直观展示去噪前后的信号质量提升。
- 多层级可视化:提供原始信号、含噪信号、各级细节系数分布以及重构去噪信号的对比视图。
实现逻辑
系统的执行流程严格遵循以下技术步骤:
- 参数初始化与信号生成:
- 设置采样频率为 1000Hz,定义 1 秒的时间向量。
- 构造原始信号:前半秒为 5Hz 低频波,后半秒为 20Hz 高频波,并在 0.3s 处添加一个高斯包络脉冲。
- 注入强度为 0.2 的加性高斯白噪声。
- 离散小波分解:
- 选用 Daubechies 4 (db4) 小波基。
- 对含噪信号执行 4 层离散小波分解 (DWT),获得近似系数 (A4) 和各层细节系数 (D1, D2, D3, D4)。
- 阈值计算逻辑:
- 提取第一层细节系数 $D1$,使用公式 $sigma = text{median}(|D1|) / 0.6745$ 稳健地估算噪声标准差。
- 应用全局阈值公式 $T = sigma sqrt{2 ln(n)}$($n$ 为信号长度),确定滤波门限。
- 硬阈值滤波处理:
- 遍历各级细节系数。对于每一层系数,若其绝对值小于计算出的阈值 $T$,则将其强制置为零;若大于或等于 $T$,则保持原系数数值不变。该步骤跳过近似系数,仅处理细节分量。
- 信号重构:
- 利用处理后的各层细节系数和原始近似系数,执行逆离散小波变换 (IDWT) 重构得到去噪后的时间序列信号。
- 结果指标统计与展示:
- 计算去噪前后的 SNR 增益以及最终的 MSE。
- 绘制三联图:第一幅展示信号加噪全貌,第二幅展示处理后各层细节系数的堆叠分布,第三幅对比原始纯净信号与去噪重构信号。
关键算法与算法细节
- 小波基 (db4):具有良好的正则性和支撑性,非常适合捕捉信号中的突变特征。
- MAD 噪声估计:相比直接计算标准差,基于中值的估计法对信号本身的细节更具鲁棒性,不易受有用信号高频部分的影响。
- 硬阈值逻辑:$y = x cdot (|x| ge T)$。该算法在处理中不会改变大于阈值的系数,因此重构出的信号在边缘处更清晰,优于软阈值法在边缘处的平滑效应。
系统要求
- 软件环境:MATLAB (建议 R2016b 或更新版本)。
- 工具箱需求:需安装 MATLAB Wavelet Toolbox (小波工具箱) 以调用相关滤波扩展函数。
使用方法
- 在 MATLAB 中打开主程序文件。
- 直接运行脚本,程序将自动模拟信号采集、加噪及去噪全过程。
- 运行结束后,在 MATLAB 命令行窗口可查阅小波基、分解层数、计算阈值、SNR 提升值及 MSE 指标。
- 在弹出的图形窗口中观察去噪效果及各尺度下信号分量的分布情况。