压缩感知算法

【压缩感知合集9】压缩感知的OMP算法(算法步骤分析、举例分析、说明总结和缺陷)_呆呆象呆呆的博客-CSDN博客_压缩感知omp

压缩感知--数学基础_mrlonely001的博客-CSDN博客

压缩感知学习总结及Matlab代码实现_code_Joe123的博客-CSDN博客_压缩感知matlab

正交匹配追踪算法(OMP)_七味老友的博客-CSDN博客_正交匹配追踪算法

浅谈压缩感知(二十一):压缩感知重构算法之正交匹配追踪(OMP)_Karman_M的博客-CSDN博客

        将图像或者高维数据化为一维的长矢量来处理,图中的 x是N*1长的原始信号,原始信号在开始是不稀疏的,在域是K稀疏的。x向域投影得到的信号是s 

        k稀疏是指在长度为N的向量s中仅仅有k个稀疏是非零的,剩余的N-k个稀疏为零。

详细解释:

压缩感知算法_第1张图片

          需要被收集的信号x,可能稀疏(非零元素个数)也可能不是稀疏的,但是我们可以利用传统信号处理的方法,找到一个矩阵Ψ,使得x=ΨS是稀疏的,比如如果x是音频信号,矩阵Ψ就可能是一个DCT矩阵。这样s就是一个长度为N的K稀疏信号(非零元素为K个),CS理论告诉我们,对于这样的K稀疏信号,我们无需按照传统奈奎斯特采样定理一样以两倍信号最大频率去采样信号。CS告诉我们,如果信号在某一个正交空间具有稀疏性(即可压缩性),就能以较低的频率(远低于奈奎斯特采样频率)采样该信号,并可能以高概率精确的重建该信号。而这时的采样方式不再是离散化的单位矩阵采样,CS理论广泛采用高斯随机矩阵作为采样矩阵,这时采样的信号y=Φx,也即是y=ΦΨS=ΘS,其中y的长度变为M,M<

CS理论告诉我们,这是可能的!!!

      所谓压缩感知,最核心的概念在于试图从原理上降低对一个信号进行测量的成本。比如说,一个信号包含一千个数据,那么按照传统的信号处理理论,至少需要做一千次测量才能完整的复原这个信号。这就相当于是说,需要有一千个方程才能精确地解出一千个未知数来。但是压缩感知的想法是假定信号具有某种特点(比如在小波域上系数稀疏的特点),那么就可以只做三百次测量就完整地复原这个信号(这就相当于只通过三百个方程解出一千个未知数)。

      上面其实我们得到了M个方程,而变量却有N个,要从方程y=Φx中找到这个x的解。这样的方程很明显是方程个数远远小于变量的个数,方程的解有无穷多个,怎样才能找到合适的x的解呢?CS理论,应用到了x具有K稀疏的特性,我们可以在这些无穷个解中去挑一个解,这个解必须非常稀疏。而这个稀疏的解就是x的解。

如何挑最稀疏的解呢?

        根据稀疏的定义,自然而然想到了L0范数(向量中非零元素的个数)。其实挑这样的解就是解如下的优化问题:

压缩感知算法_第2张图片

        由于上式的求解是个NP难问题(在多项式时间内难以求解,甚至无法验证解的可靠性)。L1最小范数下在一定条件下和L0最小范数具有等价性,可得到相同的解。那么上式转化为L1最小范数下的最优化问题:

压缩感知算法_第3张图片

L1范数最小化是通过用L1范数来近似0范数,取1而不取1/2,2/3或者其他值,是因为1范数最小化是凸优化问题,可以将求解过程转化成有一个线性规划问题。L1最小范数下最优化问题又称为基追踪(BP) 。当然,L1范数并不完全等于L0范数的解

范数理解(0范数,1范数,2范数)_孤狼北望的博客-CSDN博客_0范数

 稀疏基矩阵的构成的理解:

      本例,Ψ的构建代码为Psi=inv(fft(eye(N,N)));

       表示对单位阵求离散傅里叶变换后再求逆。
先讲一点前置知识,对于长度为N的时域离散信号x来说,其离散傅里叶变换为S,那么它可以写成S=fft(x),也可以写成S=fft(I)x,其中I表示NxN的单位阵。根据离散傅里叶变换的定义可知,它是从0到N-1的乘积求和累加,而求和累加的过程可以视为矩阵中行向量乘以x列向量。而由于单位阵,稀疏基矩阵中只有旋转因子W^k_N,因此时域信号左乘fft(I)就相当于做了傅里叶变换。因此,将傅里叶变换的矩阵求个逆,就是逆傅里叶变换,即x=ΨS

 压缩感知之常用稀疏基及matlab代码_爱学习的一一一的博客-CSDN博客_稀疏基

 正交匹配追踪算法(OMP)

