rmeddis@0
|
1 function test_MAP1_14
|
rmeddis@0
|
2
|
rmeddis@0
|
3 % MAPdemo runs the MATLAB auditory periphery model (MAP1_14) as far as
|
rmeddis@0
|
4 % the AN (probabilities) or IC (spikes) with graphical output
|
rmeddis@0
|
5
|
rmeddis@0
|
6 % Things you might want to change; #1 - #5
|
rmeddis@0
|
7
|
rmeddis@0
|
8 %% #1 parameter file name
|
rmeddis@0
|
9 MAPparamsName='Normal';
|
rmeddis@0
|
10
|
rmeddis@0
|
11
|
rmeddis@0
|
12 %% #2 probability (fast) or spikes (slow) representation
|
rmeddis@0
|
13 AN_spikesOrProbability='spikes';
|
rmeddis@0
|
14 % or
|
rmeddis@0
|
15 AN_spikesOrProbability='probability';
|
rmeddis@0
|
16
|
rmeddis@0
|
17
|
rmeddis@0
|
18 %% #3 pure tone, harmonic sequence or speech file input
|
rmeddis@0
|
19 signalType= 'tones';
|
rmeddis@0
|
20 duration=0.100; % seconds
|
rmeddis@0
|
21 sampleRate= 100000;
|
rmeddis@0
|
22 % toneFrequency= 250:250:8000; % harmonic sequence (Hz)
|
rmeddis@0
|
23 toneFrequency= 1000; % or a pure tone (Hz8
|
rmeddis@0
|
24
|
rmeddis@0
|
25 rampDuration=.005; % seconds
|
rmeddis@0
|
26
|
rmeddis@0
|
27 % or
|
rmeddis@0
|
28 signalType= 'file';
|
rmeddis@0
|
29 fileName='twister_44kHz';
|
rmeddis@0
|
30 % fileName='new-da-44khz';
|
rmeddis@0
|
31
|
rmeddis@0
|
32
|
rmeddis@0
|
33 %% #4 rms level
|
rmeddis@0
|
34 % signal details
|
rmeddis@0
|
35 leveldBSPL=70; % dB SPL
|
rmeddis@0
|
36
|
rmeddis@0
|
37
|
rmeddis@0
|
38 %% #5 number of channels in the model
|
rmeddis@0
|
39 % 21-channel model (log spacing)
|
rmeddis@0
|
40 numChannels=21;
|
rmeddis@0
|
41 lowestBF=250; highestBF= 8000;
|
rmeddis@0
|
42 BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
|
rmeddis@0
|
43
|
rmeddis@0
|
44 % or specify your own channel BFs
|
rmeddis@0
|
45 % BFlist=1000;
|
rmeddis@0
|
46
|
rmeddis@0
|
47
|
rmeddis@0
|
48 %% #6 change model parameters
|
rmeddis@0
|
49 paramChanges=[];
|
rmeddis@0
|
50
|
rmeddis@0
|
51 % or
|
rmeddis@0
|
52 % Parameter changes can be used to change one or more model parameters
|
rmeddis@0
|
53 % *after* the MAPparams file has been read
|
rmeddis@0
|
54 % This example declares only one fiber type with a calcium clearance time
|
rmeddis@0
|
55 % constant of 80e-6 s (HSR fiber) when the probability option is selected.
|
rmeddis@0
|
56 switch AN_spikesOrProbability
|
rmeddis@0
|
57 case 'probability'
|
rmeddis@0
|
58 paramChanges={'IHCpreSynapseParams.tauCa=80e-6;'};
|
rmeddis@0
|
59 otherwise
|
rmeddis@0
|
60 paramChanges=[];
|
rmeddis@0
|
61 end
|
rmeddis@0
|
62
|
rmeddis@0
|
63 %% delare showMap options
|
rmeddis@0
|
64 showMapOptions=[]; % use defaults
|
rmeddis@0
|
65
|
rmeddis@0
|
66 % or (example: show everything including an smoothed SACF output
|
rmeddis@0
|
67 showMapOptions.showModelParameters=1;
|
rmeddis@0
|
68 showMapOptions.showModelOutput=1;
|
rmeddis@0
|
69 showMapOptions.printFiringRates=1;
|
rmeddis@0
|
70 showMapOptions.showACF=1;
|
rmeddis@0
|
71 showMapOptions.showEfferent=1;
|
rmeddis@0
|
72
|
rmeddis@0
|
73 %% Generate stimuli
|
rmeddis@0
|
74
|
rmeddis@0
|
75 dbstop if error
|
rmeddis@0
|
76 restorePath=path;
|
rmeddis@0
|
77 addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'])
|
rmeddis@0
|
78 switch signalType
|
rmeddis@0
|
79 case 'tones'
|
rmeddis@0
|
80 inputSignal=createMultiTone(sampleRate, toneFrequency, ...
|
rmeddis@0
|
81 leveldBSPL, duration, rampDuration);
|
rmeddis@0
|
82
|
rmeddis@0
|
83 case 'file'
|
rmeddis@0
|
84 [inputSignal sampleRate]=wavread(fileName);
|
rmeddis@0
|
85 inputSignal(:,1);
|
rmeddis@0
|
86 targetRMS=20e-6*10^(leveldBSPL/20);
|
rmeddis@0
|
87 rms=(mean(inputSignal.^2))^0.5;
|
rmeddis@0
|
88 amp=targetRMS/rms;
|
rmeddis@0
|
89 inputSignal=inputSignal*amp;
|
rmeddis@0
|
90 end
|
rmeddis@0
|
91
|
rmeddis@0
|
92
|
rmeddis@0
|
93 %% run the model
|
rmeddis@0
|
94 tic
|
rmeddis@0
|
95
|
rmeddis@0
|
96 MAP1_14(inputSignal, sampleRate, BFlist, ...
|
rmeddis@0
|
97 MAPparamsName, AN_spikesOrProbability, paramChanges);
|
rmeddis@0
|
98 toc
|
rmeddis@0
|
99
|
rmeddis@0
|
100 % the model run is now complete. Now display the results
|
rmeddis@0
|
101 showMAP(showMapOptions)
|
rmeddis@0
|
102
|
rmeddis@0
|
103 path(restorePath)
|
rmeddis@0
|
104
|
rmeddis@0
|
105
|
rmeddis@0
|
106 function inputSignal=createMultiTone(sampleRate, toneFrequency, ...
|
rmeddis@0
|
107 leveldBSPL, duration, rampDuration)
|
rmeddis@0
|
108 % Create pure tone stimulus
|
rmeddis@0
|
109 dt=1/sampleRate; % seconds
|
rmeddis@0
|
110 time=dt: dt: duration;
|
rmeddis@0
|
111 inputSignal=sum(sin(2*pi*toneFrequency'*time), 1);
|
rmeddis@0
|
112 amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak)
|
rmeddis@0
|
113 inputSignal=amp*inputSignal;
|
rmeddis@0
|
114
|
rmeddis@0
|
115 % apply ramps
|
rmeddis@0
|
116 % catch rampTime error
|
rmeddis@0
|
117 if rampDuration>0.5*duration, rampDuration=duration/2; end
|
rmeddis@0
|
118 rampTime=dt:dt:rampDuration;
|
rmeddis@0
|
119 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
|
rmeddis@0
|
120 ones(1,length(time)-length(rampTime))];
|
rmeddis@0
|
121 inputSignal=inputSignal.*ramp;
|
rmeddis@0
|
122 ramp=fliplr(ramp);
|
rmeddis@0
|
123 inputSignal=inputSignal.*ramp;
|
rmeddis@0
|
124
|
rmeddis@0
|
125 % add 10 ms silence
|
rmeddis@0
|
126 silence= zeros(1,round(0.03/dt));
|
rmeddis@0
|
127 inputSignal= [silence inputSignal silence];
|
rmeddis@0
|
128
|