基于L1范数正则化的稀疏信号重构算法
项目介绍
本项目实现了一种用于求解带有L1范数正则化项的优化问题的数值算法。其核心数学模型旨在最小化由数据保真度(L2范数)和稀疏约束(L1范数)组成的复合目标函数。通过利用L1范数在零点不可微但能诱导稀疏性的特性,该算法能够从欠采样的线性观测中恢复出高维稀疏信号。此类方法在压缩感知、稀疏成分分析及图像去噪等现代信息处理领域具有重要的理论与实践意义。
功能特性
- 信号仿真与建模:能够自主生成指定维度的稀疏信号,模拟高斯随机测量矩阵的采样过程,并支持添加高斯白噪声以验证算法的鲁棒性。
- 基础算法实现:集成了迭代软阈值算法(ISTA),采用近端梯度下降法稳健求解非平滑优化问题。
- 高效加速求解:集成了快速迭代软阈值算法(FISTA),通过引入Nesterov外推动量项,在不增加单次迭代计算量的前提下显著提升收敛速度。
- 自动化参数计算:脚本具备自动计算Lipschitz常数的功能,以此确定最优的稳定迭代步长。
- 多维度性能评估:实时记录算法迭代过程中的目标函数损失值、迭代次数及运行时间,并计算最终的相对重构误差。
- 可视化分析:自动生成重构信号脉冲图与收敛曲线对比图,直观展示算法的稀疏恢复能力与收敛效率。
系统要求
- MATLAB R2016b 或更高版本。
- 兼容Windows、macOS及Linux操作系统的MATLAB环境。
使用方法
- 启动MATLAB软件,并将工作目录切换至脚本所在文件夹。
- 直接在命令行窗口输入脚本名并按回车键运行。
- 程序将自动执行数据准备、ISTA求解、FISTA求解及结果绘图。
- 运行结束后,可在图形窗口观察黑色原始信号与红色重构信号的拟合程度,并在控制台中查看不同算法的各项性能指标。
实现逻辑
脚本的执行流程严格遵循以下数学与程序逻辑:
- 参数预设与环境构建
定义信号总维度为512,观测点数为256,稀疏度设定为30。初始化正则化系数lambda(默认为0.1),并配置1000次最大迭代限额及1e-6的收敛容差。
- 测量矩阵与观测数据准备
利用randn函数生成高斯随机测量矩阵,并对矩阵的每一列进行L2范数归一化,以保证测量系统的稳定性。随后生成含特定数量非零项的稀疏源信号,通过线性投影并加入sigma=0.01的高斯噪声得到观测向量y。
- 步长与数学预处理
通过计算测量矩阵A的谱范数平方(即A'A的最大特征值)来确定Lipschitz常数L,设置固定步长为1/L。这是保证算法在下降过程中不发散的理论上限。
- 算法迭代核心
- 迭代软阈值逻辑:在每步迭代中,首先计算当前残差的梯度方向,执行一步梯度下降更新,随后通过软阈值算子对系数进行收缩,将小分量强制置零以维持稀疏性。
- 快速迭代逻辑:在标准下降步的基础上,引入辅助变量并根据特定的权重因子进行梯度更新点预测,利用前两步的迭代历史来加速寻找全局最优解。
- 结果分析与可视化
在迭代循环中持续计算目标函数值:0.5*||Ax-y||^2 + lambda*||x||_1。循环结束后,通过stem图对比信号恢复的准确性,并使用semilogy对数坐标展示ISTA与FISTA在收敛路径上的能量下降差异。
关键算法与实现细节
- 软阈值算子 (Soft Thresholding):实现逻辑为 sign(v) * max(|v| - tau, 0),作为L1范数的近端映射算子,它是实现信号稀疏化的核心数学手段。
- Lipschitz常数估算:通过 norm(A)^2 快速获取,直接影响算法的步长选择,确保了算法在不进行复杂线搜索的情况下依然具备稳健的收敛性。
- FISTA动量更新机制:采用 t_next = (1 + sqrt(1 + 4 * t^2)) / 2 更新步长权重,并结合外推公式 y = x + ((t_prev-1)/t_next) * (x - x_prev) 实现加速。
- 相对改变量终止判据:使用 norm(x - x_old) / norm(x_old + eps) 评估当前估计值的变化程度,当变化量小于预设容差时提前终止计算,节省计算资源。