Waveform Database Software Package (WFDB) for MATLAB and Octave 0.10.0
(3,165 bytes)
function varargout=lomb(varargin)
%
% [Pxx,F]=lomb(x,dcOffset,smooth)
%
% Wrapper to WFDB LOMB:
% http://www.physionet.org/physiotools/wag/lomb-1.htm
%
% Transforms a real-valued time series 'x' into a power spectrum 'X', using a
% technique known as the Lomb periodogram. The input is a Nx2 matrix containing
% a sampled time series, presented as two columns of numbers (the sample times
% in the first column and the sample values in the second). The intervals between
% consecutive samples need not be uniform.
%
%Input Parameters:
% x
% Nx2 vector of doubles. First column is sample time index (in
% seconds), and second column is the sample value of the signal at
% that time.
%
% dcOffset (Optional)
% Booelan. If present add constant to input samples ( x(:,2) ), such that the mean
% values of the time series is zero (default=1).
%
% smooth (Optional)
% Boolean String specifying the if the output should be smoothed (default =1).
%
%
%Output Parameters:
%
%Pxx
% Mx1 Double. Estimated power spectrum.
%
%F
% Mx1 Double. Frequency of the estimated power spectrum (Hz).
%
%
% CITING CREDIT: To credit this function, please cite the following paper at your work:
%
%Moody, G.B.
% Spectral analysis of heart rate without resampling. Computers in Cardiology 1993, pp. 715-718 (IEEE Computer Society Press, 1993). http://www.physionet.org/physiotools/lomb/lomb.html .
%
%
%Additional References:
%Lomb, N.R.
% Least-squares frequency analysis of unequally spaced data. Astrophysics and Space Science 39:447-462 (1976).
%Press, W.H, and Rybicki, G.B.
% Fast algorithm for spectral analysis of unevenly sampled data. Astrophysical J. 338:277-280 (1989).
%Press, W.H. Teukolsky, S.A., Vetterling, W.T., and Flannery, B.P.
% Numerical Recipes in C: the Art of Scientific Computing, pp. 575-584 (Cambridge Univ. Press, 1992).
%Moody, G.B.
% Spectral analysis of heart rate without resampling. Computers in Cardiology 1993, pp. 715-718 (IEEE Computer Society Press, 1993). http://www.physionet.org/physiotools/lomb/lomb.html .
%
%
%
% MATLAB wrapper written by Ikaro Silva, 2013
% Last Modified: -
% Version 1.0
% Since 0.9.0
%
%
% %Example: Heart Rate Spectral Analysis:
% [signal,Fs,tm]=rdsamp('mitdb/100',1);
% [ann]=rdann('mitdb/100','atr');
% [Pxx,F]=lomb([tm(ann) signal(ann)]);
% plot(F,Pxx);grid on;hold on
%
% See also RDANN, TACH, SQRS, WQRS
%endOfHelp
persistent javaWfdbExec
if(isempty(javaWfdbExec))
javaWfdbExec=getWfdbClass('lomb');
end
%Set default pararamter values
%[Pxx,F]
inputs={'x','dcOffset','smooth'};
dcOffset=1;
smooth=1;
for n=1:nargin
if(~isempty(varargin{n}))
eval([inputs{n} '=varargin{n};']);
end
end
wfdb_argument={'-P'};
if(dcOffset)
wfdb_argument{end+1}='-z';
end
if(smooth)
wfdb_argument{end+1}='-s';
end
wfdb_argument{end+1}='-';
del=repmat([' '],size(x(:,1)));
data=[num2str(x(:,1)) del num2str(x(:,2))];
javaWfdbExec.setArguments(wfdb_argument);
pxx=char(javaWfdbExec.execWithStandardInput(cellstr(data)));
pxx=sscanf(pxx(2:end-1), '%f %f,');
varargout{1}=pxx(2:2:end);
varargout{2}=pxx(1:2:end);