annotate testPrograms/demoTwisterSpikes.m @ 9:ecad0ea62b43

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