压缩感知的MP算法 标签: 压缩感知稀疏表示MP算法 2016-03-19 20:41 594人阅读 评论(0)
2.MP算法
作为一类贪婪算法,MP算法的基本思路是在迭代中不断找寻最有测量矩阵列来逼近被表示向量,继而寻得最优的稀疏逼近,使得x与y的残差最小。对于这个算法,最直观的问题有两个:1.如何选择逼近度最高的——如何衡量逼近度,算法如何执行(比如遍历)?2.x的稀疏度由迭代次数决定,而逼近度(即最终残差)也与迭代次数有关,这是一个两难问题,如何做权衡?
在回答以上两个问题之前,我们先给出MP算法的具体过程:
示例代码如下:(与matlab中MP介绍时的示例相同)
clear all close all % A = [1 0.5 -1/2^0.5; 0 (3/4)^0.5 -1/2^0.5]; y = [1,0.5]'; K = 3; [m,n] = size(A); % iteration Rf(:,1) = y; for k = 1:K for i = 1:n ip(i) = abs(Rf(:,k)'*A(:,i)); end j(k) = find(max(ip)==ip); Rf(:,k+1) = Rf(:,k) - Rf(:,k)'*A(:,j(k))*A(:,j(k)); Rfnorm(k) = norm(Rf(:,k)); end R = [A(:,j(1)),A(:,j(2)),A(:,j(3))]; r1 = R(:,1); r2 = R(:,2); r3 = R(:,3); figure,quiver(0,0,y(1),y(2),'r'); hold,quiver(0,0,r1(1),r1(2),'b'); quiver(0,0,r2(1),r2(2),'b'); quiver(0,0,r3(1),r3(2),'b'); display(norm(Rf(:,K+1)));
编程遇到的简单问题:
1.每次迭代选择A中列向量时,为什么不需要把上次选择的去除掉?
因为每次迭代的残差是由上次的残差减去已选择的A的列计算得到的,剩余残差(恰好衡量与已选列的差异性)在已选列向量的投影将变得很小。因此没有必要去除已选列。
2.随机字典A的生成
示例中未涉及这个问题,但是仿真往往需要。matlab命令式norm(a,b,c,d),产生均值a,方差b,大小c*d的随机矩阵。
3.如何画向量?
画箭头的命令是quiver(x,y,u,v),xy为顶点,uv为向量。