PhysioNet Cardiovascular Signal Toolbox 1.0.0
(3,141 bytes)
function mse = EvalMSE(NN,tNN,sqi,HRVparams,windows_all)
% mse = EvalMSE(NN,tNN,sqi,HRVparams,windows_all)
%
% OVERVIEW: This function returns MultiScale Entropy calculated on
% input NN intervals for each window.
%
% INPUT: MANDATORY:
% NN : a single row of NN (normal normal) interval
% data in seconds
% tNN : the time indices of the rr interval data
% (seconds)
% sqi : (Optional )Signal Quality Index; Requires
% a matrix with at least two columns. Column
% 1 should be timestamps of each sqi measure,
% and Column 2 should be SQI on a scale from 0 to 1.
% HRVparams : struct of settings for hrv_toolbox analysis
% windows_all : vector containing the starting time of each
% windows (in seconds)
%
% OUTPUT:
% mse : vector of [max_tau, 1] doubles for each
% window
% REPO:
% https://github.com/cliffordlab/PhysioNet-Cardiovascular-Signal-Toolbox
% ORIGINAL SOURCE AND AUTHORS:
% Written by Giulia Da Poian
% 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
%
% Verify input arguments
if nargin < 4
error('Wrong number of input parameters');
end
if nargin < 5 || isempty(windows_all)
windows_all = 0;
end
if isempty(sqi)
sqi(:,1) = tNN;
sqi(:,2) = ones(length(tNN),1);
end
% Set Defaults
if windows_all == 0
windowlength = length(NN);
else
windowlength = HRVparams.MSE.windowlength;
end
threshold1 = HRVparams.sqi.LowQualityThreshold;
threshold2 = HRVparams.RejectionThreshold;
m = HRVparams.MSE.patternLength;
r = HRVparams.MSE.RadiusOfSimilarity;
maxTau = HRVparams.MSE.maxCoarseGrainings;
% Preallocate arrays (all NaN) before entering the loop
mse = nan(maxTau,length(windows_all));
%Analyze by Window
% Loop through each window of RR data
for i_win = 1:length(windows_all)
% Check window for sufficient data
if ~isnan(windows_all(i_win))
% Isolate data in this window
idx_NN_in_win = find(tNN >= windows_all(i_win) & tNN < windows_all(i_win) + windowlength);
idx_sqi_win = find(sqi(:,1) >= windows_all(i_win) & sqi(:,1) < windows_all(i_win) + windowlength);
sqi_win = sqi(idx_sqi_win,:);
nn_win = NN(idx_NN_in_win);
% Analysis of SQI for the window
lowqual_idx = find(sqi_win(:,2) < threshold1);
% If enough data has an adequate SQI, perform the calculations
if numel(lowqual_idx)/length(sqi_win(:,2)) < threshold2
mse(:,i_win) =ComputeMultiscaleEntropy(nn_win, m, r, maxTau);
end
end % end check for sufficient data
end % end of loop through window
end % end of function