題目:施密特(schimidt)正交化與正交匹配追蹤
文獻[1]中給出了施密特(schimidt)正交化的過程:
上面的的[x,y]表示向量內積,[x,y]=xty=ytx=[x,y]。施密特正交化公式中的br實際上可寫為:
分子之所以可以這麼變化是由於[x,y]實際上為乙個數,因此[x,y]x=x[x,y]=xxty。
m是在所有被選擇過的原子
組成的矩陣φt
所張成空間上的正交投影,而mp減去的pem是在本次被選擇的原子φp
所張成空間上的正交投影。正交投影及正交投影變換矩陣的概念可以參見《壓縮感知中的數學知識:投影矩陣(projectionmatrix)》。
首先給出乙個結論:
設omp共從冗餘字典中選擇了r個原子,分別是a1,a2,……,ar,根據正交匹配追蹤的流程可以知道待分解訊號x最後剩餘的殘差eromp為
(式1)
該殘差也可以表示為
(式2)
其中矩陣a為選擇的r個原子組成的矩陣,e(r-1)omp為選擇(r-1)個原子時的殘差。
將選擇的r個原子a1,a2,……,ar進行施密特正交化:
則殘差eromp還可以寫為
(式1)一般出現在稀疏分解演算法中,(式2)一般出現在重構演算法中,(式3)是自己琢磨出來的(受到沙威的文件中提到的施密特正交化的啟發,但沙威只限於向量情況下,詳情可參見[3],此處相當於乙個推廣)。
而實際上(式1)、(式2)和(式3)三種正交匹配追蹤演算法的殘差計算方法是等價的,純數學證明比較複雜,這裡給乙個matlab程式,可以驗證三者的等價性:
%% 驗證omp殘差求解過程與schmidt正交化的關係
m = 4;n = 10;
phi = randn(m,n);
for nn = 1:n
phi(:,nn) = phi(:,nn)/norm(phi(:,nn));
endb = randn(m,1);
e0 = b;%初始化殘差為待稀疏訊號b
%選第1列
c1 = phi'*e0;%求出矩陣phi每列與b的內積
[val1,pos1]=max(abs(c1));%找到內積中最大的列及其內積值
phit = [phi(:,pos1)];%由所有選出的列組合的矩陣
pphi = phit*(phit'*phit)^(-1)*phit';%正交投影變換矩陣
e1ompe = e0 - pphi*e0;%omp用上一次殘差減去殘差在phit列空間的正交投影
e1ompb = b - pphi*b;%omp用待稀疏訊號b減去b在phit列空間的正交投影
x = phi(:,pos1);%schimidt正交化第乙個向量
px = x*(x'*x)^(-1)*x';
%實際上是b - px*b
e1ompsmt = e0 - px*b;
e1 = e1ompe;
norm(e1ompe-e1ompb)+norm(e1ompsmt-e1ompb)
%選第2列
c2 = phi'*e1;%求出矩陣phi每列與e1的內積
[val2,pos2]=max(abs(c2));%找到內積中最大的列及其內積值
phit = [phi(:,pos1) phi(:,pos2)];%由所有選出的列組合的矩陣
pphi = phit*(phit'*phit)^(-1)*phit';%正交投影變換矩陣
e2ompe = e1 - pphi*e1;%omp用上一次殘差減去殘差在phit列空間的正交投影
e2ompb = b - pphi*b;%omp用待稀疏訊號b減去b在phit列空間的正交投影
y = phi(:,pos2) - px*phi(:,pos2);%schimidt正交化第二個向量
py = y*(y'*y)^(-1)*y';
%實際上是b - px*b - py*b
e2ompsmt = e1 - py*b;%上一次殘差減去b在第2列正交化所得z上的投影
e2 = e2ompe;
norm(e2ompe-e2ompb)+norm(e2ompsmt-e2ompb)
%選第3列
c3 = phi'*e2;%求出矩陣phi每列與e2的內積
[val3,pos3]=max(abs(c3));%找到內積中最大的列及其內積值
phit = [phi(:,pos1) phi(:,pos2) phi(:,pos3)];%由所有選出的列組合的矩陣
pphi = phit*(phit'*phit)^(-1)*phit';%正交投影變換矩陣
e3ompe = e2 - pphi*e2;%omp用上一次殘差減去殘差在phit列空間的正交投影
e3ompb = b - pphi*b;%omp用待稀疏訊號b減去b在phit列空間的正交投影
z = phi(:,pos3) - px*phi(:,pos3) - py*phi(:,pos3);%schimidt正交化第三個向量
pz = z*(z'*z)^(-1)*z';
%實際上是b - px*b - py*b - pz*b
e3ompsmt = e2 - pz*b;%上一次殘差減去b在第3列正交化所得z上的投影
e3 = e3ompe;
norm(e3ompe-e3ompb)+norm(e3ompsmt-e3ompb)
程式最後一行的輸出結果為零,說明三個殘差是相等的。
這裡可以看出omp與schimidt正交化的關係:
omp分解過程,實際上是將所選原子依次進行schimidt正交化,然後將待分解訊號減去在正交化後的原子上各自的分量即可得殘差。其實(式3)求殘差的過程也是在進行施密特正交化。
同理,若設mp共從冗餘字典中選擇了r個原子,分別是a1,a2,……,ar,根據匹配追蹤的流程可以知道待分解訊號x每次迭代後剩餘的殘差ermp為
比較式(3)的第2個等號表示的eromp與此處的ermp也可以體會出omp與mp的區別吧。
【參考文獻】
同濟大學數學系. 線性代數(第五版)[m].高等教育出版社,2007:114.
joel a. tropp and annac. gilbert . signal recovery from random measurements via orthogonal matchingpursuit[j]. ieee transactions on information theory, vol. 53, no. 12, december2007.
沙威. 「壓縮感測」引論.
施密特正交化
對於一組向量,有時候我們需要對其進行正交化處理,也就是說,該組向量中任意兩個向量都是互相垂直的。那麼,要怎麼做呢?假設只有兩個向量,vec v 0 和 vec v 1 正交化的幾何示意圖如下所示。假設正交化之後的向量為 vec w 0 和 vec w 1 那麼由圖可知,可得 vec w 0 vec ...
列正交化 施密特正交化方法
a1 1 1 0 0 a2 1 0 1 0 a3 1 0 0 1 a a1 a2 a3 u a m,n size u y u y 1 y 1 norm y 1 for k 2 n y k u k endfor k 2 n for j k n y j y j y k 1 y j y k 1 endp1...
向量的施密特正交化
先看乙個例子 設三個向量分別為 1 2 3 1,1,0 t 1,0,1 t 1,1,1 t 那麼對 1 2 正交化 1 2 1 1 1,0 t 2 2,1 1,1 1 1,0 1 t 1 1 0 1 1 01 1 1 1 0 0 1,1,0 t 1 0,1 t 12 1 1,0 t 12 1 1,2...