浅谈压缩感知(七):常见测量矩阵的MATLAB实现

来源:互联网 发布:java开发的方向 编辑:程序博客网 时间:2024/06/08 10:39


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));    endend
复制代码

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;    endend
复制代码

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
4 0
原创粉丝点击