7.5.1 Michelson interferometer with arm cavities
This example shows how to setup a Michelson interferometer, tune it to the dark fringe and compute a transfer function from the differential length change to the output signal, using the sideband amplitude for simplicity (Fig. 57, generated here).
import finesse
from finesse.analysis.actions import Xaxis
import numpy as np
import matplotlib.pyplot as plt
finesse.init_plotting()
base = finesse.Model()
base.parse(
"""
l l1 # laser with P=1W at the default frequency
s s1 l1.p1 MPR.p1 L=1 # space of 1m length
m MPR R=0 T=1 # power recycling mirror
s s2 MPR.p2 bs1.p1 L=50 # space of 50m length
bs bs1 # 50:50 beam splitter
# north arm
s s3 bs1.p2 ITMy.p1 L=7 # space of 7m length to north arm
m ITMy R=0.99 T=0.01 # north input mirror, lossless
s Ly ITMy.p2 ETMy.p1 L=4k # north arm of 4km length
m ETMy R=1 T=0 # north end mirror, lossless
# east arm
s s4 bs1.p3 ITMx.p1 L=7 # space of 7m length to east arm
m ITMx R=0.99 T=0.01 phi=90 # east end mirror, lossless
s Lx ITMx.p2 ETMx.p1 L=4k # east arm of 4km length
m ETMx R=1 T=0 phi=90 # east end mirror, lossless
# apply signal to north and east mirror positions, 180 degrees out of phase
fsig(100)
sgen sig1 ETMx.mech.z
sgen sig2 ETMy.mech.z phase=180
ad signal bs1.p4.o fsig.f # amplitude detector in south port
"""
)
out = base.run(Xaxis(base.fsig.f, 'log', 1, 1e4, 300))
plt.figure(figsize=(8, 4))
plt.semilogx(out.x1, np.abs(out['signal']))
plt.xlabel(r'$f$ [Hz]')
plt.ylabel(r'Amplitude [$\sqrt{\mathrm{W}}$]')
plt.show()