浅谈压缩感知(十八):常见测量矩阵及其实现
-
随机高斯矩阵
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
-
随机伯努利矩阵
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
-
部分哈达玛矩阵
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
-
部分傅里叶矩阵
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
-
稀疏随机矩阵
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
-
托普利兹矩阵和循环矩阵
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