符号熵(附matlab代码)

蹲街弑〆低调 提交于 2020-02-28 05:42:04

符号熵
       固定时间间隔下对系统进行采样取值的方法来追踪系统动态,熵是计算系统中包含可用信息大小的方法,可以用来度量系统的不确定性,从而描述符号的复杂性。
       符号熵将数据转化为少量的符号模式,虽然失去了大量信息,但保留了动态系统的周期性,对称性等动力学性能,并且区分过程中采取下采样的方法,降低连续样本的独立性,使熵值增加。
符号熵的计算:
1.给定时间序列长度为N的X={x(1),x(2)…x(N)},将时间序列转换为X={x(1),x(2)…x(n)},且将其量化到0—q-1之间,q是量化等级,当q=2时,将时间量化为0或者1


r为量化阈值,

为样本均值
2.将符号序列进行重构:


为词序列,L为词序列长度
编码后序列的模式共

种,例如量化等级为2时,重构的词序列为时,序列模式共8种.分别为{000,001,010,011,100,101,110,111}.
3.自编码序列为


4.计算出每个模式在重构的符号序列中出现的概率,记为


其中i=1,2…m


代码部分

function [out]=sym_en_func(fn_1,q,m)
N=length(fn_1);
u=zeros(N-m+1,m);
fn=zeros(1,N);
fn_2=mapminmax(fn_1,-1,1);

for i=1:N
    if abs(fn_2(i))>0.15
        fn(i)=1;
    else
        fn(i)=0;
    end
end

prob=zeros(1,q^m);
for i=1:N-m+1
    u(i,:)=fn(i:i+m-1);
end

[~,~,nn]=unique(u,'rows');
cc=tabulate(nn);
num=cc(:,2);

sum=0;
for i=1:length(num)
    prob(i)=num(i)/(N-m+1);
    sum=sum+prob(i)*log(1/(prob(i))); 
end

out=sum;
end

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!