主要内容:

  1. CoSaMP的算法流程
  2. CoSaMP的MATLAB实现
  3. 一维信号的实验与结果
  4. 测量数M与重构成功概率关系的实验与结果

一、CoSaMP的算法流程

压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出的又一个具有较大影响力的重构算法。CoSaMP也是对OMP的一种改进,每次迭代选择多个原子,除了原子的选择标准之外,它有一点不同于ROMP:ROMP每次迭代已经选择的原子会一直保留,而CoSaMP每次迭代选择的原子在下次迭代中可能会被抛弃。

二、CS_CoSaMP的MATLAB实现(CS_CoSaMP.m)

function [ theta ] = CS_CoSaMP( y,A,K )
% CS_CoSaOMP
% 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:Needell D,Tropp J A.CoSaMP:Iterative signal recovery from
% incomplete and inaccurate samples[J].Applied and Computation Harmonic
% Analysis,,:-.
[m,n] = size(y);
if m<n
y = y'; %y should be a column vector
end
[M,N] = size(A); %传感矩阵A为M*N矩阵
theta = zeros(N,); %用来存储恢复的theta(列向量)
pos_num = []; %用来迭代过程中存储A被选择的列序号
res = y; %初始化残差(residual)为y
for kk=:K %最多迭代K次
%() Identification
product = A'*res; %传感矩阵A各列与残差的内积
[val,pos]=sort(abs(product),'descend');
Js = pos(:*K); %选出内积值最大的2K列
%() Support Merger
Is = union(pos_num,Js); %Pos_theta与Js并集
%() Estimation
%At的行数要大于列数,此为最小二乘的基础(列线性无关)
if length(Is)<=M
At = A(:,Is); %将A的这几列组成矩阵At
else %At的列数大于行数,列必为线性相关的,At'*At将不可逆
if kk ==
theta_ls = ;
end
break; %跳出for循环
end
%y=At*theta,以下求theta的最小二乘解(Least Square)
theta_ls = (At'*At)^(-1)*At'*y; %最小二乘解
%() Pruning
[val,pos]=sort(abs(theta_ls),'descend');
%() Sample Update
pos_num = Is(pos(:K));
theta_ls = theta_ls(pos(:K));
%At(:,pos(:K))*theta_ls是y在At(:,pos(:K))列空间上的正交投影
res = y - At(:,pos(:K))*theta_ls; %更新残差
if norm(res)<1e- %Repeat the steps until r=
break; %跳出for循环
end
end
theta(pos_num)=theta_ls; %恢复出的theta
end

三、一维信号的实验与结果

%压缩感知重构算法测试
clear all;close all;clc;
M = ; %观测值个数
N = ; %信号x的长度
K = ; %信号x的稀疏度
Index_K = randperm(N);
x = zeros(N,);
x(Index_K(:K)) = *randn(K,); %x为K稀疏的,且位置是随机的
Psi = eye(N); %x本身是稀疏的,定义稀疏矩阵为单位阵x=Psi*theta
Phi = randn(M,N); %测量矩阵为高斯矩阵
A = Phi * Psi; %传感矩阵
y = Phi * x; %得到观测向量y %% 恢复重构信号x
tic
theta = CS_CoSaMP( y,A,K );
x_r = Psi * theta; % x=Psi * theta
toc %% 绘图
figure;
plot(x_r,'k.-'); %绘出x的恢复信号
hold on;
plot(x,'r'); %绘出原信号x
hold off;
legend('Recovery','Original')
fprintf('\n恢复残差:');
norm(x_r-x) %恢复残差

四、测量数M与重构成功概率关系的实验与结果

clear all;close all;clc;

%% 参数配置初始化
CNT = ; %对于每组(K,M,N),重复迭代次数
N = ; %信号x的长度
Psi = eye(N); %x本身是稀疏的,定义稀疏矩阵为单位阵x=Psi*theta
K_set = [,,,,]; %信号x的稀疏度集合
Percentage = zeros(length(K_set),N); %存储恢复成功概率 %% 主循环,遍历每组(K,M,N)
tic
for kk = :length(K_set)
K = K_set(kk); %本次稀疏度
M_set = *K::N; %M没必要全部遍历,每隔5测试一个就可以了
PercentageK = zeros(,length(M_set)); %存储此稀疏度K下不同M的恢复成功概率
for mm = :length(M_set)
M = M_set(mm); %本次观测值个数
fprintf('K=%d,M=%d\n',K,M);
P = ;
for cnt = :CNT %每个观测值个数均运行CNT次
Index_K = randperm(N);
x = zeros(N,);
x(Index_K(:K)) = *randn(K,); %x为K稀疏的,且位置是随机的
Phi = randn(M,N)/sqrt(M); %测量矩阵为高斯矩阵
A = Phi * Psi; %传感矩阵
y = Phi * x; %得到观测向量y
theta = CS_CoSaMP(y,A,K); %恢复重构信号theta
x_r = Psi * theta; % x=Psi * theta
if norm(x_r-x)<1e- %如果残差小于1e-6则认为恢复成功
P = P + ;
end
end
PercentageK(mm) = P/CNT*; %计算恢复概率
end
Percentage(kk,:length(M_set)) = PercentageK;
end
toc
save CoSaMPMtoPercentage1000 %运行一次不容易,把变量全部存储下来 %% 绘图
S = ['-ks';'-ko';'-kd';'-kv';'-k*'];
figure;
for kk = :length(K_set)
K = K_set(kk);
M_set = *K::N;
L_Mset = length(M_set);
plot(M_set,Percentage(kk,:L_Mset),S(kk,:));%绘出x的恢复信号
hold on;
end
hold off;
xlim([ ]);
legend('K=4','K=12','K=20','K=28','K=36');
xlabel('Number of measurements(M)');
ylabel('Percentage recovered');
title('Percentage of input signals recovered correctly(N=256)(Gaussian)');

五、参考文章

http://blog.csdn.net/jbb0523/article/details/45441361

浅谈压缩感知(二十三):压缩感知重构算法之压缩采样匹配追踪(CoSaMP)的更多相关文章

  1. [转]压缩感知重构算法之分段正交匹配追踪(StOMP)

    分段正交匹配追踪(StagewiseOMP)或者翻译为逐步正交匹配追踪,它是OMP另一种改进算法,每次迭代可以选择多个原子.此算法的输入参数中没有信号稀疏度K,因此相比于ROMP及CoSaMP有独到的 ...

  2. 浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)

    主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.gOMP的算法流程 广义正交匹配追踪(Generalized OMP, g ...

  3. 浅谈压缩感知(二十五):压缩感知重构算法之分段正交匹配追踪(StOMP)

    主要内容: StOMP的算法流程 StOMP的MATLAB实现 一维信号的实验与结果 门限参数Ts.测量数M与重构成功概率关系的实验与结果 一.StOMP的算法流程 分段正交匹配追踪(Stagewis ...

  4. 浅谈压缩感知(二十二):压缩感知重构算法之正则化正交匹配追踪(ROMP)

    主要内容: ROMP的算法流程 ROMP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 一.ROMP的算法流程 正则化正交匹配追踪ROMP算法流程与OMP的最大不同之 ...

  5. 压缩感知重构算法之压缩采样匹配追踪(CoSaMP)

    压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出的又一个具有较大影响力的重构算法.CoSaMP也是对OMP的一种改进,每次迭代选择多个原子,除了 ...

  6. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...

  7. 浅谈Kotlin(二):基本类型、基本语法、代码风格

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 通过上面的文章,在A ...

  8. 浅谈Java代理二:Cglib动态代理-MethodInterceptor

    浅谈Java代理二:Cglib动态代理-MethodInterceptor CGLib动态代理特点: 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生 ...

  9. 【沥血整理】灰度(二值)图像重构算法及其应用(morphological reconstruction)。

    不记得是怎么接触并最终研究这个课题的了,认识我的人都知道我是没有固定的研究对象的,一切看运气和当时的兴趣.本来研究完了就放在那里了,一直比较懒的去做总结,但是想一想似乎在网络上就没有看到关于这个方面的 ...

随机推荐

  1. python 全栈开发,Day81(博客系统个人主页,文章详情页)

    一.个人主页 随笔分类 需求:查询当前站点每一个分类的名称以及对应的文章数 完成这个需求,就可以展示左侧的分类 它需要利用分组查询,那么必须要会基于双下划线的查询. 基于双下划线的查询,简单来讲,就是 ...

  2. python 全栈开发,Day58(bootstrap组件,bootstrap JavaScript 插件,后台模板,图表插件,jQuery插件库,Animate.css,swiper,运行vue项目)

    一.bootstrap组件 无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. 组件和插件的区别? 插件:一个功能,比如js文件 组件:html css js 组件包含插件 面 ...

  3. windows Service程序的安装、启动、卸载命令

    安装:%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe ServiceTest.exe 启动:Net Start serv ...

  4. Redis 5.0 集群搭建

    Redis 5.0 集群搭建 单机版的 Redis 搭建 https://www.jianshu.com/p/b68e68bbd725 /usr/local/目录 mkdir redis-cluste ...

  5. ERP合同列表页面自动导航(三十二)

    合同审核完成页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CRMC ...

  6. 《LINQ技术详解C#》-2.查询表达式翻译为标准查询操作符

    (1)透明标识符 有些翻译步骤要使用透明标识符(*)插入枚举变量. 透明标识符只在翻译过程中存在,翻译结束将不再出现. (2)翻译步骤 ①带有into连续语句的Select和Group语句 from. ...

  7. ERROR 2003:Can't connect to MySQL server on 'localhost'

    mysql出现10061错误解决办法 如果出现"ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)", ...

  8. JdbcType类型和Java类型的对应关系

    在Oracle中有些字段不是必填时在用户使用的时候会出现数据null的情况.这个时候在Oracle中是无法进行插入的. JDBC Type Java Type CHAR String VARCHAR ...

  9. 每日踩坑 2019-04-09 Web.config configuration 蓝色波浪线 未声明 configuration 标签的解决办法

    百度看了几篇答案都没有给出解决方案,看了看 MSDN. https://docs.microsoft.com/zh-cn/previous-versions/ms228147(v=vs.110) 似乎 ...

  10. BZOJ.2034.[2009国家集训队]最大收益(二分图匹配 贪心)

    题目链接 双倍经验:BZOJ.4276.[ONTAK2015]Bajtman i Okrągły Robin(然而是个权限题.区间略有不同) \(Description\) 有\(n\)个任务,完成一 ...