基于L1范数最小化的稀疏信号恢复工具包
项目介绍
本项目是一个专门用于解决L1范数正则化最小二乘问题(Basis Pursuit Denoising, BPDN)的MATLAB工具包。该工具包的核心目标是从少量的线性观测数据中恢复出原始的稀疏信号,其数学模型为 $min lambda cdot ||x||_1 + 1/2 cdot ||Ax - y||_2^2$。
该项目通过实现最优化领域的两种经典算法:迭代收缩阈值算法(ISTA)和快速迭代收缩阈值算法(FISTA),为压缩感知信号重构、稀疏成分分析等领域提供了高效的数值求解方案。
功能特性
- 双算法核心实现:包含基础的ISTA算法以及引入Nesterov加速权重的FISTA算法,用户可直观对比两种算法的收敛速度。
- 软阈值算子集成:内置高效的Soft-thresholding算子,解决了L1范数在原点处不可微的梯度计算难题。
- 自适应步长策略:代码通过计算算子矩阵 $A$ 的谱范数(最大特征值)来自动确定计算步长,确保算法在梯度下降过程中的数值稳定性与收敛性。
- 全流程仿真环境:提供从原始稀疏信号生成、高斯测量矩阵构建、观测噪声添加、信号恢复到结果评估的完整闭环流程。
- 高性能数据可视化:支持自动生成收敛轨迹图、参数误差曲线图以及原始信号与恢复信号的对比图。
系统要求
- 环境要求:MATLAB R2016b 或更高版本。
- 计算资源:标准PC环境即可支持数千维度的信号计算。若涉及更大规模矩阵运算,建议配备 8GB 以上内存。
核心功能实现逻辑
本项目的主程序逻辑严格按照信号生成、算法求解、性能评估和可视化展示四个阶段展开:
1. 参数生成与场景设置
- 信号构建:默认生成 $n=1000$ 维度的信号,其中仅包含 $k=40$ 个非零元素(Sparse Signal)。
- 观测建模:通过 $m=400$ 维度的高斯随机矩阵 $A$ 进行降采样,并模拟添加高斯白噪声以符合实际应用场景。
- 参数配置:用户可灵活调节正则化因子 $lambda$(默认0.1)以平衡重建精度与解的稀疏性。
2. 核心求解器说明
* 采用梯度下降步更新变量:$x - t cdot A^T(Ax-y)$。
* 应用近端映射,通过软阈值函数对稀疏性进行修正。
* 每步迭代均记录目标函数值与估计误差。
* 在 ISTA 的基础上引入了辅助序列 $z$。
* 利用前两步的迭代差值进行 Nesterov 动量加速,有效将收敛速率提升至 $O(1/k^2)$。
* 使用动态更新的权重系数 $t_fista$ 来控制加速比例。
3. 关键函数实现细节
- 软阈值算子 (Soft-thresholding):函数内部实现为 $sign(x) cdot max(|x| - tau, 0)$,是 L1 范数正则化项的闭式近端映射解。
- Lipschitz 常数计算:算法内部首先计算 $||A^T A||_2$ 得到 Lipschitz 数,从而设置寻优步长 $t = 1/L$,确保迭代过程不发散。
- 收敛判据:通过相邻两次迭代间的信号差异(二范数距离)作为容限误差 $tol$ 的判断依据。
4. 结果评估与指标计算
- 均方误差 (MSE):计算原始信号 $x_{true}$ 与恢复信号间的归一化残差。
- 执行耗时:精确统计各算法在相同收敛条件下的计算时间。
- 收敛轨迹分析:记录每一步迭代的目标函数整体能量(数据保真项+正则项),以便评估算法的全局寻优能力。
使用方法
- 打开 MATLAB 软件。
- 将包含主程序的文件夹设置为当前工作路径。
- 在命令行窗口运行主函数脚本。
- 程序结束后,会自动在控制台输出 ISTA 和 FISTA 的耗时与 MSE 指标。
- 系统会自动弹出三个图形窗口:
* 窗口 1:展示 ISTA 与 FISTA 恢复信号与原始信号的脉冲图对比。
* 窗口 2:以对数坐标展示目标函数值的收敛轨迹。
* 窗口 3:以对数坐标展示参数误差的演变过程。