【复合多尺度熵与特征提取】一文看懂“复合多尺度熵”——复合多尺度样本熵、模糊熵、排列熵、包络熵、功率谱熵、能量熵、奇异谱熵及其MATLAB实现

在上一篇文章中,我们讲了多尺度熵的原理及MATLAB实现。

本篇要讲的是多尺度熵的一个改进特征提取方法——复合多尺度熵(Composite Multiscale Entropy, CMSE)。复合多尺度熵方法不仅继承了多尺度熵在揭示时间序列多尺度复杂性方面的优势,而且还通过改进的计算方式,提高了熵值的稳定性和准确性,尤其是在处理短时间序列或噪声较大的信号时。

一、为什么要用复合多尺度熵

正如上一篇文章所讲,多尺度熵通过对原始时间序列进行“粗粒化”处理来构建不同尺度的序列,并在每个尺度上计算熵值。

这里我们再回忆一下“粗粒化”的过程,下图给出了当τ =2以及τ =3的粗粒化过程,可以看出粗粒化过程就是用一个长度为 τ 的窗口以不重叠的方式求取滑动窗口内的序列平均值。[1]

图1. τ=2 及 τ=3 时的粗粒化示意图

当原始时间序列较短时,随着尺度因子的增加,粗粒化后的序列长度将显著减少。在较高尺度上,序列可能变得过于短暂,不足以可靠地估计熵值。熵值的计算依赖于序列中模式(或重复模式)的识别,而较短的序列可能无法提供足够的信息来准确评估这些模式,从而影响了熵值的稳定性和可靠性。

为了解决这一问题,复合多尺度熵就被提出了。

二、从多尺度熵到复合多尺度熵

复合多尺度熵在传统多尺度熵的基础上,对每一个尺度因子所对应的序列,进一步的细化,由只生成一个粗粒序列改进为生成多个粗粒序列,再计算多个序列的多尺度熵,将这些多尺度熵的均值作为最终的熵值,使获得的故障信息更加细致,也提高了多尺度熵计算的精确度。

具体做法也是比较直观的,相比于传统多尺度熵只生成一个粗粒化序列,复合多尺度熵通过窗口的依次平移,在尺度 τ 下一共可以生成 τ 个粗粒化序列。下图为尺度 τ=3 时的复合多尺度熵粗粒化示意图:

图2. τ=3 时的复合多尺度熵粗粒化示意图

计算每一次因滑动窗口而形成的粗粒化序列的样本熵,再对这些样本熵求均值,即可得到尺度因子为 τ 时的复合多尺度熵。

对比图 1与图 2可以看出,以尺度因子 τ=3 时为例,传统多尺度熵只生成了一个粗粒化序列,而复合多尺度熵算法生成了 3 个不同的粗粒化序列,每个粗粒化序列是在原始序列的基础上依次向后平移一个数据点,再计算每个粗粒化序列的样本熵,最后求其平均值。相比于传统多尺度熵的求解过程,复合多尺度熵尽管计算量要大一点,但是它的熵值计算精确程度要远远优于传统多尺度熵。

三、案例演示

这里举一个完整的案例,里说明复合多尺度熵的计算过程,以及与多尺度熵的区别。

首先我们生成一段仿真信号,它是由幅值为1的2hz正弦、幅值为0.5的1.5hz正弦以及白噪声信号叠加而成的:

待分析的仿真信号

多尺度熵方法中,如果设置尺度值分别为1~3,得到的粗粒化信号如下:

多尺度熵方法中的粗粒化信号

复合多尺度熵方法中,粗粒化信号的数量取决于所选择的尺度值。具体来说,当尺度值(scale factor)为1时,由于没有平移操作(或者说,平移0个数据点),粗粒化后的信号仅有一组,即原始信号本身。这是因为在尺度1下,不需要对数据进行任何改变,每个数据点都是其自身的平均。

随着尺度值的增加,粗粒化信号的数量也相应增加。例如,当尺度值为2时,将会生成2个粗粒化信号。这是因为首先将原始信号不进行平移并按尺度2粗粒化,然后将原始信号向后平移1个数据点后再进行尺度2粗粒化,因此得到两组不同的粗粒化数据。

