壓縮感知OMP(正交匹配追蹤法 Orthogonal Matching Pursuit) 算法python實現

論文原文:

%  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

一維信號重建率:

二維圖片重建效果:

試驗完整代碼:

https://github.com/sikaozheyouxi/CS_LIB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章