3
Spike-based adaptation of Licklider's model of pitch processing (autocorrelation with
4
delay lines) with phase locking.
10
defaultclock.dt = .02 * ms
13
max_delay = 20 * ms # 50 Hz
17
dx/dt=(sound-x)/tau_ear+sigma_ear*(2./tau_ear)**.5*xi : 1
18
sound=5*sin(2*pi*frequency*t)**3 : 1 # nonlinear distorsion
19
#sound=5*(sin(4*pi*frequency*t)+.5*sin(6*pi*frequency*t)) : 1 # missing fundamental
20
frequency=(200+200*t*Hz)*Hz : Hz # increasing pitch
22
receptors = NeuronGroup(2, model=eqs_ear, threshold=1, reset=0, refractory=2 * ms)
24
# Coincidence detectors
31
dv/dt=-v/tau+sigma*(2./tau)**.5*xi : 1
33
neurons = NeuronGroup(N, model=eqs_neurons, threshold=1, reset=0)
34
synapses = Synapses(receptors, neurons, model='w : 1', pre='v+=w')
37
synapses.delay[1, :] = 1. / exp(linspace(log(min_freq / Hz), log(max_freq / Hz), N))
38
spikes = SpikeMonitor(neurons)
43
yticks([0, 99, 199, 299], array(1. / synapses.delay[1, [0, 99, 199, 299]], dtype=int))