OMP算法

压缩感知:OMP算法

压缩感知重构要解决的一个问题是事先存在完整数据 c c c A = S F A=SF A=SF,观测到 y = A c y=Ac y=Ac,现要在 A A A y y y 已知的情况在求解 c c c。其中 y ( M ∗ 1 ) y(M*1) y(M1), S ( M ∗ N ) S(M*N) S(MN), F ( N ∗ N ) F(N*N) F(NN), c ( N ∗ 1 ) c(N*1) c(N1)

OMP算法流程
在这里插入图片描述
MATLAB代码

function [ x ] = OMP( y,A,t )
    % y=Ax,现在一直y,A,求x
    % t为稀疏度
    [M,N] = size(A); %传感矩阵AM*N矩阵
    x = zeros(N,1); %用来存储恢复的x(列向量)
    At = zeros(M,t); %用来存储迭代过程中A被选择的列
    Pos_x = zeros(1,t); %用来存储迭代过程中A被选择的列序号
    r_n = y; %初始化残差为y
    for ii=1:t %迭代t次
        product = A'*r_n;% A各列与残差的内积
        [val,pos] = max(abs(product));%找到最大内积绝对值
        At(:,ii) = A(:,pos);%存储这一列
        Pos_x(ii) = pos;%存储这一列的序号
        A(:,pos) = zeros(M,1);%清零A的这一列,因为它与残差正交
        %y=At(:,1:ii)*x,以下求x的最小二乘解
        x_ls = (At(:,1:ii)'*At(:,1:ii))^(-1)*At(:,1:ii)'*y;%最小二乘解
        %At(:,1:ii)*x_ls是y在At(:,1:ii)列空间上的正交投影
        r_n = y - At(:,1:ii)*x_ls;%更新残差        
    end
    x(Pos_x)=x_ls;%恢复出的x
end
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值