PhysioNet Cardiovascular Signal Toolbox 1.0.0

File: <base>/Tools/HRV_Metrics_Tools/CalcSDANN.m (2,156 bytes)
function [SDANN, SDNNI] = CalcSDANN(windows_all, tNN, NN, HRVparams)
% [SDANN, SDNNI] = CalcSDANN(windows_all, tNN, NN, HRVparams)
%
%   OVERVIEW:  Calculates SDANN and SDNNindex for all segments  
%              of a specified constant length with no overlap.
%
%   INPUT:     windows_all :
%              NN          : a single column of NN (normal normal) interval
%                            data in seconds
%              tNN         : the time indices of the rr interval data (seconds)
%              HRVparams   : settings struct, including segment length - the
%                            length of the interval requested 
%                            (it is defaulted at 5minutes == 300 seconds)
%              NOTE: seglength must be specified in the same units as <times>
%
%   OUTPUT:     SDANN : standard deviation of the averages of values
%               SDNNI : mean of the standard deviations of all values
%
%	REPO:       
%       https://github.com/cliffordlab/PhysioNet-Cardiovascular-Signal-Toolbox
%   ORIGINAL SOURCE AND AUTHORS:     
%       Main script written by Adriana N. Vest
%       Dependent scripts written by various authors 
%       (see functions for details)  
%	COPYRIGHT (C) 2016 
%   LICENSE:    
%       This software is offered freely and without warranty under 
%       the GNU (v3 or later) public license. See license file for
%       more information
%%

if nargin<3
    error('not enough input arguments!');   
end

segmentlength = HRVparams.windowlength;

for i = 1:length(windows_all)
    if ~isnan(windows_all(i))
        idx = find(tNN >= windows_all(i) & tNN < windows_all(i) + segmentlength);
    
        nn_win = NN(idx);
    
        sm(i) = mean(nn_win);     % mean of each segment
        sstd(i) = std(nn_win);    % stdev of each segment
    else
        sm(i) = NaN;
        sstd(i) = NaN;
    end
end

% Remove NaN values from calculation
seg_mean = sm;
seg_stdev = sstd;
idxrem = find(isnan(sm));
seg_mean(idxrem) = [];
seg_stdev(idxrem) = [];
    
SDANN = std(seg_mean);              % stdev of means of each segment
SDNNI = mean(seg_stdev);            % mean of stdevs from each segment

end