常见测量矩阵的MATLAB实现

下面以文献【吴赟.压缩感知测量矩阵的研究[D]. 西安电子科技大学硕士学位论文,2012】为依据,给出文献中2.2节内容所述的六种测量矩阵MATLAB实现代码,仅为一种参考实现方式,还未验证其正确性。

1、高斯矩阵

以下代码生成的高斯矩阵方差为1,若为改为1/M,只须将除以根号M即可。

[plain] view plaincopy
  1. function [ Phi ] = GaussMtx( M,N )
  2. %GaussMtx Summary of this function goes here
  3. %   Generate Bernoulli matrix
  4. %   M -- RowNumber
  5. %   N -- ColumnNumber
  6. %   Phi -- The Gauss matrix
  7. %% Generate Gauss matrix
  8. Phi = randn(M,N);
  9. %Phi = Phi/sqrt(M);
  10. end

2、伯努利矩阵

以下代码是按式(2-8)生成的伯努利矩阵,若要按式(2-9)生成则需使用后半部分注释掉的代码即可。注意代码中用到了MATLAB自带的randi函数,若你的MATLAB版本较低,可能要用randint函数代替,后面若用到此函数则一样要注意这一点。

[plain] view plaincopy
  1. function [ Phi ] = BernoulliMtx( M,N )
  2. %BernoulliMtx Summary of this function goes here
  3. %   Generate Bernoulli matrix
  4. %   M -- RowNumber
  5. %   N -- ColumnNumber
  6. %   Phi -- The Bernoulli matrix
  7. %% (1)Generate Bernoulli matrix(The first kind)
  8. % 1--P=0.5   -1--P=0.5
  9. Phi = randi([0,1],M,N);%If your MATLAB version is too low,please use randint instead
  10. Phi(Phi==0) = -1;
  11. %Phi = Phi/sqrt(M);
  12. % %% (2)Generate Bernoulli matrix(The second kind)
  13. % % 1--P=1/6   -1--P=1/6  0--2/3
  14. %     Phi = randi([-1,4],M,N);%If your MATLAB version is too low,please use randint instead
  15. %     Phi(Phi==2) = 0;%P=1/6
  16. %     Phi(Phi==3) = 0;%P=1/6
  17. %     Phi(Phi==4) = 0;%P=1/6
  18. %     %Phi = Phi*sqrt(3/M);
  19. end

3、部分哈达玛矩阵

由于MATLAB自带的函数hadamard参数有限制,所以程序中首先计算满足要求的参数L,需要注意的是,hadamard参数并不像文献中所述仅为2的整数次幂,而是12的整数倍或20的整数倍或2的整数次幂,详情在MATLAB查看hadamard的help文件。

[plain] view plaincopy
  1. function [ Phi ] = PartHadamardMtx( M,N )
  2. %PartHadamardMtx Summary of this function goes here
  3. %   Generate part Hadamard matrix
  4. %   M -- RowNumber
  5. %   N -- ColumnNumber
  6. %   Phi -- The part Hadamard matrix
  7. %% parameter initialization
  8. %Because the MATLAB function hadamard handles only the cases where n, n/12,
  9. %or n/20 is a power of 2
  10. L_t = max(M,N);%Maybe L_t does not meet requirement of function hadamard
  11. L_t1 = (12 - mod(L_t,12)) + L_t;
  12. L_t2 = (20 - mod(L_t,20)) + L_t;
  13. L_t3 = 2^ceil(log2(L_t));
  14. L = min([L_t1,L_t2,L_t3]);%Get the minimum L
  15. %% Generate part Hadamard matrix
  16. Phi = [];
  17. Phi_t = hadamard(L);
  18. RowIndex = randperm(L);
  19. Phi_t_r = Phi_t(RowIndex(1:M),:);
  20. ColIndex = randperm(L);
  21. Phi = Phi_t_r(:,ColIndex(1:N));
  22. end

4、部分傅里叶矩阵

以下代码生成的是部分傅里叶矩阵,这里要提的一点是,有关“归一化”的概念在网上说法不一,一种说法是向量除以向量各项之和,另一种说法是向量除以向量的2范数(各项平方之和再开方),这里采用后者。

