rmeddis@38: function outsignal = cutsignal(insignal,samplingfrequency,vocabularyset) rmeddis@38: rmeddis@38: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rmeddis@38: % rmeddis@38: % This function cuts the silence before and after the audiosignal rmeddis@38: % rmeddis@38: % (c) Tim Jürgens, Medizinische Physik, Feb.2006 rmeddis@38: % rmeddis@38: % usage: outsignal = cutsignal(insignal,samplingfrequency,vocabularyset) rmeddis@38: % rmeddis@38: % rmeddis@38: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rmeddis@38: rmeddis@38: % initial_energythreshold = 0.11; rmeddis@38: % final_energythreshold = 0.05; rmeddis@38: % rmeddis@38: % % choose initial and final delay due to different vocabularysets rmeddis@38: % if (strcmp(vocabularyset,'f_f') > 0) rmeddis@38: % initial_delay = 0.17; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.17) rmeddis@38: % final_delay = 0.2; %default 0.1, for f_f: 0.2 rmeddis@38: % else rmeddis@38: % initial_delay = 0.01; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.2) rmeddis@38: % final_delay = 0.1; %default 0.1, for f_f: 0.2 rmeddis@38: % end rmeddis@38: % rmeddis@38: % [initialsample_of_frame, energy] = compute_energy(insignal, samplingfrequency); rmeddis@38: % for i = 1:length(initialsample_of_frame) rmeddis@38: % if (energy(i) > initial_energythreshold) rmeddis@38: % initialsample = initialsample_of_frame(i)-samplingfrequency*initial_delay; rmeddis@38: % break; rmeddis@38: % end rmeddis@38: % end rmeddis@38: % rmeddis@38: % time_inverted_energy = energy(end:-1:1); %turn signal around rmeddis@38: % time_inverted_initialsample = initialsample_of_frame(end:-1:1); rmeddis@38: % rmeddis@38: % for i = 1:length(time_inverted_initialsample) rmeddis@38: % if (time_inverted_energy(i) > final_energythreshold) rmeddis@38: % finalsample = time_inverted_initialsample(i)+samplingfrequency*final_delay; rmeddis@38: % break; rmeddis@38: % end rmeddis@38: % end rmeddis@38: % rmeddis@38: % if (finalsample > length(insignal)) rmeddis@38: % finalsample = length(insignal); rmeddis@38: % end rmeddis@38: % outsignal = insignal(initialsample:finalsample); rmeddis@38: rmeddis@38: if nargin < 3 rmeddis@38: vocabularyset = 'a_a'; %default vocabularyset rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: rmeddis@38: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rmeddis@38: initial_threshold = 0.15; %amplitude threshold for detection of speech rmeddis@38: final_threshold = 0.1; rmeddis@38: rmeddis@38: % choose initial and final delay due to different vocabularysets rmeddis@38: if (strcmp(vocabularyset,'f_f') > 0) rmeddis@38: initial_delay = 0.2; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.2) rmeddis@38: final_delay = 0.2; %default 0.1, for f_f: 0.2 rmeddis@38: else rmeddis@38: initial_delay = 0.01; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.2) rmeddis@38: final_delay = 0.1; %default 0.1, for f_f: 0.2 rmeddis@38: end rmeddis@38: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rmeddis@38: rmeddis@38: rmeddis@38: %cut signal with taking initial delay into account rmeddis@38: for(i = 1:length(insignal)) rmeddis@38: if (abs(insignal(i)) > initial_threshold) rmeddis@38: initialsample = i - samplingfrequency*initial_delay; rmeddis@38: break; rmeddis@38: end rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: time_inverted_insignal = insignal(end:-1:1); %turn signal around rmeddis@38: % cut it with taking a final delay into account rmeddis@38: for(i = 1:length(time_inverted_insignal)) rmeddis@38: if (abs(time_inverted_insignal(i)) > final_threshold) rmeddis@38: finalsample = i - samplingfrequency*final_delay; rmeddis@38: break; rmeddis@38: end rmeddis@38: end rmeddis@38: rmeddis@38: if (finalsample < 0) rmeddis@38: finalsample = 0; rmeddis@38: end rmeddis@38: if (initialsample < 1) rmeddis@38: initialsample = 1; rmeddis@38: end rmeddis@38: rmeddis@38: %% output %%% rmeddis@38: outsignal = insignal(initialsample:end-finalsample);