正交匹配追踪算法(OMP)_七味老友的博客-CSDN博客_正交匹配追踪算法

OMP算法_xjtuwfj的博客-CSDN博客_omp算法

稀疏表示求解:OMP(The Orthogonal Matching Pursuit Algorithm)_dreaming__star的博客-CSDN博客

【压缩感知合集9】压缩感知的OMP算法(算法步骤分析、举例分析、说明总结和缺陷)_呆呆象呆呆的博客-CSDN博客_压缩感知omp

残差是实际观测值与模型估计值之间的差

问题设置:

给定 如何找到最接近的 X 

 为什么是欠定的

压缩感知算法_第4张图片     

 需要求解出3个未知数,但是只有2个方程

实际使用过程中需要求解的未知数有N 个,但是只有M 个方程,未知数的个数远远大于方程的个数 M<

步骤描述:

压缩感知算法_第5张图片

匹配追踪的概念:

      字典D由一系列基信号或者原子组成的,也就是说

 d_1,d_2,d_3 被称为原子或者基信号

 (1)求取最大相关

              压缩信号:      

  我们计算每个原子对于 A 的贡献:

 (2)求取残差

       可以看出d_1 对于 A  的贡献最大,值为 − 1.34(这里只考虑大小,不用管负号,负号只是代表方向相反)。如果我们从 A 中减去,那么剩余的残差是:

     那么所得的残差有什么意义呢?从 A 中减去了所有与原子d_1有关的信息,为什么说是所有呢,因为刚才计算的系数同时也代表着投影的意义,A减去这个长度的投影,所剩残差fd_1正交,也表示残差不能再由d_1线性表示。

压缩感知算法_第6张图片

 (3)重复迭代

   在第一次迭代时,我们选择了原子d_1,将其作为一个基放入新的压缩矩阵中,也就是

=[d_1]= 并且将贡献系数写入到重构信号 中,  −1.34 被放置到第一个元素的位置是因为这个贡献系数来自于D 中的第一个基d_1。残差 现在我们要从剩余的原子d_2或者d_3中选择出对残差贡献最大的

 由于d_2的贡献最大,选择d_2

现在我们将已经选择了的基d_1d_2都放到新的压缩矩阵中

因为压缩矩阵A只有两行,所以选择 d_1d_2 

 计算的贡献,为了得到OMP的新系数,OMP会去解一个最小二乘问题,如下

 写成数学公式如下:

 在这个例子中

 得到w_1w_2。我们知道

 的解是,其中是也就是说

可以在MATLAB中使用pinv()来计算伪逆。计算完伪逆之后,我们得到了

在得到更新后的  我们更新残差

现在我们得到的残差约等于 0 ,所以停止迭代。 

我们将得到的中第一和第二个位置,因为它们分别对应了我们选择的第一和第二个原子。接着更新重构信号

(4)最后一步迭代

      因为残差已经为 0 ,所以这一步并不是必须的。许多OMP算法需要设置一个关于信号稀疏性的参数 K ,这告诉算法它需要迭代K次,即使残差为0 ,也需要迭代K次。
 

 第二个例子

 有4个基(原子):

由于基向量的长度不是1所以我们首先进行标准化,实现字典矩阵的标准化 

         

标准化的字典基向量 的贡献

压缩感知算法_第7张图片

第二个基向量贡献值最大,所以将加入到中,

利用最小二乘法计算 w

 也就是求解

因为w_1对应着第二个基向量d_2,所以   

接下来计算残差:

接下来重复计算 的贡献。

 选择第二个贡献最大的基其贡献值为 1.7902 

用最小二乘法计算       这个w对应着因此 压缩感知算法_第8张图片

接着计算残差:

重复计算的贡献:

选择第三个贡献最大的基 ,其贡献值为 0.7308 

利用最小二乘计算权重:   这个w对应着因此

接着计算残差:

 迭代到此为止,因为此时残差已经为 0 ,重建的X 为和原来的信号相同。

 总结:

A=DX

A是压缩信号,D是字典,D=(d1, d2, d3 ,d4)   求解x

  (1)  找字典基向量对A贡献度最大的基向量  d_2 

(2) 将d_2 加入到 =[d_2 ] 

(3)最小二乘法计算w_1=,将w_1写X列向量对应位置(第二个元素)

(4)计算残差f ,    

  (5)计算剩下的d1, d3, d4,对残差的贡献。找到贡献度最大的d3

  (6)  将d3 加入到 =[ d2,d3 ] 

  (7) 最小二乘法计算w_2=,将w_2写X列向量对应位置(第二列和第三列)

 (8) 计算残差f ,    

(9)重复上述过程(5)-(8)直到残差为0迭代结束。

      

 dejiji

你可能感兴趣的:(其他)