(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 應用...