tomwalters@0
|
1 % generating function for 'aim-mat'
|
tomwalters@0
|
2 %
|
tomwalters@0
|
3 % INPUT VALUES:
|
tomwalters@0
|
4 %
|
tomwalters@0
|
5 % RETURN VALUE:
|
tomwalters@0
|
6 %
|
tomwalters@0
|
7 %
|
tomwalters@0
|
8 % (c) 2011, University of Southampton
|
bleeck@3
|
9 % Maintained by Stefan Bleeck (bleeck@gmail.com)
|
bleeck@3
|
10 % download of current version is on the soundsoftware site:
|
bleeck@3
|
11 % http://code.soundsoftware.ac.uk/projects/aimmat
|
bleeck@3
|
12 % documentation and everything is on http://www.acousticscale.org
|
bleeck@3
|
13
|
tomwalters@0
|
14
|
tomwalters@0
|
15
|
tomwalters@0
|
16 function sig=gensgm(sig,options)
|
tomwalters@0
|
17 % generating function for the outer/middle ear transfere function
|
tomwalters@0
|
18
|
tomwalters@0
|
19 %waithand=waitbar(0,'generating pre cochlea processing');
|
tomwalters@0
|
20
|
tomwalters@0
|
21 samplerate=getsr(sig);
|
tomwalters@0
|
22 start_time=getminimumtime(sig);
|
tomwalters@0
|
23
|
tomwalters@0
|
24
|
tomwalters@0
|
25 firfiltercoef = ff_design(samplerate,1); % Frontal free-field to cochlea correction
|
tomwalters@0
|
26 % firfiltercoef = ff_design(samplerate,2); % Diffuse-field to cochlea correction
|
tomwalters@0
|
27 % firfiltercoef = ff_design(samplerate,3); % ITU corrections for telephony.
|
tomwalters@0
|
28
|
tomwalters@0
|
29
|
tomwalters@0
|
30
|
tomwalters@0
|
31 % to compensate the huge delay from the filter, a pause is added to the
|
tomwalters@0
|
32 % signal, that is taken away in the end:
|
tomwalters@0
|
33 pause=signal(abs(options.delay_correction),samplerate);
|
tomwalters@0
|
34 sig=setstarttime(sig,0);
|
tomwalters@0
|
35 sig=append(sig,pause);
|
tomwalters@0
|
36
|
tomwalters@0
|
37 Snd=getvalues(sig);
|
tomwalters@0
|
38 Snd=Snd';
|
tomwalters@0
|
39 Snd = filter(firfiltercoef,1,Snd);
|
tomwalters@0
|
40
|
tomwalters@0
|
41 sig=setvalues(sig,Snd);
|
tomwalters@0
|
42
|
tomwalters@0
|
43 %take the delay back:
|
tomwalters@0
|
44 siglen=getlength(sig);
|
tomwalters@0
|
45 sig=getpart(sig,abs(options.delay_correction),siglen);
|
tomwalters@0
|
46 sig=setstarttime(sig,start_time);
|
tomwalters@0
|
47
|
tomwalters@0
|
48 %close(waithand);
|