ECG-Kit 1.0
(8,595 bytes)
%centroid idx is the first
clust_sample_centroid_idx = clust_dist2mu_sorted_idx(1);
centroid_FM_idx = not_labeled_idx(aux_idx(aux_idx2(clust_sample_centroid_idx)));
centroid_QRS_idx = (centroid_FM_idx);
aux_hb_seq = max(1, QRS_locations(centroid_QRS_idx) - round(2*sampling_rate)): ...
min(ECG_header.nsamp, QRS_locations(centroid_QRS_idx) + round(2*sampling_rate));
aux_hb_seq2 = max(1, centroid_FM_idx - 5):min(cant_QRS_locations, centroid_FM_idx + 2);
aux_hb_seq3 = max(1, QRS_locations(centroid_QRS_idx) - round(0.2*sampling_rate)): ...
min(ECG_header.nsamp, QRS_locations(centroid_QRS_idx) + round(0.5*sampling_rate));
cCentroid = { (QRS_locations(centroid_QRS_idx) - aux_hb_seq(1) + 1) ... %relative position of the heartbeat
ECG_total(aux_hb_seq,:) ... % ecg excerpt
centroid_FM_idx - aux_hb_seq2(1) + 1 ... % relative position of the heartbeat
RR_intervals(aux_hb_seq2)/sampling_rate ... % RR interval sequence
(QRS_locations(centroid_QRS_idx) - aux_hb_seq3(1) + 1) ... %relative position of the heartbeat
ECG_total(aux_hb_seq3,:) ... % morph excerpt
clust_data_m ... % cluster size
};
%closer samples
quartile_size = round(clust_data_m * 0.25);
if( quartile_size > CantSamplesClose )
clust_samples_close_idx = clust_dist2mu_sorted_idx( 1 + randsample(quartile_size, CantSamplesClose ) );
else
if( clust_data_m < 2 )
% the centroid itself
clust_samples_close_idx = clust_dist2mu_sorted_idx;
else
clust_samples_close_idx = clust_dist2mu_sorted_idx( 2:(2+quartile_size-1) );
end
end
clust_samples_close_idx = sort(clust_samples_close_idx);
clust_samples_close_FM_idx = not_labeled_idx(aux_idx(aux_idx2(clust_samples_close_idx)));
clust_samples_close_QRS_idx = (clust_samples_close_FM_idx);
aux_ECGslices = [];
aux_RRslices = [];
aux_MorphSlices = [];
aux_rel_posQRS = [];
aux_rel_posRR = [];
aux_rel_MorphposQRS = [];
aux_seq = colvec(1:length(clust_samples_close_QRS_idx));
aux_hb_seq = arrayfun(@(a)( max(1, QRS_locations(clust_samples_close_QRS_idx((a))) - round(2*sampling_rate)): ...
min(ECG_header.nsamp, QRS_locations(clust_samples_close_QRS_idx((a))) + round(2*sampling_rate)) ) , ...
aux_seq, 'UniformOutput', false);
aux_hb_seq2 = arrayfun(@(a)( max(1, clust_samples_close_FM_idx((a)) - 5): ...
min(cant_QRS_locations, clust_samples_close_FM_idx((a)) + 2) ) , ...
aux_seq, 'UniformOutput', false);
aux_hb_seq3 = arrayfun(@(a)( max(1, QRS_locations(clust_samples_close_QRS_idx((a))) - round(0.2*sampling_rate)): ...
min(ECG_header.nsamp, QRS_locations(clust_samples_close_QRS_idx((a))) + round(0.5*sampling_rate)) ) , ...
aux_seq, 'UniformOutput', false);
%ECG slices
aux_ECGslices = [aux_ECGslices; cellfun(@(a)(ECG_total(a,:)), aux_hb_seq, 'UniformOutput', false)];
%RR slices
aux_RRslices = [aux_RRslices; cellfun(@(a)(RR_intervals(a)/sampling_rate), aux_hb_seq2, 'UniformOutput', false)];
%Morph slices
aux_MorphSlices = [aux_MorphSlices; cellfun(@(a)(ECG_total(a,:)), aux_hb_seq3, 'UniformOutput', false)];
%relative positions
aux_rel_posQRS = [aux_rel_posQRS; cellfun(@(a,b)(QRS_locations(clust_samples_close_QRS_idx((a))) - b(1) + 1), num2cell(aux_seq), aux_hb_seq)];
aux_rel_posRR = [aux_rel_posRR; cellfun(@(a,b)(clust_samples_close_FM_idx((a)) - b(1) + 1), num2cell(aux_seq), aux_hb_seq2)];
aux_rel_MorphposQRS = [aux_rel_MorphposQRS; cellfun(@(a,b)(QRS_locations(clust_samples_close_QRS_idx((a))) - b(1) + 1), num2cell(aux_seq), aux_hb_seq3)];
if( iscell(aux_ECGslices) )
cCloserExamples = { aux_rel_posQRS ... %relative position of the heartbeat
aux_ECGslices ... % ecg excerpt
aux_rel_posRR ... % relative position of the heartbeat
aux_RRslices ... % RR interval sequence
aux_rel_MorphposQRS ... % Morph relative position of the heartbeat
aux_MorphSlices ... % Morph interval sequence
};
else
cCloserExamples = { aux_rel_posQRS ... %relative position of the heartbeat
{aux_ECGslices} ... % ecg excerpt
aux_rel_posRR ... % relative position of the heartbeat
{aux_RRslices} ... % RR interval sequence
aux_rel_MorphposQRS ... % Morph relative position of the heartbeat
{aux_MorphSlices} ... % Morph interval sequence
};
end
%distant samples
if( quartile_size > CantSamplesFar )
clust_samples_far_idx = clust_dist2mu_sorted_idx( clust_data_m - randsample(quartile_size, CantSamplesFar ) + 1 );
else
if( clust_data_m < 3 )
% all examples
clust_samples_far_idx = clust_dist2mu_sorted_idx;
else
clust_samples_far_idx = clust_dist2mu_sorted_idx(3*quartile_size:clust_data_m);
end
end
clust_samples_far_idx = sort(clust_samples_far_idx);
clust_samples_far_FM_idx = not_labeled_idx(aux_idx(aux_idx2(clust_samples_far_idx)));
clust_samples_far_QRS_idx = (clust_samples_far_FM_idx);
aux_ECGslices = [];
aux_RRslices = [];
aux_MorphSlices = [];
aux_rel_posQRS = [];
aux_rel_posRR = [];
aux_rel_MorphposQRS = [];
aux_seq = colvec(1:length(clust_samples_far_QRS_idx));
aux_hb_seq = arrayfun(@(a)( max(1, QRS_locations(clust_samples_far_QRS_idx((a))) - round(2*sampling_rate)): ...
min(ECG_header.nsamp, QRS_locations(clust_samples_far_QRS_idx((a))) + round(2*sampling_rate)) ) , ...
aux_seq, 'UniformOutput', false);
aux_hb_seq2 = arrayfun(@(a)( max(1, clust_samples_far_FM_idx((a)) - 5): ...
min(cant_QRS_locations, clust_samples_far_FM_idx((a)) + 2) ) , ...
aux_seq, 'UniformOutput', false);
aux_hb_seq3 = arrayfun(@(a)( max(1, QRS_locations(clust_samples_far_QRS_idx((a))) - round(0.2*sampling_rate)): ...
min(ECG_header.nsamp, QRS_locations(clust_samples_far_QRS_idx((a))) + round(0.5*sampling_rate)) ) , ...
aux_seq, 'UniformOutput', false);
%ECG slices
aux_ECGslices = [aux_ECGslices; cellfun(@(a)(ECG_total(a,:)), aux_hb_seq, 'UniformOutput', false)];
%RR slices
aux_RRslices = [aux_RRslices; cellfun(@(a)(RR_intervals(a)/sampling_rate), aux_hb_seq2, 'UniformOutput', false)];
%Morph slices
aux_MorphSlices = [aux_MorphSlices; cellfun(@(a)(ECG_total(a,:)), aux_hb_seq3, 'UniformOutput', false)];
%relative positions
aux_rel_posQRS = [aux_rel_posQRS; cellfun(@(a,b)(QRS_locations(clust_samples_far_QRS_idx((a))) - b(1) + 1), num2cell(aux_seq), aux_hb_seq)];
aux_rel_posRR = [aux_rel_posRR; cellfun(@(a,b)(clust_samples_far_FM_idx((a)) - b(1) + 1), num2cell(aux_seq), aux_hb_seq2)];
aux_rel_MorphposQRS = [aux_rel_MorphposQRS; cellfun(@(a,b)(QRS_locations(clust_samples_far_QRS_idx((a))) - b(1) + 1), num2cell(aux_seq), aux_hb_seq3)];
if( iscell(aux_ECGslices) )
cDistantExamples ={ aux_rel_posQRS ... %relative position of the heartbeat
aux_ECGslices ... % ecg excerpt
aux_rel_posRR ... % relative position of the heartbeat
aux_RRslices ... % RR interval sequence
aux_rel_MorphposQRS ... % Morph relative position of the heartbeat
aux_MorphSlices ... % Morph interval sequence
};
else
%force cell contents.
cDistantExamples ={ aux_rel_posQRS ... %relative position of the heartbeat
{aux_ECGslices} ... % ecg excerpt
aux_rel_posRR ... % relative position of the heartbeat
{aux_RRslices} ... % RR interval sequence
aux_rel_MorphposQRS ... % Morph relative position of the heartbeat
{aux_MorphSlices} ... % Morph interval sequence
};
end
clear aux