annotate testPrograms/temp.m @ 36:3ea506487b3b

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