SP(subspace pursuit)算法是压缩感知中一种非常重要的贪婪算法,它有较快的计算速度和较好的重构概率,在实际中应用较多。本文给出了SP算法的matlab代码,以及相应的测试函数。

参考文献:Dai W, Milenkovic O. Subspace pursuit for compressive sensing signal reconstruction[J]. Information Theory, IEEE Transactions on, 2009, 55(5): 2230-2249.

文献下载地址:http://arxiv.org/pdf/0803.0811.pdf

Matlab代码:

SP_paper.m

function x=SP_paper(Phi,y,K)
%SP算法%获取Phi矩阵的行数和列数
[M,N]=size(Phi);%初始化步骤
%将Phi的每列与y做相关,得到一个N*1的矩阵(列向量)
correlation=Phi'*y;
%对correlation取绝对值后排序,按从大到小的顺序
[var,pos] = sort(abs(correlation),'descend');
%声明一个空集T,用于记录Phi的列数标值
T=[];T=union(T,pos(1:K));
y_r=resid_paper(y,Phi(:,T));%迭代
%使用如下形式的do---while结构
% while(1)
%     if(condition)
%         break;
%     end
% end
count=1;
while(1)%根据残差计算待增加的列数,得到T_addcorrelation=Phi'*y_r;[var,pos] = sort(abs(correlation),'descend');T_add=union([],pos(1:K));%合并已有的T和T_addT=union(T,T_add);%x_p=((Phi(:,T)'*Phi(:,T))\eye(length(T)))*Phi(:,T)'*y;%proj_paper(y,Phi(:,T));%更新下标记录T[var,pos] = sort(abs(x_p),'descend');%取前K个最大值T=union([],T(pos(1:K)));%计算新的残差y_r_n=resid_paper(y,Phi(:,T));%判断是否退出循环,且置为最大迭代100次if(norm(y_r_n)>=norm(y_r) || count>100)break;end%若不退出循环,进行新一轮的迭代y_r=y_r_n;count=count+1;
end%退出循环后,做最后的数据输出
x=zeros(N,1);
x(T)=((Phi(:,T)'*Phi(:,T))\eye(length(T)))*Phi(:,T)'*y;endfunction y_r=resid_paper(y,Phi)
%计算y在Phi上的投影残差%获取矩阵Phi的行数和列数,M没有用
[M,N]=size(Phi);%判断矩阵(Phi'*Phi)是否可逆
if(rank(Phi'*Phi)~=N)error('矩阵不可逆');
endy_p=Phi*((Phi'*Phi)\eye(N))*Phi'*y;
y_r=y-y_p;
end

测试代码:

dataGen.m

function [y,Phi,x]=dataGen(M,N,K)
% 产生贪婪算法所需要的数据%生成-1/+1的原始信号x
x = zeros(N,1);
q = randperm(N); %y=randperm(n),是把1到n这些数随机打乱得到的一个数字序列。
x(q(1:K)) = sign(randn(K,1));%生成测量矩阵Phi
Phi = randn(M,N);
Phi = orth(Phi')';  %求矩阵正交基,B = orth(A),B的列向量是正交向量%生成观测向量
y = Phi*x;end

SP_main.m

clear;clc;%信号长度
N = 256;
%信号满足K-稀疏
K = 30;
%观测向量的长度
M = 128;[y,Phi,x] = dataGen(M,N,K);xp = SP_paper(Phi,y,K);
% [xp,support,iterCount]=SP_res(Phi,y,K);figure
subplot(3,1,1),stem(x,'.'),title('原始'),axis([0,N,-1,1])
subplot(3,1,2),stem(xp,'.'),title('重构'),axis([0,N,-1,1])
subplot(3,1,3),stem(abs(xp-x),'.'),title('残差'),axis([0,N,0,max(abs(xp-x))])

压缩感知重构算法——SP算法相关推荐

  1. 压缩感知重构算法之IHT算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  2. 压缩感知重构算法之迭代硬阈值(Iterative Hard Thresholding,IHT)

    转载自:https://blog.csdn.net/wyw921027/article/details/52102211 题目:压缩感知重构算法之迭代硬阈值(Iterative Hard Thresh ...

  3. 压缩感知重构算法之迭代硬阈值(IHT)

    题目:压缩感知重构算法之迭代硬阈值(Iterative Hard Thresholding,IHT) 本篇来介绍IHT重构算法.一般在压缩感知参考文献中,提到IHT时一般引用的都是文献[1],但IHT ...

  4. 压缩感知重构算法之广义正交匹配追踪(gOMP)

    压缩感知重构算法之广义正交匹配追踪(gOMP) 转载自彬彬有礼的专栏 题目:压缩感知重构算法之广义正交匹配追踪(gOMP) 广义正交匹配追踪(Generalized OMP, gOMP)算法可以看作为 ...

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

    浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP) 主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.g ...

  6. 浅谈压缩感知(三十一):压缩感知重构算法之定点连续法FPC

    主要内容: FPC的算法流程 FPC的MATLAB实现 一维信号的实验与结果 基于凸优化的重构算法 基于凸优化的压缩感知重构算法. 约束的凸优化问题: 去约束的凸优化问题: 在压缩感知中,J函数和H函 ...

  7. 浅谈压缩感知(二十一):压缩感知重构算法之正交匹配追踪(OMP)

    主要内容: OMP的算法流程 OMP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.OMP的算法流程 二.OMP的MATL ...

  8. 压缩感知重构算法综述-学习笔记

    论文信息:李珅,马彩文,李艳,陈萍.压缩感知重构算法综述[J].红外与激光工程,2013,42(S1):225-232. 目录 文章工作: 问题一:压缩感知涉及三个比较重要的层面 问题二:压缩感知理论 ...

  9. 压缩感知重构算法之迭代软阈值(IST)

    题目:压缩感知重构算法之迭代软阈值(IST) 看懂本篇需要有以下两篇作为基础: (1)软阈值(Soft Thresholding)函数解读 (2)Majorization-Minimization优化 ...

  10. 压缩感知重构算法之正交匹配追踪(OMP)

    题目:压缩感知重构算法之正交匹配追踪(OMP) 前面经过几篇的基础铺垫,本篇给出正交匹配追踪(OMP)算法的MATLAB函数代码,并且给出单次测试例程代码.测量数M与重构成功概率关系曲线绘制例程代码. ...

最新文章

  1. oracle时间戳-日期转换
  2. SQL Server 临时表
  3. 2021-06-11 pytorch基本语法
  4. nyoj 174 Max Sequence(最大子串和变形)
  5. Lucene排序以及自定义排序
  6. android intent和intent action大全
  7. Spring开启方法异步执行
  8. 乌班图linux怎么连手机热点,使用Ubuntu12.04创建无线WiFi热点供手机上网
  9. vue,computed,计算属性
  10. Asp.net2.0下的表单验证Cookieless属性
  11. java oracle数据备份_Java后台备份oracle数据库脚本
  12. android之提示Cleartext HTTP traffic to not permitted
  13. 图解:怎么样安装TortoiseSVN以及汉化
  14. 收藏其他博客园主写的代码,学习加自用。先表示感谢!!!
  15. 红外遥控Arduino智能小车
  16. 也谈免拆机破解中兴B860av1.1(解决不能安装软件/解决遥控)
  17. Excel自动化报表制作
  18. Cygwin下安装包管理器apt-cyg
  19. LWR--local weighted regression
  20. 《web开发: Ajax 介绍》

热门文章

  1. 函数的定义与变量作用域
  2. html----js控制下拉框(详解
  3. python xlrd使用_python:利用xlrd模块操作excel
  4. 树莓派的命令和linux一样吗,常用的linux命令
  5. 如果计算机黑屏请分析原因是什么原因,电脑黑屏是什么原因 电脑黑屏原因分析【解决方法】...
  6. fortran语言和python语言_Fortran常用语句
  7. 树莓派4支持多大tf卡_树莓派raspberry4B入坑指南 part-0
  8. jquery is 用于查看选择的元素是否匹配选择器。
  9. (万字长文)HashMap, ConcurrentHashMap 原理及源码详解 java1.7
  10. 利用【监听器】动态加载Log4j配置文件