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

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

 

一、Mallat原理分析

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

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

Mallat算法及C语言实现(一维DB小波分解与重构)_第1张图片

 

其中,空白处为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)为正交的,这样它的逆矩阵就

你可能感兴趣的:(C语言,数据处理,数字信号处理)