annotate testPrograms/test_MAP1_14.m @ 37:771a643d5c29

mainly nmanuals
author Ray Meddis <rmeddis@essex.ac.uk>
date Thu, 06 Oct 2011 15:43:20 +0100
parents 3ea506487b3b
children
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@32 45 AN_spikesOrProbability='spikes';
rmeddis@35 46 % or
rmeddis@36 47 AN_spikesOrProbability='probability';
rmeddis@0 48
rmeddis@0 49
rmeddis@0 50 %% #3 pure tone, harmonic sequence or speech file input
rmeddis@0 51 signalType= 'tones';
rmeddis@26 52 sampleRate= 50000;
rmeddis@35 53 duration=0.500; % seconds
rmeddis@35 54 rampDuration=.005; % raised cosine ramp (seconds)
rmeddis@35 55 beginSilence=0.250;
rmeddis@35 56 endSilence=0.250;
rmeddis@35 57 toneFrequency= 1000; % or a pure tone (Hz)
rmeddis@32 58
rmeddis@35 59 % or
rmeddis@35 60 % harmonic sequence (Hz)
rmeddis@35 61 % F0=210;
rmeddis@35 62 % toneFrequency= F0:F0:8000;
rmeddis@32 63
rmeddis@35 64 % or
rmeddis@36 65 signalType= 'file';
rmeddis@36 66 fileName='twister_44kHz';
rmeddis@0 67
rmeddis@0 68
rmeddis@35 69
rmeddis@0 70 %% #4 rms level
rmeddis@0 71 % signal details
rmeddis@36 72 leveldBSPL= 70; % dB SPL (80 for Lieberman)
rmeddis@0 73
rmeddis@0 74
rmeddis@0 75 %% #5 number of channels in the model
rmeddis@0 76 % 21-channel model (log spacing)
rmeddis@0 77 numChannels=21;
rmeddis@35 78 lowestBF=250; highestBF= 6000;
rmeddis@0 79 BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
rmeddis@0 80
rmeddis@0 81 % or specify your own channel BFs
rmeddis@25 82 % numChannels=1;
rmeddis@19 83 % BFlist=toneFrequency;
rmeddis@0 84
rmeddis@0 85
rmeddis@0 86 %% #6 change model parameters
rmeddis@36 87
rmeddis@36 88 paramChanges={};
rmeddis@36 89
rmeddis@0 90 % Parameter changes can be used to change one or more model parameters
rmeddis@0 91 % *after* the MAPparams file has been read
rmeddis@0 92 % This example declares only one fiber type with a calcium clearance time
rmeddis@0 93 % constant of 80e-6 s (HSR fiber) when the probability option is selected.
rmeddis@36 94 paramChanges={'AN_IHCsynapseParams.ANspeedUpFactor=5;', ...
rmeddis@36 95 'IHCpreSynapseParams.tauCa=86e-6; '};
rmeddis@25 96
rmeddis@0 97
rmeddis@23 98
rmeddis@23 99 %% delare 'showMap' options to control graphical output
rmeddis@23 100 showMapOptions.printModelParameters=1; % prints all parameters
rmeddis@23 101 showMapOptions.showModelOutput=1; % plot of all stages
rmeddis@23 102 showMapOptions.printFiringRates=1; % prints stage activity levels
rmeddis@23 103 showMapOptions.showACF=0; % shows SACF (probability only)
rmeddis@23 104 showMapOptions.showEfferent=1; % tracks of AR and MOC
rmeddis@23 105 showMapOptions.surfProbability=1; % 2D plot of HSR response
rmeddis@25 106 showMapOptions.surfSpikes=1; % 2D plot of spikes histogram
rmeddis@32 107 showMapOptions.ICrates=0; % IC rates by CNtauGk
rmeddis@25 108
rmeddis@25 109 % disable certain silly options
rmeddis@23 110 if strcmp(AN_spikesOrProbability, 'spikes')
rmeddis@23 111 % avoid nonsensical options
rmeddis@23 112 showMapOptions.surfProbability=0;
rmeddis@23 113 showMapOptions.showACF=0;
rmeddis@16 114 end
rmeddis@35 115
rmeddis@16 116 if strcmp(signalType, 'file')
rmeddis@23 117 % needed for labeling plot
rmeddis@16 118 showMapOptions.fileName=fileName;
rmeddis@23 119 else
rmeddis@23 120 showMapOptions.fileName=[];
rmeddis@16 121 end
rmeddis@0 122
rmeddis@0 123 %% Generate stimuli
rmeddis@0 124
rmeddis@0 125 switch signalType
rmeddis@0 126 case 'tones'
rmeddis@35 127 % Create pure tone stimulus
rmeddis@35 128 dt=1/sampleRate; % seconds
rmeddis@35 129 time=dt: dt: duration;
rmeddis@35 130 inputSignal=sum(sin(2*pi*toneFrequency'*time), 1);
rmeddis@35 131 amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak)
rmeddis@35 132 inputSignal=amp*inputSignal;
rmeddis@35 133 % apply ramps
rmeddis@35 134 % catch rampTime error
rmeddis@35 135 if rampDuration>0.5*duration, rampDuration=duration/2; end
rmeddis@35 136 rampTime=dt:dt:rampDuration;
rmeddis@35 137 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
rmeddis@35 138 ones(1,length(time)-length(rampTime))];
rmeddis@35 139 inputSignal=inputSignal.*ramp;
rmeddis@35 140 ramp=fliplr(ramp);
rmeddis@35 141 inputSignal=inputSignal.*ramp;
rmeddis@35 142 % add silence
rmeddis@35 143 intialSilence= zeros(1,round(beginSilence/dt));
rmeddis@35 144 finalSilence= zeros(1,round(endSilence/dt));
rmeddis@35 145 inputSignal= [intialSilence inputSignal finalSilence];
rmeddis@23 146
rmeddis@0 147 case 'file'
rmeddis@16 148 %% file input simple or mixed
rmeddis@19 149 [inputSignal sampleRate]=wavread(fileName);
rmeddis@23 150 dt=1/sampleRate;
rmeddis@16 151 inputSignal=inputSignal(:,1);
rmeddis@0 152 targetRMS=20e-6*10^(leveldBSPL/20);
rmeddis@0 153 rms=(mean(inputSignal.^2))^0.5;
rmeddis@0 154 amp=targetRMS/rms;
rmeddis@0 155 inputSignal=inputSignal*amp;
rmeddis@35 156 intialSilence= zeros(1,round(0.1/dt));
rmeddis@35 157 finalSilence= zeros(1,round(0.2/dt));
rmeddis@35 158 inputSignal= [intialSilence inputSignal' finalSilence];
rmeddis@0 159 end
rmeddis@0 160
rmeddis@0 161
rmeddis@0 162 %% run the model
rmeddis@0 163 tic
rmeddis@9 164 fprintf('\n')
rmeddis@9 165 disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)])
rmeddis@35 166 disp([num2str(numChannels) ' channel model: ' AN_spikesOrProbability])
rmeddis@9 167 disp('Computing ...')
rmeddis@15 168
rmeddis@0 169 MAP1_14(inputSignal, sampleRate, BFlist, ...
rmeddis@0 170 MAPparamsName, AN_spikesOrProbability, paramChanges);
rmeddis@26 171
rmeddis@0 172
rmeddis@35 173 %% the model run is now complete. Now display the results
rmeddis@26 174 UTIL_showMAP(showMapOptions, paramChanges)
rmeddis@0 175
rmeddis@35 176 if strcmp(signalType,'tones')
rmeddis@35 177 disp(['duration=' num2str(duration)])
rmeddis@35 178 disp(['level=' num2str(leveldBSPL)])
rmeddis@35 179 disp(['toneFrequency=' num2str(toneFrequency)])
rmeddis@35 180 global DRNLParams
rmeddis@35 181 disp(['attenuation factor =' ...
rmeddis@35 182 num2str(DRNLParams.rateToAttenuationFactor, '%5.3f') ])
rmeddis@35 183 disp(['attenuation factor (probability)=' ...
rmeddis@35 184 num2str(DRNLParams.rateToAttenuationFactorProb, '%5.3f') ])
rmeddis@35 185 disp(AN_spikesOrProbability)
rmeddis@35 186 end
rmeddis@35 187 disp(paramChanges)
rmeddis@9 188 toc
rmeddis@0 189 path(restorePath)
rmeddis@0 190