def test_smooth_cubic(self): ch = self.driver.offset ch.smooth(.1, .2, 13*self.t, 3) ch.set(.2) delay(1*self.t) out = self.run_channel(self.rtio_manager.outputs) out = out[self.channel.latency + self.channel.u.latency:][:14] if False: import matplotlib.pyplot as plt plt.plot(sum(out, [])) plt.show()
def test_smooth_cubic(self): ch = self.driver.offset ch.smooth(.1, .2, 13 * self.t, 3) ch.set(.2) delay(1 * self.t) out = self.run_channel(self.rtio_manager.outputs) out = out[self.channel.latency + self.channel.u.latency:][:14] if False: import matplotlib.pyplot as plt plt.plot(sum(out, [])) plt.show()
def test_smooth_cubic(self): ch = self.driver.offset ch.smooth(.1, .2, 13, 3) ch.set(.2) delay(1 * self.t) out = self.run_channel(self.rtio_manager.outputs) out = sum(out, []) if False: import matplotlib.pyplot as plt plt.plot(out) plt.show()
def test_linear(self): d = self.driver d.offset.set_coeff_mu([100, 10]) delay(10 * self.t) d.offset.set_coeff([0]) delay(1 * self.t) out = self.run_channel(self.rtio_manager.outputs) out = out[self.channel.latency + self.channel.u.latency:][:11] for i in range(len(out) - 1): with self.subTest(i): v = 100 + i * 10 self.assertEqual(out[i], [v, v]) self.assertEqual(out[-1], [0, 0])
def test_linear(self): d = self.driver d.offset.set_coeff_mu([100, 10]) delay(10*self.t) d.offset.set_coeff([0]) delay(1*self.t) out = self.run_channel(self.rtio_manager.outputs) out = out[self.channel.latency + self.channel.u.latency:][:11] for i in range(len(out) - 1): with self.subTest(i): v = 100 + i*10 self.assertEqual(out[i], [v, v]) self.assertEqual(out[-1], [0, 0])
def test_smooth_linear(self): ch = self.driver.offset ch.smooth(.1, .2, 13 * self.t, 1) ch.set(.2) delay(1 * self.t) out = self.run_channel(self.rtio_manager.outputs) out = out[self.channel.latency + self.channel.u.latency:][:14] a = int(round(.1 * ch.scale)) da = int(round(.1 * ch.scale * (1 << ch.width) // 13)) for i in range(len(out) - 1): with self.subTest(i): v = a + (i * da >> ch.width) self.assertEqual(out[i], [v, v]) a = int(round(.2 * ch.scale)) self.assertEqual(out[-1], [a, a])
def test_smooth_linear(self): ch = self.driver.offset ch.smooth(.1, .2, 13*self.t, 1) ch.set(.2) delay(1*self.t) out = self.run_channel(self.rtio_manager.outputs) out = out[self.channel.latency + self.channel.u.latency:][:14] a = int(round(.1*ch.scale)) da = int(round(.1*ch.scale*(1 << ch.width)//13)) for i in range(len(out) - 1): with self.subTest(i): v = a + (i*da >> ch.width) self.assertEqual(out[i], [v, v]) a = int(round(.2*ch.scale)) self.assertEqual(out[-1], [a, a])
def test_make_events(self): d = self.driver d.offset.set(.9) delay(2 * self.t) d.frequency0.set(.1) d.frequency1.set(.1) delay(2 * self.t) d.offset.set(0) v = int(round((1 << 48) * .1 * self.t)) self.assertEqual(self.rtio_manager.outputs, [ (0., 1, 0, int(round(self.driver.offset.scale * .9))), (2. * self.t, 8, 0, int( round((1 << self.driver.frequency0.width) * self.t / self.channel.parallelism * .1))), (2. * self.t, 3, 0, [int32(v), int32(v >> 32)]), (4. * self.t, 1, 0, 0), ])
def test_make_events(self): d = self.driver d.offset.set(.9) delay(2*self.t) d.frequency0.set(.1) d.frequency1.set(.1) delay(2*self.t) d.offset.set(0) v = int(round((1 << 48) * .1 * self.t)) self.assertEqual( self.rtio_manager.outputs, [ (0., 1, 0, int(round(self.driver.offset.scale*.9))), (2.*self.t, 8, 0, int(round( (1 << self.driver.frequency0.width) * self.t/self.channel.parallelism*.1))), (2.*self.t, 3, 0, [int32(v), int32(v >> 32)]), (4.*self.t, 1, 0, 0), ])
def test_fir_overflow(self): MHz = 1e-3 ns = 1. f1 = self.driver.frequency1 a1 = self.driver.amplitude1 p1 = self.driver.phase1 cfg = self.driver.config f1.set(1 * MHz) a1.set(.99) delay(100 * ns) p1.set(.5) delay(100 * ns) a1.set(0) out = self.run_channel(self.rtio_manager.outputs) out = sum(out, []) if False: import matplotlib.pyplot as plt plt.plot(out) plt.show()
def test_fir_overflow(self): MHz = 1e-3 ns = 1. f1 = self.driver.frequency1 a1 = self.driver.amplitude1 p1 = self.driver.phase1 cfg = self.driver.config f1.set(1*MHz) a1.set(.99) delay(100*ns) p1.set(.5) delay(100*ns) a1.set(0) out = self.run_channel(self.rtio_manager.outputs) out = sum(out, []) if False: import matplotlib.pyplot as plt plt.plot(out) plt.show()
def test_demo_2tone(self): MHz = 1e-3 ns = 1. self.sawg0 = self.driver t_up = t_hold = t_down = 400 * ns a1 = .3 a2 = .4 order = 3 self.sawg0.frequency0.set(10 * MHz) self.sawg0.phase0.set(0.) self.sawg0.frequency1.set(1 * MHz) self.sawg0.phase1.set(0.) self.sawg0.frequency2.set(13 * MHz) self.sawg0.phase2.set(0.) t = now_mu() self.sawg0.amplitude1.smooth(.0, a1, t_up, order) at_mu(t) self.sawg0.amplitude2.smooth(.0, a2, t_up, order) self.sawg0.amplitude1.set(a1) self.sawg0.amplitude2.set(a2) delay(t_hold) t = now_mu() self.sawg0.amplitude1.smooth(a1, .0, t_down, order) at_mu(t) self.sawg0.amplitude2.smooth(a2, .0, t_down, order) self.sawg0.amplitude1.set(.0) self.sawg0.amplitude2.set(.0) out = self.run_channel(self.rtio_manager.outputs) out = sum(out, []) if True: import matplotlib.pyplot as plt plt.plot(out) plt.show()
def test_demo_2tone(self): MHz = 1e-3 ns = 1. self.sawg0 = self.driver t_up = t_hold = t_down = 400*ns a1 = .3 a2 = .4 order = 3 self.sawg0.frequency0.set(10*MHz) self.sawg0.phase0.set(0.) self.sawg0.frequency1.set(1*MHz) self.sawg0.phase1.set(0.) self.sawg0.frequency2.set(13*MHz) self.sawg0.phase2.set(0.) t = now_mu() self.sawg0.amplitude1.smooth(.0, a1, t_up, order) at_mu(t) self.sawg0.amplitude2.smooth(.0, a2, t_up, order) self.sawg0.amplitude1.set(a1) self.sawg0.amplitude2.set(a2) delay(t_hold) t = now_mu() self.sawg0.amplitude1.smooth(a1, .0, t_down, order) at_mu(t) self.sawg0.amplitude2.smooth(a2, .0, t_down, order) self.sawg0.amplitude1.set(.0) self.sawg0.amplitude2.set(.0) out = self.run_channel(self.rtio_manager.outputs) out = sum(out, []) if True: import matplotlib.pyplot as plt plt.plot(out) plt.show()
def delay_mu(self, t): delay(t)