[plain] view plaincopy
  1. function [ Phi ] = PartFourierMtx( M,N )
  2. %PartFourierMtx Summary of this function goes here
  3. %   Generate part Fourier matrix
  4. %   M -- RowNumber
  5. %   N -- ColumnNumber
  6. %   Phi -- The part Fourier matrix
  7. %% Generate part Fourier matrix
  8. Phi_t = fft(eye(N,N))/sqrt(N);%Fourier matrix
  9. RowIndex = randperm(N);
  10. Phi = Phi_t(RowIndex(1:M),:);%Select M rows randomly
  11. %normalization
  12. for ii = 1:N
  13. Phi(:,ii) = Phi(:,ii)/norm(Phi(:,ii));
  14. end
  15. end

5、稀疏随机矩阵

[plain] view plaincopy
  1. function [ Phi ] = SparseRandomMtx( M,N,d )
  2. %SparseRandomMtx Summary of this function goes here
  3. %   Generate SparseRandom matrix
  4. %   M -- RowNumber
  5. %   N -- ColumnNumber
  6. %   d -- The number of '1' in every column,d<M
  7. %   Phi -- The SparseRandom matrix
  8. %% Generate SparseRandom matrix
  9. Phi = zeros(M,N);
  10. for ii = 1:N
  11. ColIdx = randperm(M);
  12. Phi(ColIdx(1:d),ii) = 1;
  13. end
  14. end

6、托普利兹矩阵和循环矩阵

这里先给出托普利兹矩阵,文中说经过M次循环,这里直接利用MATLAB自带函数生成一个托普利兹方阵再取前M行。

[plain] view plaincopy
  1. function [ Phi ] = ToeplitzMtx( M,N )
  2. %ToeplitzMtx Summary of this function goes here
  3. %   Generate Toeplitz matrix
  4. %   M -- RowNumber
  5. %   N -- ColumnNumber
  6. %   Phi -- The Toeplitz matrix
  7. %% Generate a random vector
  8. %     %(1)Gauss
  9. %     u = randn(1,2*N-1);
  10. %(2)Bernoulli
  11. u = randi([0,1],1,2*N-1);
  12. u(u==0) = -1;
  13. %% Generate Toeplitz matrix
  14. Phi_t = toeplitz(u(N:end),fliplr(u(1:N)));
  15. Phi = Phi_t(1:M,:);
  16. end

下面是循环矩阵,仍然利用MATLAB自带函数生成。

[plain] view plaincopy
  1. function [ Phi ] = CirculantMtx( M,N )
  2. %CirculantMtx Summary of this function goes here
  3. %   Generate Circulant matrix
  4. %   M -- RowNumber
  5. %   N -- ColumnNumber
  6. %   Phi -- The Circulant matrix
  7. %% Generate a random vector
  8. %     %(1)Gauss
  9. %     u = randn(1,N);
  10. %(2)Bernoulli
  11. u = randi([0,1],1,N);
  12. u(u==0) = -1;
  13. %% Generate Circulant matrix
  14. Phi_t = toeplitz(circshift(u,[1,1]),fliplr(u(1:N)));
  15. Phi = Phi_t(1:M,:);
  16. end

以上都是采用MATLAB自带的toeplitz函数,这需要首先生成一个随机向量,而托普利兹矩阵和循环矩阵的区别也就在于这个随机向量的结构不同,注意代码中有关toeplitz函数的两个输入参数好好体会即可。

