压缩感知理论基础

压缩感知(CS)技术处理信号的过程一般分为以下三个步骤:①信号的稀疏表示。CS要求信号具有稀疏性,若原始信号是稀疏的,则可直接用于后续操作;若原始信号具有稀疏性但不是稀疏的,则利用稀疏基将其稀疏化;②观测矩阵(也称测量矩阵)。观测矩阵用于对原始信号进行压缩采样;③重构方法。重构是指从少量信息中恢复出大量数据,CS具有多种重构方法。图1是CS数学框架示意图。

压缩感知算法之正交匹配跟踪_java

2 OMP算法原理

   正交匹配跟踪(OMP)算法是一种贪婪算法,其基本思想是在迭代过程中,每一次从感知矩阵A选择与残差余量最匹配的一个原子(即与残差最相关的列),来构建稀疏信号,并计算出新的残差余量。由于每次只选择一个原子,因此被选择的原子与残差余量几乎正交,为保证不重复选择此原子,需从感知矩阵中删除这一列,然后再继续挑选与信号残差最匹配的一列,循环迭代,直至残差低于迭代停止条件。OMP方法的具体流程图如表1所示:

压缩感知算法之正交匹配跟踪_java_02

压缩感知算法之正交匹配跟踪_java_03

3 OMP算法代码

function [ theta ] = CS_OMP(y,A,t ) 

%   Detailed explanation goes here 

%   y = Phi * x 

%   x = Psi * theta 

%   y = Phi*Psi * theta 

%   令 A = Phi*Psi, 则y=A*theta 

%   现在已知y和A,求theta 

    [y_rows,y_columns] = size(y);  %矩阵y的大小为y_rows,y_columns

    if y_rows<y_columns 

        y = y';         %y shouldbe a column vector 

    end 

    [M,N] = size(A);       %传感矩阵A为M*N矩阵  

    theta = zeros(N,1);    %用来存储恢复的theta(一行N列向量,全0)  

    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;%更新残差          

    end  

    theta(Pos_theta)=theta_ls;%恢复出的theta 

end 

实验结果

压缩感知算法之正交匹配跟踪_java_04

   实验结果表明,OMP算法可以对稀疏信号进行恢复并能达到较高的恢复精度。