壓縮感知重構算法之子空間追蹤(SP)


SP的提出時間比CoSaMP提出時間稍晚一些,但和壓縮采樣匹配追蹤(CoSaMP)的方法幾乎是一樣的。SP與CoSaMP主要區別在於“In each iteration, in the SP algorithm, only K new candidates are added, while theCoSAMP algorithm adds 2K vectors.”,即SP每次選擇K個原子,而CoSaMP則選擇2K個原子;這樣帶來的好處是“This makes the SP algorithm computationally moreefficient,”。

在看代碼之前,先看了SP的論文[1],在摘要部分提到SP算法具有兩個主要特點:一是較低的計算復雜度,特別是針對比較稀疏的信號的重構時,相比OMP算法,SP算法具有更低的計算復雜度;二是具有和線性規划優化(LP)方法相近的重構精度。在待重構信號具有比較小的稀疏度的情況下,SP的計算復雜度明顯比LP方法的小,但是重構質量比LP的差。
在論文中還提到這么一段與OMP方法的比較,並提供了圖形加以理解。SP方法和OMP方法最大的區別就是針對所選擇的原子有無回溯(反向跟蹤)。

參考文獻[2]中對SP算法進行了解釋,如下所示:

在論文中還提到這么一段與OMP方法的比較,並提供了圖形加以理解。SP方法和OMP方法最大的區別就是針對所選擇的原子有無回溯(反向跟蹤)。
以下是文獻[1]中的給出的SP算法流程:

這個算法流程的初始化(Initialization)其實就是類似於CoSaMP的第1次迭代,注意第(1)步中選擇了K個原子:“K indices corresponding to the largest magnitude entries”,在CoSaMP里這里要選擇2K個最大的原子,后面的其它流程都一樣。這里第(5)步增加了一個停止迭代的條件:當殘差經過迭代后卻變大了的時候就停止迭代。
鑒於SP與CoSaMP如此相似,這里不就再單獨給出SP的步驟了,參考《壓縮感知重構算法之壓縮采樣匹配追蹤(CoSaMP)》,只需將第(2)步中的2K改為K即可。
function [ theta ] = CS_SP( y,A,K )
%CS_SP Summary of this function goes here 
%Version: 1.0 written by jbb0523 @2015-05-01 
%   Detailed explanation goes here 
%   y = Phi * x 
%   x = Psi * theta 
%   y = Phi*Psi * theta 
%   令 A = Phi*Psi, 則y=A*theta 
%   K is the sparsity level 
%   現在已知y和A,求theta 
%   Reference:Dai W,Milenkovic O.Subspace pursuit for compressive sensing 
%   signal reconstruction[J].IEEE Transactions on Information Theory, 
%   2009,55(5):2230-2249. 
    [y_rows,y_columns] = size(y); 
    if y_rows<y_columns 
        y = y';%y should be a column vector 
    end 
    [M,N] = size(A);%傳感矩陣A為M*N矩陣 
    theta = zeros(N,1);%用來存儲恢復的theta(列向量) 
    Pos_theta = [];%用來迭代過程中存儲A被選擇的列序號 
    r_n = y;%初始化殘差(residual)為y 
    for kk=1:K%最多迭代K次 
        %(1) Identification 
        product = A'*r_n;%傳感矩陣A各列與殘差的內積 
        [val,pos]=sort(abs(product),'descend'); 
        Js = pos(1:K);%選出內積值最大的K列 
        %(2) Support Merger 
        Is = union(Pos_theta,Js);%Pos_theta與Js並集 
        %(3) Estimation 
        %At的行數要大於列數,此為最小二乘的基礎(列線性無關) 
        if length(Is)<=M 
            At = A(:,Is);%將A的這幾列組成矩陣At 
        else%At的列數大於行數,列必為線性相關的,At'*At將不可逆 
            break;%跳出for循環 
        end 
        %y=At*theta,以下求theta的最小二乘解(Least Square) 
        theta_ls = (At'*At)^(-1)*At'*y;%最小二乘解 
        %(4) Pruning 
        [val,pos]=sort(abs(theta_ls),'descend'); 
        %(5) Sample Update 
        Pos_theta = Is(pos(1:K)); 
        theta_ls = theta_ls(pos(1:K)); 
        %At(:,pos(1:K))*theta_ls是y在At(:,pos(1:K))列空間上的正交投影 
        r_n = y - At(:,pos(1:K))*theta_ls;%更新殘差  
        if norm(r_n)<1e-6%Repeat the steps until r=0 
            break;%跳出for循環 
        end 
    end 
    theta(Pos_theta)=theta_ls;%恢復出的theta 
end 
鑒於SP與CoSaMP的極其相似性,這里就不再給出單次重構和測量數M與重構成功概率關系曲線繪制例程代碼了,只需將CoSaMP中調用CS_CoSaMP函數的部分改為調用CS_SP即可,無須任何其它改動。這里給出對比兩種重構算法所繪制的測量數M與重構成功概率關系曲線的例程代碼,只有這樣才可以看出兩種算法的重構性能優劣,以下是在分別運行完SP與CoSaMP的測量數M與重構成功概率關系曲線繪制例程代碼的基礎上,即已經存儲了數據CoSaMPMtoPercentage1000.mat和SPMtoPercentage1000.mat:
clear all;close all;clc; 
load CoSaMPMtoPercentage1000; 
PercentageCoSaMP = Percentage; 
load SPMtoPercentage1000; 
PercentageSP = Percentage; 
S1 = ['-ks';'-ko';'-kd';'-kv';'-k*']; 
S2 = ['-rs';'-ro';'-rd';'-rv';'-r*']; 
figure; 
for kk = 1:length(K_set) 
    K = K_set(kk); 
    M_set = 2*K:5:N; 
    L_Mset = length(M_set); 
    plot(M_set,PercentageCoSaMP(kk,1:L_Mset),S1(kk,:));%繪出x的恢復信號 
    hold on;     
    plot(M_set,PercentageSP(kk,1:L_Mset),S2(kk,:));%繪出x的恢復信號 
end 
hold off; 
xlim([0 256]); 
legend('CoSaK=4','SPK=4','CoSaK=12','SPK=12','CoSaK=20',... 
    'SPK=20','CoSaK=28','SPK=28','CoSaK=36','SPK=36'); 
xlabel('Number of measurements(M)'); 
ylabel('Percentage recovered'); 
title('Percentage of input signals recovered correctly(N=256)(Gaussian)'); 
運行結果如下:

 

可以發現在M較小時SP略好於CoSaMP,當M變大時二者重構性能幾乎一樣。
 
參考文獻:
[1] Dai W,Milenkovic O.Subspacepursuit for compressive sensing signal reconstruction[J].IEEETransactions on Information Theory,2009,55(5):2230-2249.
[2] 楊真真,楊震,孫林慧.信號壓縮重構的正交匹配追蹤類算法綜述[J]. 信號處理,2013,29(4):486-496.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM