論文原文:
% 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
一維信號重建率:
二維圖片重建效果:
試驗完整代碼: