annotate 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
rev   line source
rmeddis@38 1 function outsignal = cutsignal(insignal,samplingfrequency,vocabularyset)
rmeddis@38 2
rmeddis@38 3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 4 %
rmeddis@38 5 % This function cuts the silence before and after the audiosignal
rmeddis@38 6 %
rmeddis@38 7 % (c) Tim Jürgens, Medizinische Physik, Feb.2006
rmeddis@38 8 %
rmeddis@38 9 % usage: outsignal = cutsignal(insignal,samplingfrequency,vocabularyset)
rmeddis@38 10 %
rmeddis@38 11 %
rmeddis@38 12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 13
rmeddis@38 14 % initial_energythreshold = 0.11;
rmeddis@38 15 % final_energythreshold = 0.05;
rmeddis@38 16 %
rmeddis@38 17 % % choose initial and final delay due to different vocabularysets
rmeddis@38 18 % if (strcmp(vocabularyset,'f_f') > 0)
rmeddis@38 19 % initial_delay = 0.17; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.17)
rmeddis@38 20 % final_delay = 0.2; %default 0.1, for f_f: 0.2
rmeddis@38 21 % else
rmeddis@38 22 % initial_delay = 0.01; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.2)
rmeddis@38 23 % final_delay = 0.1; %default 0.1, for f_f: 0.2
rmeddis@38 24 % end
rmeddis@38 25 %
rmeddis@38 26 % [initialsample_of_frame, energy] = compute_energy(insignal, samplingfrequency);
rmeddis@38 27 % for i = 1:length(initialsample_of_frame)
rmeddis@38 28 % if (energy(i) > initial_energythreshold)
rmeddis@38 29 % initialsample = initialsample_of_frame(i)-samplingfrequency*initial_delay;
rmeddis@38 30 % break;
rmeddis@38 31 % end
rmeddis@38 32 % end
rmeddis@38 33 %
rmeddis@38 34 % time_inverted_energy = energy(end:-1:1); %turn signal around
rmeddis@38 35 % time_inverted_initialsample = initialsample_of_frame(end:-1:1);
rmeddis@38 36 %
rmeddis@38 37 % for i = 1:length(time_inverted_initialsample)
rmeddis@38 38 % if (time_inverted_energy(i) > final_energythreshold)
rmeddis@38 39 % finalsample = time_inverted_initialsample(i)+samplingfrequency*final_delay;
rmeddis@38 40 % break;
rmeddis@38 41 % end
rmeddis@38 42 % end
rmeddis@38 43 %
rmeddis@38 44 % if (finalsample > length(insignal))
rmeddis@38 45 % finalsample = length(insignal);
rmeddis@38 46 % end
rmeddis@38 47 % outsignal = insignal(initialsample:finalsample);
rmeddis@38 48
rmeddis@38 49 if nargin < 3
rmeddis@38 50 vocabularyset = 'a_a'; %default vocabularyset
rmeddis@38 51 end
rmeddis@38 52
rmeddis@38 53
rmeddis@38 54
rmeddis@38 55 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 56 initial_threshold = 0.15; %amplitude threshold for detection of speech
rmeddis@38 57 final_threshold = 0.1;
rmeddis@38 58
rmeddis@38 59 % choose initial and final delay due to different vocabularysets
rmeddis@38 60 if (strcmp(vocabularyset,'f_f') > 0)
rmeddis@38 61 initial_delay = 0.2; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.2)
rmeddis@38 62 final_delay = 0.2; %default 0.1, for f_f: 0.2
rmeddis@38 63 else
rmeddis@38 64 initial_delay = 0.01; % the speech started delay seconds before trespassing threshold (default 0.01, for f_f: 0.2)
rmeddis@38 65 final_delay = 0.1; %default 0.1, for f_f: 0.2
rmeddis@38 66 end
rmeddis@38 67 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 68
rmeddis@38 69
rmeddis@38 70 %cut signal with taking initial delay into account
rmeddis@38 71 for(i = 1:length(insignal))
rmeddis@38 72 if (abs(insignal(i)) > initial_threshold)
rmeddis@38 73 initialsample = i - samplingfrequency*initial_delay;
rmeddis@38 74 break;
rmeddis@38 75 end
rmeddis@38 76 end
rmeddis@38 77
rmeddis@38 78
rmeddis@38 79 time_inverted_insignal = insignal(end:-1:1); %turn signal around
rmeddis@38 80 % cut it with taking a final delay into account
rmeddis@38 81 for(i = 1:length(time_inverted_insignal))
rmeddis@38 82 if (abs(time_inverted_insignal(i)) > final_threshold)
rmeddis@38 83 finalsample = i - samplingfrequency*final_delay;
rmeddis@38 84 break;
rmeddis@38 85 end
rmeddis@38 86 end
rmeddis@38 87
rmeddis@38 88 if (finalsample < 0)
rmeddis@38 89 finalsample = 0;
rmeddis@38 90 end
rmeddis@38 91 if (initialsample < 1)
rmeddis@38 92 initialsample = 1;
rmeddis@38 93 end
rmeddis@38 94
rmeddis@38 95 %% output %%%
rmeddis@38 96 outsignal = insignal(initialsample:end-finalsample);