Mercurial > hg > map
diff userProgramsTim/cutsignal.m @ 38:c2204b18f4a2 tip
End nov big change
author | Ray Meddis <rmeddis@essex.ac.uk> |
---|---|
date | Mon, 28 Nov 2011 13:34:28 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/userProgramsTim/cutsignal.m Mon Nov 28 13:34:28 2011 +0000 @@ -0,0 +1,96 @@ +function outsignal = cutsignal(insignal,samplingfrequency,vocabularyset) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% This function cuts the silence before and after the audiosignal +% +% (c) Tim Jürgens, Medizinische Physik, Feb.2006 +% +% usage: outsignal = cutsignal(insignal,samplingfrequency,vocabularyset) +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% initial_energythreshold = 0.11; +% final_energythreshold = 0.05; +% +% % choose initial and final delay due to different vocabularysets +% if (strcmp(vocabularyset,'f_f') > 0) +% initial_delay = 0.17; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.17) +% final_delay = 0.2; %default 0.1, for f_f: 0.2 +% else +% initial_delay = 0.01; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.2) +% final_delay = 0.1; %default 0.1, for f_f: 0.2 +% end +% +% [initialsample_of_frame, energy] = compute_energy(insignal, samplingfrequency); +% for i = 1:length(initialsample_of_frame) +% if (energy(i) > initial_energythreshold) +% initialsample = initialsample_of_frame(i)-samplingfrequency*initial_delay; +% break; +% end +% end +% +% time_inverted_energy = energy(end:-1:1); %turn signal around +% time_inverted_initialsample = initialsample_of_frame(end:-1:1); +% +% for i = 1:length(time_inverted_initialsample) +% if (time_inverted_energy(i) > final_energythreshold) +% finalsample = time_inverted_initialsample(i)+samplingfrequency*final_delay; +% break; +% end +% end +% +% if (finalsample > length(insignal)) +% finalsample = length(insignal); +% end +% outsignal = insignal(initialsample:finalsample); + +if nargin < 3 + vocabularyset = 'a_a'; %default vocabularyset +end + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +initial_threshold = 0.15; %amplitude threshold for detection of speech +final_threshold = 0.1; + +% choose initial and final delay due to different vocabularysets +if (strcmp(vocabularyset,'f_f') > 0) + initial_delay = 0.2; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.2) + final_delay = 0.2; %default 0.1, for f_f: 0.2 +else + initial_delay = 0.01; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.2) + final_delay = 0.1; %default 0.1, for f_f: 0.2 +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%cut signal with taking initial delay into account +for(i = 1:length(insignal)) + if (abs(insignal(i)) > initial_threshold) + initialsample = i - samplingfrequency*initial_delay; + break; + end +end + + +time_inverted_insignal = insignal(end:-1:1); %turn signal around +% cut it with taking a final delay into account +for(i = 1:length(time_inverted_insignal)) + if (abs(time_inverted_insignal(i)) > final_threshold) + finalsample = i - samplingfrequency*final_delay; + break; + end +end + +if (finalsample < 0) + finalsample = 0; +end +if (initialsample < 1) + initialsample = 1; +end + +%% output %%% +outsignal = insignal(initialsample:end-finalsample); \ No newline at end of file