浅谈压缩感知(十八):常见测量矩阵及其实现

  1. 随机高斯矩阵

    MATLAB实现:

    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. 随机伯努利矩阵

    MATLAB实现:

    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. 部分哈达玛矩阵

    MATLAB实现:

    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. 部分傅里叶矩阵

    MATLAB实现:

    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. 稀疏随机矩阵

    MATLAB实现:

    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. 托普利兹矩阵和循环矩阵

    MATLAB实现:

    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

     

     

posted @ 2015-12-31 15:41  AndyJee  阅读(6859)  评论(1编辑  收藏  举报