Mallat算法及C语言实现(一维DB小波分解与重构)

附:理论部分来源于书籍与网络资源,如有侵权,请于文章作者联系,立即处理!!!

 

一、Mallat原理分析

1.1矩阵变换角度看小波分解与重构:

DB4有4个系数:c0、c1、c2和c3。可以有以下变换矩阵,将它作用于一列数据矢量的左边。即(注意行列对齐,手打不易)

 

其中,空白处为0,。注意,此矩阵结构,第一行产生一个数据与滤波系数c0、c1、c2、c3卷积的分量,依次类推,第3行、第5行和其余奇数行的结果一样。如果偶数行以这种形式出现,正负交替,那么矩阵将是循环的,也就是一般的卷积,可以用FFT方法计算(注意,最后两行像具有周期边界条件下的卷积那样环绕起来)。但是,偶数行并不是以系数c0、c1、c2、c3进行卷积,而是以系数c3,-c2,c1,-c0进行卷积。整个矩阵的作用就是进行两个相关的卷积,然后各去掉一半数值,将剩下的各一半融合在一起。

将滤波器c0、c1、c2、c3看成是一个光滑滤波器,称它为H,H有点像4个点的移动平均。而将滤波器c3,-c2,c1,-c0称为G,由于G中滤波器带有负号,因此,G不能看成一个光滑滤波器。在信号处理的文献中,H和G被称为求积镜像滤波器。实际上,c值的选取是使G对光滑的数据矢量尽可能产生零响应。通过以上运算,导致H的输出在去掉以后,精确地代表了数据的“近似”信息。G的输出同样在去掉一半以后,代表了数据的“细节”信息。

为了能够恢复原始信息,必须能够从它的N/2个近似分量和N/2个细节分量重建长度为N的原始数据矢量。为了能够实现这样的算法,就必须要求矩阵式(1)为正交的,这样它的逆矩阵就和转置矩阵相同。其矩阵如下,即

 

为使矩阵式(2)成为矩阵式(1)的逆矩阵,必须满足以下两个等式,即

 

这样用长度为N(可以看出N为2的幂指数)的数据相乘,就能够分解成近似分量和细节分量,再对近似分量按照上面的方法进行分解,依次类推,从而实现Mallat算法。

 

1.2滤波器角度看小波分解与重构:

考虑如下问题。用N=2的Daubechies小波分解一个有n个取样值(即s0,….,sn-1)的信号。这些样值首先被当作顶级的近似系数aj,然后让其通过与Daubechies小波相关的高通和低通滤波器。这些滤波器分别称为H和L,响应的冲激响应函数序列分别为h和l:

 

分别用l和h与aj做卷积,然后下取样。那么对于任何aj(不仅是本例中的仅有8个样值的信号)有:

 

为计算j-1级的各个系数,需要4个相邻的样值,并且要从偶数位置开始。

实际中信号为离散序列,用小波分解信号序列,实际上就是让源信号通过对应的高通和低通滤波器,例如,用N=2的Daubechies小波分解一个8样值点s0,….,s7的信号序列,那么为计算近似系数a22,需要s4至s7.,为计算a32,需要s6至s9,但实际上并没有s8和s9!由此并不难理解,在此滤波过程中会很快用尽所有样值点,更麻烦的是,该过程仅在k=0,1,2时可进行。这意味着,对有8个样值点的问题来说,仅能得到3个分解系数,而不是原先期望的4个,该现象称为溢出问题,

溢出的根本原因在于不知道源信号前后的准确值ÿ

  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值