Bootstrap

压缩感知——OMP与CoSaMP算法的MATLAB实现

OMP算法的MATLAB实现

function x_hat = OMP(A, y, k)
    
    [~, N] = size(A);
    
    % initialization
    x_hat = zeros(N, 1);
    r = y;
    Omega = [];
    
    % main loop
    for i = 1:k
        g = r.'*A;
        [~, j] = max(abs(g)./vecnorm(A));
        Omega = [Omega j];
        x_hat(Omega) = pinv(A(:, Omega))*y;
        r = y-A*x_hat;
    end
   
end

CoSaMP算法的MATLAB实现

function x_hat = CoSaMP(A, y, k)
    
    [~, N] = size(A);
    
    % initialization
%     x_hat = zeros(N, 1);
    r = y;
    T = [];
    
    % main loop
    iter_max = 10;
    iter_cnt = 0;
    
    while iter_cnt<iter_max
        
        iter_cnt = iter_cnt+1;
        
        g = abs(r.'*A)./vecnorm(A);
        [~, I] = sort(g, 'descend');
        Omega = I(1:2*k);
        T = union(Omega, T);
        
        x_hat = zeros(N, 1);
        x_hat(T) = pinv(A(:, T))*y;
        
        [~, I] = sort(abs(x_hat), 'descend');
        T = I(1:k).';
        x_hat(I(k+1:end)) = 0;
        
        r = y-A*x_hat;
    end
   
end

完整代码及参考文献链接

OMP-CoSaMP.zip

;