【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,包络熵,散布熵,究竟实现了什么?(第五篇)——“包络熵”及其MATLAB实现

66 篇文章 94 订阅
15 篇文章 16 订阅

今天讲包络熵,之前用了几篇文章分别讲述了功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、模糊熵、排列熵这7种类型的熵:

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

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

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

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

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

今天要讲的包络熵,是比较简单和直观的,不过很多论文里都有用到,尤其是在做寻优算法时,包络熵经常被用来作为适应度函数。

一、包络熵

我们知道,之前讲过的熵都属于信息熵的范畴,但是我们在求一段数据的信息熵时,鲜有直接将原始数据带入信息熵公式的情况,而是首先将数据预处理,比如求功率谱、求奇异谱等等,然后对这些谱序列求信息熵。

包络熵也是采取的类似理念。包络熵的基本思路是对希尔伯特变换后得到包络信号,对包络值归一化之后即可带入信息熵公式求得包络熵。

以上步骤如此简单,没有过多需要说明的,如果有同学对信息熵的概念还不太了解,可以看这里:【熵与特征提取】基于“信息熵”的特征指标及其MATLAB代码实现(功率谱熵、奇异谱熵、能量熵)

至于希尔伯特的概念,则可以看我之前写的这篇:Mr.看海:希尔伯特谱、边际谱、包络谱、瞬时频率/幅值/相位——Hilbert分析衍生方法及MATLAB实现

此图仅为装饰,不用细看哈

2.MATLAB代码实现

包络熵的MATLAB实现还是比较简单的,有一定代码基础的同学应该可以搞定。不过按照惯例我也将该方法的函数代码进行了编写,我将其命名为kEnvelopeEntropy。

为了特征提取代码的易用性,笔者对一系列熵特征提取进行了封装,包括上边添加注释的代码都集中到一起。由于搞科研写论文时,对特征提取的需要往往是集中性的、多种类的、需求各异的,所以我把之前介绍过的熵特征值和后边将会降到的集中熵特征进行了打包:

熵特征值共9个——功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵、 包络熵、散布熵

以上9种全都集中到一个封装函数里,实现一行代码完成特征提取。

比如提取数据“包络熵”就可以像这样写:

fea = genFeatureEn(data,{'enveEn'}) %对data求包络熵

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

fea =genFeatureEn(data,{'psdE','svdpE','eeE','ApEn', 'SpEn','FuzzyEn','PeEn','enveEn','DE'});  
%调用genFeature函数,完成特征提取,算出的特征值会保存在fea变量里

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

此外,针对同学们写论文要水图(哦不,科研)的需求,程序运行完后还可以画图这样的柱状图:

如果输入一维数据,得到的是柱状图

函数也可以输入二维数据,如果输入二维数据,则就是逐行求取熵特征。比如下图,导入的是一个有三行数据的二维数组的绘图结果:

如果输入的是二维数据,得到的是折线图,横坐标是数据组数

这个函数的介绍如下:

fea = genFeatureEn(Data,featureNamesCell,option);  %调用genFeature函数,完成特征提取,算出的特征值会保存在fea变量里,
                                             %fea变量的长度和featureNamesCell中指定的特征量一致,且顺序一一对应
                                             %程序运行完成后,在MATLAB的工作区,双击fea变量,可以查看求得的具体数值
                                             
% function fea = genFeatureEn(data,featureNamesCell,options)
% 熵相关算法的信号特征提取函数
% 输入:
% data:待特征提取的时域信号,可以是二维数据,维度为m*n,其中m为数据组数,n为每组数据的长度。即每行数据为一组。行列方向不可出错
% options:其他设置,使用结构体的方式导入。目前可设置变量包括:
%   -svdpEn:即奇异值的窗口长度。
%   -Apdim:近似熵参数,Apdim为近似熵的模式维度
%   -Apr:近似熵参数,Apr为近似熵的阈值
%   -Spdim:样本熵参数,Spdim为样本熵的模式维度
%   -Spr:Spr为样本熵的阈值
%   -Fuzdim:模糊熵参数,Fuzdim为模糊熵模式维度
%   -Fuzr:模糊熵参数,Fuzr为模糊熵的阈值
%   -Fuzn:模糊熵参数,Fuzn为模糊熵权重
%   -Pedim:排列熵参数,Pedim为排列熵模式维度
%   -Pet:排列熵参数,Pet为排列熵的时间延迟
%   -DEm: 散布熵参数,DEm为散布熵模式维度
%   -DEc: 散布熵参数,DEc为散布熵类别数(通常建议取6)
%   -DEd: 散布熵参数,DEd为散布熵时间延迟(通常建议取1)
%   -fs:采样频率,采样频率即每秒钟采集的数据点数,按照实际情况设置,该参数目前在包络熵特征采集中用到
% featureNamesCell:拟进行特征提取的特征名称,该变量为cell类型,其中包含的特征名称为字符串,特征名称需要在下边列表中:
% 目前支持的特征(2024.4.23,共9种):
%      psdE:功率谱熵
%      svdpE:奇异谱熵
%      eeE:能量熵
%      ApEn:近似熵
%      SpEn:样本熵
%      FuzzyEn:模糊熵
%      PeEn:排列熵
%      enveEn:包络熵
%      DE:散布熵
% 
% 输出:
% fea:数据data的特征值数组,其特征值顺序与featureNamesCell一一对应

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

