Matlab匹配追踪(MatchingPursuit) 之一

转自http://cache.baiducontent.com/c?m=9d78d513d99c12e909b7cf225801d7175b13c0227b8c96013894cd47c9221d03506790a63a734a438f86272016af3e0cb4ad6365377467f6dd999f4aaaecc46f388850652c01914066910eaebd4224c7&p=aa769a4783934eaf58e7d03f4e5f9d&newp=9977890a86cc41af52bfc7710f07cd231610db2151d3d5152d&user=baidu&fm=sc&query=Matching+Pursuit&qid=8fdb62f20005ff36&p1=1Matlab匹配追踪(MatchingPursuit) 之一

  Matlab从R2012a开始添加了匹配追踪(Matching Pursuit)函数,这个算法在稀疏表达领域是一个很常用的算法,这里对matlab函数做简答介绍,内容主要来自于matlab的doc帮助。Matlab对稀疏表达的说明简洁明了,翻译如下。

  1.冗余字典与稀疏性

  用一组特定基表达一个信号其实就是找到相应的一组展开系数。虽然把信号用一组基表达,特别是一组正交基,有很多优点,但也存在缺点。

  一组基表达信号的能力取决于信号的特性是否与基向量的特性相吻合。例如,光滑连续信号可以被傅里叶基稀疏的表达,但脉冲信号就不行。再如,带有孤立不连续点的平滑信号可以被小波基稀疏表达,但小波基在表达傅里叶频谱中有窄带高频支撑的信号时却是无效的。

  现实世界中的信号经常包含有用单一基所不能表达的特征。对于这些信号,你或许希望可以选择来自不同基的向量(如用小波基和傅里叶基来联合表达一个信号)。因为你想保证你可以表达一个信号空间的所有信号向量,所以由所有可选向量组成的字典应该能够张成这个信号空间。然而由于这组字典中的向量来自不同的基,它们可能不是线性独立的。

  由于这组字典中的向量不是线性独立的,会造成用这组字典做信号表达时系数不唯一。然而如果创建一组冗余字典,你就可以把你的信号展开在一组可以适应各种时频或时间-尺度特性的向量上。你 可以自由的创建包含多个基的字典。例如,你可以构造一组表达平方可积空间的基,这组基包含小波包基和局部余弦基。A wavelet packet basis is well adapted to signals with different behavior in different frequency intervals. A local cosine basis is well adapted to signals with different behavior in different time intervals. 这样构造的字典可以极大地增加你稀疏表达各种特性信号的能力。

  2.字典非线性近似

  定义表达你的信号空间的归一化基本模块作为字典。这些归一化向量叫做原子。如果字典的原子张成了整个信号空间,那么字典就是完全的。如果有原子之间线性相关,那么字典就是冗余的在大多数匹配追踪的应用中,字典都是完全且冗余的。

  假设{φk}表示字典的原子。假设字典是完全且冗余的。使用字典的线性组合表达信号将是不唯一的。 

  一个重要的问题是是否存在一种最好的表达方式,一种直观的最好方式是选择φk使得近似信号和原始信号有最大的内积,如最好的φk满足  

即对于正交原子,为投影到由φk张成的子空间上的幅值。

  匹配追踪的中心问题是你如何选择信号在字典中最优的M个展开项。

  3.Matching Pursuit Algorithms匹配追踪算法

  3.1 Basic Matching Pursuit(BMP)原始匹配追踪

  令Φ(NxM,M>N)表示一个字典。如果这个完全、冗余的字典形成了信号空间的一个框架,那么可以使用框架算子得到使L2范数最小的一组展开系数,即  

  然而,这个系数向量没有保留稀疏性。如果原始信号在字典空间中是稀疏的,那么使用标准框架算子得到的展开系数无法反映这个稀疏性。而原始信号的稀疏性是最想保留的特性。

  对此,匹配追踪(Matching pursuit)可以直接得到信号稀疏性的表达。它本质是一种贪婪算法,通过计算信号在完全、冗余字典上的最佳非线性估计来实现。在计算过程中,一个稀疏近似序列被构建出来。令Φ={φk}表示一个原子归一化的字典,f表示信号。

  1、首先定义R0f = f;

  2、匹配追踪的第一步是从字典中找到与R0f的内积绝对值最大的原子,表示为φp;

  3、通过从R0f减去其在φp所张成空间上的正交投影得到残差R1f  

  4、对残差迭代执行2、3步  

  5、直到达到某个指定的停止准则后停止算法。

  在非正交匹配追踪(BMP)中,字典原子不是相互正交的向量。因此上面减去投影计算残差的过程中会再次引入与前面使用的原子不正交的成分。

  为了更形象的看出这点,考虑下面的例子(这是一个类比,不代表匹配追踪过程)。考虑欧几里得二维空间的归一化框架字典  

  假设有如下信号  

  这个例子如图所示,字典原子以红色表示,信号向量蓝色表示

  在matlab中如下创建此字典和信号

dictionary = [1 0; 1/2 sqrt(3)/2; -1/sqrt(2) -1/sqrt(2)]';

x = [1 1/2]';

  计算信号和字典原子的内积

scalarproducts = dictionary'*x;

  内积绝对值最大的是原子[-1/sqrt(2); -1/sqrt(2)]。这很明显,因为两者之间的夹角约为π。从信号中减去信号在此原子上的正交投影得到残差,然后计算残差与其余原子的内积(因为残差是与此原子正交的,所以不用再计算与其的内积,此内积即是0)。

residual = x-scalarproducts(3)*dictionary(:,3);

scalarproducts = dictionary(:,1:2)'*residual;

  这次内积绝对值最大的是[1;0]。所以迭代两次即得到了两个最佳原子[-1/sqrt(2);-1/sqrt(2)]和[1;0]。如果继续对残差迭代,你会发现输出不再与刚才找到的第一个原子正交。这意味着第一个原子有可能被再次选择到。这个事实及与收敛相关的问题在正交匹配追踪中得以解决。


  3.2 正交匹配追踪Orthogonal Matching Pursuit

  在正交匹配追踪OMP中,残差是总与已经选择过的原子正交的。这意味着一个原子不会被选择两次,结果会在有限的几步收敛。概念上讲,你可以通过施密特方法创建一个正交原子组来实现OMP。对于一组正交字典,你总会找到有限几个正交方向。OMP的算法如下

  1、用f表示你的信号,初始化残差R0f=f;

  2、选择与R0f内积绝对值最大的原子,表示为φp;

  3、将选择的原子形成矩阵Φ的列,定义Φ列空间的正交投影算子为  

  4、将此正交投影算子应用到残差上;

  5、更新残差

  

其中I为单位阵。OMP可以保证已经选择过的原子不会再被选择。

  3.3 弱正交匹配追踪

  如果放松选择原子的准则,将会带来计算量的有效降低  

  这就是所谓的弱匹配追踪

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值