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);
随机伯努利矩阵
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);
部分哈达玛矩阵
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));
部分傅里叶矩阵
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));
稀疏随机矩阵
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;
托普利兹矩阵和循环矩阵
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,:);
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,:);