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

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));
    end
end

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;
    end
end

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

参考来源:http://blog.csdn.net/jbb0523/article/details/44700735

时间: 2024-11-03 05:23:37

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

浅谈压缩感知(二十四):压缩感知重构算法之子空间追踪(SP)

主要内容: SP的算法流程 SP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 SP与CoSaMP的性能比较 一.SP的算法流程 压缩采样匹配追踪(CoSaMP)与子空间追踪(SP)几乎完全一样,因此算法流程也基本一致. SP与CoSaMP主要区别在于"Ineach iteration, in the SP algorithm, only K new candidates are added, while theCoSAMP algorithm adds 2K

浅谈压缩感知(十五):测量矩阵之spark常数

在压缩感知中,有一些用来评价测量矩阵的指标,如常见的RIP等,除了RIP之外,spark常数也能够用来衡量能否成为合适的测量矩阵. 1.零空间条件NULL Space Condition 在介绍spark之前,先考虑一下测量矩阵的零空间. 这里从矩阵的零空间来考虑测量矩阵需满足的条件:对于K稀疏的信号x,当且仅当测量矩阵的零空间与2K个基向量张成的线性空间没有交集,或者说零空间中的向量不在2K个基向量张成的线性空间中. 上述描述的性质似乎有点难懂,那么与之等价的表述就是spark常数. 2.sp

浅谈压缩感知(十六):感知矩阵之RIP

在压缩感知中,总是看到"矩阵满足RIP"之类的字眼,没错,这是一个压缩感知绕不开的术语,有限等距性质(Restricted Isometry Property, RIP). 注意:RIP性质针对的同样是感知矩阵而非测量矩阵. 0.相关概念与符号 1.RIP定义 中文版: 英文版: 概括: (RIP)矩阵满足2K阶RIP保证了能够把任意一个K稀疏信号θK映射为唯一的y,也就是说要想通过压缩观测y恢复K稀疏信号θK,必须保证传感矩阵满足2K阶RIP,满足2K阶RIP的矩阵任意2K列线性无关

浅谈压缩感知(十四):傅里叶矩阵与小波变换矩阵的MATLAB实现

主要内容: 傅里叶矩阵及其MATLAB实现 小波变换矩阵及其MATLAB实现  傅里叶矩阵及其MATLAB实现 傅里叶矩阵的定义:(来源: http://mathworld.wolfram.com/FourierMatrix.html) 傅里叶矩阵的MATLAB实现: dftmtx(N) is the N-by-N complex matrix of values around the unit-circle whose inner product with a column vector of

浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)

主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.gOMP的算法流程 广义正交匹配追踪(Generalized OMP, gOMP)算法可以看作为OMP算法的一种推广.OMP每次只选择与残差相关最大的一个,而gOMP则是简单地选择最大的S个.之所以这里表述为"简单地选择"是相比于ROMP之类算法的,不进行任何其它处理,只是选择最大的S个而已. gOMP的算法流程: 二.gOMP的MATLAB实现(CS_gOMP

浅谈压缩感知(九):范数与稀疏性

问题: 压缩感知问题求稀疏解时,一般采用0范数或者1范数来建立数学模型.那么为什么0范数或1范数可以得到稀疏解呢? 解释与分析: 1.范数 常见的有L0范数.L1范数.L2范数,经常要将L0范数等价为L1范数去求解,因为L1范数求解是一个凸优化问题,而L0范数求解是一个NP难问题. L0范数指的是x中非零元素的个数,即x的稀疏度,如果x是K稀疏的,则l0范数等于K: L1范数指的是x中所有元素模值的和: L2范数指的是x中所有元素模值平方的和 再平方,这个带公式就可以了,它代表着距离的概念: 还

浅谈压缩感知(二十六):压缩感知重构算法之分段弱正交匹配追踪(SWOMP)

主要内容: SWOMP的算法流程 SWOMP的MATLAB实现 一维信号的实验与结果 门限参数a.测量数M与重构成功概率关系的实验与结果 SWOMP与StOMP性能比较 一.SWOMP的算法流程 分段弱正交匹配追踪(Stagewise Weak OMP)可以说是StOMP的一种修改算法,它们的唯一不同是选择原子时的门限设置,这可以降低对测量矩阵的要求.我们称这里的原子选择方式为"弱选择"(Weak Selection),StOMP的门限设置由残差决定,这对测量矩阵(原子选择)提出了要求

浅谈压缩感知(十三):压缩感知与传统压缩

导言: 压缩感知,顾名思义,就是感知压缩,这里包含两层意思,1.感知,即采集或采样,在传统的信号采集中,为了不失真,必须满足Nyquist采样定理,在上一篇博文已经介绍了压缩感知在采样上与传统信号采集的联系与区别,参照http://www.cnblogs.com/AndyJee/p/5050321.html : 2.压缩,即数据压缩,这里是有区别与传统压缩的一个概念,因此本文主要从压缩的角度出发,介绍压缩感知与传统压缩的联系与区别. 传统压缩: 传统的信号获取与处理过程包括:采样.压缩.传输.解

浅谈压缩感知(五):单像素相机

前面介绍了关于压缩感知的一些理论知识,这里介绍压缩感知最简单最开始的应用--单像素相机Single Pixel Camera. 1.单像素相机的模型与结构: 如下图所示: PD是光感器件(即单像素),对应公式中的yi: 场景图像对应公式中的f: DMD是数字微镜阵列,用来生成测量矩阵,每一次对应公式中的Φ其中一行. 实际的实验场景: 2.单像素相机的重建结果