OMP演算法筆記

2021-09-24 14:56:15 字數 3127 閱讀 3511

(1)數理知識基礎–投影矩陣

詳見:原文:

結論假設:某空間中線性無關的向量組成的矩陣為a,則a的投影矩陣為

則,向量x在空間中的投影為:px(px可以看做x在空間a上的投影係數,所以在omp中,將px視為稀疏表示的係數。通過與最小二乘的比較,發現,px與最小二乘解一致,此間聯絡,值得挖掘)

(2)omp演算法思想

mp基本原理:從字典矩陣d(也稱為過完備原子庫中),選擇乙個與訊號 y 最匹配的原子(也就是某列),構建乙個稀疏逼近,並求出訊號殘差,然後繼續選擇與訊號殘差最匹配的原子,反覆迭代,訊號y可以由這些原子的線性和,再加上最後的殘差值來表示。很顯然,如果殘差值在可以忽略的範圍內,則訊號y就是這些原子的線性組合。

omp改進:omp 演算法是在 mp 演算法的基礎上進行改進的,其挑選原子的標準和 mp 演算法一致,也就是在訓練字典a裡挑選和測試樣本x最為匹配的字典原子[38]。不相同之處在於:omp 演算法在每一次迭代過程中對所挑選的全部原子先要執行 schmidt 正交化操作,來確保每一次迴圈結果都是最優解。使得在同等精度的條件下,omp 演算法的效能更好,其收斂速度也更快。

疑問1:如何保證同乙個原子不會被多次選中?

解答:在正交匹配追蹤omp中,殘差是總與已經選擇過的原子正交的。這意味著乙個原子不會被選擇兩次,結果會在有限的幾步收斂。**自:

疑問2:如何保證空間中的原子正交?

解答:空間中的原子可以通過schmidt 正交化操作,受啟發於一位博主的理解,他認為求解殘差的過程其實就是在進行施密特正交化,推導過程詳見**自:。

omp流程

omp演算法程式:**自)

(正交匹配追蹤(omp)matlab**(cs_omp.m))

function [ theta ] = cs_omp( y,a,t )

%cs_omp summary of this function goes here

%version: 1.0 written by jbb0523 @2015-04-18

% detailed explanation goes here

% y = phi * x

% x = psi * theta

% y = phipsi * theta

% 令 a = phipsi, 則y=atheta

% 現在已知y和a,求theta

[y_rows,y_columns] = size(y);

if y_rowsn矩陣

theta = zeros(n,1);%用來儲存恢復的theta(列向量)

at = zeros(m,t);%用來迭代過程中儲存a被選擇的列

pos_theta = zeros(1,t);%用來迭代過程中儲存a被選擇的列序號

r_n = y;%初始化殘差(residual)為y

for ii=1:t%迭代t次,t為輸入引數

product = a』*r_n;%感測矩陣a各列與殘差的內積

[val,pos] = max(abs(product));%找到最大內積絕對值,即與殘差最相關的列

at(:,ii) = a(:,pos);%儲存這一列

pos_theta(ii) = pos;%儲存這一列的序號

a(:,pos) = zeros(m,1);%清零a的這一列,其實此行可以不要,因為它與殘差正交

%y=at(:,1:ii)*theta,以下求theta的最小二乘解(least square)

theta_ls = (at(:,1:ii)』*at(:,1:ii))^(-1)*at(:,1:ii)』*y;%最小二乘解

%at(:,1:ii)*theta_ls是y在at(:,1:ii)列空間上的正交投影

r_n = y - at(:,1:ii)*theta_ls;%更新殘差

endtheta(pos_theta)=theta_ls;%恢復出的theta

endomp單次重構測試**(cs_reconstuction_test.m)

% **中,直接構造乙個k稀疏的訊號,所以稀疏矩陣為單位陣。
%壓縮感知重構演算法測試

clear all;close all;clc;

m = 64;%觀測值個數

n = 256;%訊號x的長度

k = 10;%訊號x的稀疏度

index_k = randperm(n);

x = zeros(n,1);

x(index_k(1:k)) = 5randn(k,1);%x為k稀疏的,且位置是隨機的

psi = eye(n);%x本身是稀疏的,定義稀疏矩陣為單位陣x=psitheta

phi = randn(m,n);%測量矩陣為高斯矩陣

a = phi * psi;%感測矩陣

y = phi * x;%得到觀測向量y

%% 恢復重構訊號x

tictheta = cs_omp(y,a,k);

x_r = psi * theta;% x=psi * theta

toc%% 繪圖

figure;

plot(x_r,『k.-』);%繪出x的恢復訊號

hold on;

plot(x,『r』);%繪出原訊號x

hold off;

legend(『recovery』,『original』)

fprintf(』\n恢復殘差:』);

norm(x_r-x)%恢復殘差

執行結果如下:(訊號為隨機生成,所以每次結果均不一樣)

1)圖:

恢復殘差:

ans =

5.5020e-015

OMP演算法學習筆記

參考文獻 介紹 omp演算法用於訊號恢復的稀疏近似,假設s rd的稀疏度為 k 是n 個測量向量,rn d 是乙個測量矩陣,測量值v s,也就是說 rn d 是字典矩陣的 m 個列向量的線性組合。演算法的思想是對於訊號s rd,我們要確定 rn d 的哪幾列參與到了 v 的測量中來,以貪婪迭代的方式...

壓縮感知OMP演算法 OMP演算法的Matlab版本

omp演算法 omp的函式 s 測量 t 觀測矩陣 n 向量大小 function hat y omp fun s,t,k n size t,2 size size t 觀測矩陣大小 m size 1 測量 hat y zeros 1,n 待重構的譜域 變換域 向量 aug t 增量矩陣 初始值為空...

OMP學習筆記

omp學習筆記 reference 1.訊號的稀疏表示 給定乙個過完備字典矩陣,其中它的每列表示一種原型訊號的原子。給定乙個訊號y,它可以被表示成這些原子的稀疏線性組合。訊號 y 可以被表達為 y dx 或者。字典矩陣中所謂過完備性,指的是原子的個數遠遠大於訊號y的長度 其長度很顯然是n 即n 應用...