--- a
+++ b/data preprocessing_Matlab/seq2seq_mitbih_AAMI.m
@@ -0,0 +1,218 @@
+clear all
+clc
+tic
+addr = '.\mitbihdb';
+Files=dir(strcat(addr,'\*.mat'));
+
+%% Translate PhysioNet classification results to AAMI and AAMI2 labling schemes
+% AAMI Classes:
+% % N = N, L, R, e, j
+% % S = A, a, J, S
+% % V = V, E
+% % F = F
+% % Q = /, f, Q
+
+% AAMI2 Classes:
+% % N = N, L, R, e, j
+% % S = A, a, J, S
+% % V = V, E, F
+% % Q = /, f, Q
+% https://github.com/ehendryx/deim-cur-ecg/blob/master/DS1_MIT_CUR_beat_classification.m
+AAMI_annotations = {'N' 'S' 'V' 'F' 'Q'};
+AAMI2_annotations = {'N' 'S' 'V_hat' 'Q'};
+
+index = 1;
+beat_len = 280;
+n_cycles = 0;
+featuresSeg = [];
+groupN = [];
+groupV = [];
+groupS = [];
+groupF = [];
+groupQ = [];
+N_class = 0;V_class=0;F_class=0;Q_class=0;S_class=0;
+for i=1:length(Files) % Files names3signals
+    
+    %% load the files
+    % load ('100m.mat')          % the signal will be loaded to "val" matrix
+    % val = (val - 1024)/200;    % you have to remove "base" and "gain"
+    % ECGsignal = val(1,1:1000); % select the lead (Lead I)
+    % Fs = 360;                  % sampling frequecy
+    % t = (0:length(ECGsignal)-1)/Fs;  % time
+    % plot(t,ECGsignal)
+    %
+    
+    [pathstr,name,ext] = fileparts(Files(i).name);
+    nsig = 1;
+    
+    [tm,ecgsig,ann,Fs,sizeEcgSig,timeEcgSig] = loadEcgSig([addr filesep name]);
+    
+    signal = ecgsig(nsig,:);
+    
+    
+    
+    %%
+    %     rPeaks = rDetection(signal, Fs);
+    %     rPeaks = get_rpeaks(signal, Fs);
+    rPeaks  = cell2mat(ann(3))+1;
+    n_cycles = n_cycles + length(rPeaks);
+    %     [R_i,R_amp,S_i,S_amp,T_i,T_amp,Q_i,Q_amp] = peakdetect(signal,Fs);
+    %      rPeaks =  R_i;
+    rPeaks = double(rPeaks);
+    
+    peaks = qsPeaks(signal, rPeaks, Fs);
+    tpeaks = peaks(:,7);  
+    
+    %    %% Plot P Q R S T points
+    %     N = length(signal);
+    %     tm = 1/Fs:1/Fs:N/Fs;
+    %     figure;plot(tm,signal);hold on
+    %     scatter(peaks(:,1)/Fs,signal(peaks(:,1)),'g*') % P points
+    %     scatter(peaks(:,3)/Fs,signal(peaks(:,3)),'k+') % Q points
+    %     scatter(peaks(:,4)/Fs,signal(peaks(:,4)),'ro') % R points
+    %     scatter(peaks(:,5)/Fs,signal(peaks(:,5)),'c^') % S points
+    %     scatter(peaks(:,7)/Fs,signal(peaks(:,7)),'mo') % T points
+    %     xlabel('Seconds'); ylabel('Amplitude')
+    %     title('ECG peaks detection')
+    %     legend('Raw signal','P','Q','R','S','T')
+    %     hold off
+    %
+    
+    %% grouping
+    % gourp 0: N(normal and bundle branch block beats); group 2: V(ventricular
+    %ectopic beats); group 1: S(supraventricular ectopic beats); group 3: F (fusion of N and V beats)
+    % group Q:4 unknown beat
+    % consider just absolute features, where each row of extraxted features is
+    % related to one segment
+    
+    annots_list = ['N','L','R','e','j','S','A','a','J','V','E','F','/','f','Q'];
+    
+    annot  = cell2mat(ann(4));
+    indices  = ismember(rPeaks,peaks(:,4));
+    annot = annot(indices);
+    % rps = peaks(:,4);
+    
+    % AAMI Classes:
+    % % N = N, L, R, e, j
+    % % S = A, a, J, S
+    % % V = V, E
+    % % F = F
+    % % Q = /, f, Q
+    
+    seg_values = {};
+    seg_labels =[];  
+    
+    ind_seg = 1;
+    % normalize
+    signal = normalize(signal);
+    for ind=1:length(annot)
+        if ~ismember(annot(ind),annots_list)
+            continue;
+        end
+        
+        N_g = ['N', 'L', 'R', 'e', 'j'];%0
+        S_g = ['A', 'a', 'J', 'S'];%1
+        V_g = ['V', 'E'];%2
+        F_g = ['F'];%3
+        Q_g = [' /', 'f', 'Q'];%4
+        if(ismember(annot(ind),N_g))
+              lebel = 'N';
+%              if(N_class >8031) %(N_class >8031)
+%                 continue
+%              end
+          
+            
+        elseif(ismember(annot(ind),S_g))
+            lebel = 'S';
+        elseif(ismember(annot(ind),V_g))
+            lebel = 'V';
+        elseif(ismember(annot(ind),F_g))
+            lebel = 'F';
+        elseif(ismember(annot(ind),Q_g))
+            lebel = 'Q';
+        else
+            throw("No label! :(")
+            
+        end
+        
+        if ind==1
+            
+            seg_values{ind_seg} = signal(1:tpeaks(ind)-1)';
+            t_sig = imresize(seg_values{ind_seg}(1:min(Fs,length(seg_values{ind_seg}))), [beat_len 1]);
+            seg_values{ind_seg} = t_sig;
+            seg_labels(ind_seg) = lebel;
+            % plot(cell2mat(seg_values(ind_seg)))
+            ind_seg = ind_seg+1;
+            continue;
+        end
+        t_sig = imresize(signal(tpeaks(ind-1):tpeaks(ind)-1)', [beat_len 1]);
+        seg_values{ind_seg} =t_sig ;
+        %     figure;
+        %      plot(cell2mat(seg_values(ind_seg)))
+        % determine the label
+        
+        
+        seg_labels(ind_seg) =  lebel;
+        ind_seg = ind_seg+1;
+        
+    end
+    s2s_mitbih(i).seg_values = seg_values';
+    s2s_mitbih(i).seg_labels = char(seg_labels);
+    % featuresSeg = [featuresSeg; peakSegFeats(N_inds,:),repmat(0,length(N_inds),1)];
+    
+    
+    % group N:0
+    % N = N, L, R, e, j
+    N_inds = find(annot=='N');
+    N_inds = [N_inds;find(annot=='L')];
+    N_inds = [N_inds;find(annot=='R')];
+    N_inds = [N_inds;find(annot=='e')];
+    N_inds = [N_inds;find(annot=='j')];
+    N_class = N_class + length(N_inds);
+    
+    % group S:1
+    % S = A, a, J, S
+    S_inds = find(annot=='S');
+    S_inds = [S_inds;find(annot=='A')];
+    S_inds = [S_inds;find(annot=='a')];
+    S_inds = [S_inds;find(annot=='J')];
+    S_class = S_class + length(S_inds);
+    
+    % group V:2
+    % V = V, E
+    V_inds = find(annot=='V');
+    V_inds = [V_inds;find(annot=='E')];
+    V_class = V_class + length(V_inds);
+    
+    % featuresSeg = [featuresSeg; peakSegFeats(V_inds,:),repmat(2,length(V_inds),1)];
+    
+    % group F:3
+    % F = F
+    F_inds = find(annot=='F');
+    F_class = F_class + length(F_inds);
+    
+    % group Q:4
+    % Q = /, f, Q
+    Q_inds = find(annot=='/');
+    Q_inds = [Q_inds;find(annot=='f')];
+    Q_inds = [Q_inds;find(annot=='Q')];
+    Q_class = Q_class + length(Q_inds);
+    
+end
+
+% % calucualte the mean length of all beats in the dataset: it is 280
+% sizes = [];
+% for ind=1:length(s2s_mitbih)
+%     sizes= [sizes;cellfun(@length,s2s_mitbih(ind).seg_values)];
+% end
+% beat_len = floor(mean(sizes))
+
+save s2s_mitbih_aami.mat s2s_mitbih
+toc
+F_class
+N_class
+Q_class
+S_class
+V_class
+F_class+N_class+Q_class+S_class+V_class
+disp('Successfully generated :)')