Mercurial > hg > map
diff utilities/UTIL_CAPgenerator.m @ 38:c2204b18f4a2 tip
End nov big change
author | Ray Meddis <rmeddis@essex.ac.uk> |
---|---|
date | Mon, 28 Nov 2011 13:34:28 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utilities/UTIL_CAPgenerator.m Mon Nov 28 13:34:28 2011 +0000 @@ -0,0 +1,64 @@ +function wholeNerveCAP = UTIL_CAPgenerator... + (ANresponse, dt, BFlist, numANfibers, plotCAP) +% +% Generates a compound action potential by convolving an impulse repsonse, +% as defined by Mark Chertoff (2004, JASA), with the response of the +% auditory nerve. +% +% +% -e(-k*time)*SIN(2*PI()*f*time) +% +% mu(t) = e^-kt * sin(omega*t) +% omega = 2 * pi * f +% +% +% Robert T. Ferry +% 01st May 2008 +% +% + +nChannels=length(BFlist); +[r nSpikeEpochs]=size(ANresponse); + +wholeNerveCAP = []; +channelCAP = []; +e = exp(1); +k = 1000; +impulseDuration = 0.01; +impulseFrequency = 750; +impulseTime = dt:dt:impulseDuration; +impulseResponse = -e.^(-k*impulseTime).*sin(2*pi*impulseFrequency*impulseTime); +impulseResponse=impulseResponse-mean(impulseResponse); + +% WholeNerveCAP +ANoutput = sum(ANresponse, 1); +convolvedWholeNerveCAP = conv(ANoutput, impulseResponse(1,:)); +% truncate +convolvedWholeNerveCAP=convolvedWholeNerveCAP(1:nSpikeEpochs); + +% apply measurement time constant +sampleRate=1/dt; +upperFreq=sampleRate/4; +lowPassCutOff=40; +wholeNerveCAP = UTIL_Butterworth(convolvedWholeNerveCAP, dt, lowPassCutOff, upperFreq, 1); +% or do not do this +% wholeNerveCAP = convolvedWholeNerveCAP; + +% Plot output? + +CAPtime = dt:dt:dt*length(wholeNerveCAP); + +if (plotCAP == 1) + figure(9) + + subplot(3,1,1), plot(impulseTime, impulseResponse) + title('Impulse response') + xlabel('Time (s)'), ylabel('Amplitude (Pa)') + xlim([0 max(impulseTime)]), ylim([-inf inf]) + + subplot(3,1,2), plot(CAPtime, wholeNerveCAP) + title(['AN CAP (whole-nerve) ' num2str(length(BFlist)) ' channels' num2str(numANfibers) ' fibers/ch']) + xlabel('Time (s)'), ylabel('Amplitude (Pa)') + xlim([0 max(CAPtime)]), ylim([-inf inf]) + +end