依此类推,当尺度值为n时,将会生成n个粗粒化信号。每个信号都是通过将原始信号从0到n-1个数据点逐个平移后按照尺度n进行粗粒化得到的。

当我们取尺度为3时,具体画出来图像是这样的:

复合多尺度熵方法中的粗粒化信号

同一尺度内的粗粒化信号取平均后将会得到:

复合多尺度熵方法中的粗粒化信号

然后对这3个信号分别求样本熵,就可以得到复合多尺度样本熵的计算结果:

复合多尺度样本熵

当然,我们也可以求其他类型的熵,得到各种类型熵的复合多尺度计算结果,就像这样:

8种复合多尺度熵结果

四、复合多尺度熵该怎么使用

与多尺度熵的用法相同。简单来说,使用方法有以下两种:

4.1 根据复合多尺度熵的数值大小和变化规律进行直观判断

这里举个例子,比如我们在使用熵值进行故障诊断,原始信号在单一尺度上的样本熵值虽然能够区分转子的故障类型,但是区分效果不明显。 但是如果使用复合多尺度熵,可以反映出不同故障状态与正常状态的复合多尺度熵值的大小关系。例如论文《多尺度熵在转子故障诊断中的应用》中的案例,对正常、不对中、不平衡、碰摩和油膜涡动转子信号求多尺度熵,可以得到这样的计算结果:

从上边图中,论文得出了以下结论:

转子径向位移信号在大部分尺度上较正常状态的复杂,无规则程度较高,不平衡和正常状态的次之。 不对中和油膜涡动状态径向位移信号在大部分尺度下的样本熵值较小,说明不对中和油膜涡动状态径向位移信号自相似性较高,信号较为规则。 5种状态的多尺度熵曲线都是随着尺度因子的增加而渐变地趋向于某一值,这说明多尺度熵不仅反映了时间序列本身的复杂性程度,而且还包含了序列在其他尺度上的信息,这是分形维数和样本熵所无法反映的,说明了多尺度熵的优越性。

大家在做其他领域研究时,也可以采取类似方式进行分析判断。

2. 将复合多尺度熵值作为后续其他算法的输入

复合多尺度熵(CMSE)提供了一种度量信号在不同时间尺度上复杂性的方法。在机器学习和数据挖掘中,CMSE可以用来从时间序列数据中提取特征,尤其是当数据的复杂性或动态变化是关注的焦点时。

具体步骤大致如下:

1.根据需要,对原始时间序列数据进行必要的预处理,如去噪、标准化等。 2.针对数据计算多尺度熵,得到每个时间尺度上的熵值,此时熵的类型可能是多种,所以得到会是一个矩阵,其中一个维度是时间尺度长度,另一个维度是熵的类型数。 3.使用这些特征向量训练机器学习模型,如分类器或回归模型。模型将学习如何基于这些复杂性特征来进行预测或分类。

复合多尺度熵作为一种强大的特征提取工具,其在机器学习和数据挖掘领域的应用增强了模型对于时间序列数据复杂性的理解和分析能力。正确应用这些特征可以显著提升模型性能,尤其是在需要深入分析数据动态变化的场景中。

五、MATLAB代码实现

复合多尺度熵的代码在网上似乎能找到,不过为了给大家提供靠谱的代码来源,笔者重新进行了代码编写和封装。

由于搞科研写论文时,对特征提取的需要往往是集中性的、多种类的、需求各异的,所以我把之前介绍过的功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵、包络熵这8个熵特征进行了打包:

以上8种全都集中到一个封装函数里,实现一行代码完成复合多尺度熵特征提取。

如果提取数据“功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵”这全部8种特征,就可以这样写:

cmseFea =genFeatureCMSE(data,1:3,{'psdE','svdpE','eE', 'ApEn', 'SpEn','PeEn','FuzzyEn'}, option);  
%调用genFeatureCMSE函数,完成特征提取,算出的特征值会保存在cmseFea变量里

也就是说需要提取哪个特征,在函数中直接指定就可以了。输出的cmseFea变量里就会得到相应的这些特征值,顺序也是与输入的排序保持一致的。

程序运行后会直接绘制出以下3张图:

这个函数的介绍如下:

