排列熵PE原理:
其计算效率较高,于2002年被提出,通过相空间重构来衡量时间序列复杂度。
PE算法:
以下内容如有不对之处,望大家在评论区里告诉小鱼🐟哦,谢谢大家啦!!
step1:x={x(1),x(2),…,x(N)},确定嵌入维数m
step2:相空间重构,X(n)={x(n),x(n+u),…,x(n+(m-1)u},n=(N-m)/u+1<=m!;
step3:将每一个X(n)中的元素进行升序排列,并用j(n,k)作为初始位置标记
step4:一共有m!种排列顺序,将每种顺序出现的概率记作Pj
step5:计算Pj*ln(Pj)和为sP,并做负运算(-sP)
step6:归一化sP,得到PE=-sP/(ln(m!))
%% %%%%清除历史记录%%%%
clc,clear,close all;
%% %%%%仿真信号设置%%%%
fs=200;T=1/fs;time=1;
t=0:T:time-T;
len=length(t);
x=2*sin(60*pi*t).*(1+0.5*sin(2*pi*t));
[pe]=Pe(5,x,len);
function [pe]=Pe(m,x,len)
%%%%m为嵌入维数%%%%
n=len;
delay=1;
k=0:m-1;
d=(n-m)/delay+1;
X=zeros(d,m);
for i=1:d
X(i,:)=x(i+k*delay);
[X(i,:),j(i,:)]=sort(X(i,:));
end
s=1; J=j;
p=[];
for i=1:d
if length(find(p==i))~=0
continue;
end
con(i).n=[i];
if i==d
break;
end
for k=i+1:d
if length(find(p==k))~=0
continue;
end
if all(J(i,:)==J(k,:))
con(i).n=[con(i).n,k];
p=[p,k];
end
end
end
[r,l]=size(con);
s=1;
for i=1:l
clen=length(con(i).n);
if clen==0
continue;
end
cont(s)=length(con(i).n);%%s种情况,每种情况下的出现次数
s=s+1;
end
M=cumprod([1:m]);
M=M(end);
[r,s]=size(cont);
for i=1:s
P(i)=cont(i)/M;
end
pe=-sum(P.*log(P))/log(M);
end