排列熵、模糊熵、近似熵、样本熵的原理及MATLAB实现

一、排列熵

1.概念

一种检测动力学突变和时间序列随机性的方法,能够定量评估信号序列中含有的随机噪声。

2.基本原理

(1) 对一组长度为N的时间序列X进行相空间重构,得到矩阵Y为
在这里插入图片描述
其中,m为嵌入维数,t为延迟时间,K=N-(m-1)t。
矩阵Y中的每一行都是一个重构分量,共有K个重构分量。

(2) 将每一个重构分量按照升序重新排列,得到向量中各元素位置的列索引构成一组符号序列。
在这里插入图片描述m维相空间映射不同的符号序列总共有m!种。

(3) 计算每一种符号序列出现的次数除以m!种不同的符号序列出现的总次数作为该重构分量的概率。
在这里插入图片描述(4) 时间序列X的排列熵的计算公式为:
在这里插入图片描述
(5) 排列熵的最大值为ln(d!),将排列熵值进行归一化处理,即:
在这里插入图片描述排列熵值的大小表示时间序列X的随机程度:熵值越小,说明时间序列越简单、规则;反之,熵值越大,则时间序列越复杂、随机。

说明: 我之前看排列熵的理论一直看不懂,搞不清排列熵的计算过程,直到我认真阅读排列熵算法的代码,并且结合理论,才终于搞清楚。建议读者阅读排列熵的代码时,边调试边思考,有助于理解。

3.MATLAB代码

%% 主函数调用排列熵函数求时间序列的排列熵值

[m,n]=size(X);  % X为时间序,一行为一个时间序列。

% 相空间重构:eDim为嵌入维数,eLag为延迟时间
% 当X具有多列和多行时,每列将被视为独立的时间序列,该算法对X的每一列假设相同的时间延迟和嵌入维度,并以标量返回ESTDIM和ESTLAG。
[~,eLag,eDim] = phaseSpaceReconstruction(X);

% 求排列熵:pe为排列熵
pe=zeros(1,m);
for i=1:m
    [pe(i),~] = pec(X(i,:),eDim,eLag);
end

%% 排列熵算法
function [pe ,hist] = pec(y,m,t)

%  Calculate the permutation entropy

%  Input:   y: time series;
%           m: order of permuation entropy 嵌入维数
%           t: delay time of permuation entropy,延迟时间

% Output: 
%           pe:    permuation entropy
%           hist:  the histogram for the order distribution
ly = length(y);
permlist = perms(1:m);
c(1:length(permlist))=0;
    
 for j=1:ly-t*(m-1)
     [~,iv]=sort(y(j:t:j+t*(m-1)));
     for jj=1:length(permlist)
         if (abs(permlist(jj,:)-iv))==0
             c(jj) = c(jj) + 1 ;
         end
     end
 end
hist = c;
c=c(find(c~=0));
p = c/sum(c);
pe = -sum(p .* log(p));

参考文献

[1]赵昕海,张术臣,李志深,等.基于VMD的故障特征信号提取方法[J].振动、测试与诊断,2018,38(1):11-13.
[2]排列熵matlab实现

猜你喜欢

转载自blog.csdn.net/weixin_45317919/article/details/109254213