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


    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

       

  • 相关阅读:
    linux命令: mount
    梳理一下uboot是如何从nandflash挂载文件系统的
    MDK的优化应用
    面向对象设计思想:面向对象设计的基本原则
    问题
    nodejs安装不了和npm安装不了的解决方法
    []: secureCRT连接ubuntu问题- The remote system refused the connection
    字符设备驱动[深入]:linux cdev详解
    使用MDK将STM32的标准库编译成lib使用
    liteos任务(二)
  • 原文地址:https://www.cnblogs.com/AndyJee/p/5091932.html
Copyright © 2020-2023  润新知