码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 类EMD的“信号分解方法”及MATLAB实现(第九篇)——小波包变换(WPT)/小波包分解(WPD)


    在上一篇我们讲到了离散小波变换DWT,在建立了小波分解的基本概念后,我们现在转向小波包分解——一种更精细的小波分析方法。小波包分解在多分辨率分析的基础上,提供了一种全面的频率分析工具,这在许多复杂信号处理场合中被证明是极为宝贵的。

    一、从小波分解到小波包分解

    小波包分解(Wavelet Packet Decomposition,WPD)有时候也叫做小波包变换(Wavelet Packet Transform,WPT),是由Coifman等人在小波变换理论的基础上提出的。

    小波包分解是在离散小波变换的基础上进一步发展的。在DWT中,信号被分解为一系列高频和低频组分,但仅仅迭代分解低频部分。相比之下,WPD在每一级分解中同时对高频和低频组分进行迭代分解。这意味着它能够更详细地分析信号的频率内容。小波包具有小波变换的优势,能够获得时域特征信息和频域特征信息,这一优势使小波包变换能够对不稳定的信号进行有效的分解。同时,对于高频信号部分以及低频信号部分,小波包变换都有很好的信号处理效果,并保证时频分辨率相同。此外,小波包变换具有良好的连续性,能够提供关于原始信号更加丰富的特征信息。[1]

    他们的结构区别一目了然[2]:

    小波分解树状图

    小波包分解树状图

    与传统的小波分解相比,小波包分解的关键优势在于其对信号的全频带分解能力。传统的DWT忽略了在高频带中的分解,这在某些应用中可能会丢失重要的信号细节。WPD的这种全频带分析能力特别适用于那些信号特征不仅仅局限于低频范围的应用,由于其细粒度的分析特性,小波包分解在各种应用中显示出其独特的优势。它不仅在信号去噪和数据压缩方面提供了改进的性能,而且在生物医学信号处理、语音识别和地震数据分析中,小波包分解也显示出其无可比拟的能力。例如,在处理EEG信号时,小波包分解能够帮助识别更加细微的神经活动模式,这对于疾病诊断和大脑功能研究至关重要。

    二、小波包分解的MATLAB代码实现

    理论部分没有太多要说的了。直接进入实战环节。

    小波包分解的代码在网上也可以找到一些,但是用起来不太趁手也不太直观。

    你在网上找到的图分解结果应该大多是一条条并列摆放的。

    但是你想要的分解图应该是按照其物理意义树状排列的。

    就像这样:

    直观好用的小波包分解结果

    是的,笔者按照“类EMD”系列的代码的统一风格,进行了小波包分解画图函数的封装。

    实现上述一张图的绘制,只需要三行代码就行:

    1. %% 2.绘制WPT分解图
    2. wname = 'db4'; %小波名称
    3. decompositionLevel = 3; %小波分解水平,正整数
    4. reconstructed_signal = pWPT(signal,decompositionLevel,wname);

    当然了,signal作为你要分解的数据对象,需要提前导入。

    另外,笔者还封装了分解结果的频谱图函数,画图也只需要三行(代码获取见文末):

    1. %% 3.绘制WPT分解图及频谱图
    2. wname = 'db4'; %小波名称
    3. decompositionLevel = 2; %小波分解水平,正整数
    4. 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(小波分解)

    参考

    1. ^彭旭龙. 基于小波包和贝叶斯优化支持向量机的滚动轴承故障诊断研究[D].华东交通大学,2023.DOI:10.27147/d.cnki.ghdju.2022.000608.
    2. ^基于小波包分析和 BP 神经网络的滚动轴承故障诊断研究
  • 相关阅读:
    Java进阶学习笔记31——日期时间
    git 批量clone,pull 项目
    【BOOST C++ 19 应用库】(2)Boost.ProgramOptions
    Android 8.0注册广播无效
    【Educoder数据挖掘实训】插值填充法处理遗漏值
    Linux之免密登录及ansible安装(超详解)
    react源码中的生命周期和事件系统
    安装anaconda并配置虚拟环境
    微服务从代码到k8s部署应有尽有大结局(k8s部署)
    Add the installation prefix of “Qt5“ to CMAKE_PREFIX_PATH or set “Qt5_DIR“解决
  • 原文地址:https://blog.csdn.net/fengzhuqiaoqiu/article/details/134279272
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号