样本熵原理:
其原理与近似熵类似,但其更具有一致性,且对数据长度不存在依赖性。
以下内容如有不对之处,望大家在评论区里告诉小鱼🐟哦,谢谢大家啦!!
SampEn算法:
step1:x={x(1),x(2),…,x(N)},确定维数m(通常取2或3)
step2:X(n)={x(n),x(n+1),…,x(n-m+1)},n=1,2,…,N-m+1
step3:d[X(n),X(j)]=max(|x(n+k)-x(j+k)|),n不等于j,k=0.1,…,m-1
step4:sd=x的标准差
step5:确定阈值r=0.1~0.25sd
step6:Bn(统计d[X(n),X(j)]<r的个数)/(N-m+1)
step7:Θ1=Bn的均值
step8:m=m+1,重复步骤step2~step7,得到Θ2
step9:SampEn=-ln(Θ2/Θ1)
Matlab代码:
%% %%%%清除历史记录%%%% clc,clear,close all; %% %%%%仿真信号设置%%%% fs=200;T=1/fs;time=1; t=0:T:time-T; len=length(t); x=2*sin(60*pi*t).*(1+0.5*sin(2*pi*t)); %% %%%%样本熵%%%% [fai3]=Sampen(2,x,len); [fai4]=Sampen(3,x,len); SampEn=-log(fai4/fai3); function [fai]=Sampen(m,x,len) n=1:len-m+1; for i=n j=i:i+m-1; X(i,:)=x(j); end n=1:len-m; j=1:len-m; k=0:m-1; for i=n for ii=j if i==ii continue; else x1=X(i,1+k); x2=X(ii,1+k); d(i,ii)=max(abs(x1-x2)); end end end x_sdv=sqrt(mean((x-mean(x)).^2)); r=0.25*x_sdv;%%%%r=0.1~0.25x_sdv for i=n Bm(i)=length(find(d(i,:)<r))/(len-m+1); end fai=mean(Bm); end