annotate testPrograms/test_MAP1_14x.m @ 30:1a502830d462

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