浅谈压缩感知(二十三):压缩感知重构算法之压缩采样匹配追踪(CoSaMP)
主要内容:
- CoSaMP的算法流程
- CoSaMP的MATLAB实现
- 一维信号的实验与结果
- 测量数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)的更多相关文章
- [转]压缩感知重构算法之分段正交匹配追踪(StOMP)
分段正交匹配追踪(StagewiseOMP)或者翻译为逐步正交匹配追踪,它是OMP另一种改进算法,每次迭代可以选择多个原子.此算法的输入参数中没有信号稀疏度K,因此相比于ROMP及CoSaMP有独到的 ...
- 浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)
主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.gOMP的算法流程 广义正交匹配追踪(Generalized OMP, g ...
- 浅谈压缩感知(二十五):压缩感知重构算法之分段正交匹配追踪(StOMP)
主要内容: StOMP的算法流程 StOMP的MATLAB实现 一维信号的实验与结果 门限参数Ts.测量数M与重构成功概率关系的实验与结果 一.StOMP的算法流程 分段正交匹配追踪(Stagewis ...
- 浅谈压缩感知(二十二):压缩感知重构算法之正则化正交匹配追踪(ROMP)
主要内容: ROMP的算法流程 ROMP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 一.ROMP的算法流程 正则化正交匹配追踪ROMP算法流程与OMP的最大不同之 ...
- 压缩感知重构算法之压缩采样匹配追踪(CoSaMP)
压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出的又一个具有较大影响力的重构算法.CoSaMP也是对OMP的一种改进,每次迭代选择多个原子,除了 ...
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...
- 浅谈Kotlin(二):基本类型、基本语法、代码风格
浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 通过上面的文章,在A ...
- 浅谈Java代理二:Cglib动态代理-MethodInterceptor
浅谈Java代理二:Cglib动态代理-MethodInterceptor CGLib动态代理特点: 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生 ...
- 【沥血整理】灰度(二值)图像重构算法及其应用(morphological reconstruction)。
不记得是怎么接触并最终研究这个课题的了,认识我的人都知道我是没有固定的研究对象的,一切看运气和当时的兴趣.本来研究完了就放在那里了,一直比较懒的去做总结,但是想一想似乎在网络上就没有看到关于这个方面的 ...
随机推荐
- (四)CXF处理JavaBean以及复合类型
前面讲的是处理简单类型,今天这里来讲下CXF处理JavaBean以及复合类型,比如集合: 这里实例是客户端传一个JavaBean,服务器端返回集合类型: 在原来的项目实例基础上,我们先创建一个实体类U ...
- 《剑指offer》-连续子数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- Javascript中的反射机制(五)
一: 什么是反射机制 反射机制指的是程序在运行时能够获取自身的信息.例如一个对象能够在运行时知道自己有哪些方法和属性. 二: 在JavaScript中利用for(…in…)语句实现反射 在JavaSc ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- bzoj4184
题解: 按时间分治线段树 然后线性基维护一下就好了 尝试了一下循环展开并没有什么效果 代码: #include <bits/stdc++.h> using namespace std; ; ...
- 「2017 山东一轮集训 Day7」逆序对
题解: 满满的套路题.. 首先显然从大到小枚举 然后每次生成的逆序对是1----(i-1)的 这样做dp是nk的 复杂度太高了 那我们转化一下问题 变成sigma(ai (ai<i) )= ...
- P3763 [TJOI2017]DNA
链接:https://www.luogu.org/problemnew/show/P3763 题解: 挺水的一题后缀数组 枚举每一个开头用后缀数组判断能否在3次内匹配完
- zstu-4243 牛吃草
贴一发两圆相交面积模板 #include<bits/stdc++.h> #define pi acos(-1.0) using namespace std; ; double _abs(d ...
- js手机端和pc端加载不同的样式
function loadCSS() { if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android| ...
- BZOJ1901 Zju2112 Dynamic Rankings 主席树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1901 题意概括 给你一段序列(n个数),让你支持一些操作(共m次), 有两种操作,一种是询问区间第 ...