压缩感知重构算法之子空间追踪(SP)

- function [ theta ] = CS_SP( y,A,K )
- %CS_SP Summary of this function goes here
- %Version: 1.0 written by jbb0523 @2015-05-01
- % Detailed explanation goes here
- % y = Phi * x
- % x = Psi * theta
- % y = Phi*Psi * theta
- % 令 A = Phi*Psi, 则y=A*theta
- % K is the sparsity level
- % 现在已知y和A,求theta
- % Reference:Dai W,Milenkovic O.Subspace pursuit for compressive sensing
- % signal reconstruction[J].IEEE Transactions on Information Theory,
- % 2009,55(5):2230-2249.
- [y_rows,y_columns] = size(y);
- if y_rows<y_columns
- y = y';%y should be a column vector
- end
- [M,N] = size(A);%传感矩阵A为M*N矩阵
- theta = zeros(N,1);%用来存储恢复的theta(列向量)
- Pos_theta = [];%用来迭代过程中存储A被选择的列序号
- r_n = y;%初始化残差(residual)为y
- for kk=1:K%最多迭代K次
- %(1) Identification
- product = A'*r_n;%传感矩阵A各列与残差的内积
- [val,pos]=sort(abs(product),'descend');
- Js = pos(1:K);%选出内积值最大的K列
- %(2) Support Merger
- Is = union(Pos_theta,Js);%Pos_theta与Js并集
- %(3) Estimation
- %At的行数要大于列数,此为最小二乘的基础(列线性无关)
- if length(Is)<=M
- At = A(:,Is);%将A的这几列组成矩阵At
- else%At的列数大于行数,列必为线性相关的,At'*At将不可逆
- break;%跳出for循环
- end
- %y=At*theta,以下求theta的最小二乘解(Least Square)
- theta_ls = (At'*At)^(-1)*At'*y;%最小二乘解
- %(4) Pruning
- [val,pos]=sort(abs(theta_ls),'descend');
- %(5) Sample Update
- Pos_theta = Is(pos(1:K));
- theta_ls = theta_ls(pos(1:K));
- %At(:,pos(1:K))*theta_ls是y在At(:,pos(1:K))列空间上的正交投影
- r_n = y - At(:,pos(1:K))*theta_ls;%更新残差
- if norm(r_n)<1e-6%Repeat the steps until r=0
- break;%跳出for循环
- end
- end
- theta(Pos_theta)=theta_ls;%恢复出的theta
- end
- clear all;close all;clc;
- load CoSaMPMtoPercentage1000;
- PercentageCoSaMP = Percentage;
- load SPMtoPercentage1000;
- PercentageSP = Percentage;
- S1 = ['-ks';'-ko';'-kd';'-kv';'-k*'];
- S2 = ['-rs';'-ro';'-rd';'-rv';'-r*'];
- figure;
- for kk = 1:length(K_set)
- K = K_set(kk);
- M_set = 2*K:5:N;
- L_Mset = length(M_set);
- plot(M_set,PercentageCoSaMP(kk,1:L_Mset),S1(kk,:));%绘出x的恢复信号
- hold on;
- plot(M_set,PercentageSP(kk,1:L_Mset),S2(kk,:));%绘出x的恢复信号
- end
- hold off;
- xlim([0 256]);
- legend('CoSaK=4','SPK=4','CoSaK=12','SPK=12','CoSaK=20',...
- 'SPK=20','CoSaK=28','SPK=28','CoSaK=36','SPK=36');
- xlabel('Number of measurements(M)');
- ylabel('Percentage recovered');
- title('Percentage of input signals recovered correctly(N=256)(Gaussian)');
压缩感知重构算法之子空间追踪(SP)的更多相关文章
- 浅谈压缩感知(二十四):压缩感知重构算法之子空间追踪(SP)
主要内容: SP的算法流程 SP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 SP与CoSaMP的性能比较 一.SP的算法流程 压缩采样匹配追踪(CoSaMP)与子 ...
- 浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)
主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.gOMP的算法流程 广义正交匹配追踪(Generalized OMP, g ...
- 浅谈压缩感知(二十五):压缩感知重构算法之分段正交匹配追踪(StOMP)
主要内容: StOMP的算法流程 StOMP的MATLAB实现 一维信号的实验与结果 门限参数Ts.测量数M与重构成功概率关系的实验与结果 一.StOMP的算法流程 分段正交匹配追踪(Stagewis ...
- 浅谈压缩感知(二十六):压缩感知重构算法之分段弱正交匹配追踪(SWOMP)
主要内容: SWOMP的算法流程 SWOMP的MATLAB实现 一维信号的实验与结果 门限参数a.测量数M与重构成功概率关系的实验与结果 SWOMP与StOMP性能比较 一.SWOMP的算法流程 分段 ...
- 压缩感知重构算法之压缩采样匹配追踪(CoSaMP)
压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出的又一个具有较大影响力的重构算法.CoSaMP也是对OMP的一种改进,每次迭代选择多个原子,除了 ...
- [转]压缩感知重构算法之分段正交匹配追踪(StOMP)
分段正交匹配追踪(StagewiseOMP)或者翻译为逐步正交匹配追踪,它是OMP另一种改进算法,每次迭代可以选择多个原子.此算法的输入参数中没有信号稀疏度K,因此相比于ROMP及CoSaMP有独到的 ...
- 浅谈压缩感知(二十三):压缩感知重构算法之压缩采样匹配追踪(CoSaMP)
主要内容: CoSaMP的算法流程 CoSaMP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 一.CoSaMP的算法流程 压缩采样匹配追踪(CompressiveS ...
- 浅谈压缩感知(二十二):压缩感知重构算法之正则化正交匹配追踪(ROMP)
主要内容: ROMP的算法流程 ROMP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 一.ROMP的算法流程 正则化正交匹配追踪ROMP算法流程与OMP的最大不同之 ...
- 浅谈压缩感知(二十一):压缩感知重构算法之正交匹配追踪(OMP)
主要内容: OMP的算法流程 OMP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.OMP的算法流程 二.OMP的MATL ...
随机推荐
- linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)
linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表 ...
- 【京东账户】——Mysql/PHP/Ajax爬坑之页头页尾加载
一.引言 实现京东的账户项目,有一个小功能,页头页尾加载.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.实现 原理: 用php文件分别写一个的页头和一个页尾,放在前后两个div里. ...
- 【京东账户】——Mysql/PHP/Ajax爬坑之购物车列表显示
一.引言 做京东账户项目中的购物车模块,功能之二是购物车列表显示.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.小功能-点击“去购物车结算” 小坑:Ajax动态生成的不能直接绑定,因 ...
- 逆向实用干货分享,Hook技术第一讲,之Hook Windows API
逆向实用干货分享,Hook技术第一讲,之Hook Windows API 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) ...
- append、extend与insert的区别
最近在自学Python语言,看到向列表增加更多数据时被append(),extend(),insert()方法绕晕了. 作为编程0基础的小白,觉得有必要自己再梳理一遍: 1.append()方法是指在 ...
- 三、js的函数
三.函数 函数是定义一次但却可以调用或执行任意多次的一段JS代码.函数有时会有参数,即函数被调用时指定了值的局部变量.函数常常使用这些参数来计算一个返回值,这个值也成为函数调用表达式的值. 1.函数声 ...
- POJ1032 Parliament(数论)
New convocation of The Fool Land's Parliament consists of N delegates. According to the present regu ...
- Java历程-初学篇 Day06 循环结构
前记:永远不要写死循环 一,while循环 先判断,再执行 while(条件){ //代码块; 迭代; } 示例: 二,do while语句 先执行一次,再判断 do{ //代码块; 迭代; }whi ...
- C#实现断点续传
断点续传的原理在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种.请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求时 ...
- 使用Grub Rescue 修复MBR
ubuntu 14.04 (本机) 1.使用以下命令查看分区: grub rescure> ls (hd0,msdos7),(hd0,msdos8),(hd0,msdos9 ...