In [1]:
stime = 1000.0 # simulate the neuron for 1000ms
dt = 0.5 # timestep of 0.5ms
# Izekevich constants
d = 8.0
a = 0.02
c = -65.0
b = 0.2
#Array of timesteps
T = round(Int,(ceil(stime/dt)))
#Initialize membrane potential variables of Izekevich model
v = zeros(T,1)
u = zeros(T,1)
v[1] = -70.0
u[1] = -14.0
#Incoming synapses
n_in = 5 # number of input synapses
rate = 2e-3 # poison rate of input spikes (2hz = 2e-3 spikes/ms)
tau_g = 10.0 # decay constant for the PSconductance (filter)
g_in = zeros(n_in,1) # conductances
E_in = zeros(n_in,1) # driving potential; 0 for exctitatory
w_in = 0.07 * ones(1, n_in) # weights of the synapses
Out[1]:
In [2]:
tic();
for t = 1:T-1
#generate poison spikes
if (t*dt > 200.0) && (t*dt < 700.0)
p = float(rand(n_in,1) .< rate*dt)
else
p = zeros(n_in,1);
end
g_in = g_in + p # update condutance for each spike
Iapp = (w_in * (g_in .* E_in)) - ((w_in * g_in)*v[t])
Iapp = Iapp[1,1] # Iapp is 2x2 array with one element != float !!
g_in = (1.0 - (dt/tau_g)) *g_in
if(v[t] < 35.0)
dv = (v[t]*(0.04*v[t] + 5.0)) + 140.0 - u[t];
v[t+1] = v[t] + (dv + Iapp)*dt;
du = a*(b * v[t] - u[t]);
u[t+1] = u[t] + dt*du;
else
v[t] = 35.0;
v[t+1] = c;
u[t+1] = u[t] + d;
end
end
toc();
In [4]:
using Winston
time = dt*(1:T)
plot(time,v, "r")
title("Izikevich Neuron with synapses")
xlabel("Simulation Time(ms)")
ylabel("Membrane potential (mV)")
Out[4]:
In [ ]: