1. 程式人生 > 實用技巧 >訊號處理 - 熵

訊號處理 - 熵

熵,事物的混亂程度;

熵有很多種計算方式;

概念介紹

如何理解呢?或者說 兩個 均值相減 怎麼就能反應 時間序列 的複雜性?

首先,簡單思考下這個計算過程,先用 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,其中std表示原時間序列的標準差

示例

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(' \t\n\r')))

# 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)   有原理