SAMP:稀疏度自适应匹配追踪
实际应用中信号通常是可压缩的而不一定为稀疏的,而且稀疏信号的稀疏度我们通常也会不了解的。论文中提到过高或者过低估计了信号的稀疏度,都会对信号的重构造成影响。如果过低估计了稀疏度,会影响重构的质量;而过高估计稀疏度会对算法的准确性和鲁棒性造成影响。

论文在第2部分review了现有的压缩感知重构方法的框架。如下所示:

在一部分中论文提出了两种方式:自上而下、自下而上。对这两个词还不是很理解,对论文的第2部分进行翻译如下:
在第k次迭代中,rk代表残差,Fk代表估计信号的支撑集(finalist),Ck对应的是SP/CoSAMP算法的候选集。其中,OMP、STOMP以及ROMP算法采用是自下而上的方法,循序增加x的支撑集。相比通过逐次迭代增加支撑集的方法,SP和CoSAMP采用的是自上而下的方法进行迭代优化。
如图(a)所示,OMP和StOMP算法只用了一次检测。(b)中ROMP用了两次检测来增加一个或者多个原子进入支撑集。OMP算法在每次迭代中采用计算最大内积的方法来增加支撑集,每次迭代中只有一个原子被选择。StOMP算法通过匹配滤波器以及硬阈值的方法来选择进入支撑集的原子。对于ROMP来说,采用了两次检测,第一次检测与StOMP算法相似,第二次的选择选择依据是原子相关性大小至多不超过某个原子的两倍。在这些自下而上的重构方法中,在每次迭代的最后,支撑集是结合之前迭代中的集合与此次迭代中所选择的原子所构成的。迭代后的残差是由上次的残差减去观测向量在支撑集中的原子构成的子空间上的投影得到的,这一步也称为正交化过程,保证每次迭代后的残差与支撑集的原子正交。
以SP和CoSAMP为代表的自上而下的重构方法也采用了两次不用的选择方法来更新支撑集,但是他们的支撑集大小是固定的(等于输入信号的稀疏度K)。第一次原则的选择方法与ROMP极其相似,而第二次检测更加可靠、准确。在第一次检测之后,通过结合上一次所选择的原子集合和此次选择的原子,形成候选集。求解最小二乘问题得到的前K个最大值所对应候选集中的原子即为所需的支撑集。与上述所说明的自下而上的重构方法最大的不同之处在于加入了回溯,能移除之前迭代过程中错误选择的原子。并且只有SP和CoSaMP方法具有与BP(L1优化)相似的理论支持,此外,它们在观测不准确或者是信号不严格稀疏的情况下也同样适用。
在论文的第3部分提出了SAMP算法,框架和伪代码截图如下:

可看成不同之处在于集合的大小不是固定的,而是可自适应变化的。

摘取博客中所翻译的算法流程:

在伪代码之后论文还进行了迭代终止条件和步长大小选择的讨论。SAMP综合了上述两种方法的优点。

   

在仿真实验中,对高斯信号和二进制信号重构的效果不同,如下文所示,SAMP依赖于所选用的步长和信号的类型

代码部分不再赘述,可参考文献[2]中的代码,附出SAMP算法的代码如下:

