Mercurial > hg > map
view 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 source
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);