SE(谱熵)算法和C0复杂度计算

SE(谱熵)算法和C0混沌序列的复杂度分析

1、SE算法

在研究混沌序列复杂度时,看到文献中使用SE复杂度算法计算混沌序列的复杂度,自己尝试根据参考文献编写了一段matlab代码。
代码如下:

function SE = SE_entroy(x) %x为一维数组序列
x = x - mean(x);
X = fft(x);%离散傅里叶变换
N = ceil((size(X,2)/2));
X = X(1:N);%取得变换后序列前半部分
Pk = (abs(X).*abs(X))./sum(abs(X).*abs(X));计算Pk-相对功率谱概率
j=1;
for i=1:N
    if Pk(i)~=0
        Pk1(j)=Pk(i);
        j = j+1;
    end
end%去除PK中为0的值,避免出现se无穷大
se = -sum(Pk1.*log(Pk1));
SE = se/log(N);谱熵归一化
end
算法验证

下图是SE熵随着logistic中u的参数变化曲线图
SE(谱熵)算法和C0复杂度计算_第1张图片
下图是SE熵随着FGdelay中u的参数变化曲线图
SE(谱熵)算法和C0复杂度计算_第2张图片
参考文献:
叶晓林, 牟俊, 王智森, et al. 基于SE和C_0算法的连续混沌系统复杂度分析[J]. 大连工业大学学报, v.37;No.159(1):71-76.

2、C0复杂度算法

找到一篇参考文献计算了C0复杂度,matlab代码如下:

function c = C_zero(r,x1)%文献中r一般取值建议5-10,x1为一维数组序列
N = size(x1,2);
X1 = fft(x1);离散傅里叶变换
gn = r*sum(abs(X1).*abs(X1),2)/N;计算判断条件
for i=1:N
    if abs(X1(i))^2> gn
        X2(i)=X1(i);
    else
        X2(i)=0;
    end
end
x2 =ifft(X2);反傅里叶变换
x3 = x1-x2;
c = sum(abs(x3).*abs(x3))/sum(abs(x1).*abs(x1));计算了C0复杂度
end
算法文献验证

logistic 映射

function x = logisitc_map(x,u,N)
for i=1:N
    x(i+1) = u*x(i)*(1-x(i));
end
end

画出C0复杂度随着参数u的变化的曲线图

clear all
r = 5;
for u=0.01:0.01:4
    i=round(u*100);
    X = logisitc_map(0.43,u,5000);
    c(i) = C_zero(r,X);
end
u=0.01:0.01:4;
plot(u,c)

SE(谱熵)算法和C0复杂度计算_第3张图片
SE(谱熵)算法和C0复杂度计算_第4张图片
下面这幅图对于FGdelay(自己改造的映射)求解,值在0.25左右波动,SE(谱熵)算法和C0复杂度计算_第5张图片

参考文献

孙克辉, 贺少波, 朱从旭, et al. 基于C_0算法的混沌系统复杂度特性分析[J]. 电子学报, 2013, 41(9):1765-1771.

你可能感兴趣的:(混沌算法)