樣本熵的matlab程式

2021-08-13 14:47:18 字數 1702 閱讀 3169

**matlab下的動態樣本熵計算

%sampen  計算時間序列data的樣本熵

%        data為輸入資料序列

%        m為初始分段,每段的資料長度

%        r為閾值

% $author: lskyp

% $date:   2010.6.20

% orig version: v1.0--------分開計算長度為m的序列和長度為m+1的序列

%                           這一版的計算有些問題,需要注意兩個序列總數都要為n-m

% modi version: v1.1--------綜合計算,計算距離時通過矩陣減法完成,避免重迴圈

% v1.1 modified date: 2010.6.23

data = data(:)';

n = length(data);

nkx1 = 0;

nkx2 = 0;

% 分段計算距離,x1為長度為m的序列,x2為長度為m+1的序列

for k = n - m:-1:1

x1(k, :) = data(k:k + m - 1);

x2(k, :) = data(k:k + m);

endfor k = n - m:-1:1

% x1序列計算

% 統計距離,由於每行都要與其他行做減法,因此可以先將該行複製為n-m的矩陣,然後

% 與原始x1矩陣做減法,可以避免兩重迴圈,增加效率

x1temprow = x1(k, :);

x1temp    = ones(n - m, 1)*x1temprow;

% 可以使用repmat函式完成上面的語句,即

% x1temp = repmat(x1temprow, n - m, 1);

% 但是效率不如上面的矩陣乘法

% 計算距離,每一行元素相減的最大值為距離

dx1(k, :) = max(abs(x1temp - x1), , 2)';

% 模板匹配數

nkx1 = nkx1 + (sum(dx1(k, :) < r) - 1)/(n - m - 1);

% x2序列計算,和x1同樣方法

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);

matlab練習程式(Renyi熵)

renyi熵是對通常的夏農熵的擴充套件,算是q階廣義熵。公式如下 其中p和夏農熵公式中的p一樣,是概率。當q 1時公式退化為夏農熵公式。如何證明?看wiki吧 有用此公式尋找影象 最佳二值化閾值的。首先定義前景區域a,背景區域b。那麼前景與背景區域畫素相應的renyi熵就如下定義 其中k是當前取的灰...

時間序列複雜性的度量 近似熵和樣本熵

近似熵和樣本熵都是對非穩定時間序列的複雜型的度量,其思想都是檢測時間序列中的新的子串行產生概率。近似熵和樣本熵計算方法 近似熵的計算方法 原料 具有n個均勻資料點的時間序列 需要進行切割的子片段序列中的資料點數m 子片段之間相似性的容忍度r 演算法步驟 1.1將n個資料點的時間序列依照資料點的排序將...

快速求熵程式

資訊熵很有用,就拿我的老本行反病毒來說,它是靜態病毒特徵的常見組成部分。資訊熵的計算公式很簡單 entropy sum p x log p x 其中,p x 是隨機變數 x 出現的概率,這裡熵的單位是bit。通常,我們用 c x 表示 x 出現的次數,t sum c x 表示觀察次數的總和,那麼 e...