1、排列熵
1.概念
一種檢測動力學突變和時間序列隨機性的方法,可以定量評估信號序列中含有的隨機噪聲。算法
2.基本原理
(1) 對一組長度爲N的時間序列X進行相空間重構,獲得矩陣Y爲
其中,m爲嵌入維數,t爲延遲時間,K=N-(m-1)t。
矩陣Y中的每一行都是一個重構份量,共有K個重構份量。
函數
(2) 將每個重構份量按照升序從新排列,獲得向量中各元素位置的列索引構成一組符號序列。
m維相空間映射不一樣的符號序列總共有m!種。
測試
(3) 計算每一種符號序列出現的次數除以m!種不一樣的符號序列出現的總次數做爲該重構份量的機率。
(4) 時間序列X的排列熵的計算公式爲:
(5) 排列熵的最大值爲ln(d!),將排列熵值進行歸一化處理,即:
排列熵值的大小表示時間序列X的隨機程度:熵值越小,說明時間序列越簡單、規則;反之,熵值越大,則時間序列越複雜、隨機。
spa
說明: 我以前看排列熵的理論一直看不懂,搞不清排列熵的計算過程,直到我認真閱讀排列熵算法的代碼,而且結合理論,才終於搞清楚。建議讀者閱讀排列熵的代碼時,邊調試邊思考,有助於理解。.net
3.MATLAB代碼
%% 主函數調用排列熵函數求時間序列的排列熵值 [m,n]=size(X); % X爲時間序,一行爲一個時間序列。 % 相空間重構:eDim爲嵌入維數,eLag爲延遲時間 % 當X具備多列和多行時,每列將被視爲獨立的時間序列,該算法對X的每一列假設相同的時間延遲和嵌入維度,並以標量返回ESTDIM和ESTLAG。 [~,eLag,eDim] = phaseSpaceReconstruction(X); % 求排列熵:pe爲排列熵 pe=zeros(1,m); for i=1:m [pe(i),~] = pec(X(i,:),eDim,eLag); end %% 排列熵算法 function [pe ,hist] = pec(y,m,t) % Calculate the permutation entropy % Input: y: time series; % m: order of permuation entropy 嵌入維數 % t: delay time of permuation entropy,延遲時間 % Output: % pe: permuation entropy % hist: the histogram for the order distribution ly = length(y); permlist = perms(1:m); c(1:length(permlist))=0; for j=1:ly-t*(m-1) [~,iv]=sort(y(j:t:j+t*(m-1))); for jj=1:length(permlist) if (abs(permlist(jj,:)-iv))==0 c(jj) = c(jj) + 1 ; end end end hist = c; c=c(find(c~=0)); p = c/sum(c); pe = -sum(p .* log(p));
參考文獻
[1]趙昕海,張術臣,李志深,等.基於VMD的故障特徵信號提取方法[J].振動、測試與診斷,2018,38(1):11-13.
[2]排列熵matlab實現
調試