zoukankan      html  css  js  c++  java
  • 压缩感知(六)

    常用测量矩阵及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

    随机贝努力测量矩阵

    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

    部分哈达玛测量矩阵

    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

    部分傅里叶测量矩阵

    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

    稀疏随机测量矩阵

    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

    托普利兹测量矩阵

    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
  • 相关阅读:
    [转]C#获取文件的MD5值
    跨域ajax返回
    根据子表的条件修改主表的数据
    网络与多线程的设计例子
    网络与多线程的设计模式
    tcpdump移植和使用 -- by Johnson
    关于程序的歪门邪说--by Johnson
    重装系统——联想window 10
    Qt项目中error: C2001: newline in constant错误的解决
    使用NSIS制作Windows安装程序快速入门
  • 原文地址:https://www.cnblogs.com/wangyinan0214/p/12331043.html
Copyright © 2011-2022 走看看