function cmseFea = genFeatureCMSE(data, scales, featureNamesCell, options)
    % 复合多尺度熵特征提取函数
    % 输入:
    % data:待特征提取的时域信号,必须是一维数据
    % scales:要分析的尺度数组
    % featureNamesCell:拟进行特征提取的特征名称,该变量为cell类型,其中包含的特征名称为字符串,特征名称需要在下边列表中:
    % 目前支持的特征(2022.7.10,共8种):
    %      psdE:功率谱熵
    %      svdpE:奇异谱熵
    %      eE:能量熵
    %      ApEn:近似熵
    %      SpEn:样本熵
    %      FuzzyEn:模糊熵
    %      PeEn:排列熵
    %      enveEn:包络熵
    % options:其他设置,使用结构体的方式导入。目前可设置变量包括:
    %   -svdpEn:即奇异值的窗口长度。
    %   -Apdim:近似熵参数,Apdim为近似熵的模式维度
    %   -Apr:近似熵参数,Apr为近似熵的阈值
    %   -Spdim:样本熵参数,Spdim为样本熵的模式维度
    %   -Spr:Spr为样本熵的阈值
    %   -Fuzdim:模糊熵参数,Fuzdim为模糊熵模式维度
    %   -Fuzr:模糊熵参数,Fuzr为模糊熵的阈值
    %   -Fuzn:模糊熵参数,Fuzn为模糊熵权重
    %   -Pedim:排列熵参数,Pedim为排列熵模式维度
    %   -Pet:排列熵参数,Pet为排列熵的时间延迟
    %   -fs:采样频率,采样频率即每秒钟采集的数据点数,按照实际情况设置,该参数目前在包络熵特征采集中用到
    %   -figflag:是否画图,'on'为画图,'off'为不画图
    
    % 
    % 输出:
    % cmseFea:不同尺度下的特征值,是二维数据,每行代表一种熵的计算结果
    % cmseFea的行数和featureNamesCell中指定的特征量一致,且顺序一一对应

需要上边这个函数文件以及测试代码的同学,可以在公众号 khscience(看海的城堡)中回复“复合多尺度熵”获取。

相关文章

Mr.看海:【熵与特征提取】基于“信息熵”的特征指标及其MATLAB代码实现(功率谱熵、奇异谱熵、能量熵)

Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第一篇)——近似熵及其MATLAB实现

Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第二篇)——样本熵及其MATLAB实现

Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第三篇)——模糊熵及其MATLAB实现

Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第四篇)——排列熵及其MATLAB实现

Mr.看海:【多尺度熵与特征提取】一文看懂“多尺度熵”——多尺度样本熵、多尺度模糊熵、多尺度排列熵、多尺度包络熵、多尺度功率谱熵、多尺度能量熵、多尺度奇异谱熵及其MATLAB实现

参考

  1. ^刘津涛.EMD结合复合多尺度熵的模拟电路故障诊断方法研究[D].湖南师范大学,2021.DOI:10.27137/d.cnki.ghusu.2021.001319.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/391715.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣题目训练(12)

2024年2月5日力扣题目训练 2024年2月5日力扣题目训练476. 数字的补数482. 密钥格式化485. 最大连续 1 的个数148. 排序链表164. 最大间距 2024年2月5日力扣题目训练 2024年2月5日第十二天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和…

c高级day4作业

终端输入一个字符,判断是大写字母小写字母还是数字字符。 #!/bin/bash read -p "input字符--->" a case $a in[[:upper:]])echo 大写字母$a;;[[:lower:]])echo 小写字母$a;;[0-9])echo 数字字符$a;;*)echo "error" esac终端输入年月&#x…

GIS 基于 MCDM-AHP 方法研究潜在风力发电厂区域

随着全球人口的迅速增长、现有不可再生能源的不足以及工业的快速发展,人们对可再生能源的兴趣与日俱增。除了化石燃料的有限供应外,由于无法避免其对环境造成的破坏,人们开始转向替代能源。风能是最具商业价值的能源之一,既环保又可持续。然而,为了使风力发电厂发挥最大效…

⭐北邮复试刷题103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1:输入&#xff1a…

链式结构实现队列

