annotate testPrograms/test_MAP1_14.m @ 5:ded8411bbd19

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