基于MATLAB的压缩感知MP匹配追踪重构算法实现
本项目提供了一个结构清晰、功能完整的压缩感知(Compressive Sensing, CS)重构演示系统。其核心在于实现经典的匹配追踪(Matching Pursuit, MP)算法,展示了如何从少量的线性测量值中,利用信号的稀疏特性,通过贪婪迭代的过程精确恢复原始信号。该实现不仅包含了算法内核,还集成了完整的仿真流程和多维度的性能评估工具。
项目介绍
匹配追踪算法是稀疏信号恢复领域的基石。在本项目中,我们通过MATLAB模拟了一个完整的通信或信号处理场景:首先生成一个具有高度稀疏性的随机信号,随后利用高斯随机矩阵对其进行降维观测(压缩测量),最后利用MP算法在不知道非零元素具体位置的前提下,通过迭代寻找与残差最相关的原子,逐步逼近并重构出原始信号。
功能特性
- 自动化稀疏信号生成:可以自定义信号长度、观测维度以及稀疏度,随机生成具有指定非零元素个数的测试向量。
- 规范化观测矩阵构建:实现高斯随机矩阵的创建,并自动完成字典原子的单位化(列规范化)处理,这是保证MP算法收敛性的关键步骤。
- 高效MP重构引擎:核心重构逻辑采用贪婪迭代策略,支持自定义最大迭代次数和残差终止阈值,具备良好的数值稳定性。
- 全方位性能评估:自动计算相对重构误差,量化重构精度。
- 多图联动可视化:提供直观的图形化输出,包括时域信号对比图、残差能量收敛曲线以及误差分布图,便于用户直观分析算法性能。
使用方法
- 确保您的计算机已安装 MATLAB 环境。
- 将主程序代码保存并直接在 MATLAB 命令行窗口中运行。
- 运行后,程序将自动执行从信号生成到重构的全过程,并在控制台输出稀疏度、观测值数量及相对误差。
- 程序会自动弹出可视化窗口,展示重构的具体效果和残差变化过程。
系统要求
- MATLAB R2014a 或更高版本(为了获得最佳的图形显示效果,建议使用 R2018b 以上版本)。
- 无需安装额外的工具箱,本程序基于 MATLAB 基础函数库实现。
实现逻辑说明
本项目的代码逻辑严格按照压缩感知的标准流程进行构建:
- 参数初始化阶段:预设信号长度 N 为 256,观测值 M 为 64,稀疏度 K 为 10。这种配置模拟了 4 倍压缩比下的信号恢复场景。
- 信号与矩阵准备:
* 随机选择 K 个位置赋予服从正态分布的随机值,其余位置补零,生成原始稀疏信号。
* 构造 M×N 的高斯分布矩阵作为观测矩阵,并对每一列进行 L2 范数归一化处理,确保每个“原子”的能量一致。
- 重构迭代过程:
*
相关性计算:计算当前残差与观测矩阵各列的内积,以此衡量原子与残差的匹配程度。
*
原子选择:寻找内积绝对值最大的原子索引,即当前方向上的最佳投影点。
*
系数累加:与 OMP 不同,MP 算法允许重复选择同一原子。程序将当前投影分量累加到对应的重构系数中。
*
残差更新:从当前残差中减去在该原子方向上的投影分量,获取新的残差进行下一轮迭代。
*
退出机制:当迭代次数达到上限或残差的范数小于预设阈值(1e-6)时,停止迭代。
- 评估与绘图:
* 计算原始信号与重构信号之间的相对 L2 误差。
* 绘制双子图对比原始信号(蓝色)与重构信号(红色虚线),直观展示恢复精度。
* 绘制残差收敛曲线,展示随着迭代次数增加,残差能量衰减的过程。
算法实现细节分析
- 字典原子单位化:在代码逻辑中,通过对 Phi 矩阵的每一列除以其范数,确保了在计算内积时,相关性的大小仅取决于向量的方向而非模值,这是 MP 算法准确寻找支撑集的基础。
- 残差投影更新:代码中使用了公式 r = r - proj_val * Phi(:, best_index),这一步确保了新残差与刚才被选中的原子正交(在单次迭代中),体现了 MP 逐次投影的思想。
- 收敛性记录:程序通过一个向量实时记录了每一次迭代后的残差范数,这不仅用于循环终止判定,也为后端通过曲线评估算法收敛速度提供了数据支持。
- 重构误差分布:除了整体误差指标,代码还计算了逐点的误差向量,帮助研究人员观察误差是集中在非零元素位置还是随机分布在全频段,对于算法调优具有指导意义。