**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...