计算模糊熵 近似熵 样本熵 排列熵

计算模糊熵

function [Out_FuzEn,P] = FuzEn(x,m,r,n,tau)
%
% This function calculates fuzzy entropy (FuzEn) of a univariate signal x
%
% Inputs:
%
% x: univariate signal - a vector of size 1 x N (the number of sample points)
% m: embedding dimension
% r: threshold (it is usually equal to 0.15 of the standard deviation of a signal - because we normalize signals to have a standard deviation of 1, here, r is usually equal to 0.15)
% n: fuzzy power (it is usually equal to 2)
% tau: time lag (it is usually equal to 1)

if nargin == 4, tau = 1; end
if nargin == 3, n = 2; tau=1; end
if tau > 1, x = downsample(x, tau); end

N = length(x);
P = zeros(1,2);
xMat = zeros(m+1,N-m);
for i = 1:m+1
    xMat(i,:) = x(i:N-m+i-1);
end

for k = m:m+1
    count = zeros(1,N-m);
    tempMat = xMat(1:k,:);
    
    for i = 1:N-k
        % calculate Chebyshev distance without counting self-matches
        dist = max(abs(tempMat(:,i+1:N-m) - repmat(tempMat(:,i),1,N-m-i)));
        DF=exp((-dist.^n)/r);
        count(i) = sum(DF)/(N-m);
    end
    
    P(k-m+1) = sum(count)/(N-m);
end

Out_FuzEn = log(P(1)/P(2));
end

计算近似熵

function apen = ApEn( dim, r, data, tau )
%ApEn
%   dim : embedded dimension
%   r : tolerance (typically 0.2 * std)
%   data : time-series data
%   tau : delay time for downsampling
if nargin < 4, tau = 1; end
if tau > 1, data = downsample(data, tau); end
    
N = length(data);
result = zeros(1,2);

for j = 1:2
    m = dim+j-1;
    phi = zeros(1,N-m+1);
    dataMat = zeros(m,N-m+1);    
    % setting up data matrix
    for i = 1:m
        dataMat(i,:) = data(i:N-m+i);
    end    
    % counting similar patterns using distance calculation
    for i = 1:N-m+1
        tempMat = abs(dataMat - repmat(dataMat(:,i),1,N-m+1));
        boolMat = any( (tempMat > r),1);
        phi(i) = sum(~boolMat)/(N-m+1);
    end
    % summing over the counts
    result(j) = sum(log(phi))/(N-m+1);
end
apen = result(1)-result(2);
end

计算样本熵

function entropy = SampEn(data,r)
l = length(data);
Nn = 0;
Nd = 0;
for i = 1:l-2
    for j = i+1:l-2
        if abs(data(i)-data(j))<r && abs(data(i+1)-data(j+1))<r
            Nn = Nn+1;
            if abs(data(i+2)-data(j+2))<r
                Nd = Nd+1;
            end
        end
    end
end
entropy = -log(Nd/Nn);

计算排列熵

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)
     [a,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));

Ref:
H. Azami and J. Escudero, Refined Multiscale Fuzzy Entropy based on Standard Deviation for Biomedical Signal Analysis
X Li, G Ouyang, D Richards, Predictability analysis of absence seizures with permutation entropy, Epilepsy.

  • 19
    点赞
  • 196
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
多尺度近似样本排列熵都是常用的非线性动力学分析方法,用于研究时间序列数据的复杂性和随机性。它们的主要区别在于计算的方法、对时间序列的处理方式、以及尺度的选择等方面。 1.多尺度(Multiscale Entropy,MSE):是一种用于描述时间序列复杂性的非线性动力学分析方法。它将时间序列分解为多个尺度,计算每个尺度下的样本,然后将不同尺度下的样本取平均值得到多尺度。MSE能够反映时间序列在不同尺度下的复杂性,并且可以避免传统的缺陷,如灵敏度不足和不适用于非平稳信号。 2.近似(Approximate Entropy,ApEn):是一种用于描述时间序列随机性的非线性动力学分析方法。它通过比较时间序列中不同长度的子序列之间的相似度,计算出一个近似近似越大,表明时间序列的随机性越低,越接近周期性。 3.样本(Sample Entropy,SampEn):是一种用于描述时间序列随机性的非线性动力学分析方法。它类似于近似,但是使用了不同的相似度测量方法。与近似不同,样本不受序列长度影响,具有较高的稳定性和可重复性。 4.排列熵(Permutation Entropy,PE):是一种用于描述时间序列复杂性的非线性动力学分析方法。它将时间序列转换为排列序列,并计算不同长度的排列序列出现的概率,然后计算排列熵排列熵越大,表明时间序列的复杂性越高。 总的来说,这些方法都是用于研究时间序列数据的复杂性和随机性,并且在实际应用中往往需要结合具体的数据特点和研究目的来选择合适的方法。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值