Switch to side-by-side view

--- a
+++ b/featurebased-approach/subfunctions/segment_QRS.m
@@ -0,0 +1,82 @@
+function [SigSegments,QRSsegments]=segment_QRS(QRS,signal,fs,window,overlap)
+% Function to segment signal in to windows of specified length and overlap
+%
+% Inputs:
+%           QRS -               vector of QRS detection locations to be
+%                               split in to windows (seconds)
+%           signal -            ECG signal to be split in to windows (seconds)
+%           fs -                sampling frequency of signal
+%           window -            required window length of signal (seconds)
+%           overlap -           window overlap (0<=overlap<1)
+%
+% Output:
+%           QRSsegments -       structure of QRS detections for each window
+%           SigSegments -       structure of signal segmented in to windows
+%
+%
+%
+% --
+% ECG classification from single-lead segments using Deep Convolutional Neural 
+% Networks and Feature-Based Approaches - December 2017
+% 
+% Released under the GNU General Public License
+%
+% Copyright (C) 2017  Fernando Andreotti, Oliver Carr
+% University of Oxford, Insitute of Biomedical Engineering, CIBIM Lab - Oxford 2017
+% fernando.andreotti@eng.ox.ac.uk
+%
+% 
+% For more information visit: https://github.com/fernandoandreotti/cinc-challenge2017
+% 
+% Referencing this work
+%
+% Andreotti, F., Carr, O., Pimentel, M.A.F., Mahdi, A., & De Vos, M. (2017). 
+% Comparing Feature Based Classifiers and Convolutional Neural Networks to Detect 
+% Arrhythmia from Short Segments of ECG. In Computing in Cardiology. Rennes (France).
+%
+% Last updated : December 2017
+% 
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+% 
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+% 
+% You should have received a copy of the GNU General Public License
+% along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+signal_length=length(signal)/fs;
+wind_samp=window*fs;
+QRS=QRS./fs;
+
+% Amount window moves by
+a=window-(overlap*window);
+
+% Number of windows
+num_win=floor((signal_length-window)/a)+1;
+
+% Window start times
+start_times=0:a:(num_win-1)*a;
+
+if isempty(start_times)
+    start_times  = 0;
+end
+
+% If a section is missed at the end (greater than X seconds)
+% Add one window finishing at end time
+X=2;
+if signal_length-(start_times(end)+window)>X
+    start_times=[start_times,signal_length-window];
+end
+
+% Find indices of QRS series at start times and end times
+QRSsegments = arrayfun(@(x) QRS((QRS>x)&(QRS<(x+window)))-x,start_times,'UniformOutput',0);
+
+% Find signal segments
+SigSegments = arrayfun(@(x) signal(x:min(x+wind_samp,length(signal))),round(start_times*fs)+1,'UniformOutput',0);
+
+