annotate testPrograms/test_MAP1_14.m @ 27:d4a7675b0413

fixed MOC attenuation
author Ray Meddis <rmeddis@essex.ac.uk>
date Wed, 22 Jun 2011 12:02:45 +0100
parents b03ef38fe497
children 82fb37eb430e
rev   line source
rmeddis@0 1 function test_MAP1_14
rmeddis@15 2 % test_MAP1_14 is a general purpose test routine that can be adjusted to
rmeddis@15 3 % test a number of different applications of MAP1_14
rmeddis@15 4 %
rmeddis@15 5 % A range of options are supplied in the early part of the program
rmeddis@15 6 %
rmeddis@15 7 % One use of the function is to create demonstrations; filenames <demoxx>
rmeddis@15 8 % to illustrate particular features
rmeddis@15 9 %
rmeddis@15 10 % #1
rmeddis@15 11 % Identify the file (in 'MAPparamsName') containing the model parameters
rmeddis@19 12 %
rmeddis@15 13 % #2
rmeddis@15 14 % Identify the kind of model required (in 'AN_spikesOrProbability').
rmeddis@15 15 % A full brainstem model (spikes) can be computed or a shorter model
rmeddis@15 16 % (probability) that computes only so far as the auditory nerve
rmeddis@15 17 %
rmeddis@15 18 % #3
rmeddis@15 19 % Choose between a tone signal or file input (in 'signalType')
rmeddis@15 20 %
rmeddis@15 21 % #4
rmeddis@15 22 % Set the signal rms level (in leveldBSPL)
rmeddis@15 23 %
rmeddis@15 24 % #5
rmeddis@23 25 % Identify the channels in terms of their best frequencies in the vector
rmeddis@15 26 % BFlist.
rmeddis@15 27 %
rmeddis@15 28 % Last minute changes to the parameters fetched earlier can be made using
rmeddis@15 29 % the cell array of strings 'paramChanges'.
rmeddis@15 30 % Each string must have the same format as the corresponding line in the
rmeddis@15 31 % file identified in 'MAPparamsName'
rmeddis@15 32 %
rmeddis@15 33 % When the demonstration is satisfactory, freeze it by renaming it <demoxx>
rmeddis@0 34
rmeddis@25 35 dbstop if error
rmeddis@24 36 restorePath=path;
rmeddis@24 37 addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'], ...
rmeddis@24 38 ['..' filesep 'utilities'])
rmeddis@0 39
rmeddis@0 40 %% #1 parameter file name
rmeddis@0 41 MAPparamsName='Normal';
rmeddis@0 42
rmeddis@0 43
rmeddis@0 44 %% #2 probability (fast) or spikes (slow) representation
rmeddis@26 45 % AN_spikesOrProbability='spikes';
rmeddis@23 46
rmeddis@0 47 % or
rmeddis@23 48 % NB probabilities are not corrected for refractory effects
rmeddis@26 49 AN_spikesOrProbability='probability';
rmeddis@0 50
rmeddis@0 51
rmeddis@0 52 %% #3 pure tone, harmonic sequence or speech file input
rmeddis@0 53 signalType= 'tones';
rmeddis@26 54 sampleRate= 50000;
rmeddis@26 55 duration=0.250; % seconds
rmeddis@0 56 % toneFrequency= 250:250:8000; % harmonic sequence (Hz)
rmeddis@25 57 toneFrequency= 1000; % or a pure tone (Hz8
rmeddis@0 58 rampDuration=.005; % seconds
rmeddis@0 59
rmeddis@0 60 % or
rmeddis@26 61
rmeddis@23 62 % signalType= 'file';
rmeddis@23 63 % fileName='twister_44kHz';
rmeddis@0 64
rmeddis@0 65
rmeddis@0 66 %% #4 rms level
rmeddis@0 67 % signal details
rmeddis@27 68 leveldBSPL= 90; % dB SPL
rmeddis@0 69
rmeddis@0 70
rmeddis@0 71 %% #5 number of channels in the model
rmeddis@0 72 % 21-channel model (log spacing)
rmeddis@0 73 numChannels=21;
rmeddis@19 74 lowestBF=250; highestBF= 8000;
rmeddis@0 75 BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
rmeddis@0 76
rmeddis@0 77 % or specify your own channel BFs
rmeddis@25 78 % numChannels=1;
rmeddis@19 79 % BFlist=toneFrequency;
rmeddis@0 80
rmeddis@0 81
rmeddis@0 82 %% #6 change model parameters
rmeddis@0 83 paramChanges=[];
rmeddis@0 84
rmeddis@0 85 % or
rmeddis@0 86 % Parameter changes can be used to change one or more model parameters
rmeddis@0 87 % *after* the MAPparams file has been read
rmeddis@0 88 % This example declares only one fiber type with a calcium clearance time
rmeddis@0 89 % constant of 80e-6 s (HSR fiber) when the probability option is selected.
rmeddis@25 90
rmeddis@16 91 % paramChanges={'AN_IHCsynapseParams.ANspeedUpFactor=5;', ...
rmeddis@16 92 % 'IHCpreSynapseParams.tauCa=86e-6;'};
rmeddis@25 93
rmeddis@27 94 % paramChanges={'DRNLParams.rateToAttenuationFactorProb = 0;'};
rmeddis@0 95
rmeddis@25 96 % paramChanges={'IHCpreSynapseParams.tauCa=86e-6;',
rmeddis@26 97 % 'AN_IHCsynapseParams.numFibers= 1000;'};
rmeddis@25 98
rmeddis@27 99 % fixed MOC attenuation(using negative factor)
rmeddis@27 100 paramChanges={'DRNLParams.rateToAttenuationFactorProb=-0.005;'};
rmeddis@23 101
rmeddis@23 102 %% delare 'showMap' options to control graphical output
rmeddis@0 103
rmeddis@23 104 showMapOptions.printModelParameters=1; % prints all parameters
rmeddis@23 105 showMapOptions.showModelOutput=1; % plot of all stages
rmeddis@23 106 showMapOptions.printFiringRates=1; % prints stage activity levels
rmeddis@23 107 showMapOptions.showACF=0; % shows SACF (probability only)
rmeddis@23 108 showMapOptions.showEfferent=1; % tracks of AR and MOC
rmeddis@23 109 showMapOptions.surfProbability=1; % 2D plot of HSR response
rmeddis@25 110 showMapOptions.surfSpikes=1; % 2D plot of spikes histogram
rmeddis@25 111
rmeddis@25 112 % disable certain silly options
rmeddis@23 113 if strcmp(AN_spikesOrProbability, 'spikes')
rmeddis@23 114 % avoid nonsensical options
rmeddis@23 115 showMapOptions.surfProbability=0;
rmeddis@23 116 showMapOptions.showACF=0;
rmeddis@25 117 else
rmeddis@25 118 showMapOptions.surfSpikes=0;
rmeddis@16 119 end
rmeddis@16 120 if strcmp(signalType, 'file')
rmeddis@23 121 % needed for labeling plot
rmeddis@16 122 showMapOptions.fileName=fileName;
rmeddis@23 123 else
rmeddis@23 124 showMapOptions.fileName=[];
rmeddis@16 125 end
rmeddis@0 126
rmeddis@0 127 %% Generate stimuli
rmeddis@0 128
rmeddis@0 129 switch signalType
rmeddis@0 130 case 'tones'
rmeddis@0 131 inputSignal=createMultiTone(sampleRate, toneFrequency, ...
rmeddis@0 132 leveldBSPL, duration, rampDuration);
rmeddis@23 133
rmeddis@0 134 case 'file'
rmeddis@16 135 %% file input simple or mixed
rmeddis@19 136 [inputSignal sampleRate]=wavread(fileName);
rmeddis@23 137 dt=1/sampleRate;
rmeddis@16 138 inputSignal=inputSignal(:,1);
rmeddis@0 139 targetRMS=20e-6*10^(leveldBSPL/20);
rmeddis@0 140 rms=(mean(inputSignal.^2))^0.5;
rmeddis@0 141 amp=targetRMS/rms;
rmeddis@0 142 inputSignal=inputSignal*amp;
rmeddis@19 143 silence= zeros(1,round(0.1/dt));
rmeddis@19 144 inputSignal= [silence inputSignal' silence];
rmeddis@0 145 end
rmeddis@0 146
rmeddis@0 147
rmeddis@0 148 %% run the model
rmeddis@0 149 tic
rmeddis@0 150
rmeddis@9 151 fprintf('\n')
rmeddis@9 152 disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)])
rmeddis@9 153 disp([num2str(numChannels) ' channel model'])
rmeddis@9 154 disp('Computing ...')
rmeddis@15 155
rmeddis@0 156 MAP1_14(inputSignal, sampleRate, BFlist, ...
rmeddis@0 157 MAPparamsName, AN_spikesOrProbability, paramChanges);
rmeddis@26 158
rmeddis@0 159
rmeddis@0 160 % the model run is now complete. Now display the results
rmeddis@26 161 UTIL_showMAP(showMapOptions, paramChanges)
rmeddis@0 162
rmeddis@9 163 toc
rmeddis@0 164 path(restorePath)
rmeddis@0 165
rmeddis@0 166
rmeddis@0 167 function inputSignal=createMultiTone(sampleRate, toneFrequency, ...
rmeddis@0 168 leveldBSPL, duration, rampDuration)
rmeddis@0 169 % Create pure tone stimulus
rmeddis@0 170 dt=1/sampleRate; % seconds
rmeddis@0 171 time=dt: dt: duration;
rmeddis@0 172 inputSignal=sum(sin(2*pi*toneFrequency'*time), 1);
rmeddis@0 173 amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak)
rmeddis@0 174 inputSignal=amp*inputSignal;
rmeddis@0 175
rmeddis@0 176 % apply ramps
rmeddis@0 177 % catch rampTime error
rmeddis@0 178 if rampDuration>0.5*duration, rampDuration=duration/2; end
rmeddis@0 179 rampTime=dt:dt:rampDuration;
rmeddis@0 180 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
rmeddis@0 181 ones(1,length(time)-length(rampTime))];
rmeddis@0 182 inputSignal=inputSignal.*ramp;
rmeddis@0 183 ramp=fliplr(ramp);
rmeddis@0 184 inputSignal=inputSignal.*ramp;
rmeddis@0 185
rmeddis@0 186 % add 10 ms silence
rmeddis@25 187 silence= zeros(1,round(0.05/dt));
rmeddis@15 188 inputSignal= [silence inputSignal silence];
rmeddis@0 189