信号处理 - 熵

Posted yanshw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号处理 - 熵相关的知识,希望对你有一定的参考价值。

熵,事物的混乱程度;

熵有很多种计算方式; 

 

概念介绍

 

技术图片

 

 

如何理解呢?或者说 两个 均值相减 怎么就能反应 时间序列 的复杂性?

首先,简单思考下这个计算过程,先用 m 长的窗口 滑动生成 一组 m 长的数组,假设 m = 2,那就是 一个 (n-m+1)x2 的数组,然后计算 每行 之间的距离,这其实就是 计算 原时间序列 中 相邻元素的距离,或者说 相关性,然后 看看 所有 相邻元素的相关性 如何(均值);

接着,把 每 相邻 元素 变成 每 3 个元素,变成 (n-m+1)x3 的数组,然后 再 计算 相关性;

如果 原时间序列 很平稳,我们可以想象成 恒等于 某个值,那么相邻 2 个相关性很大,相邻 3 个相关性还是很大,也就是说 窗口变长 并没有 降低相关性;

反之,如果原时间序列 没那么平稳,只存在短期相关,那么 相邻 2 个 相关性较大,相邻 3 个 相关性 会大大降低,此时 两个 相关性 相减 差就会比较大,这就得到了 近似熵;   【此次的平稳是我们通俗说的平稳】

所以,近似熵 越大,时间序列 越 不平稳,或者说 越 复杂;

 

技术图片

 

 

 

技术图片

 

 

从原理上看,三者都是评价 波形 前后的混乱程度的,也就是 评价 波形 重复性的,也就是 频率,熵越大,包含的不同频率越多,越混乱;

三个之间的区别的话
近似熵,1991年的算法。
样本熵,2000年的算法。近似熵在比较的时候有一个自身比较的数值在里面,这个算法优化了。
模糊熵,2007年的算法。前面两个算法在评价时加入了一个阈值:大于阈值就混乱,小于就不混乱。模糊熵加入了一个fuzzy的思想在里面。更科学一些。
啥叫fuzzy,就比如说,原来分男女,只有 是 或者 不是 这种。现在加入了模糊思想,就告诉你,这货有0.8的概率是男的,有0.2的概率是女的这种。这种软分类其实更科学的。更多的可以参考fuzzy c means算法。

与近似熵相比,样本熵具有两个优势:样本熵的计算不依赖数据长度;样本熵具有更好的一致性,即参数m和r的变化对样本熵的影响程度是相同的。

目前样本熵在评估生理时间序列(EEG,sEMG等)的复杂性和诊断病理状态等方面均有应用。

还有一个是排列熵,是评价数据周期性随机性的;

Python 样本熵

python 自带了一个库;
pip install sampen

参数解释

def sampen2(data, mm=2, r=0.2, normalize=False)

data:一维信号

mm:窗口长度,一般 选择 2,偶尔选择 3,一般不选其他值

r:在很大程度上取决于实际应用场景,通常选择 r=0.2stdr,其中 st表示原时间序列的标准差

 

示例

from sampen import sampen2

# initialize a list(初始化list)
series_data = []

# open the file and read each line into the list(按行读取)
with open(relative/path/to/file.txt, r) as file:
    for row in file:
        series_data.append(float(row.strip( 	

)))

# calculate the sample entropy
sampen_of_series = sampen2(series_data)

输出

[
    (0, 2.140629540027156, 0.0028357991885715863)
    (1, 2.162868347337613, 0.004903248034526253),
    (
        # Epoch length for max epoch(最大长度)
        2,
        # SampEn(样本熵的值)
        2.123328492035711,
        # Standard Deviation(标准偏差)
        0.007596323621379352
    ),
]

 

 

 

参考资料:

https://www.zhihu.com/question/266285555/answer/1151247378  知乎

https://sampen.readthedocs.io/en/stable/    官网代码

https://blog.csdn.net/Fanhe_ecust/article/details/101778803  样本熵的python代码实现

https://blog.csdn.net/cratial/article/details/79707169

https://blog.csdn.net/u011389706/article/details/80984209  信号处理算法(2):样本熵(SampEn)   有原理

以上是关于信号处理 - 熵的主要内容,如果未能解决你的问题,请参考以下文章

处理样本不平衡的LOSS—Focal Loss

排列熵模糊熵近似熵样本熵的原理及MATLAB实现

信号处理 - 熵

帮助计算(和有用)密码熵

最大熵源码解读

处理屏幕旋转上的片段重复(带有示例代码)