常见测量矩阵的MATLAB实现相关推荐

  1. matlab 测量矩阵,压缩感知中的常见测量矩阵及其MATLAB实现代码

    压缩感知中的常见测量矩阵及其MATLAB实现代码 压缩感知中的常见测量矩阵及其MATLAB实现代码 原文链接:http://blog.csdn.net/jbb0523/article/details/ ...

  2. 压缩感知高斯测量矩阵matlab,压缩感知的常见测量矩阵

    题目:压缩感知的常见测量矩阵 下面首先给出十篇参考文献中有关测量矩阵的叙述,然后以一篇硕士论文中对七种常见测量矩阵的描述依据,给出了这七种常见测量矩阵的MATLAB实现代码,以为以后的研究提供一个参考 ...

  3. 压缩感知的常见测量矩阵

    题目:压缩感知的常见测量矩阵 下面首先给出十篇参考文献中有关测量矩阵的叙述,然后以一篇硕士论文中对七种常见测量矩阵的描述依据,给出了这七种常见测量矩阵的MATLAB实现代码,以为以后的研究提供一个参考 ...

  4. 浅谈压缩感知(三十二):压缩感知的常见测量矩阵

    一.参考文献中常见的测量矩阵 [1]喻玲娟,谢晓春.压缩感知介绍[J].电视技术,2008,32(12):16-18. [2]李树涛,魏丹.压缩传感综述[J]. 自动化学报,2009,35(11):1 ...

  5. 压缩感知高斯测量矩阵matlab,浅谈压缩感知(十七):测量矩阵之有限等距常数RIC的计算...

    有限等距常数(RestrictedIsometry Constant, RIC)是与有限等距性质(Restricted IsometryProperty, RIP)紧密结合在一起的一个参数. 一.RI ...

  6. 压缩感知测量矩阵构造方法研究

    前言 这是我本科毕设的题目,现在毕业过了一个多月才想起来把毕设做的整理一下,写这个博客不为别的,只为纪念一下本科最后的时光吧.记得刚拿到这个题目时,满脑子都是黑人问号,压缩感知到底是个什么东东?也正是 ...

  7. 压缩感知高斯测量矩阵matlab,压缩感知matlab

    MATLAB代码如下: 压缩感知仿真实例 压缩感知仿真实例在MATLAB R2001b中的计算结果如下: 原图像 采样率0.7 采样率0.5 采样率0.3 压缩感知仿真实例采用均方误差...... ( ...

  8. matlab 测量矩阵,急求一个测量矩阵采用分块多项式矩阵时怎样引用的代码!!!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 各位大佬们,在压缩感知中,当测量矩阵采用分块多项式矩阵时,怎样写代码,下面是采用高斯矩阵时的代码 clc;clear %% 1. 时域测试信号生成 K=7 ...

  9. 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结

    Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...

最新文章

  1. nginx已添加systemctl,但不能开机自启动问题
  2. Using rqt_console and roslaunch
  3. maven deploy plugin_学习Maven之Maven Surefire Plugin
  4. mysql 主从同步配置
  5. sublime支持虚拟环境python2.7
  6. 未捕获的异常 'NSInternalInconsistencyException'
  7. jquery ajax xml attribute,获得jQuery ajax和asp.net webmethod xml响应工作
  8. Spring开发--Bean配置实例讲解
  9. Seata多微服务互相调用_全局分布式事物使用案例_业务数据库准备---微服务升级_SpringCloud Alibaba工作笔记0059
  10. 电脑常见故障排除手册(黑屏、死机、重启、蓝屏)
  11. 网络安全之DOS攻击
  12. XF660R型号良田高拍仪接口开发,通过图片文件的二进制数据进行图片上传
  13. 人工智能300年!LSTM之父万字长文:详解现代AI和深度学习发展史
  14. Docker的volumes踩坑
  15. deep learning (深度学习)资源整理,非常全面【转】
  16. Redis -- 主从
  17. vmware虚拟机上网设置教程(vmware虚拟机设置网络)
  18. 今晚 8 点,开发者赏金计划正式开启
  19. 思科网络安全 第十一章测验答案
  20. Python语法解析器PLY( lex and yacc in Python)

热门文章

  1. 三星的typec可以充MacBook
  2. 用tar备份linux
  3. oracle使用存储过程做铺底数据
  4. java学习笔记-4 JVM垃圾回收(GC)
  5. HTTP基础及基本配置
  6. webpack 使用教程--实时刷新测试
  7. HeartBeat Install
  8. RHEL7.0系统相关配置
  9. [公告]网站恢复正常运行
  10. hdu 5101(二分)