在上一篇我们讲到了离散小波变换DWT,在建立了小波分解的基本概念后,我们现在转向小波包分解——一种更精细的小波分析方法。小波包分解在多分辨率分析的基础上,提供了一种全面的频率分析工具,这在许多复杂信号处理场合中被证明是极为宝贵的。
小波包分解(Wavelet Packet Decomposition,WPD)有时候也叫做小波包变换(Wavelet Packet Transform,WPT),是由Coifman等人在小波变换理论的基础上提出的。
小波包分解是在离散小波变换的基础上进一步发展的。在DWT中,信号被分解为一系列高频和低频组分,但仅仅迭代分解低频部分。相比之下,WPD在每一级分解中同时对高频和低频组分进行迭代分解。这意味着它能够更详细地分析信号的频率内容。小波包具有小波变换的优势,能够获得时域特征信息和频域特征信息,这一优势使小波包变换能够对不稳定的信号进行有效的分解。同时,对于高频信号部分以及低频信号部分,小波包变换都有很好的信号处理效果,并保证时频分辨率相同。此外,小波包变换具有良好的连续性,能够提供关于原始信号更加丰富的特征信息。[1]
他们的结构区别一目了然[2]:
小波分解树状图
小波包分解树状图
与传统的小波分解相比,小波包分解的关键优势在于其对信号的全频带分解能力。传统的DWT忽略了在高频带中的分解,这在某些应用中可能会丢失重要的信号细节。WPD的这种全频带分析能力特别适用于那些信号特征不仅仅局限于低频范围的应用,由于其细粒度的分析特性,小波包分解在各种应用中显示出其独特的优势。它不仅在信号去噪和数据压缩方面提供了改进的性能,而且在生物医学信号处理、语音识别和地震数据分析中,小波包分解也显示出其无可比拟的能力。例如,在处理EEG信号时,小波包分解能够帮助识别更加细微的神经活动模式,这对于疾病诊断和大脑功能研究至关重要。
理论部分没有太多要说的了。直接进入实战环节。
小波包分解的代码在网上也可以找到一些,但是用起来不太趁手也不太直观。
你在网上找到的图分解结果应该大多是一条条并列摆放的。
但是你想要的分解图应该是按照其物理意义树状排列的。
就像这样:
直观好用的小波包分解结果
是的,笔者按照“类EMD”系列的代码的统一风格,进行了小波包分解画图函数的封装。
实现上述一张图的绘制,只需要三行代码就行:
- %% 2.绘制WPT分解图
- wname = 'db4'; %小波名称
- decompositionLevel = 3; %小波分解水平,正整数
- reconstructed_signal = pWPT(signal,decompositionLevel,wname);
当然了,signal作为你要分解的数据对象,需要提前导入。
另外,笔者还封装了分解结果的频谱图函数,画图也只需要三行(代码获取见文末):
- %% 3.绘制WPT分解图及频谱图
- wname = 'db4'; %小波名称
- decompositionLevel = 2; %小波分解水平,正整数
- reconstructed_signal2 = pWPTandFFT(signal, decompositionLevel, wname,Fs); % 调用函数进行分解和画图
小波包分解及其频谱图
频谱图没有再采用树状结构,否者画出来的图有些繁复了。目前这样原始信号采用树状、频谱图采用两列对照的形式刚刚好。
通过将小波包分解的原理与传统的小波分解方法相对比,我们可以明显看到其在精细度和适用性方面的优势。WPD提供的全面频率分析工具不仅增强了我们对信号的理解,而且在实际应用中扩大了小波理论的边界。随着分解级别的加深,WPD赋予了分析师在时间-频率域内进行更加细致探查的能力,这是在传统的小波分解中所无法实现的。
我将这篇也归到“类EMD”分解方法的分类中了,主要是取其“分解信号以便分析”的相似目的,但是从底层方法和结果形式上,两者都是有较大区别的,故在此特地说明。
上边的测试代码和封装函数,包括工具箱都可以在下边链接获取:
EMD、EEMD、CEEMD、CEEMDAN、ICEEMDAN、VMD以及HHT相关的程序也有,编程不易,感谢支持~
关于EMD、EEMD、CEEMD、VMD和HHT等的相关介绍可以看这里:
Mr.看海:这篇文章能让你明白经验模态分解(EMD)——EMD在MATLAB中的实现方法
Mr.看海:希尔伯特谱、边际谱、包络谱、瞬时频率/幅值/相位——Hilbert分析衍生方法及MATLAB实现
Mr.看海:类EMD的“信号分解方法”及MATLAB实现(第一篇)——EEMD
Mr.看海:类EMD的“信号分解方法”及MATLAB实现(第二篇)——CEEMD
Mr.看海:类EMD的“信号分解方法”及MATLAB实现(第三篇)——CEEMDAN
Mr.看海:类EMD的“信号分解方法”及MATLAB实现(第四篇)——VMD
Mr.看海:类EMD的“信号分解方法”及MATLAB实现(第五篇)——ICEEMDAN
Mr.看海:类EMD的“信号分解方法”及MATLAB实现(第六篇)——LMD
Mr.看海:类EMD的“信号分解方法”及MATLAB实现(第七篇)——EWT
Mr.看海:类EMD的“信号分解方法”及MATLAB实现(第八篇)——离散小波变换DWT(小波分解)