排列熵模糊熵近似熵样本熵的原理及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+m−1)]
式中,
i
=
1
,
2
,
…
,
N
−
m
+
1
i=1, 2 , … , N-m+1
i=1,2,…,N−m+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]=max∣x(i+k)−x(j+k)∣,k∈(0,m−1)
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
N−m+1 的比值,即:
B
i
m
(
r
)
=
B
i
N
−
m
+
1
B^m_i(r)=\\fracB_iN-m+1
Bim(r)=N−m+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)=N−m+11i=1∑N−m+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):2297—2301.
% 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实现