# Squeezing and homodyne detection¶

This example shows a simple example of modelling squeezed light with Finesse.

## The optical configuration¶

The optical layout shows a laser and a squeezed light source whose beams are superimposed on a beam splitter. Two quantum noise detectors are used for detection, the qshot detector measuring only the shot noise (ignoring the squeezing) and the qnoised detector measuring the correct quantum noise. We mix a 10dB squeezed source and a 1W laser at the beamsplitter and measure the result at the photodiode, varying the phase of the laser field.

To mitigate the need for a balanced homodyne, which would require the subtraction of two photocurrents, we can use a highly reflective beamsplitter with a very powerful local oscillator.

## The Finesse model¶

import matplotlib.pyplot as plt
import numpy as np

import finesse
finesse.configure(plotting=True)

kat = finesse.Model()
kat.parse(
"""
l l1 P=1-bs1.T
s s1 l1.p1 bs1.p4 L=1
sq sq1 db=10
s s2 sq1.p1 bs1.p1
bs bs1 R=0.999 L=0 alpha=45

# Set a signal frequency to activate the signal simulation
# (needed for squeezing effects to be observed)
fsig(1)

# Output the pure shot noise along with the qnoised detector
# measuring the effects of the squeezing
qnoised sqzd_noise bs1.p2.o
qshot shot_noise bs1.p2.o

xaxis(l1.phase, lin, -90, 90, 360)
"""
)


## Output plots¶

out = kat.run()
out.plot(separate=False);


The plot shows that the qshot output is flat, whereas the qnoised output rises above and falls below the shot noise depending on the phase. You should also see here that you must be careful to ensure that any squeezed field and laser fields have the correct phase and squeezing angle to give the desired effect (try for example to change the length of s1 and see what happens).

Squeezing is usually measured in decibels. Negative values correspond to squeezing and positive values correspond to antisqueezing. To convert, we can define a quick function and then plot our results. The only loss is on our beamsplitter, and it is 0.1%. With such low losses, we can see almost the full 10 dB of squeezing and antisqueezing.

def to_db(quantity, reference, isAmplitude=False):
if isAmplitude: factor = 20
else: factor = 10

return factor*np.log10(quantity/reference)

sqz_db =  to_db(out['sqzd_noise'], out['shot_noise'], isAmplitude=True)

fig, ax = plt.subplots()
ax.plot(out.x0, sqz_db)
ax.set_ylabel('SQZ / ASQZ [dB]')
ax.set_xlabel('LO Phase [deg]')

Text(0.5, 0, 'LO Phase [deg]')


Try reducing the reflectivity of the beamsplitter and see what happens.

Click to download example as python script

Click to download example as Jupyter notebook