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

Posted Zhi Zhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排列熵模糊熵近似熵样本熵的原理及MATLAB实现之近似熵相关的知识,希望对你有一定的参考价值。

说明:“本博文为排列熵、模糊熵、近似熵、样本熵的原理及MATLAB实现”系列博文的最后一篇,关于排列熵、模糊熵、样本熵的内容请阅读博客:

排列熵

模糊熵

样本熵

近似熵

四、近似熵

1.简介

近似熵(approximate entropy,ApEn)可以定量描述时间序列的复杂程度,序列的复杂性越大,相应的近似熵也越大。近似熵的值受数据量的影响较小,对于非平稳、非线性序列的量化结果稳定,在实际工程中得以广泛应用。

2.基本原理

设有长度为 N N N 的时间序列 X = [ x 1 , x 2 , … , x N ] X= [x_1, x_2,…,x_N ] X=[x1,x2,,xN],其近似熵的计算步骤如下:
Step1:将时间序列 X X X 的元素按顺序排列为具有 m m m 维数的向量,即
X i = [ x ( i ) , x ( i + 1 ) , . . . , x ( i + m − 1 ) ] X_i=[x(i),x(i+1),...,x(i+m-1)] Xi=[x(i),x(i+1),...,x(i+m1)]
式中, i = 1 , 2 , … , N − m + 1 i=1, 2 , … , N-m+1 i=1,2,,Nm+1
Step2:定义 d [ X i , X j ] d [X_i, X_j] d[Xi,Xj] 为向量 X i X_i Xi X j X_j Xj 的距离,则:
d [ X i , X j ] = m a x ∣ x ( i + k ) − x ( j + k ) ∣ , k ∈ ( 0 , m − 1 ) d [X_i, X_j]=max|x(i+k)-x(j+k)|,k∈(0,m-1) d[Xi,Xj]=maxx(i+k)x(j+k)k(0,m1)
Step3:记 B i B_i Bi d [ X i , X j ] ≤ r d [X_i, X_j] ≤ r d[Xi,Xj]r的个数( r r r 为相似容限),并计算 B i B_i Bi 与全部矢量数 N − m + 1 N-m+1 Nm+1 的比值,即:
B i m ( r ) = B i N − m + 1 B^m_i(r)=\\fracB_iN-m+1 Bim(r)=Nm+1Bi
Step4:对 B i m ( r ) B^m_i(r) Bim(r) 进行取对数运算,再求其对所有 i i i 的平均值,记作 B m ( r ) B^m(r) Bm(r) ,则有:
B m ( r ) = 1 N − m + 1 ∑ i = 1 N − m + 1 l n B i m ( r ) B^m(r)=\\frac1N-m+1\\sum_i=1^N-m+1lnB^m_i(r) Bm(r)=Nm+11i=1Nm+1lnBim(r)
Step5:令 m = m + 1 m=m+1 m=m+1,并重复 Step1~Step4,即可得到 B m + 1 ( r ) B^m+1(r) Bm+1(r)
Step6:理论上,此序列的近似熵为:
A p E n ( m , r ) = l i m [ B m ( r ) − B m + 1 ( r ) ] , N → ∞ ApEn(m,r)=lim[B^m(r)-B^m+1(r)],N→∞ ApEn(m,r)=lim[Bm(r)Bm+1(r)]N
对于实际的序列, N N N 不可能趋近无穷大,因此近似熵可表示为:
A p E n ( m , r , N ) = B m ( r ) − B m + 1 ( r ) ApEn(m,r,N)=B^m(r)-B^m+1(r) ApEn(m,r,N)=Bm(r)Bm+1(r)
近似熵本质上是一个关于序列和参数的统计值,它的大小与数据长度 N N N 、嵌入维数 m m m 和相似容限 r r r 有关。为了得到较好的统计特性以及较小的误差, 数据长度 N N N 通常在100~5000 取值,嵌入维数 m m m 一般取 1 或 2,相似容限 r r r 取(0.1~0.25)* s t d std std s t d std std 为序列的标准差。

3.MATLAB代码

% 主程序
clc;
clear;
close all;

%% 产生仿真信号
fs = 1000;	% 数据采样率
t = (0:1/fs:(1-1/fs));          % 时间
x = cos(50*pi*t+sin(5*pi*t));   % 数据

%% 画图
figure;
plot(t,x);
xlabel('t/s');ylabel('幅值');title('信号的时域波形');

%% 求仿真信号x的近似熵
m = 2;                                  % 嵌入维数
r0 = 0.2;                               % 相似容限的系数
r = r0*std(x);                          % 相似容限
appEn = ApproximateEntropy(m,r,x);   % 近似熵

% 求近似熵的函数
function appEn = ApproximateEntropy(dim, r, data, tau)
%   近似熵算法的提出者:Pincus S M . Approximate entropy as a measure of system complexity[J]. Proceedings of the National Academy of Sciences ,1991,88(6):22972301.
%   Input:
%       dim:嵌入维数(一般取1或者2)
%       r:相似容限( 通常取0.1*Std(data)~0.25*Std(data) )
%       data:时间序列数据,data须为1xN的矩阵
%       tau:下采样延迟时间(在默认值为1的情况下,用户可以忽略此项)
%   Output:
%       appEn:所求数据的近似熵
if nargin < 4
    tau = 1;
end
if tau > 1
    data = downsample(data, tau);
end

N = length(data);
result = zeros(1,2);

for m = dim:dim+1
    Bi = zeros(N-m+1,1);
    dataMat = zeros(N-m+1,m);
    
    % 设置数据矩阵,构造成m维的矢量
    for i = 1:N-m+1
        dataMat(i,:) = data(1,i:i+m-1排列熵模糊熵近似熵样本熵的原理及MATLAB实现

Python近似熵,样本熵,模糊熵计算高效版

脑电信号基于matlab小波变换+样本熵的癫痫脑电信号特征提取含Matlab源码 1154期

熵,条件熵,相对熵,互信息的相关定义及公式推导

熵,条件熵,相对熵,互信息的相关定义及公式推导

学习笔记之信息量熵KL散度交叉熵的一些介绍