项目介绍
本项目名为基于迭代硬阈值算法(IHT)的压缩感知信号重构系统。旨在通过迭代硬阈值(Iterative Hard Thresholding)这一经典算法,解决压缩感知理论中从少量欠采样观测值恢复高维稀疏信号的问题。该系统模拟了完整的信号采集与处理流程,验证了在观测矩阵满足受限等距性质(RIP)的情况下,如何通过非线性投影手段高效还原信号。由于其较低的计算复杂度和清晰的理论解释,该系统为信号处理、通信系统和特征提取等研究提供了实用的仿真平台。
功能特性
- 稀疏源信号生成:自适应生成指定维度和稀疏度的离散信号,其非零分量的位置随机分布,幅值服从标准正态分布。
- 高斯随机测量矩阵构建:模拟物理采样过程,生成均值为0、方差为1的高斯随机矩阵,并对矩阵列向量进行单位化处理,以改善算法收敛性。
- 加性高斯白噪声模拟:在观测过程中引入指定信噪比(SNR)的噪声,使仿真环境更贴近实际物理信道。
- 迭代硬阈值重构核心:实现梯度更新与硬阈值算子的交替运算,确保解的稀疏性。
- 实时收敛性能监控:记录并绘制迭代过程中的残差范数变化曲线。
- 多参数性能统计分析:自动遍历不同测量数(M),统计重构成功率,展现算法的“相变”特性。
- 可视化评估:直观展示原始信号与重构信号的时域对比图。
使用方法
- 启动 MATLAB 软件,将工作目录切换至本项目代码所在文件夹。
- 打开主程序文件,点击“运行”或在命令行窗口输入主函数名。
- 程序将首先执行一次单次重构演示,弹出包含“信号对比图”和“收敛曲线图”的绘图窗口。
- 紧接着,程序会自动进入性能统计实验阶段,在命令行实时输出不同测量长度下的成功率数值。
- 运行结束后,系统将弹出重构成功率随测量数变化的统计图表。
- 用户可根据需要修改程序开头的参数区,如调整稀疏度 K、步长因子 mu 或最大迭代次数等。
系统要求
- 软件环境:MATLAB R2016a 及以上版本。
- 工具箱需求:
* Signal Processing Toolbox(用于信号生成与基本处理)。
* Communications Toolbox(用于 awgn 函数添加噪声,若无此工具箱需手动实现加噪逻辑)。
- 硬件环境:标准的商用 PC 即可,内存建议 4GB 以上。
核心实现逻辑
主程序结构分为三大部分,紧密遵循压缩感知的理论框架:
1. 单次演示流程
系统首先设置基础参数:信号维度 N 为 256,稀疏度 K 为 20,初始步长因子 mu 为 0.5。通过随机排列函数确定非零元素位置,并对观测矩阵进行列单位化预处理。通过矩阵乘法模拟采样过程,并加入 40dB 强度的噪声。重构后,系统计算均方误差(MSE)来量化恢复精度。
2. 核心算法求解器(IHT Solver)
求解器采用梯度下降的思想进行迭代。
- 初值设置:将重构解初始化为全零向量。
- 计算梯度:计算观测残差(y - Phi * x),并将其乘以测量矩阵的转置(Phi'),得到当前估计的更新方向。
- 梯度更新:按照设定的步长 mu 更新预测值。
- 硬阈值算子投影:本环节是算法的关键。系统对更新后的向量取绝对值并进行降序排列,仅保留前 K 个最大的分量,其余分量强制置零。这一步实现了将解投影到 L0 范数球上,保证了结果的稀疏性。
- 终止条件:当残差的范数小于预设阈值或达到最大迭代次数时,停止计算。
3. 批量性能统计
为了评估算法的鲁棒性,系统在 40 到 160 的范围内改变测量值数量 M。在每个 M 值下进行 50 次独立的随机实验。若重构得到的信号与原始信号的相对误差小于 1%,则判定为重构成功。最后通过折线图呈现成功率随观测样本增加而提升的趋势。
关键算法与实现细节分析
- 梯度公式的应用:算法求解的目标是最小化残差的二范数平方。代码通过极简的矩阵运算实现了梯度的计算,避免了复杂的导数推导,通过 PhiT * (y - Phi * x) 快速定位信号恢复方向。
- 步长因子 mu 的选择:在实现中,mu 被设置为 0.5。这是一个关键的超参数,理论上它需要与测量矩阵的最大奇异值相关联。固定的步长在保证收敛速度的同时,也兼顾了算法的稳定性。
- 硬阈值函数的效率:代码利用了快速排序算法(sort 函数)来寻找最大幅值的索引,这使得在高维状态下硬阈值操作依然保持极高的执行效率。
- 测量矩阵单位化:在生成高斯随机矩阵后,程序执行了 Phi ./ sqrt(sum(Phi.^2, 1))。这一操作确保了每列的范数为 1,有助于减少矩阵的条件数,防止在迭代更新时出现梯度爆炸或消失的问题。
- 残差记录与可视化:通过建立 res_history 数组,程序完整保留了误差下降的历程,这对于判断算法是否收敛到局部最优解具有重要的工程参考意义。