--- a +++ b/featurebased-approach/subfunctions/lib/Sample Entropy/SampEn.m @@ -0,0 +1,82 @@ +function saen = SampEn( dim, r, data, tau ) +% SAMPEN Sample Entropy +% calculates the sample entropy of a given time series data + +% SampEn is conceptually similar to approximate entropy (ApEn), but has +% following differences: +% 1) SampEn does not count self-matching. The possible trouble of +% having log(0) is avoided by taking logarithm at the latest step. +% 2) SampEn does not depend on the datasize as much as ApEn does. The +% comparison is shown in the graph that is uploaded. + +% dim : embedded dimension +% r : tolerance (typically 0.2 * std) +% data : time-series data +% tau : delay time for downsampling (user can omit this, in which case +% the default value is 1) +% +%--------------------------------------------------------------------- +% coded by Kijoon Lee, kjlee@ntu.edu.sg +% Mar 21, 2012 +%--------------------------------------------------------------------- +% +% Copyright (c) 2012, Kijoon Lee +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. + +if nargin < 4, tau = 1; end +if tau > 1, data = downsample(data, tau); end + +N = length(data); +correl = zeros(1,2); +dataMat = zeros(dim+1,N-dim); +for i = 1:dim+1 + dataMat(i,:) = data(i:N-dim+i-1); +end + +for m = dim:dim+1 + count = zeros(1,N-dim); + tempMat = dataMat(1:m,:); + + for i = 1:N-m + % calculate Chebyshev distance, excluding self-matching case + if m==1; + dist = abs(bsxfun(@minus,tempMat(:,i+1:N- dim),tempMat(:,i))); + else + dist = max(abs(bsxfun(@minus,tempMat(:,i+1:N-dim),tempMat(:,i)))); + end + + % calculate Heaviside function of the distance + % User can change it to any other function + % for modified sample entropy (mSampEn) calculation + D = (dist < r); + + count(i) = sum(D)/(N-dim); + end + + correl(m-dim+1) = sum(count)/(N-dim); +end + +saen = log(correl(1)/correl(2)); +end \ No newline at end of file