%% Create an artificial set of QRS detections, based on multilead QRS detections created with wavedet algorithm. % This is an auxiliar function for the ECGtask_QRS_detections_post_process. % This function creates an artificial set of QRS detections, based on single % lead detections, as described in [add reference]. % % % all_detections = wavedet_QRS_detection_mix(struct_in, ECG_header, start_end_this_segment ) % % Arguments: % % + struct_in: the structure which results from loading the result of % the QRS detection task used for invoking wavedet: % % cached_filenames = ECG_w.GetCahchedFileName('QRS_detection'); % struct_in = load(cached_filenames{1}); % % +ECG_header: [struct] OPTIONAL. % % Description of the ECG typically available in the % ECG_header. Structure with fields: % % -freq: Sampling rate in Hz. (1) % % -nsig: Number of ECG leads. (size(ECG,2)) % % -nsamp: Number of ECG samples. (size(ECG,1)) % % + start_end_this_segment: an array with the first and last sample % indexes. % % Output: % % + all_detections: struct with the artificial detections named with % prefix "wavedetMix_ECGmix". % % Example % % ECG_w.ECGtaskHandle = 'QRS_detections_post_process'; % % Mix QRS detections strategy function % ECG_w.ECGtaskHandle.post_proc_func = 'wavedet_QRS_detection_mix'; % ECG_w.ECGtaskHandle.payload = load(cached_filenames{1}); % ECG_w.ECGtaskHandle.CalculatePerformance = true; % ECG_w.Run; % % See also ECGtask_QRS_detections_post_process, calculate_artificial_QRS_detections % % Author: Mariano Llamedo Soria llamedom@electron.frba.utn.edu.ar % Version: 0.1 beta % Birthdate: 01/01/2014 % Last update: 14/07/2015 % Copyright 2008-2015 % function all_detections = wavedet_QRS_detection_mix(struct_in, ECG_header, start_end_this_segment ) all_detections = []; % attemp to build a better detection from single-lead detections. AnnNames = struct_in.series_quality.AnnNames(:,1); detector_name = cellfun( @(a)( strtok(a, '_')), AnnNames, 'UniformOutput', false); aux_idx = find(strcmpi(detector_name, 'wavedet')); all_annotations = {}; for ii = rowvec(aux_idx) all_annotations = [all_annotations; {struct_in.(struct_in.series_quality.AnnNames{ii,1}).time}]; end [ ratios, estimated_labs ] = CalcRRserieRatio(all_annotations, ECG_header, start_end_this_segment); [~, best_detections_idx] = sort(ratios, 'descend'); % generate artificial annotations combining K best annotations aux_idx = best_detections_idx(1:min(10, length(best_detections_idx)) ); artificial_annotations = combine_anns(all_annotations(aux_idx), estimated_labs(aux_idx), ECG_header ); for ii = 1:length(artificial_annotations) aux_str = ['wavedetMix_ECGmix' num2str(ii)]; all_detections.(aux_str) = artificial_annotations(ii); end