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. [vxlan] 一 Why VXLAN

    想了解一个事物/概念,最好的办法是知道它是为什么出现的,为了解决那些问题而出现.这里,就用这种方式来学习一下VXLAN VXLAN (Virtual eXtensible Local Area Net ...

  2. Android拍照、摄像方向旋转的问题 代码具体解释

    近期做了个拍照.摄像的应用.遇到了拍照.摄像的图像相对于现实.翻转了90度.原因:相机这个硬件的角度是横屏的角度,所以会出现都是横屏的. 1.照相.摄影预览图像的正确角度显 示: public sta ...

  3. 改动Android启动画面

    一.Android的启动步骤 1.启动Linux 2.载入Android 3.显示Android桌面 二.分析 Android载入开机动画的源代码文件是: /opt/android4.3/framew ...

  4. thinkphp3.2.3 数据库写入add 方法的一些问题。

    最近在做项目中遇到的一个数据操作add()方法,在不开启debug的模式下会漏掉一些字段没写入数据库. 当时并不知道是这个原因,明明在开发的时候都是没问题的,怎么突然出现这个问题,找了好久都没有头绪, ...

  5. 【iOS系列】-UITableViewCell的展开与收缩的实现思路

    UITableViewCell的展开与收缩的实现思路 现在项目中很多地方都会用到,所以我这里介绍一种可以复用的思路,这与文章后面的Swift的实现思路不同,具体大家可自行对比. Demo项目地址 开始 ...

  6. 用UltraEdit比較两个文件

    在编写代码的过程中,经常碰到两个文件之间的逐行比較.特别是新代码与源码之间的文字比較,这里介绍用UltraEdit实现新代码与源码之间的比較方法. //源码:Bearing.mac FINISH /C ...

  7. Vue实例及生命周期

    1,Vue实例生命周期. 有时候,我们需要在实例创建过程中进行一些初始化的工作,以帮助我们完成项目中更复杂更丰富的需求,开发,针对这样的需求,Vue提供给我们一系列的钩子函数 2,Vue生命周期的阶段 ...

  8. how to create modals with Bootstrap

    In this tutorial you will learn how to create modals with Bootstrap. Creating Modals with Bootstrap ...

  9. LeetCode 7. Reverse Integer (JS)

    Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...

  10. AnimatorCompatHelper clearInterpolator

    supportLib 26.0.0+以上AnimatorCompatHelper类被移除 所以clearInterpolator(view)找不到 替换方案: TimeInterpolator mDe ...