论文原文:
% Signal Recovery From Random Measurements Via Orthogonal Matching
% Pursuit,IEEE TRANSACTIONS ON INFORMATION THEORY, VOL. 53, NO. 12
实现代码:
def cs_omp(y,Phi,N,K):
residual=y #初始化残差
index=np.zeros(N,dtype=int)
for i in range(N): #第i列被选中就是1,未选中就是-1
index[i]= -1
result=np.zeros((N,1))
for j in range(K): #迭代次数
product=np.fabs(np.dot(Phi.T,residual))
pos=np.argmax(product) #最大投影系数对应的位置
index[pos]=1 #对应的位置取1
my=np.linalg.pinv(Phi[:,index>=0]) #最小二乘
a=np.dot(my,y) #最小二乘,看参考文献1
residual=y-np.dot(Phi[:,index>=0],a)
result[index>=0]=a
Candidate = np.where(index>=0) #返回所有选中的列
return result, Candidate
一维信号重建率:
二维图片重建效果:
试验完整代码: