2022年自己动手编写小波信号分解与重构的Matlab程序 .pdf
《2022年自己动手编写小波信号分解与重构的Matlab程序 .pdf》由会员分享,可在线阅读,更多相关《2022年自己动手编写小波信号分解与重构的Matlab程序 .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、去年 11 月发布了一系列有关小波变换和图像处理的文章,把学习小波过程中的心得体会和编写的程序放在网上和大家共享交流。半年来,感谢大家的关注和帮助,在相互的讨论交流中, 我不断地从大家提出的问题中拓展自己的知识面,对小波的理论及其应用有了更深入的了解和掌握。根据和大家讨论交流中发现的问题,对博客中的程序进行修正。有关小波图像分解和重构的两篇文章中分享的程序,存在下列问题:(1)程序所用的小波函数只有非标准的Haar 小波,其滤波器组为Lo_D=1/2 1/2, Hi_D=-1/2 1/2,是固化在mydwt2.m 的程序中的,不能选择其他的小波函数;(2)非标准的Haar 小波,其分解出来的系
2、数矩阵中,高频系数的细节内容(轮廓、边缘等特征)不明显;(3)函数mydwt2 中列变换的矩阵对象为输入矩阵,这是错误的,其矩阵对象应该是行变换后的缓存矩阵;(4)函数mydwt2 的输出用 LL,HL,LH,HH表示,不是很规范,应改为cA,cV,cH,cD来表示,即一级小波变换输出的系数矩阵有4 个部分:平均部分、垂直细节部分、水平细节部分和对角线细节部分。(5)函数mywavedec2 的输出y 是与输入矩阵x 相同大小的矩阵,并且已将N 级分解后所有的平均、细节系数组合成一体的。实际上,这种定义只对Haar 小波有效。(6)原程序中要调用modmat 函数对图像矩阵进行修剪,使之能被2
3、 的 N 次方整除,主要是为了生成塔式结构图像而设的,对上述问题修正后,这个modmat 函数已不需使用了。针对上述问题,我对程序作了修正,发布在今天的3 篇文章里,请大家点击查看。新修正的程序更为简洁易懂,功能也有所增强,可以用任意的小波函数进行小波分解,可根据小波分解系数矩阵重构出指定分解级的低频系数和原始图像. Matlab 小波分析工具箱丰富的函数和强大的仿真功能为我们学习小波、用好小波提供了方便、快捷的途径,但是,如果我们要深入掌握小波分析的原理,真正学好、用好小波,就应该尽量用自己编写的程序去实现小波变换和信号分析,尽量在自己的程序中少调用Matlab 提供的函数,多用自己的理解去
4、编写相关的小波函数,这样的过程是一个探索、求知的过程,更能让我们体会到小波的强大和学习的乐趣。下面,我把自己编写的小波一维、二维信号分解和重构Matlab 程序共享出来,也希望有朋友共享自编的程序,共同学习,提高程序的效率和简洁性。首先要说明的一点是,虽然是自己编写Matlab 程序,但并不是说一点也不用Matlab的自带函数。 我们要编写的是实现小波变换的主要功能函数,而绘图等基本功能还是要用到Matlab 函数的。而且,根据小波变换的滤波器组原理,原始信号要通过低通、高通滤波器处理,这里就涉及到卷积这一运算步骤。卷积 FFT 算法的实现,相信很多朋友都能用Matlab 、C 语言等来实现,
5、不过与Matlab 自带的用机器语言编写的FFT 程序相比,运算速度一般会慢几倍、几十倍。所以,我的程序里边涉及卷积的就直接调用Matlab 的 conv() 函数了。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 我们知道,小波变换的一级分解过程是,原始信号分别进行低通、高通滤波,再分别进行二元下抽样,就得到低频、高频(也称为平均、细节)两部分系数;而多级分解则是对上一级分解得到的低频系数再进行小波分解,是一个递归过程。 以下
6、是一维小波分解的程序:function cA,cD = mydwt(x,lpd,hpd,dim); % 函数cA,cD=MYDWT(X,LPD,HPD,DIM) 对输入序列x 进行一维离散小波分解,输出分解序列 cA,cD % 输入参数: x 输入序列;% lpd 低通滤波器;% hpd 高通滤波器;% dim 小波分解级数。% 输出参数: cA 平均部分的小波分解系数;% cD 细节部分的小波分解系数。cA=x; % 初始化 cA,cD cD=; for i=1:dim cvl=conv(cA,lpd); % 低通滤波, 为了提高运行速度,调用 MATLAB 提供的卷积函数 conv() d
7、nl=downspl(cvl); % 通过下抽样求出平均部分的分解系数cvh=conv(cA,hpd); % 高通滤波dnh=downspl(cvh); % 通过下抽样求出本层分解后的细节部分系数cA=dnl; % 下抽样后的平均部分系数进入下一层分解cD=cD,dnh; % 将本层分解所得的细节部分系数存入序列cD end function y=downspl(x); % 函数Y=DOWMSPL(X) 对输入序列进行下抽样,输出序列Y。% 下抽样是对输入序列取其偶数位,舍弃奇数位。例如x=x1,x2,x3,x4,x5,则y=x2,x4. N=length(x); % 读取输入序列长度名师资料
8、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - M=floor(N/2); % 输出序列的长度是输入序列长度的一半(带小数时取整数部分)i=1:M; y(i)=x(2*i); 而重构则是分解的逆过程,对低频系数、高频系数分别进行上抽样和低通、高通滤波处理。要注意重构时同一级的低频、高频系数的个数必须相等。function y = myidwt(cA,cD,lpr,hpr); % 函数MYIDWT() 对输入的小波分解系数进行逆离散小波变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年自己动手编写小波信号分解与重构的Matlab程序 2022 自己动手 编写 信号 分解 Matlab 程序
限制150内