inter_arc = interpolate.interp1d(xv, np.arctan2(np.cos(xv), np.sin(xv))) def arc_func(x): return inter_arc(2 * np.pi * x / period % (2 * np.pi)) with nengo.Network() as ad_model: bump = nengo.Node(bump_func) osc = nengo.Network() osc.config[nengo.Ensemble].neuron_type = nengo.LIFRate() osc.config[nengo.Ensemble].seed = seed nengo.networks.Oscillator(0.1, 2 * np.pi / period, 300, net=osc) dd = get_direct_decoders(arc_func, period, osc, bump_func) dmp, conn_func = make_attrac_net(proc_func, 300, dd=dd, seed=seed) nengo.Connection(bump, osc.ensemble[0]) nengo.Connection(osc.ensemble.neurons, dmp.input, function=conn_func) p_arc = nengo.Probe(arctan, synapse=0.01) p_out = nengo.Probe(dmp.output, synapse=0.01) with nengo.Simulator(ad_model) as ad_sim: ad_sim.run(4 * period) plt.plot(ad_sim.data[p_out][int(2 * period / dt) :]) plt.show()
def bump_func(t): return 1 if t < 0.1 else 0 pre_dat = target_func(np.linspace(0, period, 100)) xv = np.linspace(-np.pi, np.pi, pre_dat.shape[0]) proc_func = interpolate.interp1d(xv, pre_dat) with nengo.Network() as ad_model: bump = nengo.Node(bump_func) osc = nengo.Network() osc.config[nengo.Ensemble].neuron_type = nengo.LIFRate() osc.config[nengo.Ensemble].seed = 0 nengo.networks.Oscillator(0.1, 2*np.pi/period, 300, net=osc) dmp, conn_func = make_attrac_net(proc_func, 300) nengo.Connection(bump, osc.ensemble[0]) nengo.Connection(osc.ensemble, dmp.input, function=conn_func) p_out = nengo.Probe(dmp.output, synapse=0.01) with nengo.Simulator(ad_model) as ad_sim: ad_sim.run(4*period) g_dat = ad_sim.data[p_out][int(2*period/dt):] plt.plot(d3_scale(g_dat)) plt.show()