3.其他:时域、频域特征提取的MATLAB代码实现

除了上述熵特征的提取,笔者还对之前文章中讲到过的时域和频域特征进行了代码实现,具体包括:

有量纲特征值8个——最大值、最小值、峰峰值、均值、方差、标准差、均方值、均方根值(RMS) 无量纲特征值6个——峭度、偏度、波形因子、峰值因子、脉冲因子、裕度因子 频域特征值5个——重心频率、均方频率、均方根频率、频率方差、频率标准差 谱峭度特征4个——谱峭度的均值、谱峭度的标准差、谱峭度的偏度、谱峭度的峭度

以上23种全都集中到一个封装函数里,实现一行代码完成特征提取。

比如提取数据“重心频率”就可以像这样写:

fea = genFeatureTF(data,{'FC'}) %对data数据求重心频率

如果提取数据“最大值、最小值、峰峰值、均值、方差、标准差、均方值...”这全部22种特征,就可以这样写:

fea =genFeatureTF(data,{'max','min','mean','peak','arv','var','std','kurtosis',...
               'skewness','rms','waveformF','peakF','impulseF','clearanceF',...
               'FC','MSF','RMSF','VF','RVF',...
               'SKMean','SKStd','SKSkewness','SKKurtosis'});  %调用genFeature函数,完成特征提取,算出的特征值会保存在fea变量里

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

这个函数的介绍如下:

function fea = genFeatureTF(data,fs,featureNamesCell)                                           
% 时域、频域相关算法的信号特征提取函数
% 输入:
% data:待特征提取的时域信号,可以是二维数据,维度为m*n,其中m为数据组数,n为每组数据的长度。即每行数据为一组。行列方向不可出错
% fs:采样频率,如果不提取频域特征,fs值可以设置为1
% featureNamesCell:拟进行特征提取的特征名称,该变量为cell类型,其中包含的特征名称为字符串,特征名称需要在下边列表中:
% 目前支持的特征(2022.5.23,共23种):
% max :最大值
% min :最小值
% mean :平均值
% peak :峰峰值
% arv  :整流平均值
% var  :方差
% std  :标准差
% kurtosis  :峭度
% skewness  :偏度
% rms       :均方根
% waveformF :波形因子
% peakF     :峰值因子
% impulseF  :脉冲因子
% clearanceF:裕度因子
% FC:重心频率
% MSF:均方频率
% RMSF:均方根频率
% VF:频率方差
% RVF:频率标准差
% SKMean:谱峭度的均值
% SKStd:谱峭度的标准差
% SKSkewness:谱峭度的偏度
% SKKurtosis:谱峭度的峭度
% 
% 输出:
% fea:数据data的特征值数组,其特征值顺序与featureNamesCell一一对应

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

上述2个函数(熵特征提取函数“genFeatureEn”和时频特征提取函数“genFeatureTF”)会持续更新,有哪些想要加进去的特征指标,同学们可以在评论区留言,笔者会考虑纳入到这个“特征提取指标全家桶”中。

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
信息熵是一种用于衡量数据集纯度或不确定性的指标。在特征提取中,信息熵可以被用来选择具有较高信息增益的特征。根据引用所提供的资源介绍,可以通过基于信息熵和逻辑回归的特征提取分类python源码进行特征提取。这个资源提供了一个完整的代码实现,可以帮助你理解和使用信息熵进行特征提取。你可以下载并使用这个资源来学习和进阶。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [功率谱、奇异谱、能量近似样本排列熵模糊包络特征提取MATLAB程序](https://download.csdn.net/download/fengzhuqiaoqiu/86008890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [基于信息熵和逻辑回归的特征提取分类python源码.zip](https://download.csdn.net/download/liufang_imei/88028881)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [大师兄的Python机器学习笔记:特征提取](https://blog.csdn.net/weixin_39748928/article/details/110625648)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.看海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值