annotate training_variant.m @ 1:3ea8ed09af0f tip

additional clarifications
author Dimitrios Giannoulis
date Wed, 13 Mar 2013 11:57:24 +0000
parents 22b10c5b72e8
children
rev   line source
Dimitrios@0 1 function [] = training_variant(ANOT_FLAG, save_flag)
Dimitrios@0 2 % Training Algorithm (Variant) for the Event Detection Task
Dimitrios@0 3 % Learn one basis per recording for each a Class from Training Set
Dimitrios@0 4 % Instead of Collating all recordings of a specific Class from Training Set
Dimitrios@0 5 %
Dimitrios@0 6
Dimitrios@0 7
Dimitrios@0 8 % PARAMETERS:
Dimitrios@0 9 %
Dimitrios@0 10 % numBases
Dimitrios@0 11 % (fixed) to 20individual: 1 basis per recorded training sample
Dimitrios@0 12 %
Dimitrios@0 13 % ANOT_FLAG
Dimitrios@0 14 % Choose Annotation: 1 or 2
Dimitrios@0 15 % save_flag
Dimitrios@0 16 % Flag for saving the output Dictionary
Dimitrios@0 17 % 1: ON, 0: OFF
Dimitrios@0 18
Dimitrios@0 19 % PARAMETER DEFAULTS:
Dimitrios@0 20 %
Dimitrios@0 21 if ~exist('save_flag','var') || isempty(save_flag), save_flag = 1; end
Dimitrios@0 22 if ~exist('ANOT_FLAG','var') || isempty(ANOT_FLAG), ANOT_FLAG = 1; end
Dimitrios@0 23
Dimitrios@0 24 % INITIALISATIONS
Dimitrios@0 25
Dimitrios@0 26 if isempty(find([1, 2] == ANOT_FLAG))
Dimitrios@0 27 error('ANNOT_FLAG can be either 1 or 2 (depending on chosen annotation')
Dimitrios@0 28 end
Dimitrios@0 29
Dimitrios@0 30 %Annotations
Dimitrios@0 31 Annotators = {'_bdm', '_sid'};
Dimitrios@0 32
Dimitrios@0 33 % addpath('Training_Set\');
Dimitrios@0 34 % datapath = './singlesounds_stereo';
Dimitrios@0 35 datapath = 'Training_Set/singlesounds_stereo';
Dimitrios@0 36 anotpath = ['Training_Set/Annotation' num2str(ANOT_FLAG) '/'];
Dimitrios@0 37
Dimitrios@0 38 % List of all the Audio files:
Dimitrios@0 39 AudioList = dir([datapath '/*wav']);
Dimitrios@0 40
Dimitrios@0 41 % Get the sampling frequency from the 1st recorded sample
Dimitrios@0 42 [~,Fs] = wavread([datapath '/' AudioList(1).name]);
Dimitrios@0 43
Dimitrios@0 44 Classes = {'alert','clearthroat','cough','doorslam','drawer','keyboard','keyes',...
Dimitrios@0 45 'knock','laughter','mouse','pageturn','pendrop','phone','printer',...
Dimitrios@0 46 'speech','switch'};
Dimitrios@0 47
Dimitrios@0 48 % LEARNING
Dimitrios@0 49 % Learn Bases for every Class
Dimitrios@0 50
Dimitrios@0 51 % Initialise Dictionary
Dimitrios@0 52 Dict = [];
Dimitrios@0 53
Dimitrios@0 54
Dimitrios@0 55 % Loading signals for each of the 16 classes
Dimitrios@0 56 for i = 1 : 16
Dimitrios@0 57
Dimitrios@0 58 % Take all 20 train instances for each class
Dimitrios@0 59 for k = 1 : 20
Dimitrios@0 60 % Find path to annotation
Dimitrios@0 61 AnotPath = [AudioList((i-1)*20+k).name(1:end-4) Annotators{ANOT_FLAG} '.txt'];
Dimitrios@0 62 AudioPath = [AudioList((i-1)*20+k).name];
Dimitrios@0 63 % Read The annotation from the text file:
Dimitrios@0 64 % beg: beggining sample
Dimitrios@0 65 % fin: ending sample
Dimitrios@0 66 [beg,fin] = textread(['./Training_Set/Annotation' num2str(ANOT_FLAG) '/' AnotPath],'%f%f');
Dimitrios@0 67 % Read the audio for the Event, making sure no overflow occurs
Dimitrios@0 68 [x] = wavread([datapath '/' AudioPath]);
Dimitrios@0 69 Max_sample = length(x);
Dimitrios@0 70 [xnow,fs] = wavread([datapath '/' AudioPath] ,[max(round(beg*Fs),1) min(round(fin*Fs),Max_sample)]);
Dimitrios@0 71 xnow = sum(xnow,2)/2;
Dimitrios@0 72 if fs ~= Fs
Dimitrios@0 73 error('The sampling frequrncy is not the sam for all recordings!');
Dimitrios@0 74 end
Dimitrios@0 75 % Normalize individual segments to avoid over-energetic transients
Dimitrios@0 76 % in the audio streams per class.
Dimitrios@0 77 xnow = xnow./std(xnow);
Dimitrios@0 78 [i k]
Dimitrios@0 79 [intCQT] = computeCQT(xnow);
Dimitrios@0 80 cqt_rep = intCQT(:,round(1:7.1128:size(intCQT,2)));
Dimitrios@0 81
Dimitrios@0 82 [W,H,errs,vout] = nmf_beta(cqt_rep,1,'beta',1);
Dimitrios@0 83 Dict = [Dict W];
Dimitrios@0 84 end
Dimitrios@0 85 end
Dimitrios@0 86 % CLear Uneeded variables
Dimitrios@0 87 clear x xnow;
Dimitrios@0 88
Dimitrios@0 89
Dimitrios@0 90 %eval(sprintf('Dict_%d=Dict;',numBases));
Dimitrios@0 91 if save_flag == 1
Dimitrios@0 92 savefile = ['Dictionaries' Annotators{ANOT_FLAG} '/Dict20individual.mat'];
Dimitrios@0 93 save(savefile,'Dict');
Dimitrios@0 94 end
Dimitrios@0 95
Dimitrios@0 96 % Clear Unneeded variables
Dimitrios@0 97 clear xin intCQT cqt_rep;
Dimitrios@0 98