【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列 ...

论坛 期权论坛 爱问     
nu305   2022-5-28 07:13   1930   0
之前两篇文章分别介绍了近似熵和样本熵:
Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第一篇)——“近似熵”及其MATLAB实现
Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第二篇)——“样本熵”及其MATLAB实现
近似熵和样本熵都是衡量时间序列的复杂性的方法,但是二者的定义中两个向量的相似性都是基于单位阶跃函数而定义的,单位阶跃函数具备二态分类器的性质,如果输入样本满足一定特性,则被判定属于一给定类,否则属于另一类。而在现实世界中,各个类之间的边缘往往较模糊,很难确定输入样本是否完全属于其中一类 。[1]
所以,今天讲一下样本熵的改进算法——模糊熵。
一、模糊熵

模糊熵(Fuzzy Entropy)是陈伟婷[2]在2007年提出的,初衷是用于肌电型号处理中,不过其后在故障诊断、图像处理等领域也有着广泛的应用。由于模糊熵也是近似熵或者说样本熵的改进方法,所以在阅读下述原理介绍前建议先看一下前两篇系列文章。
1.1 模糊熵的含义

(1)【序列定义】需要注意,此处的序列定义和近似熵不同,表达式如下:
其中 是m个连续 的均值,即:
(2)【序列的距离】模糊熵中距离的含义和近似熵是相同的,都是“X(i)和X(j)对应端点差值的最大值”,将此值记为 。注意,与样本熵相同,这里不包含i=j的情况。
(3)【序列的相似度】近似熵和样本熵中,距离在阈值内则计为1,否则计为0。模糊熵不同,这里使用模糊隶属度来进行度量X(i)和X(j)的相似度: 。注意这里引入了一个新的变量n
(4)类似地,定义:
(5)将维数加1变为m+1,重复以上步骤,得到
(6)【模糊熵】求得信号序列的模糊熵为:
1.2 模糊熵的特点

模糊熵和样本熵物理意义相似,都是衡量时间序列在维数变化时产生新模式的概率的大小。序列产生新模式的概率越大,序列的复杂性程度越高,熵值越大。模糊熵有以下特点:[1]
(1)独立于数据长度(即计算所需数据短)和保持相对一致性,这一点与样本熵相似。
(2)样本熵使用单位阶跃函数,突变性较大,熵值缺乏连续性,对阈值r取值非常敏感,r的微弱变化就可能导致样本熵值的突变。而模糊熵用指数函数模糊化相似性度量公式,指数函数的连续性使得模糊熵值随参数变化而连续平滑变化。
(3)在样本熵的定义中,向量的相似性由数据的绝对值差决定。当采用数据存在轻微波动或基线漂移时则得不到正确的分析结果。模糊熵则通过均值运算,除去了基线漂移的影响,且向量的相似性不再由绝对幅值差确定,而由指数函数确定的模糊函数形状决定,从而将相似性度量模糊化。
1.3 模糊熵的参数选取

模糊熵的计算主要涉及m、r和n三个参数:
(1)m的选择。m可以被称为模式维数或嵌入维数,与近似熵和样本熵一样,一般取嵌入维数 m=2。
(2)r的选择。在模糊熵中r代表模糊函数边界的宽度,r过大会丢失掉很多统计信息;r过小估计出的统计特性的效果不理想,而且会增加对结果噪声的敏感性。通常r的取值在0.1和0.25SD(x)(SD(x)是序列的标准差)之间。
(3)n的选择, n 决定了相似容限边界的梯度,n 越大则梯度越大,n 在模糊熵向量间相似性的计算过程中起着权重的作用。为了捕获尽量多的细节信息,陈伟婷建议计算时取较小的整数值,如2或3等。
2.MATLAB代码实现

模糊熵的代码目前也未出现在MATLAB官方库中,笔者对比了网上流传的若干个版本,选取了可靠程度和易读性较高的一版,对照上述理论做了部分修正,并逐行添加了注释,与上述文章中的算法步骤做了对照讲解。我将其命名为kFuzzyEntropy,如下:


为了特征提取代码的易用性,笔者对一系列熵特征提取进行了封装,包括上边添加注释的代码都集中到一起。由于搞科研写论文时,对特征提取的需要往往是集中性的、多种类的、需求各异的,所以我把之前介绍过的熵特征值和后边将会讲到的几种熵特征进行了打包:
熵特征值共7个——功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵
以上7种全都集中到一个封装函数里,实现一行代码完成特征提取。
比如提取数据“模糊熵”就可以像这样写:
fea = genFeatureEn(data,{'FuzzyEn'}) %对data求模糊熵如果提取数据“功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵”这全部7种特征,就可以这样写:
fea =genFeatureEn(data,{'psdE','svdpE','eE', 'ApEn', 'SpEn','PeEn','FuzzyEn'});  
%调用genFeature函数,完成特征提取,算出的特征值会保存在fea变量里也就是说需要提取哪个特征,在函数中直接指定就可以了。输出的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为排列熵的时间延迟
% featureNamesCell:拟进行特征提取的特征名称,该变量为cell类型,其中包含的特征名称为字符串,特征名称需要在下边列表中:
% 目前支持的特征(2022.5.23,共7种):
%      psdE:功率谱熵
%      svdpE:奇异谱熵
%      eE:能量熵
%      ApEn:近似熵
%      SampleEn:样本熵
%      FuzzyEn:模糊熵
%      PerEn:排列熵
%
% 输出:
% 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”)会持续更新,有哪些想要加进去的特征指标,同学们可以在评论区留言,笔者会考虑纳入到这个“特征提取指标全家桶”中。
参考


  • ^ab[1]郑近德. 局部特征尺度分解方法及其在机械故障诊断中的应用研究[D]. 湖南大学, 2014.
  • ^[1] Chen W ,  Wang Z ,  Xie H , et al. Characterization of Surface EMG Signal Based on Fuzzy Entropy[J]. IEEE Transactions on Neural Systems and Rehabilitation Engineering, 2007, 15(2):266-272.
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP