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

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

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

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


目录

三、样本熵

1.简介

2.基本原理

3.MATLAB代码

结束语

参考文献


三、样本熵

1.简介

样本熵(Sample entropy,简称SampEn)是Richman等在2000年提出的一种新的时间序列复杂度表征参数。样本熵是在近似熵的基础上改进得到的,二者都是衡量时间序列的复杂性和维数变化时序列产生新模式概率的大小,产生新模式的概率越大,序列的复杂性程度越高,熵值就越大。与Lyapunov指数 、信息熵、关联维数等其他非线性动力学方法相比,样本熵具有所需的数据短、抗噪和抗干扰能力强、在参数大取值范围内一致性好等优点,因而被广大学者所关注且近年来被常用于机械信号分析与故障诊断领域。

2.基本原理

设有长度为N的时间序列X={x(1),x(2),...,x(N)},其样本熵的计算方法如下:

Step1:将时间序列X构造成m维矢量,即

Step2:定义X(i)与X(j)间的距离为d[X(i),X(j)](i不等于j),为两者对应元素中差值最大的一个,即

Step3:给定阈值r(r>0),统计d[X(i),X(j)]<r的数目并与总的矢量个数 N-m 的比值,即

Step4:对所有由式(3)得到的结果求平均,即:

Step5:再将维数 m 加 1,重复 Step1~ Step4

Step6:则理论上此序列的样本熵为:

但实际中 N 不可能为无穷大,而为一有限值,则样本熵的估计值为:
 

样本熵算法的优点:样本熵不包含自身数据段的比较,不仅提高了计算精度、节约了计算时间,而且也使得样本熵的计算不依赖数据长度;其次,样本熵具有更好的一致性,就是说如一序列比另一序列有较高的 SampEn,那么改变 m 和 r 值,也具有相对较高的 SampEn 值。总的来说,样本熵就是一种与近似熵相似但精度更好的方法。

3.MATLAB代码

%% 主函数
clc;
clear;
close all;

% 仿真信号
Fs=4000;   % 数据采样率
t=(0:1/Fs:(1-1/Fs));
x=0.6*sin(500*pi*t+pi/4);

% 计算样本熵
dim=2;
r=0.2*std(x);
sampEn = SampleEntropy( dim, r, x);

%% 样本熵函数
function sampEn = SampleEntropy( dim, r, data, tau )
%   注意:这个样本熵函数是在Kijoon Lee的基础上做的修改
%   样本熵算法的提出者:Richman J s,Moorman J R. Physiological time-seriesanalysis using approximate entropy and sample entropy[J. American Journal of Physiology Heart &. Circula-tory Physiology,2000,278(6):2039-2049.
%   计算给定时间序列数据的样本熵
%
%   样本熵在概念上类似于近似熵,但有以下区别:
%       1)样本熵不计算自匹配,通过在最后一步取对数,避免了可能出现的log(0)问题;
%       2)样本熵不像近似熵那样依赖数据的长度。
% 
%   dim:嵌入维数(一般取1或者2)
%   r:相似容限( 通常取0.1*Std(data)~0.25*Std(data) )
%   data:时间序列数据,data须为1xN的矩阵
%   tau:下采样延迟时间(在默认值为1的情况下,用户可以忽略此项)
% 
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);
    end
    
    % 利用距离计算相似模式数
    for j = 1:N-m+1
        % 计算切比雪夫距离,不包括自匹配情况
        dist = max(abs(dataMat - repmat(dataMat(j,:),N-m+1,1)),[],2);
        % 统计dist小于等于r的数目
        D = (dist <= r);
        % 不包括自匹配情况
        Bi(j,1) = (sum(D)-1)/(N-m);
    end
 
    % 求所有Bi的均值
    result(m-dim+1) = sum(Bi)/(N-m+1);
	
end
    % 计算得到的样本熵值
    sampEn = -log(result(2)/result(1));
	
end

结束语

大家的点赞和关注是博主最大的动力,博主所有博文中的代码文件都可分享给您(除了少量付费资源),如果您想要获取博文中的完整代码文件,可通过C币或积分下载,没有C币或积分的朋友可在关注、点赞和评论博文后,私信发送您的邮箱,我会在第一时间发送给您。博主后面会有更多的分享,敬请关注哦!

参考文献

[1]样本熵理论相关知识与代码实现

[2]郑近德,陈敏均,程军圣,等. 多尺度模糊熵及其在滚动轴承故障诊断中的应用[J]. 振动工程学报,2014,27(1):1145-151.

[3]来凌红,吴虎胜,吕建新,等. 基于EMD和样本熵的滚动轴承故障SVM识别[J]. 煤矿机械,2011,32(1):249-252.

  • 92
    点赞
  • 376
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 52
    评论
### 回答1: 在MATLAB中,可以使用entropy函数来计算样本,并通过画图函数来可视化结果。 首先,导入需要的样本数据。假设有一个包含N个样本的向量x,我们要计算其。使用entropy函数可以得到样本值,如下所示: entropy_value = entropy(x); 接下来,我们可以使用plot函数来可视化样本。建立一个长度为N的向量,以及对应的值。然后使用plot函数来绘制图形: N = length(x); entropy_vector = ones(N, 1) * entropy_value; plot(1:N, entropy_vector, 'r'); hold on; plot(1:N, x, 'b'); xlabel('样本序号'); ylabel('值'); legend('值', '样本数据'); title('样本图'); 在上述代码中,首先建立一个长度为N的向量entropy_vector,其中每个元素的值都等于样本值。然后使用plot函数绘制图形,在x轴上以样本序号为横坐标,在y轴上以值为纵坐标绘制红色的值曲线。接着,使用hold on命令保持绘图状态,可以继续在同一张图上绘制其他曲线。这里再使用plot函数将样本数据在蓝色曲线上绘制出来。最后,使用xlabel、ylabel、legend和title函数来添加横轴标签、纵轴标签、图例和标题。 通过这样的操作,可以将样本计算结果可视化出来,方便分析和观察样本数据的值分布情况。 ### 回答2: 在MATLAB中,可以使用样本(Sample Entropy)来表示信号序列的复杂性或不规则性。以下是使用MATLAB绘制样本图的基本步骤: 1. 读取信号数据:首先,需要将要分析的信号数据导入MATLAB环境中。可以使用`load`命令加载已经保存的数据文件,或者使用MATLAB提供的数据生成函数生成信号数据。 2. 计算样本:使用MATLAB提供的样本计算函数计算信号的样本值。可以使用`sampen`函数或`entropymc`函数来计算样本。这些函数通常需要提供信号数据作为输入,并且可能需要一些其他的参数,用于控制计算的精度和结果。 3. 绘制样本图:绘制样本图需要使用MATLAB的绘图函数,如`plot`或`scatter`。首先,需要将计算得到的样本值按照相应的时间点进行排序。然后使用绘图函数将样本值与时间点进行对应,绘制出样本曲线。 4. 添加标签和标题:为了使图像更加易读和易理解,可以添加坐标轴标签、图例和标题。可以使用MATLAB提供的命令,如`xlabel`、`ylabel`、`legend`和`title`来添加这些标签和标题。 5. 保存图像:如果需要将样本图保存为图像文件,可以使用MATLAB的保存函数,如`saveas`或`print`。这些函数允许将图像保存为常见的图像格式,如PNG、JPEG或PDF。 综上所述,通过以上步骤,可以使用MATLAB绘制样本图,以直观地表示信号序列的复杂性或不规则性。 ### 回答3: 在Matlab中,可以通过使用`entropysc`函数来计算样本,并通过绘制图形来展示结果。 首先,确保你的数据已经被加载到Matlab工作空间中。然后,使用`entropysc`函数来计算样本。该函数具有以下语法: ``` H = entropysc(data) ``` 其中`data`表示你的数据,`H`表示计算得到的样本值。 接下来,你可以使用`plot`函数绘制样本的图形。可以选择在x轴上绘制样本或时间点,而在y轴上绘制样本值。具体的绘图方法取决于你的数据和你想展示的信息。 以下是一个示例代码,用于计算样本并将其绘制成图表: ```matlab % 假设你的数据存储在名为data的向量中 data = [1, 2, 1, 3, 2, 4, 1, 2, 3]; % 计算样本 H = entropysc(data); % 绘制样本图 plot(data, H); xlabel('样本'); ylabel('样本'); title('样本图'); ``` 运行以上代码,将会绘制出样本图,x轴表示每个样本的值,y轴表示样本的值。你可以更改代码来适应你的数据和需求,以获得所需的样本图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhi Zhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值