信号处理算法(2):样本熵(SampEn) 您所在的位置:网站首页 怎么计算熵值大小 信号处理算法(2):样本熵(SampEn)

信号处理算法(2):样本熵(SampEn)

2023-10-19 15:15| 来源: 网络整理| 查看: 265

  本文主要介绍样本熵的物理意义、算法以及Matlab里代码实现。

1.物理意义

  样本熵(Sample Entropy,SampEn)与近似熵的物理意义相似(近似熵参见博客【近似熵理论相关知识与代码实现】),都是通过度量信号中产生新模式的概率大小来衡量时间序列复杂性,新模式产生的概率越大,序列的复杂性就越大。   与近似熵相比,样本熵具有两个优势:样本熵的计算不依赖数据长度;样本熵具有更好的一致性,即参数m和r的变化对样本熵的影响程度是相同的。   样本熵的值越低,序列自我相似性就越高;样本熵的值越大,样本序列就越复杂。目前样本熵在评估生理时间序列(EEG,sEMG等)的复杂性和诊断病理状态等方面均有应用。

2.计算方法

  样本熵的计算方法如下:

3.代码实现

  在Matlab里实现样本熵函数,计算一段时间序列的样本熵值,代码如下:

function SampEnVal = SampEn(data, m, r) % SampEn 计算时间序列data的样本熵 % 输入:data是数据一维行向量 % m重构维数,一般选择1或2,优先选择2,一般不取m>2 % r 阈值大小,一般选择r=0.1~0.25*Std(data) % 输出:SampEnVal样本熵值大小 data = data(:)'; N = length(data); Nkx1 = 0; Nkx2 = 0; for k = N - m:-1:1 x1(k, :) = data(k:k + m - 1); x2(k, :) = data(k:k + m); end for k = N - m:-1:1 x1temprow = x1(k, :); x1temp = ones(N - m, 1)*x1temprow; dx1(k, :) = max(abs(x1temp - x1), [], 2)'; Nkx1 = Nkx1 + (sum(dx1(k, :) < r) - 1)/(N - m - 1); x2temprow = x2(k, :); x2temp = ones(N - m, 1)*x2temprow; dx2(k, :) = max(abs(x2temp - x2), [], 2)'; Nkx2 = Nkx2 + (sum(dx2(k, :) < r) - 1)/(N - m - 1); end Bmx1 = Nkx1/(N - m); Bmx2 = Nkx2/(N - m); SampEnVal = -log(Bmx2/Bmx1); end

  包含更详细注释的代码,可以点击这里下载【样本熵Matlab函数】   enjoy!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有