样本熵的计算包和原理见下链接:
# 计算样本熵 https://sampen.readthedocs.io/en/stable/#with-tox
# 样本熵的解释 https://www.zhihu.com/question/266285555
直接上可视化(我看了很多论文的图,都画这样)
from sampen import sampen2
def sample_entropy(IImfs):
# 计算样本熵 m=1、2, r=0.1、0.2
sampen=[]
for i in IImfs:
for j in (0.1,0.2):
sample_entropy=sampen2(list(i),mm=2,r=j,normalize=True)
sampen.append(sample_entropy)
# 分离
entropy_r1m1=[] # r=0.1、m=1
entropy_r1m2=[] # r=0.1、m=2
entropy_r2m1=[] # r=0.2、m=1
entropy_r2m2=[] # r=0.2、m=2
for i in range(len(sampen)):
if (i%2)==0: # r = 0.1
# m = 1
entropy_r1m1.append(sampen[i][1][1])
# m = 2
entropy_r1m2.append(sampen[i][2][1])
else: # r = 0.2
# m = 1
entropy_r2m1.append(sampen[i][1][1])
# m = 2
entropy_r2m2.append(sampen[i][2][1])
# 可视化
fig=plt.figure()
x=list(range(1,len(IImfs)+1,1))
# 线段、颜色参考:https://blog.csdn.net/qiurisiyu2016/article/details/80187177
plt.plot(x,entropy_r1m1,'r:H',label='m=1 r=0.1')
plt.plot(x,entropy_r2m1,'b:s',label='m=1 r=0.2')
plt.plot(x,entropy_r1m2,'c:D',label='m=2 r=0.1')
plt.plot(x,entropy_r2m2,'m:h',label='m=2 r=0.2')
plt.xlabel('I M F 分 量')
plt.ylabel('样 本 熵 值')
plt.legend()
plt.show()
#fig.savefig('sample_entropy.png', format='png', transparent=True, dpi=300, pad_inches = 0)
m和r都为参数,可在原理链接中看。可自行调整,不过我看论文用的这个。
计算
# 计算各imf分量的样本熵
sample_entropy(IImfs)
结果,此处数据使用上一篇文章中CEEMDAN分解所得的Imf。