function spikes = lifadaptspikes( trials, input, tmaxdt, D, tauadapt, adaptincr ) % Generate spike times of a leaky integrate-and-fire neuron % with an adaptation current % trials: the number of trials to be generated % input: the stimulus either as a single value or as a vector % tmaxdt: in case of a single value stimulus: the duration of a trial % in case of a vector as a stimulus: the time step % D: the strength of additive white noise % tauadapt: adaptation time constant % adaptincr: adaptation strength tau = 0.01; if nargin < 4 D = 1e0; end if nargin < 5 tauadapt = 0.1; end if nargin < 6 adaptincr = 1.0; end vreset = 0.0; vthresh = 10.0; dt = 1e-4; if max( size( input ) ) == 1 input = input * ones( ceil( tmaxdt/dt ), 1 ); else dt = tmaxdt; end spikes = cell( trials, 1 ); for k=1:trials times = []; j = 1; v = vreset; a = 0.0; noise = sqrt(2.0*D)*randn( length( input ), 1 )/sqrt(dt); for i=1:length( noise ) v = v + ( - v - a + noise(i) + input(i))*dt/tau; a = a + ( - a )*dt/tauadapt; if v >= vthresh v = vreset; a = a + adaptincr/tauadapt; spiketime = i*dt; if spiketime > 4.0*tauadapt times(j) = spiketime - 4.0*tauadapt; j = j + 1; end end end spikes{k} = times; end end