Mercurial > hg > dcase2013_ed_vuegenetal
diff functions/funcsMobilab/feature_extraction.m @ 0:2fadb31a9d55 tip
Import code by Vuegen et al
author | Dan Stowell <dan.stowell@elec.qmul.ac.uk> |
---|---|
date | Fri, 11 Oct 2013 12:02:43 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/functions/funcsMobilab/feature_extraction.m Fri Oct 11 12:02:43 2013 +0100 @@ -0,0 +1,51 @@ +function [features] = feature_extraction(segment,config,startStop,minC0) +%% +% Mobilab 2012-2013 +% +%% +if nargin < 4, minC0 = []; end, %minC0 will be placed empty +%if nargin < 3, startStop = [0 size(segment,1)/config.fs]; end, %Default no segmentation +if nargin < 3, startStop = []; end, %startSop is left empty, no segmentation occurs +%% +% Calculate the features +mel_feat = FE(segment, config); +logmel_feat = log(mel_feat); +[MM,Mstatic] = vec2featmat(config.melbands, config.cepOrder); +mfcc_static = Mstatic*logmel_feat; +mfcc_d_dd = MM*stacklp(logmel_feat,4); + +%Features +features.mel_feat=mel_feat; +features.logmel_feat=logmel_feat; +features.mfcc_static=mfcc_static; +features.mfcc_d_dd=mfcc_d_dd; + +% Standard no segmentation and threholding +indicesEvent = [1:size(mel_feat,2)]; +indicesSilence = []; +indicesAboveThreshold = [1:size(mel_feat,2)]; +indicesBelowThreshold = []; + +%Do a segmentation +if (~isempty(startStop)) + %Determine start and stop frame + startFrame = 1 + floor((startStop(1)/(config.framestep_ms/1000))); + stopFrame = startFrame + ceil((startStop(2)-startStop(1))/(config.framestep_ms/1000)); + if(stopFrame > size(mel_feat,2)),stopFrame = size(mel_feat,2); end, + %These frame indices correspond to the event + indicesEvent = [startFrame : stopFrame]; + %These frame indices correspond to the silence + indicesSilence = [1:startFrame-1 stopFrame+1:size(mel_feat,2)]; + %Take only those event frames where C0 > minC0 + %Take only those silence frames where C0 <= minC0 + if (~isempty(minC0)) + indicesAboveThreshold=find(mfcc_static(end,:)>minC0); + indicesBelowThreshold=find(mfcc_static(end,:)<minC0); + end, +end, +features.indicesEvent=indicesEvent; +features.indicesSilence=indicesSilence; +features.indicesAboveThreshold=indicesAboveThreshold; +features.indicesBelowThreshold=indicesBelowThreshold; +end +