forked from nest/nestml
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathizhikevich_psc_alpha.nestml
114 lines (82 loc) · 2.96 KB
/
izhikevich_psc_alpha.nestml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
"""
izhikevich_psc_alpha - Detailed Izhikevich neuron model with alpha-kernel post-synaptic current
###############################################################################################
Description
+++++++++++
Implementation of the simple spiking neuron model introduced by Izhikevich [1]_, with membrane potential in (milli)volt
and current-based synapses.
The dynamics are given by:
.. math::
C_m \frac{dV_m}{dt} = k (V - V_t)(V - V_t) - u + I + I_{syn,ex} + I_{syn,in}
\frac{dU_m}{dt} = a(b(V_m - E_L) - U_m)
&\text{if}\;\;\; V_m \geq V_{th}:\\
&\;\;\;\; V_m \text{ is set to } c
&\;\;\;\; U_m \text{ is incremented by } d
On each spike arrival, the membrane potential is subject to an alpha-kernel current of the form:
.. math::
I_syn = I_0 \cdot t \cdot \exp\left(-t/\tau_{syn}\right) / \tau_{syn}
See also
++++++++
izhikevich, iaf_psc_alpha
References
++++++++++
.. [1] Izhikevich, Simple Model of Spiking Neurons, IEEE Transactions on Neural Networks (2003) 14:1569-1572
Authors
+++++++
Hanuschkin, Morrison, Kunkel
"""
neuron izhikevich_psc_alpha:
state:
r integer # number of steps in the current refractory phase
end
initial_values:
V_m mV = -65 mV # Membrane potential
U_m pA = 0 pA # Membrane potential recovery variable
end
equations:
# synapses: alpha functions
kernel I_syn_in = (e/tau_syn_in) * t * exp(-t/tau_syn_in)
kernel I_syn_ex = (e/tau_syn_ex) * t * exp(-t/tau_syn_ex)
inline I_syn_exc pA = convolve(I_syn_ex, spikesExc)
inline I_syn_inh pA = convolve(I_syn_in, spikesInh)
V_m' = ( k * (V_m - V_r) * (V_m - V_t) - U_m + I_e + I_stim + I_syn_inh + I_syn_exc ) / C_m
U_m' = a * ( b*(V_m - V_r) - U_m )
end
parameters:
C_m pF = 200. pF # Membrane capacitance
k pF/mV/ms = 8. pF/mV/ms # Spiking slope
V_r mV = -65. mV # resting potential
V_t mV = -45. mV # threshold potential
a 1/ms = 0.01 /ms # describes time scale of recovery variable
b nS = 9. nS # sensitivity of recovery variable
c mV = -65 mV # after-spike reset value of V_m
d pA = 60. pA # after-spike reset value of U_m
V_peak mV = 0. mV # Spike detection threashold (reset condition)
tau_syn_ex ms = 0.2 ms # Synaptic Time Constant Excitatory Synapse
tau_syn_in ms = 2.0 ms # Synaptic Time Constant for Inhibitory Synapse
t_ref ms = 2.0 ms # Refractory period
# constant external input current
I_e pA = 0 pA
end
internals:
RefractoryCounts integer = steps(t_ref) # refractory time in steps
end
input:
spikesInh pA <- inhibitory spike
spikesExc pA <- excitatory spike
I_stim pA <- current
end
output: spike
update:
integrate_odes()
# refractoriness and threshold crossing
if r > 0: # is refractory?
r -= 1
elif V_m >= V_peak:
V_m = c
U_m += d
emit_spike()
r = RefractoryCounts
end
end
end