rmeddis@9
|
1 function demoTwisterProbability
|
rmeddis@9
|
2
|
rmeddis@9
|
3 % MAPdemo runs the MATLAB auditory periphery model (MAP1_14) as far as
|
rmeddis@9
|
4 % the AN (probabilities) or IC (spikes) with graphical output
|
rmeddis@9
|
5
|
rmeddis@25
|
6 dbstop if error
|
rmeddis@24
|
7 restorePath=path;
|
rmeddis@24
|
8 addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'], ...
|
rmeddis@24
|
9 ['..' filesep 'utilities'])
|
rmeddis@9
|
10
|
rmeddis@9
|
11 %% #1 parameter file name
|
rmeddis@9
|
12 MAPparamsName='Normal';
|
rmeddis@9
|
13
|
rmeddis@9
|
14
|
rmeddis@24
|
15 %% #2 probability (fast)
|
rmeddis@9
|
16 AN_spikesOrProbability='probability';
|
rmeddis@9
|
17
|
rmeddis@9
|
18
|
rmeddis@24
|
19 %% #3 speech file input
|
rmeddis@9
|
20 signalType= 'file';
|
rmeddis@9
|
21 fileName='twister_44kHz';
|
rmeddis@9
|
22
|
rmeddis@9
|
23
|
rmeddis@9
|
24 %% #4 rms level
|
rmeddis@24
|
25 leveldBSPL=60; % dB SPL
|
rmeddis@9
|
26
|
rmeddis@9
|
27
|
rmeddis@9
|
28 %% #5 number of channels in the model
|
rmeddis@9
|
29 % 21-channel model (log spacing)
|
rmeddis@9
|
30 numChannels=21;
|
rmeddis@24
|
31 lowestBF=250; highestBF= 8000;
|
rmeddis@9
|
32 BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
|
rmeddis@9
|
33
|
rmeddis@24
|
34 %% #6 no change to model parameters
|
rmeddis@9
|
35 paramChanges=[];
|
rmeddis@9
|
36
|
rmeddis@9
|
37
|
rmeddis@9
|
38 %% delare showMap options
|
rmeddis@24
|
39 showMapOptions.printModelParameters=1;
|
rmeddis@24
|
40 showMapOptions.showModelOutput=1;
|
rmeddis@24
|
41 showMapOptions.printFiringRates=1;
|
rmeddis@24
|
42 showMapOptions.showACF=0;
|
rmeddis@24
|
43 showMapOptions.showEfferent=0;
|
rmeddis@24
|
44 showMapOptions.surfProbability=1; % 2D plot of HSR response
|
rmeddis@9
|
45
|
rmeddis@9
|
46 %% Generate stimuli
|
rmeddis@9
|
47
|
rmeddis@9
|
48 switch signalType
|
rmeddis@9
|
49 case 'tones'
|
rmeddis@9
|
50 inputSignal=createMultiTone(sampleRate, toneFrequency, ...
|
rmeddis@9
|
51 leveldBSPL, duration, rampDuration);
|
rmeddis@24
|
52
|
rmeddis@9
|
53 case 'file'
|
rmeddis@24
|
54 [inputSignal sampleRate]=wavread(fileName);
|
rmeddis@9
|
55 inputSignal(:,1);
|
rmeddis@9
|
56 targetRMS=20e-6*10^(leveldBSPL/20);
|
rmeddis@9
|
57 rms=(mean(inputSignal.^2))^0.5;
|
rmeddis@9
|
58 amp=targetRMS/rms;
|
rmeddis@9
|
59 inputSignal=inputSignal*amp;
|
rmeddis@9
|
60 end
|
rmeddis@9
|
61
|
rmeddis@9
|
62
|
rmeddis@9
|
63 %% run the model
|
rmeddis@9
|
64 tic
|
rmeddis@9
|
65
|
rmeddis@26
|
66 fprintf('\n')
|
rmeddis@26
|
67 disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)])
|
rmeddis@26
|
68 disp([num2str(numChannels) ' channel model'])
|
rmeddis@26
|
69 disp('Computing ...')
|
rmeddis@26
|
70
|
rmeddis@9
|
71 MAP1_14(inputSignal, sampleRate, BFlist, ...
|
rmeddis@9
|
72 MAPparamsName, AN_spikesOrProbability, paramChanges);
|
rmeddis@24
|
73
|
rmeddis@9
|
74
|
rmeddis@9
|
75 % the model run is now complete. Now display the results
|
rmeddis@26
|
76 UTIL_showMAP(showMapOptions, paramChanges)
|
rmeddis@9
|
77
|
rmeddis@9
|
78 toc
|
rmeddis@9
|
79 path(restorePath)
|
rmeddis@9
|
80
|
rmeddis@9
|
81
|
rmeddis@26
|
82
|
rmeddis@9
|
83 function inputSignal=createMultiTone(sampleRate, toneFrequency, ...
|
rmeddis@9
|
84 leveldBSPL, duration, rampDuration)
|
rmeddis@9
|
85 % Create pure tone stimulus
|
rmeddis@9
|
86 dt=1/sampleRate; % seconds
|
rmeddis@9
|
87 time=dt: dt: duration;
|
rmeddis@9
|
88 inputSignal=sum(sin(2*pi*toneFrequency'*time), 1);
|
rmeddis@9
|
89 amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak)
|
rmeddis@9
|
90 inputSignal=amp*inputSignal;
|
rmeddis@9
|
91
|
rmeddis@9
|
92 % apply ramps
|
rmeddis@9
|
93 % catch rampTime error
|
rmeddis@9
|
94 if rampDuration>0.5*duration, rampDuration=duration/2; end
|
rmeddis@9
|
95 rampTime=dt:dt:rampDuration;
|
rmeddis@9
|
96 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
|
rmeddis@9
|
97 ones(1,length(time)-length(rampTime))];
|
rmeddis@9
|
98 inputSignal=inputSignal.*ramp;
|
rmeddis@9
|
99 ramp=fliplr(ramp);
|
rmeddis@9
|
100 inputSignal=inputSignal.*ramp;
|
rmeddis@9
|
101
|
rmeddis@9
|
102 % add 10 ms silence
|
rmeddis@9
|
103 silence= zeros(1,round(0.03/dt));
|
rmeddis@9
|
104 % inputSignal= [silence inputSignal silence];
|
rmeddis@9
|
105
|