• 浅谈压缩感知(七):常见测量矩阵的MATLAB实现


    1、随机高斯测量矩阵

    function [ Phi ] = GaussMtx( M,N )
    %GaussMtx Summary of this function goes here
    %   Generate Bernoulli matrix 
    %   M -- RowNumber
    %   N -- ColumnNumber
    %   Phi -- The Gauss matrix
    
    %% Generate Gauss matrix   
        Phi = randn(M,N);
        %Phi = Phi/sqrt(M);
    end

    2、随机贝努力测量矩阵

    function [ Phi ] = BernoulliMtx( M,N )
    %BernoulliMtx Summary of this function goes here
    %   Generate Bernoulli matrix 
    %   M -- RowNumber
    %   N -- ColumnNumber
    %   Phi -- The Bernoulli matrix
    
    %% (1)Generate Bernoulli matrix(The first kind)
    % 1--P=0.5   -1--P=0.5
        Phi = randi([0,1],M,N);%If your MATLAB version is too low,please use randint instead
        Phi(Phi==0) = -1;
        %Phi = Phi/sqrt(M);
    % %% (2)Generate Bernoulli matrix(The second kind)
    % % 1--P=1/6   -1--P=1/6  0--2/3
    %     Phi = randi([-1,4],M,N);%If your MATLAB version is too low,please use randint instead
    %     Phi(Phi==2) = 0;%P=1/6
    %     Phi(Phi==3) = 0;%P=1/6
    %     Phi(Phi==4) = 0;%P=1/6
    %     %Phi = Phi*sqrt(3/M);
    end

    3、部分哈达玛测量矩阵

    function [ Phi ] = PartHadamardMtx( M,N )
    %PartHadamardMtx Summary of this function goes here
    %   Generate part Hadamard matrix 
    %   M -- RowNumber
    %   N -- ColumnNumber
    %   Phi -- The part Hadamard matrix
    
    %% parameter initialization
    %Because the MATLAB function hadamard handles only the cases where n, n/12,
    %or n/20 is a power of 2
        L_t = max(M,N);%Maybe L_t does not meet requirement of function hadamard
        L_t1 = (12 - mod(L_t,12)) + L_t;
        L_t2 = (20 - mod(L_t,20)) + L_t; 
        L_t3 = 2^ceil(log2(L_t));
        L = min([L_t1,L_t2,L_t3]);%Get the minimum L
    %% Generate part Hadamard matrix   
        Phi = [];
        Phi_t = hadamard(L);
        RowIndex = randperm(L);
        Phi_t_r = Phi_t(RowIndex(1:M),:);
        ColIndex = randperm(L);
        Phi = Phi_t_r(:,ColIndex(1:N));
    end

    4、部分傅里叶测量矩阵

    function [ Phi ] = PartFourierMtx( M,N )
    %PartFourierMtx Summary of this function goes here
    %   Generate part Fourier matrix 
    %   M -- RowNumber
    %   N -- ColumnNumber
    %   Phi -- The part Fourier matrix
    
    %% Generate part Fourier matrix   
        Phi_t = fft(eye(N,N))/sqrt(N);%Fourier matrix
        RowIndex = randperm(N);
        Phi = Phi_t(RowIndex(1:M),:);%Select M rows randomly
        %normalization
        for ii = 1:N
            Phi(:,ii) = Phi(:,ii)/norm(Phi(:,ii));
        end
    end

    5、稀疏随机测量矩阵

    function [ Phi ] = SparseRandomMtx( M,N,d )
    %SparseRandomMtx Summary of this function goes here
    %   Generate SparseRandom matrix 
    %   M -- RowNumber
    %   N -- ColumnNumber
    %   d -- The number of '1' in every column,d<M 
    %   Phi -- The SparseRandom matrix
    
    %% Generate SparseRandom matrix   
        Phi = zeros(M,N);
        for ii = 1:N
            ColIdx = randperm(M);
            Phi(ColIdx(1:d),ii) = 1;
        end
    end

    6、托普利兹测量矩阵与循环测量矩阵

    function [ Phi ] = ToeplitzMtx( M,N )
    %ToeplitzMtx Summary of this function goes here
    %   Generate Toeplitz matrix 
    %   M -- RowNumber
    %   N -- ColumnNumber
    %   Phi -- The Toeplitz matrix
    
    %% Generate a random vector
    %     %(1)Gauss
    %     u = randn(1,2*N-1);
        %(2)Bernoulli
        u = randi([0,1],1,2*N-1);
        u(u==0) = -1;
    %% Generate Toeplitz matrix   
        Phi_t = toeplitz(u(N:end),fliplr(u(1:N)));
        Phi = Phi_t(1:M,:);
    end
    function [ Phi ] = CirculantMtx( M,N )
    %CirculantMtx Summary of this function goes here
    %   Generate Circulant matrix 
    %   M -- RowNumber
    %   N -- ColumnNumber
    %   Phi -- The Circulant matrix
    
    %% Generate a random vector
    %     %(1)Gauss
    %     u = randn(1,N);
        %(2)Bernoulli
        u = randi([0,1],1,N);
        u(u==0) = -1;
    %% Generate Circulant matrix   
        Phi_t = toeplitz(circshift(u,[1,1]),fliplr(u(1:N)));
        Phi = Phi_t(1:M,:);
    end

    参考来源:http://blog.csdn.net/jbb0523/article/details/44700735

  • 相关阅读:
    【原创】这道Java基础题真的有坑!我也没想到还有续集。
    【原创】这道Java基础题真的有坑!我求求你,认真思考后再回答。
    【原创】这道面试题我真不知道面试官想要的回答是什么
    【原创】Dubbo加权轮询负载均衡的源码和Bug,了解一下?
    【原创】一文讲透Dubbo负载均衡之最小活跃数算法
    使用环信开发项目遇到错误提示 configure your build for VectorDrawableCompat
    Android开发中使用七牛云存储进行图片上传下载
    Android5.0中Material Design的新特性
    CameraAPI中的 自定义照相功能
    RecyclerView使用技巧(item动画及嵌套高度适配解决方案)
  • 原文地址:https://www.cnblogs.com/AndyJee/p/5044368.html
Copyright © 2020-2023  润新知