function [xr, iter_num] =SAMP(y, Phi, step_size, sigma)
% SAMP: Sparsity Adaptive Matching Pursuit algoritm for compressed sensing.
% For theoretical analysis, please refer to the paper :
% Thong. T. Do, Lu Gan and Trac D. Tran ,"Sparsity Adaptive Matching
% Purusit for practical compressed sensing" available at http://dsp.ece.rice.edu/cs
% Written by Thong Do(thongdo@jhu.edu)
% Updated on July, 26th 2008
% parameter usage:
% y: Mx1 observation vector
% Phi: MxN measurement matrix
% step_size: any positive integer value not larger than sparsity
% sigma: noise energy when sensing
% xr: reconstructed sparse signal
% iter_num: number of iterations
% Initialization
iter_num = 0;
actset_size = step_size;
active_set = [];
res = y;
stg_idx = 1; % stage index
while (norm(res)>sigma)
% candidate list
[val, idx] = sort(abs(Phi'*res), 'descend');
candidate_set = union(active_set, idx(1:actset_size));
% finalist
[val, idx] = sort(abs(pinv(Phi(:,candidate_set))*y), 'descend');
new_active_set = candidate_set(idx(1:actset_size));
new_res = y-Phi(:,new_active_set)*pinv(Phi(:,new_active_set))*y;
if (norm(new_res) >= norm(res))
% shift into a new stage
stg_idx = stg_idx + 1;
actset_size = stg_idx*step_size; else
% update residual and active set
res = new_res;
active_set= new_active_set; end iter_num = iter_num +1; %while的次数
end % loop
% reconstruction
N = size(Phi,2);
xr = zeros(N,1);
xr_active_set = pinv(Phi(:,active_set))*y;
xr(active_set) = xr_active_set;

  

参考文献:
[1]Thong T.Do,Lu Gan,NamNguyen,Trac D.Tran.Sparsity adaptive matching pursuit algorithm for practical compressed sensing[C].AsilomarConference on Signals,Systems,andComputers,Pacific Grove,California,2008,10:581-587.
[2] 彬彬有礼.压缩感知重构算法之稀疏度自适应匹配追踪(SAMP),http://blog.csdn.net/jbb0523/article/details/45690421

SAMP论文学习的更多相关文章

  1. Faster RCNN论文学习

    Faster R-CNN在Fast R-CNN的基础上的改进就是不再使用选择性搜索方法来提取框,效率慢,而是使用RPN网络来取代选择性搜索方法,不仅提高了速度,精确度也更高了 Faster R-CNN ...

  2. 《Explaining and harnessing adversarial examples》 论文学习报告

    <Explaining and harnessing adversarial examples> 论文学习报告 组员:裴建新   赖妍菱    周子玉 2020-03-27 1 背景 Sz ...

  3. 论文学习笔记 - 高光谱 和 LiDAR 融合分类合集

    A³CLNN: Spatial, Spectral and Multiscale Attention ConvLSTM Neural Network for Multisource Remote Se ...

  4. Apache Calcite 论文学习笔记

    特别声明:本文来源于掘金,"预留"发表的[Apache Calcite 论文学习笔记](https://juejin.im/post/5d2ed6a96fb9a07eea32a6f ...

  5. GoogleNet:inceptionV3论文学习

    Rethinking the Inception Architecture for Computer Vision 论文地址:https://arxiv.org/abs/1512.00567 Abst ...

  6. IEEE Trans 2008 Gradient Pursuits论文学习

    之前所学习的论文中求解稀疏解的时候一般采用的都是最小二乘方法进行计算,为了降低计算复杂度和减少内存,这篇论文梯度追踪,属于贪婪算法中一种.主要为三种:梯度(gradient).共轭梯度(conjuga ...

  7. Raft论文学习笔记

    先附上论文链接  https://pdos.csail.mit.edu/6.824/papers/raft-extended.pdf 最近在自学MIT的6.824分布式课程,找到两个比较好的githu ...

  8. 论文学习-系统评估卷积神经网络各项超参数设计的影响-Systematic evaluation of CNN advances on the ImageNet

    博客:blog.shinelee.me | 博客园 | CSDN 写在前面 论文状态:Published in CVIU Volume 161 Issue C, August 2017 论文地址:ht ...

  9. 论文学习笔记--无缺陷样本产品表面缺陷检测 A Surface Defect Detection Method Based on Positive Samples

    文章下载地址:A Surface Defect Detection Method Based on Positive Samples 第一部分  论文中文翻译 摘要:基于机器视觉的表面缺陷检测和分类可 ...

随机推荐

  1. Java中网络编程

    以下内容引用自http://wiki.jikexueyuan.com/project/java/networking.html: 术语网络编程指编写跨多种设备(电脑)执行的,设备使用一个网络互相连接的 ...

  2. 转:String数组初始化

    近日,笔者在java编程中因为疏忽对String数组的初始化定义错误,导致程序运行出错.现将所理解的String数组在此进行说明,并对String数组初始化进行分析. //一维数组String[] s ...

  3. 外排序 & 败者树 & 多路归并-学习

    来来来,根据这篇文章,学一下败者树吧: http://blog.csdn.net/whz_zb/article/details/7425152 一.胜者树 胜者树的一个优点是,如果一个选手的值改变了, ...

  4. Java知识图谱

    1.Java学习路径1 我想很多人看到这个路径可能会问我在哪里可以学习,所以就先附上这条路径的学习地址吧,这也是这张图片的来源,愿意学习的可以去看看:Java研发工程师学习路径 2.Java学习路径2 ...

  5. 【知识梳理1】Android触摸事件机制

    前言 随着科学技术的发展,智能手机早已成为我们当代人身边不可缺少的"伙伴"之中的一个,堪比对象女友.每天我们对着手机反复的做着点击.滑动操作,而手机则随着我们的操作给我们展示她的精 ...

  6. 嵌入式开发之davinci--- DVRRDK, EZSDK和DVSDK这三者有什么区别

    下载的时候选择信息要避免security类型的产品,这个是要审查的. DVRRDK是专门针对DVR的开发包是非公开的,针对安防的客户定制的,效率要高. EZSDK是开放的版本架构上使用openmax可 ...

  7. p_CreateAuditEntry

    如果你能搜到我这篇博客,相信你导遇到的了和我一样在导入CRM组织时遇到了类似的错误.这个错误我查资料可以通过CRM升级来解决参考下面连接: https://support.microsoft.com/ ...

  8. Facebook Flux 分析

    首先是actions使用了Dispatcher来定义分发事件, Store在Dispatcher里注册自己的ActionType,收到对应的Action后修改Store内部的结构 Store emit ...

  9. UWP开发入门系列笔记之(零):UWP的前世今生

    引言 在本篇文章中,可以掌握以下知识: 设备族群,如何决定目标设备 新的UI控件和新面板帮助你适应不同的设备特征 从Windows 8系统开始,微软就 引入了WindowsRT(Windows Run ...

  10. jQuery简单纯文字提示条

    如何制作jQuery简单纯文字提示条,先介绍提示条(tooltip)的意思是用户鼠标悬停经过事件发生提示title.它们已经呈现在大多数浏览器中,当你可以提供一个链接或图片的title属性,就是用户将 ...