小序:
最近研究OMP貪婪迭代算法找了Rachel-Zhang的一篇博客《“壓縮感知” 之 “Hello World” 》 裏面講到了作者對OMP算法的理解,看完之後有所啓發但是有些地方依然不理解,畢竟大牛作者不喜說的很詳細,菜鳥看不懂也很常見,所以自己查了一些資料,這裏做個更詳細的分析,僅供菜鳥分享。
上文地址爲:http://blog.csdn.net/abcjennifer/article/details/7775284
另外本人碩士課題方向爲壓縮感知框架下多模板的超寬帶信道估計,有同道的朋友可以共同交流
正文:
代碼作者爲香港大學電子工程系沙威,發送信號x爲若干個不同週期的正弦波的線性疊加,且假定了接收端與發射端之間無噪聲
程序運行結果: 藍色爲原始信號,紅色爲恢復信號,可見該算法可以高精度的恢復原始信號。
.
下面介紹Orthogonal Matching Pursuit 算法:
正交匹配追蹤算法迭代的基本思想就是每次迭代過程中從全息矩陣T中選出與測量信號s相關度(內積)最大的那一列,然後從T中去掉該列並加入到擴充矩陣Aug_t中,然後利用最小二乘法原理求出使殘差r_n=s-Aug_t*aug_y最小的一個估計aug_y,然後不斷的從T中減去相關列重複以上過程,直到達到迭代次數m結束。
本人開始不理解爲什麼最小二乘法的求出的估計量就會使殘差最小,於是查閱最小二乘法原理如下:
仔細看過推到那想必就會理解式aug_y=(Aug_t'*Aug_t)*Aug_t'*s爲什麼能得到最優解了,那麼我們所說的最小殘差r_n=s-Aug_t*aug_y 也就合理了
下面OMP代碼的按行分析
for times=1:m;
for col=1:N; 搜尋恢復矩陣的所有列向量
product(col)=abs(T(:,col)'*r_n)/(T(:,col)'*T(:,col)); 找出該矩陣中與殘差相關度最大的那一列
end
[val,pos]=max(product); 最大投影係數對應的位置
Aug_t=[Aug_t,T(:,pos)]; 相關度最大的那一列加入到擴充矩陣Aug_t
T(:,pos)=zeros(M,1); 選中的最大列置零
aug_y=(Aug_t'*Aug_t)*Aug_t'*s; 最小二乘,使殘差最小 該處假設正在迭代第k次那麼
aug_y(k*1維)=(Aug_t'(k*N維) * Aug_t(N*k維))* Aug_t'(k*N維) * s(N*1維)
r_n=s-Aug_t*aug_y; 殘差
pos_array(times)=pos; 紀錄最大投影係數的位置
end
hat_y(pos_array)=aug_y; 重構的譜域向量 最後一次迭代生成的aug_y(m*1維)按照 pos_array排列之後就是想到的恢復信號hat_y
hat_x=real(Psi'*hat_y.');