Waveform Database Software Package (WFDB) for MATLAB and Octave 0.10.0
(2,868 bytes)
function [ln,lf]=dfa(varargin)
%
% [ln,lf]=dfa(x,p,integrateFlag,minBoxSize,maxBoxSize,slideWindowFlag)
%
%
% Wrapper to the DFA Algorithm in:
% http://www.physionet.org/physiotools/dfa/
%
% References:
% Peng C-K, Buldyrev SV, Havlin S, Simons M, Stanley HE, Goldberger AL. Mosaic organization of DNA nucleotides. Phys Rev E 1994;49:1685-1689.
% Peng C-K, Havlin S, Stanley HE, Goldberger AL. Quantification of scaling exponents and crossover phenomena in nonstationary heartbeat time series. Chaos 1995;5:82-87.
%
% Please cite at least one of the above publications when referencing this
% material.
%
% Required Input Options are:
%
% x
% A Nx1 vector of doubles.
%
% Optional Input Options are:
%
% p
% Detrend using a polynomial of degree p (default: p=1, linear
% detrending).
%
% integrateFlag
% Input series is already integrated ( default= false ).
%
% minBoxSize
% Smallest box width (default: 2p+2)
%
% maxBoxSize
% Largest box width (default: N/4)
%
% slideWindowFlag
% Sliding window DFA (default =false);
%
%
% The Output variables are:
%
% ln
% A (MaxBoxSize -MinBoxSize) x 1 vector of log(boxsize)
%
% lf
% A (MaxBoxSize -MinBoxSize) x 1 vector of the log of the root
% mean square fluctuation for the given boxsize.
%
%
% Written by Ikaro Silva, 2014
% Last Modified: November 21, 2014
% Version 1.0
%
% Since 0.9.8
%
% %Example:
%
% gqrs('mitdb/117');
% [rr]=ann2rr('mitdb/117','qrs');
% [ln,lf]=dfa(rr);
% plot(ln,lf)
%
%
% See also MSENTROPY, SURROGATE
%endOfHelp
persistent javaWfdbExec config
if(isempty(javaWfdbExec))
[javaWfdbExec,config]=getWfdbClass('dfa');
end
%Set default pararamter values
inputs={'x','p','integrateFlag','minBoxSize','maxBoxSize','slideWindowFlag'};
p=[];
integrateFlag=false;
minBoxSize=[];
maxBoxSize=[];
slideWindowFlag=false;
wfdb_argument={};
for n=1:nargin
if(~isempty(varargin{n}))
eval([inputs{n} '=varargin{n};']);
end
end
if(~isempty(p))
wfdb_argument{end+1}='-d';
wfdb_argument{end+1}=[num2str(p)];
end
if(integrateFlag)
wfdb_argument{end+1}='-i';
end
if(~isempty(minBoxSize))
wfdb_argument{end+1}='-l';
wfdb_argument{end+1}=[num2str(minBoxSize)];
end
if(~isempty(maxBoxSize))
wfdb_argument{end+1}='-u';
wfdb_argument{end+1}=[num2str(maxBoxSize)];
end
if(slideWindowFlag)
wfdb_argument{end+1}='-s';
end
javaWfdbExec.setArguments(wfdb_argument);
if(config.inOctave)
x=cellstr(num2str(x));
x=java2mat(javaWfdbExec.execWithStandardInput(x));
Nx=x.size;
out=cell(Nx,1);
for n=1:Nx
out{n}=x.get(n-1);
end
else
out=cell(javaWfdbExec.execWithStandardInput(x).toArray);
end
M=length(out);
ln=zeros(M,1)+NaN;
lf=zeros(M,1)+NaN;
for m=1:M
str=out{m};
sep=regexp(str,'\s');
ln(m)=str2num(str(1:sep));
lf(m)=str2num(str(sep(1):end));
end