首先非常感谢研友 hh_milan ,7月7日和他讨论时提出了我这个小波分解重构程序存在一个挺大的问题:一个16*16的矩阵,用我的V2.0小波分解重构程序处理后,重构矩阵大小仅为9*9!当时我就判断出问题应该是出在重构程序的子函数 myidwt2() 中的 wkeep 那一行代码上,即用来将重构滤波卷积后的序列进行截取,使之与下一级的系数矩阵大小一致。做V2.0程序的时候,没仔细想,就简单地按 row-lnf+1 的长度截取了,而这样截取出来的矩阵大小是和下一级系数矩阵不一致的,所以在 myidwt2() 中的开头就有了这一段规范化的程序:
% 系数矩阵规范化,使各矩阵大小一致
[m,n]=size(rcA);
rcV=rcV(1:m,1:n);
rcH=rcH(1:m,1:n);
rcD=rcD(1:m,1:n);
这样处理的话,实际上,每重构一级,所得到的矩阵就会比原来同级的分解系数子矩阵要小若干行和列,从而就有了16*16的矩阵重构后只有9*9大小了。
着手解决这个问题的时候,一开始,我没什么头绪,就研究 Matlab 自带的小波函数程序代码,想从中看看 Matlab 是怎样处理这个问题的,然后按自己的理解编写修正程序。真是不看不知道,一看吓一跳,Matlab 为了解决这个重构问题,调用了十多个函数程序,主要包括waverec2,idwt2,dwtmode,dyadup,upsconv2,wextend,wconv2,wkeep2,wavemngr,wtbxmngr等等,特别是dwtmode, wavemngr, wtbxmngr等程序,涉及到这个小波分解和重构的全局管理信息,有一大堆的输入参数判别代码和模式(mode)分类处理代码,有没有详细的注释,看了好几个小时,也没有把各个函数之间的关联完整的构建起来,看来我悟性有待提高啊!不过这里要理解好matlab的这些程序,一定要对小波变换的数学分析过程有所掌握,才能理清其中的脉络。我就是小波的数学基础没修好,所以才看得辛苦。
不过感觉做科研,有时候真的是,寻寻觅觅,“蓦然回首,那人却在灯火阑珊处”!昨天因为课题任务没抽出时间继续研究这个小波重构问题。倒是晚上回宿舍的路上,突然想到matlab的 wavedec2() 函数的输出是[c,s],c 是分解系数序列,s 记录各级分解系数子矩阵的大小。在小波重构的时候,截取卷积序列的长度,就是要与下一级矩阵的行或列长度一致的,那这个 s 应该可以用来作为截取长度而读入的。其实就是很基本的一个原理!回宿舍后在V2.0程序的 mywavedec2 里面加上这个 s 的输出,在 mywaverec2 里面添加这个 s 的输入,然后在 myidwt2 中根据 s 来截取卷积序列 …… OK,Problem shooted down !
呵呵,真有点一波三折的感觉,在 matlab 自带函数的代码中脱离出来,才发现问题的解决其实可以很简单。但是,此刻,我又有点预感,今天这个 V3.0 的程序,可能还存在某些深层次的问题。毕竟,这里给出的小波分解与重构程序,还是着眼于基本的功能,与 matlab 的自带函数相比,是一种简化的处理。如果功能上要进一步扩展,就必须考虑很多复杂的因素,从 matlab 的 dwtmode, wavemngr, wtbxmngr等程序中,就有判断分解系数各级矩阵大小是否周期性变化、相应地是否需要对矩阵进行边界延拓、延拓模式如何选取……等等。这些问题,目前我还抽不出时间深入探讨,希望以后和大家一起讨论的过程中,再把问题“发现一个,解决一个”吧,呵呵!
分享到:
相关推荐
为了实现对微弱低信噪比的心电信号的有效提取,采用了Mallat算法的小波分解重构法去除心电信号的噪声。首先确定小波分解重构的小波基;其次确定分解的层数;然后直接提取有用信号所在的频带(有用信号占优的频带)...
一维信号的小波分解重构,其中matlat的源代码是对序列做了扩展的
这是小波分解与重构的源代码,对于学习分析的人可以参考下,函数都是与MATLAB里面小波函数一致,可以直接使用DB4小波和SYM4小波,其他的类型的小波大家可以自己改改。
程序可实现图像的小波分解和重构,严格按照2:1比例分解和重构,避免了MATLAB软件提供的小波函数不是2:1抽样的缺点。
信号的小波分解与重构原理doc,附带matlab程序,可以参考
能够实现图像的三级小波分解与重构
在MATLAB中编写小波分解与重构的程序,用小波分解与重构来分析问题的原始代码
基于Matlab实现的小波分解与重构源程序,对于时间序列的周期分析有重要意义
见过最好的二维小波分解与重构c程序代码,简单易懂,分享给大家,希望给你帮助
小波分析的分解重构理解和代码,共大家参考,在做信号处理特征提取比较好
HARR小波分解与重构的C++实现方式,代码是自己编写的,win7下vc6.0编译通过
对数据进行小波分解与重构,小波函数为db10,分解层数为9
创建小波分解和重构滤波器的Matlab程序,可用于图像处理
小波分解与重构的几个matlab程序,解决小波分解与重构的问题,特上传几个小程序供大家参考
针对目前离散空间中分解重构算法的过程较为复杂, 主要研究离散空间中周期小波和非周期小波分解重构算法的实现。首先证明离散空间中的多层小波分解重构算法可以按照Mallat分解重构算法的塔式结构实现, 从而将离散序列...
用小波对提取的excel表格中的数据进行小波分解,然后重构,加入随机噪声,用小波去除噪声
实现信号的小波分解和重构,其中小波分解是三层小波分解
四层分解,低频重构小波db4分解与重构.zip 小波db4分解与重构,四层分解,低频重构小波db4分解与重构.zip 小波db4分解与重构,四层分解,低频重构小波db4分解与重构.zip 小波db4分解与重构,四层分解,低频重构小波...
老师布置的作业,对自己的自拍照进行二级小波重构与分解,并且对图像加高斯噪声、去燥