基于凸优化的稀疏信号恢复模型实现
项目介绍
本项目实现了一套基于凸优化理论的稀疏信号重构系统,核心算法参考了经典的 l1-magic 工具包逻辑。该系统致力于解决压缩感知(Compressed Sensing)中的核心问题:如何从少量的线性测量值中,利用信号的稀疏特性,通过求解 $ell_1$ 范数最小化问题来实现信号的精确恢复。项目集成了两种经典模型:针对无噪环境的基追踪(Basis Pursuit, BP)和针对有噪环境的基追踪降噪(Basis Pursuit Denoising, BPDN),并采用内点法(Interior-Point Methods)确保求解的高效性与数值稳定性。
功能特性
- 稀疏信号模拟:支持自定义信号长度、稀疏度以及测量维度,生成随机分布的稀疏脉冲信号。
- 高斯随机测量:采用标准正态分布构建测量矩阵,满足受限等距性质(RIP)要求。
- 双模型恢复策略:针对不同应用场景,提供等式约束下的原始-对偶内点法实现,以及带二次不等式约束的对数阻尼内点法实现。
- 高性能数值求解:利用 KKT 系统的舒尔补(Schur Complement)方法简化大规模矩阵运算,并集成回溯线搜索(Backtracking Line Search)确保算法收敛。
- 自动化性能评估:自动计算均方误差(MSE)、信噪比(SNR)并生成可视化残差图谱,直观展示重构效果。
系统要求
- MATLAB R2016b 或更高版本。
- 无需额外工具箱,所有核心优化算法均在代码中通过底层函数实现。
主程序实现逻辑
- 参数初始化:设置信号长度 $N=512$,测量数 $M=128$,稀疏度 $K=20$,并定义噪声标准差。
- 信号生成:通过
randperm 随机选择 $K$ 个位置,注入服从标准正态分布的脉冲,构建原始稀疏信号。 - 压缩测量:构造 $M times N$ 的高斯随机矩阵
Phi,分别获取不含噪声(用于 BP)和含有高斯白噪声(用于 BPDN)的两组测量向量。 - 模型求解:
- 调用基追踪算法,以最小能量解(伪逆解)作为起点,在 $ell_1$ 范数最小化逻辑下运行原始-对偶迭代。
- 调用基追踪降噪算法,基于给定的误差容限 $epsilon$(根据 $chi^2$ 分布特性设定),在对数阻尼框架下利用牛顿法求解含噪重构问题。
- 多维评估与绘图:对比原始信号与重构信号,计算 MSE 与 SNR,并通过三个子图分层展示 BP 重构结果、BPDN 重构结果以及 BPDN 的重构残差分布。
关键算法说明
1. 基追踪(Basis Pursuit)算法
该部分通过原始-对偶内点法求解 $min |x|_1$ 满足 $Ax = b$。
- 变量引入:通过引入辅助变量 $u$,将非光滑的 $ell_1$ 问题转化为具有线性约束和线性目标函数的凸优化问题。
- 残差计算:同时计算对偶残差、中心残差和原始残差。
- Newton 方向求解:通过对 $2N+M$ 维的 KKT 系统进行简化,利用舒尔补技术优先求解对偶变量的增量,显著降低运算复杂度。
- 对偶间隙监测:实时监测迭代过程中的对偶间隙(Gap),当精度达到预设阈值时停止迭代。
2. 基追踪降噪(Basis Pursuit Denoising)算法
该部分利用对数阻尼内点法求解 $min |x|_1$ 满足 $|Ax-b|_2 le epsilon$。
- 阻尼框架:将硬约束转化为对数阻尼项 $ - log(epsilon^2 - |Ax-b|_2^2)$ 放入目标函数。
- 外部迭代:外层循环逐步增大阻尼参数 $tau$,驱动解向可行域边界靠拢。
- 内部 Newton 迭代:在给定的 $tau$ 下,计算梯度与近似 Hessian 矩阵。
- 高效线性求解:在 Newton 步长计算中,针对 Hessian 矩阵的特殊结构,利用矩阵反转引理及舒尔补方法实现快速求解。
3. 线搜索与步长控制
- 算法内部集成了回溯线搜索机制,在每一步迭代中动态调整步长 $s$ 或 $step$,确保更新后的变量始终满足 $u > |x|$ 这一隐式约束以及 BPDN 中的二次项约束,避免超出凸函数的定义域。
使用方法
- 打开 MATLAB 并将当前工作目录切换至本项目文件夹。
- 在命令行窗口直接运行主程序函数名称:
main。 - 程序将自动在控制台输出“正在运行基追踪算法”等进度提示。
- 待计算完成后,系统会自动弹出可视化窗口,展示原始信号与两种算法恢复信号的对比结果。
- 通过修改程序开头的 $N, M, K$ 参数,可以测试不同采样率和稀疏度下的重构性能。