排列熵PE,MATLAB可运行代码

本文介绍了排列熵(PE)的概念,其在2002年提出的高计算效率方法,用于衡量时间序列的复杂性。步骤包括确定嵌入维数、相空间重构、排列概率计算和归一化。并通过Matlab代码展示了如何实际应用该算法于仿真信号分析。
摘要由CSDN通过智能技术生成

近似熵排列熵,小鱼🐟也有可运行代码哦,大家可以点击查看。

排列熵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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值