小序:
最近研究omp貪婪迭代演算法找了rachel-zhang的一篇部落格
《「壓縮感知」 之 「hello world」
》裡面講到了作者對omp演算法的理解,看完之後有所啟發但是有些地方依然不理解,畢竟大牛作者不喜說的很詳細,菜鳥看不懂也很常見,所以自己查了一些資料,這裡做個更詳細的分析,僅供菜鳥分享。
另外本人碩士課題方向為壓縮感知框架下多模板的超寬頻通道估計,有同道的朋友可以共同交流
正文:
**作者為香港大學電子工程系沙威,傳送訊號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; 紀錄最大投影係數的位置
endhat_y(pos_array)=aug_y; 重構的譜域向量 最後一次迭代生成的aug_y(m*1維)按照 pos_array排列之後就是想到的恢復訊號hat_y
hat_x=real(psi'*hat_y.');
為什麼正交匹配追蹤 OMP 一定能恢復訊號?
題目 為什麼正交匹配追蹤 omp 一定能恢復訊號?就是原來的x 中的那個 呢?為什麼通過omp迭代後一定會選出矩陣a的那幾列呢?會不會選擇a的另外幾列,它們的線性組合也滿足y a 本篇來回答這個問題。首先我們要知道,兩個k稀疏的n維訊號 長度為n的列向量 k1和 k2,它們的差向量 k1 k2 的稀...
壓縮感知演算法 壓縮感知演算法之正交匹配跟蹤
1壓縮感知理論基礎 壓縮感知 cs 技術處理訊號的過程一般分為以下三個步驟 訊號的稀疏表示。cs要求訊號具有稀疏性,若原始訊號是稀疏的,則可直接用於後續操作 若原始訊號具有稀疏性但不是稀疏的,則利用稀疏基將其稀疏化 觀測矩陣 也稱測量矩陣 觀測矩陣用於對原始訊號進行壓縮取樣 重構方法。重構是指從少量...
KMP字元匹配演算法原理
掘金位址鏈結 簡介 kmp演算法是一種改進的字元匹配演算法。由d.e.knuth,j.h.morris和v.r.pratt提出的,因此人們稱它為克努特 莫里斯 普拉特操作 簡稱kmp演算法 它的核心思想是,通過乙個next陣列,在匹配失敗後,減少字元移動的距離,達到快速匹配的目的。要想徹底理解kmp...