基于MATLAB的3次B样条小波构建与信号分析系统
项目介绍
本项目是一个在MATLAB环境下开发的数值计算与信号处理系统,专注于3次(Cubic)B样条小波的数学构造、双正交滤波器组的设计以及基于Mallat算法的非平稳信号处理。项目不仅实现了从底层数学定义到波形可视化的完整流程,还构建了具备完善重构性质(Perfect Reconstruction)的多尺度分析框架。该系统为理解高阶样条小波的平滑性、对称性及其在信号去噪和特征提取中的应用提供了标准范例。
主要功能特性
- 非平稳测试信号生成:能够合成包含低频正弦、高频调制分量、突变脉冲以及高斯白噪声的复合信号,用于全面测试小波变换的时频局部化能力。
- 数学基函数建模:基于3次多项式的分段定义,精确计算并绘制3次B样条尺度函数(Scaling Function)和小波函数(Wavelet Function)的时域波形。
- 双正交滤波器设计:内置了针对Cubic B-spline优化的双正交(Biorthogonal)滤波器组系数(Lo_R, Hi_R, Lo_D, Hi_D),并进行了能量归一化处理。
- 多尺度信号分解:实现了经典的Mallat算法,支持对一维信号进行指定层数(Level=3)的小波分解,提取各尺度的近似与细节系数。
- 信号重构与误差校验:通过逆小波变换算法将分解系数还原为时域信号,并引入长度对齐机制,计算均方根误差(RMSE)以验证算法精度。
- 多维数据可视化:提供基函数形态、多层分解系数谱图以及重构残差分析图,直观展示算法效果。
系统要求
- MATLAB R2016a 及以上版本
- 无需额外的工具箱(Signal Processing Toolbox 非必须,核心算法均为原生实现)
使用方法
- 确保MATLAB环境已准备就绪。
- 将包含主函数及相关辅助函数的脚本文件放置于MATLAB当前工作路径下。
- 直接运行主函数(通常名为
main),系统将依次执行参数初始化、基函数生成、滤波器构建、信号分解与重构。 - 运行结束后,程序将在控制台输出分解状态、重构完成提示及误差指标(RMSE, MAX_ERR),并弹出三个图形窗口展示分析结果。
实现逻辑与代码分析
系统主要分为六个核心处理阶段,代码逻辑严密,各部分功能如下:
1. 系统参数初始化与信号合成
程序首先定义了采样频率(1024Hz)和时间向量。为了模拟真实的非平稳环境,构建了一个复合信号:基底为5Hz低频正弦波,叠加了30Hz的间歇性高频调制信号(时间窗0.3s-0.7s),并在0.8s处引入大幅度的突变脉冲,最后混合了高斯白噪声。
2. B样条基函数构造
该模块从数学解析式出发,定义了3次B样条函数
cubic_bspline。
- 尺度函数:通过在时间轴上平移计算中心化的B样条函数值。
- 小波函数:利用给定的线性组合系数(g_coeffs),对尺度函数进行伸缩和平移加权求和,以此生成并绘制小波函数的示意波形,直观展示其紧支集特性。
3. 双正交滤波器组构建
这是实现离散小波变换(DWT)的核心。代码中直接定义了对应于Biorthogonal Spline 3.3的小波滤波器组系数:
- 重构滤波器:低通滤波器(Lo_R)基于二项式系数
[1, 4, 6, 4, 1]/16,高通滤波器(Hi_R)基于CDF双正交条件推导。 - 分解滤波器:低通(Lo_D)和高通(Hi_D)系数经过精心设计以满足完全重构条件。
- 系统对所有滤波器系数进行了乘以
sqrt(2) 的归一化处理,以确保证每一步变换后的能量守恒。
4. Mallat算法分解过程
程序执行3层小波分解循环:
- 在每一层中,调用自定义的
my_dwt_step 函数。 - 该步骤包含对信号进行对称延拓(减少边界效应)、与分解滤波器卷积以及隔点下采样(Downsampling)。
- 分解得到的近似系数(cA)作为下一层的输入,细节系数(cD)被保存用于分析。
5. 信号重构过程
重构过程是分解的逆运算,从最底层(Level 3)向顶层进行:
- 调用
my_idwt_step 函数,对系数进行上采样(插值补零)和卷积操作。 - 关键的逻辑在于边界处理与长度对齐:由于卷积操作会导致信号长度增加,程序在每一层重构后计算目标长度,并截取中心部分的数据以匹配原始信号或上一级系数的长度,防止误差累积。
- 将重构出的低频近似部分与高频细节部分相加,逐步还原原始信号。
6. 结果验证
最后阶段对重构信号
sig_out 和原始带噪信号
signal_in 进行对比。
- 计算均方根误差 (RMSE) 和 最大绝对误差 (MAX_ERR),通常达到极小量级(例如10的负10次方级别),证明了滤波器系数和重构算法的正确性。
- 绘制三子图:原始信号、重构信号以及残差信号,从视觉上确认重构的高保真度。
关键算法说明
cubic_bspline 函数
实现了3次B样条的标准分段多项式定义。利用函数的对称性,针对输入 $x$ 的绝对值进行分段计算:
- 区间 [0, 1):采用 $2/3 - x^2 + 0.5x^3$
- 区间 [1, 2):采用 $(2-x)^3 / 6$
- 其他区间:0
该函数体现了3次B样条C2连续的光滑特性。
DWT/IDWT 步骤 (my_dwt_step / my_idwt_step)
虽然底层代码逻辑被封装,但从调用方式可以看出其遵循标准Mallat算法流程:
- 分解:输入信号 -> 边界延拓 -> 滤波器卷积 -> 下采样。
- 重构:输入系数 -> 上采样(插值) -> 滤波器卷积 -> 截断/对齐。
此实现方式有效解决了有限长信号在卷积过程中的边界发散问题。