1 压缩感知理论基础
压缩感知(CS)技术处理信号的过程一般分为以下三个步骤:①信号的稀疏表示。CS要求信号具有稀疏性,若原始信号是稀疏的,则可直接用于后续操作;若原始信号具有稀疏性但不是稀疏的,则利用稀疏基将其稀疏化;②观测矩阵(也称测量矩阵)。观测矩阵用于对原始信号进行压缩采样;③重构方法。重构是指从少量信息中恢复出大量数据,CS具有多种重构方法。图1是CS数学框架示意图。
2 OMP算法原理
正交匹配跟踪(OMP)算法是一种贪婪算法,其基本思想是在迭代过程中,每一次从感知矩阵A选择与残差余量最匹配的一个原子(即与残差最相关的列),来构建稀疏信号,并计算出新的残差余量。由于每次只选择一个原子,因此被选择的原子与残差余量几乎正交,为保证不重复选择此原子,需从感知矩阵中删除这一列,然后再继续挑选与信号残差最匹配的一列,循环迭代,直至残差低于迭代停止条件。OMP方法的具体流程图如表1所示:
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
4 实验结果
实验结果表明,OMP算法可以对稀疏信号进行恢复并能达到较高的恢复精度。