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); |