链式结构实现队列 1.队列1.1队列的概念及结构1.2队列的实现 2. 队列的各种函数实现3. 队列的全部代码实现 1.队列 1.1队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(Fi…

深入解析域名短链接生成原理及其在Python/Flask中的实现策略:一篇全面的指南与代码示例

为了构建一个高效且用户友好的域名短链服务,我们可以将项目精简为以下核心功能板块: 1. 用户管理 注册与登录:允许用户创建账户并登录系统。 这部分内容可以参考另一片文章实现: 快速实现用户认证:使用Python和Flask…

Aster实现一台电脑当两台使——副屏使用独立win账号

前言:笔者每年回家,都面临着想要和小伙伴一起玩游戏,但小伙伴没有电脑/只有低配电脑的问题。与此同时,笔者自身的电脑是高配置的电脑,因此笔者想到,能否在自己的电脑上运行游戏,在小伙伴的电脑上…

得物面试:Redis用哈希槽,而不是一致性哈希,为什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: Redis为何用哈希槽而不用一致性哈希? 最近…

智能传感器阅读笔记-智能传感器的发展历程、发展趋势及方向

智能传感器的发展历程 第一代智能传感器 第一代智能传感器是数字式传感器,指改造A/D转换模块,并采用数字技术进行信号处理,使输出信号为数字信号(或数字编码)的传感器,主要由放大器、A/D转换模块、微处理…

解决STM32MP157开发板密码登录问题

开发板密码登录问题是很多人遇到的问题,网上有很多帖子,我也参考过,不太适用,很复杂,甚至会被误导,我差点连ubuntu虚拟机都无法登录了。有的密码匹配,有的取消不了密码。 1、密码配置&#xff…

ABC341 A-F

Toyota Programming Contest 2024#2(AtCoder Beginner Contest 341) - AtCoder B读不懂题卡了,F读假题卡了,开题开慢了rank了 A - Print 341 题意: 打印一串交替出现的包含N个0,N1个1的01串 代码&…

【案例8】用户中心实现涉及内容和过程

图1 如图1是用盒子模型内容实现的,但是需要了解一些内容。 一.内容知识引入 1.内边距属性(padding) 为了调整盒子在网页中的显示位置,常常需要为元素设置内边距。内边距也被称为内填充,是指元素内容和边框之间的距离…

Windows程序互斥锁 - 一个程序同时仅允许运行一个实例

Windows程序互斥锁 - 一个程序同时仅允许运行一个实例 前言 鉴于应用逻辑需要,有些Windows应用同时只能运行一个实例。例如:一个电脑只能同时运行一个微信(手速快了当我没说,不信你去试试)。 怎么实现呢&#xff1f…

Unity 减低GC和优化

文章目录 在Unity中,垃圾收集(Garbage Collection, GC)是一项重要的内存管理机制,但过度的GC活动可能会导致性能瓶颈。优化Unity项目中的GC涉及减少不必要的对象分配和生命周期管理。以下列举了五个实例来详细说明如何降低GC负担并…

前端工程化面试题 | 11.精选前端工程化高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基于ORB-SLAM2与YOLOv8剔除动态特征点

基于ORB-SLAM2与YOLOv8剔除动态特征点 以下方法以https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download#freiburg3_walking_xyz数据集进行实验测试APE 首先在不剔除动态特征点的情况下进行测试: 方法1:segment坐标点集合逐一排查剔除 利用YOLOv8的segm…

Python如何实现定时发送qq消息

因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群、讨论组发送qq消息。其工作流程是:访问数据库提取最近计划——>根据数据…

旅游出门千万别忘带这些!花的不多,享受翻倍!随身wifi看这篇,高性价比高口碑随身wifi推荐

春节长假,大家都去哪儿玩了呢?我反正带着我的小背包,走遍了祖国的大好河山! 得益于之前几次长假出行的经验,这次出行体验十分完美。除了详细完备的出行攻略,还有就是一些出行好物,虽然不起眼&am…

第三百四十八回

文章目录 1. 概念介绍2. 使用方法2.1 List2.2 Map2.3 Set 3. 示例代码4. 内容总结 我们在上一章回中介绍了"convert包"相关的内容,本章回中将介绍collection.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的内容是col…

Slider滑动输入条(antd-design组件库)简单使用

1.Slider滑动输入条 滑动型输入器,展示当前值和可选范围。 2.何时使用 当用户需要在数值区间/自定义区间内进行选择时,可为连续或离散值。 组件代码来自: 滑动输入条 Slider - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-de…