最近因为科研需要,又开始重新研究压缩感知(CS)与稀疏恢复(SR)理论。本人系初学,很多东西都没有学明白,姑且先摸着石头过河,仿照网上的例子,用matlab编程实现最基本的例子,写下了这篇笔记。

关于压缩感知与稀疏恢复的原理就不再赘述,网上有很多博主写的很详细,这里推荐 https://zhuanlan.zhihu.com/p/22445302
这篇文章原理写的通俗易懂。本文在这篇文章的基础上结合 https://blog.csdn.net/xiahouzuoxin/article/details/38820925 所给出的代码,形成了我自己的理解。

这里选择比较简单的信号形式:一些单音正弦信号叠加。选取两个单音正弦信号,频率为10Hz和15Hz,幅度分别为1.5V和1V,当然这些参数在代码中都是可调的。两个信号时域图如下所示:
在这里插入图片描述
叠加后时域图如下:
在这里插入图片描述
信号的最大频率为15Hz,根据奈奎斯特采样定理,最小采样速率为两倍最大频率,即N_fs=30Hz。事实上,计算机中无法处理模拟信号,上面两张图是用非常高的采样速率(3kHz)得到的,因此看起来像是模拟信号。

为了减少计算机的工作量,将采样速率降低为fs=600Hz,采样时宽为T=5s。信号采样结果如下所示(时间截断到1s)。和上图相比,看起来没什么信息损失。
在这里插入图片描述
用fft加fftshift的方法(不知道的可以翻我的matlab专栏关于画频谱的),绘制该信号的双边频谱如下图所示(只显示100Hz以内)。

在这里插入图片描述
可以看到大约在10Hz和15Hz有两根谱线,幅度对应大约0.75和0.5,这正是我们设定的两个单音正弦信号叠加。(双边频谱非0频处幅度要乘以2)
数据不准确(栅栏效应)以及下方旁瓣效应是因为采样频率和时宽不够大,深层次的原因是计算机中无法真正仿真模拟信号和无限长信号。

为了方便理解文章和代码,我使用的是压缩感知理论中惯用符号说明,正如知乎中“稍有常识的人”说写的:
在这里插入图片描述

x = Ψ S

稀疏矩阵的物理意义,就是把要采样的信号变换到另一个域中,而在这个域中,信号是稀疏的。在本例中,信号在时域并不稀疏,通过傅里叶变换变换到频域后就成为稀疏信号了。同理,也可以使用小波变换、余弦变换等,只要变换后的向量是稀疏的即可。

观测矩阵的构建

观测矩阵这里面有很深的学问,我还没了解清楚。我找到了一篇学长的硕士毕业论文以供参考
【吴赟.压缩感知测量矩阵的研究[D]. 西安电子科技大学硕士学位论文,2012】
大致来讲(可能说的不对,还请批评指正)
Candes、Romberg和Tao指出,要想能解出 Θ 需要满足有限等距性质(Restricted Isometry Property,Rip)
参考自:
E.Candes,J.Romberg,T.Tao.RobuSt uncertainty principles:Exact signal reconstruction from highly incomplete frequency information.IEEE Transactions on Information Theory,2006,v01.52,no.3,PP.489-509.

E.Candes,T.Tao.Decoding by
linear programming.IEEE Transactions on Information Theory,2005,v01.51,no.12,PP.4203-4215.

但是,上述只是一个理论设想,实际上要直接验证矩阵是否满足RIP条件是一件很困难的事情。在实际应用中,我们可以用RIP准则的一种等价情况,即非相干性来指导测量矩阵的设计。所谓非相干性(Incoherence),是指矩阵 Ψ 中的列向量稀疏表示。

而Donoho等人指出,服从高斯分布的随机矩阵可以很大概率上满足上述条件,因此随机高斯测量矩阵是常用的测量矩阵,本例中也使用该测量矩阵。

截图源自学长的论文

matlab生成随机高斯测量矩阵的代码: Phi=sqrt(1/M)*randn(M,N);

上述知乎文章中提到,这个测量矩阵的物理意义是对时域信号的随机亚采样(不等间距采样),但是我搜集了很多资料,还是不能理解这个测量矩阵是如何做到随机采样的,而且比较疑惑测量向量 S
这就是稀疏恢复问题。
我之前发过的一篇论文研究过这个稀疏恢复问题,当时是使用极大极小值优化算法,感兴趣的可以了解一下:
J. Chen et al., “A Sparsity Based CFAR Algorithm for Dense Radar Targets,” 2020 IEEE Radar Conference (RadarConf20), 2020, pp. 1-6, doi: 10.1109/RadarConf2043947.2020.9266526.
本例中等式不含噪声,我就偷个懒,用matlab的CVX凸优化工具箱。这个工具箱需要安装,先在官网上下载,然后百度一下教程,很容易就安装好了。

由于信号在频域稀疏,即 cvx_begin variable Sp ( N ) complex ; % 定义待求解的变量 minimize ( norm ( Sp , 1 ) ) ; % 一范数约束表示提高稀疏性 subject to Theta * Sp == y ; % 约束条件 cvx_end S 进行比较,得到下图:
在这里插入图片描述
可以看到恢复精度还是很高的。稀疏恢复解有一些毛刺,阈值处理可以很好的消除。
转换到时域观察结果
在这里插入图片描述
曲线几乎完全重合,使用均方根误差(RMSE)来评估精度,计算出RMSE=0.070639
由于使用的是随机高斯测量矩阵,因此每次试验的值都不一样,但总体RMSE是很低的,表明恢复良好。

之前提到,奈奎斯特采样频率为N_fs=30Hz,时宽为T=5s,因此采样点数为150个点,这是经典理论中要求最少的采样点数。
稀疏恢复理论中指出,观测长度M>=K*log(N/K),K是稀疏度,N信号长度,可以近乎完全重构。在本例中K=2,N=3000,计算出M最小为15。由于要采样的信号不是真正的模拟信号,频域并不是完全稀疏,因此M应该大一些,本例设置为M=30。

对比压缩感知与经典采样理论可以发现,前者只需要长度为30的观测向量,而后者需要长度为150的采样点。压缩感知可以减少80%的采样点,而恢复精度很高,这无疑是一个巨大的进步。

https://download.csdn.net/download/weixin_42845306/20325903

本人尚在初学阶段,难免会有理解错误。如有问题或建议,欢迎评论区留言!