解读matlab之小波库函数,小波学习之二(单层一维离散小波变换DWT的Mallat算法C++实现优化)(转)...

在上回《小波学习之一》中,已经详细介绍了Mallat算法C++实现,效果还可以,但也存在一些问题,比如,代码难于理解,同时出现了边界问题。在此,本文将重构代码,采用新的方法解决这些问题,同时也加深对小波变换的理解。

MATLAB作为经典的数学工具,分析其小波变换dwt和idwt实现后发现真的很经典,学习参考价值很高。下面结合南京理工大学

谭彩铭的《解读matlab之小波库函数》及MATLAB小波工具包中m文件的情况,作一个小结,最后用C++函数进行实现,并且编译调试OK。

一、MATLAB上dwt函数的工作过程

假设x=[x(1) x(2) x(3) x(4) x(5) x(6)

x(7)],计算y=dwt(x,’db2’),其计算过程主要由三个部分组成:

1、边缘延拓,它主要由函数wextend完成。

仔细分析子程序部分,函数wextend的用法为y=wextend('1D','sym',x,3);这样得到的y=[ x(3) x(2)

x(1) x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(7) x(6) x(5)]

2、卷积运算,它主要由函数conv2完成。

仔细分析子程序部分,核心语句有z=conv2(y,Lo_D,'valid');这里设Lo_D=[h(1) h(2) h(3)

h(4)]。

这2步的实现过程示意图如下:

a4c26d1e5885305701be709a3d33442f.png

3、最后就是下采样即隔点采样,其下采样是按照式a =

z(2:2:length(z))进行的,高频低频部分均如此,项数为floor((7+4-1)/2)。

最后的dwt低频系数结果是[z(2)

z(4) z(6) z(8) z(10)],高频系数求解过程和低频系数一样,在此不再赘述。

二、MATLAB上idwt函数的工作过程

1、上采样即隔点插0,dyadup(x,0)。

2、卷积运算,它也是最终由函数conv2完成。

3、抽取结果,wkeep1(x,s,'c')。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值