zoukankan      html  css  js  c++  java
  • 浅谈压缩感知(七):常见测量矩阵的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

  • 相关阅读:
    1023. 组个最小数
    1021. 个位数统计
    *1020. 月饼
    *1019. 数字黑洞
    1016. 部分A+B
    *1014. 福尔摩斯的约会
    *1013. 数素数
    *1012. 数字分类
    1011. A+B和C
    *1008. 数组元素循环右移问题
  • 原文地址:https://www.cnblogs.com/AndyJee/p/5044368.html
Copyright © 2011-2022 走看看