Python: Laser Lock Box

Example Python script to implement the Laser Lock Box

# pymoku example: Basic Laser Lock Box
# This example demonstrates how you can configure the laser lock box
# instrument
# (c) 2019 Liquid Instruments Pty. Ltd.

from pymoku import Moku
from pymoku.instruments import LaserLockBox

from scipy import signal

def gen_butterworth(corner_frequency):
Generate coefficients for a second order butterworth low-pass filter.

Corner frequencies for laser lock box second harmonic filtering should be
in the range: 1 kHz < corner frequency < 31.25 MHz.
sample_rate = 31.25e6
normalised_corner = corner_frequency / (sample_rate / 2)
b, a = signal.butter(2, normalised_corner, 'low', analog=False)

coefficient_array = [[1.0, b[0], b[1], b[2], -a[1], -a[2]],
[1.0, 1.0, 0.0, 0.0, 0.0, 0.0]]
return coefficient_array

# Use Moku.get_by_serial() or get_by_name() if you don't know the IP
m = Moku.get_by_name('Moku')

i = m.deploy_or_connect(LaserLockBox)

# set local oscillator, auxiliary and scan generators
i.set_local_oscillator(source='internal', frequency=0, phase=90,
i.set_aux_sine(amplitude=1.0, frequency=10e3, phase=0, sync_to_lo=False,
i.set_scan(frequency=1e3, phase=0, output='out2', amplitude=1.0,

# configure PIDs:
i.set_pid_by_gain(1, g=1, kp=1)
i.set_pid_by_gain(2, g=1, kp=1)

# configure second harmonic rejection low pass filter
coef_array = gen_butterworth(1e4)

# Close the connection to the Moku device
# This ensures network resources and released correctly