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. IT桔子 - 千里马俱乐部

    IT桔子 - 千里马俱乐部 浙江

  2. POJ 3488 &amp; HDU 1915 Arne Saknussemm(模拟)

    题目链接: POJ:http://poj.org/problem? id=3488 HDU:pid=1915">http://acm.hdu.edu.cn/showproblem.ph ...

  3. CMMI 2,3,4,5级涉及的过程域(PA)介绍

      CMMI中的PA即Process Area的缩写,中文称为过程域.简单的说就是做好一个事情需要的某一个方面,对于软件开发来说,就是做好软件开发需要的某一个方面. CMMI2.3级共有18个过程域( ...

  4. LoadRunner系列实例之— 01录制cas登陆脚本

    关于CAS 的概念,见链接 需要增加4个关联函数,初次加载页面时取cookie和it1,输入账号密码点击登录时,取ticketGrantingTicketId和it2 实际上前后台完成两次交互, // ...

  5. Swift String 一些经常用法

    直接上代码 //字符串 //1 推断字符串是否为空 var test1Str="" var test1Str2:String = String(); println("t ...

  6. hdu4941 Magical Forest

    Problem Description There is a forest can be seen as N * M grid. In this forest, there is some magic ...

  7. Android自带的分享功能案例

    MainActivity的代码 package com.hpsvse.weiboshare; import java.io.File; import android.net.Uri; import a ...

  8. strtok函数

    strtok函数是cstring文件里的函数 strtok函数是cstring文件里的函数 其功能是截断字符串 原型为:char *strtok(char s[],const char *delin) ...

  9. Windows下编译DCMTK

    原帖地址:http://www.cnblogs.com/yinxufeng/p/3636241b7084b0340cc56fd37f9e2fd8.html 下载源码生成VS项目工程编译源码 下载源码 ...

  10. 2016/3/27 PHP中include和require的区别详解

    1.概要 require()语句的性能与include()相类似,都是包括并运行指定文件.不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估:而对于require()来说, ...