Dimitrios@0: function [] = training_variant(ANOT_FLAG, save_flag) Dimitrios@0: % Training Algorithm (Variant) for the Event Detection Task Dimitrios@0: % Learn one basis per recording for each a Class from Training Set Dimitrios@0: % Instead of Collating all recordings of a specific Class from Training Set Dimitrios@0: % Dimitrios@0: Dimitrios@0: Dimitrios@0: % PARAMETERS: Dimitrios@0: % Dimitrios@0: % numBases Dimitrios@0: % (fixed) to 20individual: 1 basis per recorded training sample Dimitrios@0: % Dimitrios@0: % ANOT_FLAG Dimitrios@0: % Choose Annotation: 1 or 2 Dimitrios@0: % save_flag Dimitrios@0: % Flag for saving the output Dictionary Dimitrios@0: % 1: ON, 0: OFF Dimitrios@0: Dimitrios@0: % PARAMETER DEFAULTS: Dimitrios@0: % Dimitrios@0: if ~exist('save_flag','var') || isempty(save_flag), save_flag = 1; end Dimitrios@0: if ~exist('ANOT_FLAG','var') || isempty(ANOT_FLAG), ANOT_FLAG = 1; end Dimitrios@0: Dimitrios@0: % INITIALISATIONS Dimitrios@0: Dimitrios@0: if isempty(find([1, 2] == ANOT_FLAG)) Dimitrios@0: error('ANNOT_FLAG can be either 1 or 2 (depending on chosen annotation') Dimitrios@0: end Dimitrios@0: Dimitrios@0: %Annotations Dimitrios@0: Annotators = {'_bdm', '_sid'}; Dimitrios@0: Dimitrios@0: % addpath('Training_Set\'); Dimitrios@0: % datapath = './singlesounds_stereo'; Dimitrios@0: datapath = 'Training_Set/singlesounds_stereo'; Dimitrios@0: anotpath = ['Training_Set/Annotation' num2str(ANOT_FLAG) '/']; Dimitrios@0: Dimitrios@0: % List of all the Audio files: Dimitrios@0: AudioList = dir([datapath '/*wav']); Dimitrios@0: Dimitrios@0: % Get the sampling frequency from the 1st recorded sample Dimitrios@0: [~,Fs] = wavread([datapath '/' AudioList(1).name]); Dimitrios@0: Dimitrios@0: Classes = {'alert','clearthroat','cough','doorslam','drawer','keyboard','keyes',... Dimitrios@0: 'knock','laughter','mouse','pageturn','pendrop','phone','printer',... Dimitrios@0: 'speech','switch'}; Dimitrios@0: Dimitrios@0: % LEARNING Dimitrios@0: % Learn Bases for every Class Dimitrios@0: Dimitrios@0: % Initialise Dictionary Dimitrios@0: Dict = []; Dimitrios@0: Dimitrios@0: Dimitrios@0: % Loading signals for each of the 16 classes Dimitrios@0: for i = 1 : 16 Dimitrios@0: Dimitrios@0: % Take all 20 train instances for each class Dimitrios@0: for k = 1 : 20 Dimitrios@0: % Find path to annotation Dimitrios@0: AnotPath = [AudioList((i-1)*20+k).name(1:end-4) Annotators{ANOT_FLAG} '.txt']; Dimitrios@0: AudioPath = [AudioList((i-1)*20+k).name]; Dimitrios@0: % Read The annotation from the text file: Dimitrios@0: % beg: beggining sample Dimitrios@0: % fin: ending sample Dimitrios@0: [beg,fin] = textread(['./Training_Set/Annotation' num2str(ANOT_FLAG) '/' AnotPath],'%f%f'); Dimitrios@0: % Read the audio for the Event, making sure no overflow occurs Dimitrios@0: [x] = wavread([datapath '/' AudioPath]); Dimitrios@0: Max_sample = length(x); Dimitrios@0: [xnow,fs] = wavread([datapath '/' AudioPath] ,[max(round(beg*Fs),1) min(round(fin*Fs),Max_sample)]); Dimitrios@0: xnow = sum(xnow,2)/2; Dimitrios@0: if fs ~= Fs Dimitrios@0: error('The sampling frequrncy is not the sam for all recordings!'); Dimitrios@0: end Dimitrios@0: % Normalize individual segments to avoid over-energetic transients Dimitrios@0: % in the audio streams per class. Dimitrios@0: xnow = xnow./std(xnow); Dimitrios@0: [i k] Dimitrios@0: [intCQT] = computeCQT(xnow); Dimitrios@0: cqt_rep = intCQT(:,round(1:7.1128:size(intCQT,2))); Dimitrios@0: Dimitrios@0: [W,H,errs,vout] = nmf_beta(cqt_rep,1,'beta',1); Dimitrios@0: Dict = [Dict W]; Dimitrios@0: end Dimitrios@0: end Dimitrios@0: % CLear Uneeded variables Dimitrios@0: clear x xnow; Dimitrios@0: Dimitrios@0: Dimitrios@0: %eval(sprintf('Dict_%d=Dict;',numBases)); Dimitrios@0: if save_flag == 1 Dimitrios@0: savefile = ['Dictionaries' Annotators{ANOT_FLAG} '/Dict20individual.mat']; Dimitrios@0: save(savefile,'Dict'); Dimitrios@0: end Dimitrios@0: Dimitrios@0: % Clear Unneeded variables Dimitrios@0: clear xin intCQT cqt_rep; Dimitrios@0: