👨🎓 博主简介:博士研究生
🔬 超级学长:超级学长@实验室(提供各种程序开发、实验复现与论文指导)
📧 个人邮箱:easy_optics@126.com
💬 个人微信:easy_optics
🐧 个人企鹅:754357517
摘要
本博文深入解析了一维小波变换中的单层分解函数dwt以及多层分解函数wavedec的使用方法,并通过sumsin数据集的实例,详细展示了小波分解与信号重构的过程。此外,博文还附带了完整的Matlab源代码供读者参考与实践。
一、参数说明
MATLAB实现一维信号分解和重构的命令主要有 dwt(idwt)和 wavedec(waverec),其中,进行一层小波分解的命令为 dwt,对应的小波重构命令为 idwt;进行多层分解的命令为wavedec,对应的重构命令为 waverec。具体命令如下:
1.1 一层小波分解与重构
[ C A , C D ] = d w t ( X , ′ w n a m e ′ ) [CA,CD]=dwt(X,'wname') [CA,CD]=dwt(X,′wname′),
其中,dwt 表示离散小波变换;X 为输入参数,是一维信号;'wname’是小波名字;输出变量 CA为低频分解信息,刻画原始信号的逼近信息;CD 为高频分解信息,刻画原始信号的细节。
[ C A , C D ] = d w t ( X , L o _ D , H i _ D ) [ CA, CD] = dwt ( X, Lo\_ D, Hi\_ D) [CA,CD]=dwt(X,Lo_D,Hi_D) ;
为另一种离散小波变换,输人参数为分解的低通滤波器和高通滤波器。
[ C A , C D ] = \begin{bmatrix}{\mathrm{CA}},{\mathrm{CD}}\end{bmatrix}= [CA,CD]=dwt ( X , L o _ D , H i _ D (X,Lo\_D,Hi\_D (X,Lo_D,Hi_D, ‘mode’,MODE);
为不同形式边界延拓的离散小波变换,MODE 表示不同的延拓方式,具体有对称延拓’sym’ 或者 ′ ^{\prime} ′symh’(半点对称),‘symw’(全点对称),反对称延拓’asym’或者’asymh’(半点反对称), ′ ^{\prime} ′asymw’(全点反对称),零延拓’zpd’,一阶光滑延拓’spd’或者’spl’(边界保持导数一致进行延拓),常数延拓’sp0’,周期延拓’ppd’或者’per’。
对应的小波重构实现:
X = X= X=idwt(CA, CD,‘wname’);
X = X= X=idwt(CA,CD,Lo_D,Hi_D);
X = X= X=idwt(CA,CD,Lo_D,Hi_D,‘mode’,MODE);
1.2 多层小波分解与重构
[ C , L ] = [C,L]= [C,L]=wavedec ( X , N , ′ w n a m e ′ ) ; (X,N,'wname'); (X,N,′wname′);
其中,wavedec 为多层小波分解函数;X 为输人参数,是一维信号;N 为分解层数; l ^{\mathrm{l}} lwname ! ^! !是小波名字;输出变量 C 为所有分解信息的组合,依次为:最后一层的低频信息,最后一层的高频信息, 其余高频信息按照从高层到低层的顺序存放,具体为C= ⌊ A ( N ) ∣ D ( N ) ∣ D ( N − 1 ) ∣ ⋯ ∣ D ( 1 ) ⌋ \lfloor A(N)\mid D(N)\mid D(N-1)\mid\cdots\mid D(1)\rfloor ⌊A(N)∣D(N)∣D(N−1)∣⋯∣D(1)⌋。
[ C , L ] = [C,L]= [C,L]=wavedec ( X , N , L o _ D , H i _ D ) ; (X,N,Lo\_D,Hi\_D); (X,N,Lo_D,Hi_D);
为另一种离散小波变换,输入参数 N 为分解层数,Lo_D 和 Hi_D 分别为分解的低通滤波器和高通滤波器。
对应的小波多层重构为:
X = X= X=waverec(C, L, N, ‘wname’);
X = X= X=waverec ( C , L , N , (C,L,N, (C,L,N,Lo_D,Hi_D);
1.3 多层小波分解后逼近结果和高通细节的提取
A = A= A=appcoef ( C , L , ′ (C,L, ^{\prime} (C,L,′wname ′ , N ) ; ^{\prime},N); ′,N);D=detcoef ( C , L , ′ (C,L,^{\prime} (C,L,′wname ′ ) ; ^{\prime}); ′);
其中,appcoef 为多层分解的系数;C,L 为计算提取一维信号的第 N 层的逼近结果;detcoef 为提取的对应的高频细节;层数 N 应该满足 0<=N<= length(L)-2。
省略最后一个参数时,appcoef 提取的是最后一层的通近系数,detcoef 为提取的最后一层的高频细节。
可用滤波器代替’wname’,即 A=appcoef (C,L,Lo_R,Hi_R)或者 A=appcoef (C,L, Lo_R,Hi_R,N),D=detcoef(C,L,Lo_R,Hi_R)或者D=detcoef(C,L,Lo_R,Hi_R,N),此时 Lo_R 和 Hi_R 分别是重构的低通和高通滤波器。
二、实例演示
用 MATLAB 命令 dwt 对一维信号 sumsin 进行分解重构,得到分解的低频和高频信号如图1所示。
用 wavedec 命令、detcoef 命令和 appcoef 命令得到分解的各个层次的低频和高频信号如图2所示。
用 idwt 对分解信号进行重构,并将重构信号与原始信号做差比较其差距,结果显示相差很小,为精确重构,如图3所示。
用 waverec 命令进行多层信号重构和效果对比,如图4所示。可以看出,只由高层低通信号重构的结果为信号的概貌,而细节信息可由各层次的高通信息进行重构,从而实现信号的分层次分解和重构。
三、示例Matlab程序获取
一维信号的低频与高频成分的小波多维分解与重构实例-附Matlab源代码
结论
博主简介:擅长智能优化算法、信号处理、图像处理、机器视觉、深度学习、神经网络等领域Matlab仿真以及实验数据分析等,matlab代码问题、商业合作、课题选题与科研指导等均可私信交流。