annotate testPrograms/test_MAP1_14.m @ 9:ecad0ea62b43

May27 mainly better parameters
author Ray Meddis <rmeddis@essex.ac.uk>
date Tue, 31 May 2011 09:13:07 +0100
parents f233164f4c86
children 35af36fe0a35 8c7a18d89610
rev   line source
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@9 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@9 21 duration=0.020; % seconds
rmeddis@9 22 sampleRate= 64000;
rmeddis@0 23 % toneFrequency= 250:250:8000; % harmonic sequence (Hz)
rmeddis@9 24 toneFrequency= 2000; % or a pure tone (Hz8
rmeddis@0 25
rmeddis@0 26 rampDuration=.005; % seconds
rmeddis@0 27
rmeddis@0 28 % or
rmeddis@0 29 signalType= 'file';
rmeddis@0 30 fileName='twister_44kHz';
rmeddis@0 31 % fileName='new-da-44khz';
rmeddis@0 32
rmeddis@0 33
rmeddis@0 34 %% #4 rms level
rmeddis@0 35 % signal details
rmeddis@0 36 leveldBSPL=70; % dB SPL
rmeddis@0 37
rmeddis@0 38
rmeddis@0 39 %% #5 number of channels in the model
rmeddis@0 40 % 21-channel model (log spacing)
rmeddis@0 41 numChannels=21;
rmeddis@0 42 lowestBF=250; highestBF= 8000;
rmeddis@0 43 BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
rmeddis@0 44
rmeddis@0 45 % or specify your own channel BFs
rmeddis@9 46 % BFlist=toneFrequency;
rmeddis@0 47
rmeddis@0 48
rmeddis@0 49 %% #6 change model parameters
rmeddis@0 50 paramChanges=[];
rmeddis@0 51
rmeddis@0 52 % or
rmeddis@0 53 % Parameter changes can be used to change one or more model parameters
rmeddis@0 54 % *after* the MAPparams file has been read
rmeddis@0 55 % This example declares only one fiber type with a calcium clearance time
rmeddis@0 56 % constant of 80e-6 s (HSR fiber) when the probability option is selected.
rmeddis@9 57 % switch AN_spikesOrProbability
rmeddis@9 58 % case 'probability'
rmeddis@9 59 % paramChanges={'IHCpreSynapseParams.tauCa=80e-6;'};
rmeddis@9 60 % otherwise
rmeddis@9 61 % paramChanges=[];
rmeddis@9 62 % end
rmeddis@0 63
rmeddis@0 64 %% delare showMap options
rmeddis@0 65 showMapOptions=[]; % use defaults
rmeddis@0 66
rmeddis@0 67 % or (example: show everything including an smoothed SACF output
rmeddis@0 68 showMapOptions.showModelParameters=1;
rmeddis@0 69 showMapOptions.showModelOutput=1;
rmeddis@0 70 showMapOptions.printFiringRates=1;
rmeddis@9 71 showMapOptions.showACF=0;
rmeddis@0 72 showMapOptions.showEfferent=1;
rmeddis@0 73
rmeddis@0 74 %% Generate stimuli
rmeddis@0 75
rmeddis@0 76 dbstop if error
rmeddis@0 77 restorePath=path;
rmeddis@0 78 addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'])
rmeddis@0 79 switch signalType
rmeddis@0 80 case 'tones'
rmeddis@0 81 inputSignal=createMultiTone(sampleRate, toneFrequency, ...
rmeddis@0 82 leveldBSPL, duration, rampDuration);
rmeddis@0 83
rmeddis@0 84 case 'file'
rmeddis@0 85 [inputSignal sampleRate]=wavread(fileName);
rmeddis@0 86 inputSignal(:,1);
rmeddis@0 87 targetRMS=20e-6*10^(leveldBSPL/20);
rmeddis@0 88 rms=(mean(inputSignal.^2))^0.5;
rmeddis@0 89 amp=targetRMS/rms;
rmeddis@0 90 inputSignal=inputSignal*amp;
rmeddis@0 91 end
rmeddis@0 92
rmeddis@0 93
rmeddis@0 94 %% run the model
rmeddis@0 95 tic
rmeddis@0 96
rmeddis@9 97 fprintf('\n')
rmeddis@9 98 disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)])
rmeddis@9 99 disp([num2str(numChannels) ' channel model'])
rmeddis@9 100 disp('Computing ...')
rmeddis@0 101 MAP1_14(inputSignal, sampleRate, BFlist, ...
rmeddis@0 102 MAPparamsName, AN_spikesOrProbability, paramChanges);
rmeddis@0 103 toc
rmeddis@0 104
rmeddis@0 105 % the model run is now complete. Now display the results
rmeddis@0 106 showMAP(showMapOptions)
rmeddis@0 107
rmeddis@9 108 toc
rmeddis@0 109 path(restorePath)
rmeddis@0 110
rmeddis@0 111
rmeddis@0 112 function inputSignal=createMultiTone(sampleRate, toneFrequency, ...
rmeddis@0 113 leveldBSPL, duration, rampDuration)
rmeddis@0 114 % Create pure tone stimulus
rmeddis@0 115 dt=1/sampleRate; % seconds
rmeddis@0 116 time=dt: dt: duration;
rmeddis@0 117 inputSignal=sum(sin(2*pi*toneFrequency'*time), 1);
rmeddis@0 118 amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak)
rmeddis@0 119 inputSignal=amp*inputSignal;
rmeddis@0 120
rmeddis@0 121 % apply ramps
rmeddis@0 122 % catch rampTime error
rmeddis@0 123 if rampDuration>0.5*duration, rampDuration=duration/2; end
rmeddis@0 124 rampTime=dt:dt:rampDuration;
rmeddis@0 125 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
rmeddis@0 126 ones(1,length(time)-length(rampTime))];
rmeddis@0 127 inputSignal=inputSignal.*ramp;
rmeddis@0 128 ramp=fliplr(ramp);
rmeddis@0 129 inputSignal=inputSignal.*ramp;
rmeddis@0 130
rmeddis@0 131 % add 10 ms silence
rmeddis@0 132 silence= zeros(1,round(0.03/dt));
rmeddis@9 133 % inputSignal= [silence inputSignal silence];
rmeddis@0 134