Source
%matplotlib widget
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from ipywidgets import *
plt.style.use('dark_background')
fontsize = 14
mpl.rcParams.update(
{
"text.usetex": False,
"figure.figsize": (9, 6),
# "figure.autolayout": True,
# "font.family": "serif",
# "font.serif": "georgia",
# 'mathtext.fontset': 'cm',
"lines.linewidth": 1.5,
"font.size": fontsize,
"xtick.labelsize": fontsize,
"ytick.labelsize": fontsize,
"legend.fancybox": True,
"legend.fontsize": fontsize,
"legend.framealpha": 0.7,
"legend.handletextpad": 0.5,
"legend.labelspacing": 0.2,
"legend.loc": "best",
"axes.edgecolor": "#b0b0b0",
"grid.color": "#707070", # grid color"
"xtick.color": "#b0b0b0",
"ytick.color": "#b0b0b0",
"savefig.dpi": 80,
"pdf.compression": 9,
}
)In the previous two lectures, we studied two crucial interferometers: the Fabry-Perot and Michelson.
From these basic building blocks, we will eventually build the complex interferometer which is Advanced LIGO.\
However, before we build Advanced LIGO, we need a little more technology.
This tech will revolve around different frequencies of light interacting with our interferometers.
We have already touched on the idea of multiple frequencies at several moments,
but now we will formalize it in the form of Scattering Matrices, Transfer Functions, and Modulations.
1Modulations¶
The modulation picture emphasizes the different frequencies of light that are created by different interactions. GWs are detected as infinitesimal modulations applied to highly stabilized laser light. Noise in the laser light, whether quantum or classical, is modulations not caused by GWs.
A perfectly noiseless electric field is known as the carrier:
where is the carrier frequency, is the carrier amplitude, and is time.
1.1Phase Modulation¶
A phase modulation of amplitude at frequency can be applied to the carrier light:
This can be thought of as splitting the carrier power, which is always a sine wave at , off into sidebands at frequencies . Using the Jacobi-Anger expansion on Eq.~(2) yields:
where is the Bessel function of the first kind.
If we assume is small, then we can ignore the higher-order sidebands , and write Eq.~(3) as
Finally, using , , and , we write the final phase modulation in terms of the carrier , upper sideband and lower sideband :
The key observation of Eq.~(5) is the relative phase of the sidebands compared with the carrier.
The sidebands are aligned with one another when they are orthogonal to the carrier.
Calculating the power in the field,
The sidebands push and pull the phase of the carrier by , but to first order do not alter the amplitude. Figure illustrates the sideband and quadrature picture of phase modulation.

Phase Modulation Scheme
Solution to Exercise 1 #
With three terms in the input electric field, multiplied by three terms of the complex conjugate,
we end up with nine total terms in the power expression, which simplifies down to Equation (6):
Note we still have our power oscillation here.
Adding in the second order terms in helps us avoid “adding power” to final term, but does not completely eliminate our issue.
Integrating the right hand side over one period of the oscillation eliminates the exponetial terms, yielding
which is pretty good power conservation for small .
1.2Frequency noise¶
Frequency noise is mathematically equivalent to a phase modulation. Using the definition of frequency as the time derivative of phase, , and the phase from Eq.(2), we calculate the relationship between frequency noise and phase modulation \cite{HeinzelThesis}:
The frequency can be broken down into the carrier term and the noise term , where
where is the amplitude of the frequency swing.
We can substitute Eq.(11) into Eq.(5) with no change in the final result (except an arbitrary phase advance of for both sidebands):
Here we recall the distinction between , , and . The carrier frequency is , this is a constant, (The Advanced LIGO laser wavelength ). The modulation frequency itself is , this is how fast the carrier frequency changes. The frequency modulation amplitude is how much the carrier frequency changes.
1.3Amplitude modulation¶
An amplitude modulation of amplitude at frequency can be applied to the carrier light:
Again, the key observation of Eq.(13) is the relative phase of the sidebands compared with the carrier. This time, the sidebands are aligned with one another when they are also aligned with the carrier. Calculating the power in the field,
The sidebands push and pull the amplitude of the carrier by , but do not alter the phase. Figure illustrates the sideband and quadrature picture of amplitude modulation.

Amplitude Modulation Scheme
1.4Intensity noise¶
Relative intensity noise (RIN) is mathematically equivalent to amplitude modulation. From Eq.(14), we can relate relative intensity noise to relative amplitude noise (RAN). Dividing Eq.(14) by , we define the relative intensity noise in terms of amplitude modulation:
Going back to the expression for amplitude modulation Eq.(13), we can express the electric field and power in terms of relative intensity noise :
def carrier(phi, mod_depth):
return (1 - mod_depth**2 / 4) * np.exp(1j * phi)
def upper_phase_sideband(phi, theta, mod_depth):
return 1j * mod_depth / 2 * np.exp(1j * (theta + phi))
def lower_phase_sideband(phi, theta, mod_depth):
return 1j * mod_depth / 2 * np.exp(-1j * (theta - phi))
def upper_amp_sideband(phi, theta, mod_depth):
return mod_depth / 2 * np.exp(1j * (theta + phi))
def lower_amp_sideband(phi, theta, mod_depth):
return mod_depth / 2 * np.exp(-1j * (theta - phi))Source
fig1 = plt.figure(figsize=(12,8))
ax1 = fig1.add_subplot()
phis = np.linspace(-np.pi, np.pi, 100)
phi0 = 0
theta0 = 0
mod_depth = 0.5
# Arc
plot_carriers = carrier(phis, mod_depth)
plot_carriers_real = np.real(plot_carriers)
plot_carriers_imag = np.imag(plot_carriers)
# Vectors
plot_carrier = carrier(phi0, mod_depth)
plot_usb = upper_amp_sideband(phi0, theta0, mod_depth)
plot_lsb = lower_amp_sideband(phi0, theta0, mod_depth)
plot_total = plot_carrier + plot_usb + plot_lsb
plot_carrier_real = np.real(plot_carrier)
plot_carrier_imag = np.imag(plot_carrier)
plot_usb_real = np.real(plot_usb)
plot_usb_imag = np.imag(plot_usb)
plot_lsb_real = np.real(plot_lsb)
plot_lsb_imag = np.imag(plot_lsb)
plot_total_real = np.real(plot_total)
plot_total_imag = np.imag(plot_total)
arc1, = ax1.plot(plot_carriers_real, plot_carriers_imag, label="Carrier Phasor")
# line1, = ax1.plot([0, plot_carrier_real], [0, plot_carrier_imag], 'o-', label="Carrier")
# line2, = ax1.plot([0, plot_usb_real], [0, plot_usb_imag], 'o-', label="Upper Sideband")
# line3, = ax1.plot([0, plot_lsb_real], [0, plot_lsb_imag], 'o-', label="Lower Sideband")
# line4, = ax1.plot([0, plot_total_real], [0, plot_total_imag], 'o-', label="Total Electric Field")
arrow1 = ax1.arrow(0, 0, plot_carrier_real, plot_carrier_imag, shape='full', color="C1", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Carrier")
arrow2 = ax1.arrow(0, 0, plot_usb_real, plot_usb_imag, shape='full', color="C2", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Upper Sideband")
arrow3 = ax1.arrow(0, 0, plot_lsb_real, plot_lsb_imag, shape='full', color="C3", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Lower Sideband")
arrow4 = ax1.arrow(0, 0, plot_total_real, plot_total_imag, shape='full', color="C4", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Total Electric Field")
arrow5 = ax1.arrow(plot_carrier_real, plot_carrier_imag, plot_usb_real, plot_usb_imag, shape='full', color="C2", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Upper Sideband")
arrow6 = ax1.arrow(plot_carrier_real+plot_usb_real, plot_carrier_imag+plot_usb_imag, plot_lsb_real, plot_lsb_imag, shape='full', color="C3", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Lower Sideband")
ax1.set_xlabel("Real")
ax1.set_ylabel("Imaginary $i$")
ax1.set_xlim([-1.5, 1.5])
ax1.set_ylim([-1.5, 1.5])
ax1.grid()
ax1.set_title("Amplitude Modulation")
ax1.legend(bbox_to_anchor=(1.01, 0.6))
ax1.set_aspect('equal')
# plt.tight_layout()
def update_amplitude_modulation(
phi0_slider_value=phi0,
theta0_slider_value=theta0,
mod_depth_slider_value=mod_depth
):
"""
Create waves plot with synchronized cosine and sine displays.
"""
new_phi0 = np.pi / 180 * phi0_slider_value
new_theta0 = np.pi / 180 * theta0_slider_value
new_mod_depth = mod_depth_slider_value
# Arc
new_plot_carriers = carrier(phis, new_mod_depth)
new_plot_carriers_real = np.real(new_plot_carriers)
new_plot_carriers_imag = np.imag(new_plot_carriers)
# Vectors
new_plot_carrier = carrier(new_phi0, new_mod_depth)
new_plot_usb = upper_amp_sideband(new_phi0, new_theta0, new_mod_depth)
new_plot_lsb = lower_amp_sideband(new_phi0, new_theta0, new_mod_depth)
new_plot_total = new_plot_carrier + new_plot_usb + new_plot_lsb
new_plot_carrier_real = np.real(new_plot_carrier)
new_plot_carrier_imag = np.imag(new_plot_carrier)
new_plot_usb_real = np.real(new_plot_usb)
new_plot_usb_imag = np.imag(new_plot_usb)
new_plot_lsb_real = np.real(new_plot_lsb)
new_plot_lsb_imag = np.imag(new_plot_lsb)
new_plot_total_real = np.real(new_plot_total)
new_plot_total_imag = np.imag(new_plot_total)
# line1.set_xdata(new_xx0)
# line1.set_ydata(new_yy0)
arc1.set_xdata(new_plot_carriers_real)
arc1.set_ydata(new_plot_carriers_imag)
arrow1.set_data(x=0, y=0, dx=new_plot_carrier_real, dy=new_plot_carrier_imag)
arrow2.set_data(x=0, y=0, dx=new_plot_usb_real, dy=new_plot_usb_imag)
arrow3.set_data(x=0, y=0, dx=new_plot_lsb_real, dy=new_plot_lsb_imag)
arrow4.set_data(x=0, y=0, dx=new_plot_total_real, dy=new_plot_total_imag)
arrow5.set_data(x=new_plot_carrier_real, y=new_plot_carrier_imag, dx=new_plot_usb_real, dy=new_plot_usb_imag)
arrow6.set_data(x=new_plot_carrier_real+new_plot_usb_real, y=new_plot_carrier_imag+new_plot_usb_imag, dx=new_plot_lsb_real, dy=new_plot_lsb_imag)
# ax1.set_title(r"$(r, \theta)$ = " + f"({new_plot_rr0:.3f}, {180/np.pi*new_plot_theta0:.3f}"+r"$^\circ$)")
fig1.canvas.draw_idle()
return
# Create interactive widget
phi0_slider1 = FloatSlider(
value=phi0,
min=0,
max=180,
step=0.1,
description=r"$\phi_0$ [deg]:",
continuous_update=True, # Only update on release for better performance
orientation='horizontal',
readout=True,
readout_format='.3f',
)
theta0_slider1 = FloatSlider(
value=theta0,
min=0,
max=360,
step=0.1,
description=r"$\omega t$ [deg]:",
continuous_update=True, # Only update on release for better performance
orientation='horizontal',
readout=True,
readout_format='.3f',
)
mod_depth_slider1 = FloatSlider(
value=mod_depth,
min=0,
max=1,
step=0.01,
description=r"$\Gamma$:",
continuous_update=True, # Only update on release for better performance
orientation='horizontal',
readout=True,
readout_format='.3f',
)
interact(
update_amplitude_modulation,
phi0_slider_value=phi0_slider1,
theta0_slider_value=theta0_slider1,
mod_depth_slider_value=mod_depth_slider1,
)
plt.show()Source
fig2 = plt.figure(figsize=(12,8))
ax2 = fig2.add_subplot()
phis = np.linspace(-np.pi, np.pi, 100)
phi0 = 0
theta0 = 0
mod_depth = 0.5
# Arc
plot_carriers = carrier(phis, mod_depth)
plot_carriers_real = np.real(plot_carriers)
plot_carriers_imag = np.imag(plot_carriers)
# Vectors
plot_carrier = carrier(phi0, mod_depth)
plot_usb = upper_phase_sideband(phi0, theta0, mod_depth)
plot_lsb = lower_phase_sideband(phi0, theta0, mod_depth)
plot_total = plot_carrier + plot_usb + plot_lsb
plot_carrier_real = np.real(plot_carrier)
plot_carrier_imag = np.imag(plot_carrier)
plot_usb_real = np.real(plot_usb)
plot_usb_imag = np.imag(plot_usb)
plot_lsb_real = np.real(plot_lsb)
plot_lsb_imag = np.imag(plot_lsb)
plot_total_real = np.real(plot_total)
plot_total_imag = np.imag(plot_total)
arc12, = ax2.plot(plot_carriers_real, plot_carriers_imag, label="Carrier Phasor")
# line1, = ax2.plot([0, plot_carrier_real], [0, plot_carrier_imag], 'o-', label="Carrier")
# line2, = ax2.plot([0, plot_usb_real], [0, plot_usb_imag], 'o-', label="Upper Sideband")
# line3, = ax2.plot([0, plot_lsb_real], [0, plot_lsb_imag], 'o-', label="Lower Sideband")
# line4, = ax2.plot([0, plot_total_real], [0, plot_total_imag], 'o-', label="Total Electric Field")
arrow12 = ax2.arrow(0, 0, plot_carrier_real, plot_carrier_imag, shape='full', color="C1", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Carrier")
arrow22 = ax2.arrow(0, 0, plot_usb_real, plot_usb_imag, shape='full', color="C2", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Upper Sideband")
arrow32 = ax2.arrow(0, 0, plot_lsb_real, plot_lsb_imag, shape='full', color="C3", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Lower Sideband")
arrow42 = ax2.arrow(0, 0, plot_total_real, plot_total_imag, shape='full', color="C4", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Total Electric Field")
arrow52 = ax2.arrow(plot_carrier_real, plot_carrier_imag, plot_usb_real, plot_usb_imag, shape='full', color="C2", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Upper Sideband")
arrow62 = ax2.arrow(plot_carrier_real+plot_usb_real, plot_carrier_imag+plot_usb_imag, plot_lsb_real, plot_lsb_imag, shape='full', color="C3", lw=2,
length_includes_head=True, head_width=.025, zorder=2, label="Lower Sideband")
ax2.set_xlabel("Real")
ax2.set_ylabel("Imaginary $i$")
ax2.set_xlim([-1.5, 1.5])
ax2.set_ylim([-1.5, 1.5])
ax2.grid()
ax2.set_title("Phase Modulation")
ax2.legend(bbox_to_anchor=(1.01, 0.6))
ax2.set_aspect('equal')
# plt.tight_layout()
def update_phase_modulation(
phi0_slider_value=phi0,
theta0_slider_value=theta0,
mod_depth_slider_value=mod_depth
):
"""
Create waves plot with synchronized cosine and sine displays.
"""
new_phi0 = np.pi / 180 * phi0_slider_value
new_theta0 = np.pi / 180 * theta0_slider_value
new_mod_depth = mod_depth_slider_value
# Arc
new_plot_carriers = carrier(phis, new_mod_depth)
new_plot_carriers_real = np.real(new_plot_carriers)
new_plot_carriers_imag = np.imag(new_plot_carriers)
# Vectors
new_plot_carrier = carrier(new_phi0, new_mod_depth)
new_plot_usb = upper_phase_sideband(new_phi0, new_theta0, new_mod_depth)
new_plot_lsb = lower_phase_sideband(new_phi0, new_theta0, new_mod_depth)
new_plot_total = new_plot_carrier + new_plot_usb + new_plot_lsb
new_plot_carrier_real = np.real(new_plot_carrier)
new_plot_carrier_imag = np.imag(new_plot_carrier)
new_plot_usb_real = np.real(new_plot_usb)
new_plot_usb_imag = np.imag(new_plot_usb)
new_plot_lsb_real = np.real(new_plot_lsb)
new_plot_lsb_imag = np.imag(new_plot_lsb)
new_plot_total_real = np.real(new_plot_total)
new_plot_total_imag = np.imag(new_plot_total)
# line1.set_xdata(new_xx0)
# line1.set_ydata(new_yy0)
arc12.set_xdata(new_plot_carriers_real)
arc12.set_ydata(new_plot_carriers_imag)
arrow12.set_data(x=0, y=0, dx=new_plot_carrier_real, dy=new_plot_carrier_imag)
arrow22.set_data(x=0, y=0, dx=new_plot_usb_real, dy=new_plot_usb_imag)
arrow32.set_data(x=0, y=0, dx=new_plot_lsb_real, dy=new_plot_lsb_imag)
arrow42.set_data(x=0, y=0, dx=new_plot_total_real, dy=new_plot_total_imag)
arrow52.set_data(x=new_plot_carrier_real, y=new_plot_carrier_imag, dx=new_plot_usb_real, dy=new_plot_usb_imag)
arrow62.set_data(x=new_plot_carrier_real+new_plot_usb_real, y=new_plot_carrier_imag+new_plot_usb_imag, dx=new_plot_lsb_real, dy=new_plot_lsb_imag)
# ax2.set_title(r"$(r, \theta)$ = " + f"({new_plot_rr0:.3f}, {180/np.pi*new_plot_theta0:.3f}"+r"$^\circ$)")
fig2.canvas.draw_idle()
return
# Create interactive widget
phi0_slider2 = FloatSlider(
value=phi0,
min=0,
max=180,
step=0.1,
description=r"$\phi_0$ [deg]:",
continuous_update=True, # Only update on release for better performance
orientation='horizontal',
readout=True,
readout_format='.3f',
)
theta0_slider2 = FloatSlider(
value=theta0,
min=0,
max=360,
step=0.1,
description=r"$\omega t$ [deg]:",
continuous_update=True, # Only update on release for better performance
orientation='horizontal',
readout=True,
readout_format='.3f',
)
mod_depth_slider2 = FloatSlider(
value=mod_depth,
min=0,
max=1,
step=0.01,
description=r"$\Gamma$:",
continuous_update=True, # Only update on release for better performance
orientation='horizontal',
readout=True,
readout_format='.3f',
)
interact(
update_phase_modulation,
phi0_slider_value=phi0_slider2,
theta0_slider_value=theta0_slider2,
mod_depth_slider_value=mod_depth_slider2,
)
plt.show()1.5Modulation Scattering Matrices¶
Recall that a scattering matrix is a generalized way of describing the interaction of several input electric fields to several output electric fields :
We can harness the power of scattering matrices to describe electric fields with different frequencies , like those created in phase or amplitude modulations.
For instance, recall the phase modulation electric field picture from (5):
In the above equation, we have sideband electric fields created by some phase modulation process with modulation depth and modulation frequency .
The input was just the raw carrier field .
The output is the carrier field, still oscillating at , and unchanged in magnitude to first order, represented by the leading 1 in the parentheses.
The upper and lower sidebands, on the other hand, are no longer oscillating at , but are oscillating at for the upper and for the lower:
In this case, we can write a scattering matrix to describe phase modulation:
1.6Relationship between Real and Imaginary quadrature and Amplitude and Phase quadrature¶
Here we dive into a general topic of quadrature definitions. There are many names for our quadratures:
Real and Imaginary
Amplitude and Phase
Cosine and Sine
What exactly do each of these represent?
What is important is that our electric field phasors require two real numbers to fully describe them.
We harness the power of complex numbers to represent the fields, and those always assume a real and imaginary basis.
However, when we start to describe the superposition of several electric fields,
the Amplitude and Phase quadrature start to become more useful, especially in these sideband modulation pictures.
What is crucial about modulations, or changes in an electric field in general, is what the modulation or change is relative to.
The carrier field typically serves as this reference.
The carrier is just a phasor, described as
where is the amplitude and is the frequency of the carrier.
When we look at the modulation equations above (5) or (13),
they are relative to the carrier phasor.
In other words, the sidebands rotate with the carrier, always changing their direction of modulation relative to the carrier.
This makes sense, because the sidebands were generated as frequency offsets from the carrier.
When we analyze general modulations on a light field, and want to describe how those modulations are affecting the field, it is convention to put the carrier light in the cosine quadrature for analysis:
where are the amplitude fluctuations, and are the phase fluctuations.
So this convention defines the relationship between amplitude and phase quadratures and cosine and sine quadrutures.
Noise and Squeezed Light Picture¶
When we think about noise on light, these can readily be described in terms of amplitude and phase modulations.
The ultimate limit for noise on light is quantum fluctuations in the electric field.
Those are usually represented as an uncertainty ball around the carrier phasor, shown below.
Squeezing is the reallocation of noise from one quadrature to another.
That is represented by the squeezing of the uncertainty ball, usually in the phase or amplitude quadratures.
This produces the “ball-and-stick” picture shown below.
The actual effect on the light measured is shown in the sine-wave oscillations seen below.

Figure from Dwyer, Mansell, McCuller Squeezing in Gravitational Wave Detectors

Figure from Wikipedia on Squeezed States of Light
1.7Modulation of a reflection off a mirror¶
Now, we want to relate the above modulations to a real system.
Suppose we have a mirror oscillating at a frequency with a small amplitude .
An electric field is incident on that mirror over a propogation distance .
What is the total reflected electric field ?
The below diagram illustrates the above situation.
We have the incident electric field on the mirror:
and the electric field reflected off and traveling back along that distance again:
Looking at Equation (2), we can identify the similarities between it and Eq. (24) above.
In short, our phase modulation term , where the 2 comes from the double-pass through the length modulation .
Following the same Jacobi-Anger math as above, we can write Eq. (24) as
Now we have three electric fields from our initial single carrier: carrier still at , but some sidebands at .
For mirror reflections, normally will be in the audio frequencies of 10 - 10000 kHz,
but in general could be any frequency.

Mirror Reflection Phase Modulation
1.8Review of Modulations¶
The key to all of the modulations above are the creation of the additional phasors at and .
These represent entirely different frequencies of light.
Typically, is the carrier frequency, which is a huge number, on the 100 terrahertz scale.
is either in the audio band of 10 - 10000 Hz or radio-frequency band of a few megahertz.
So, the frequencies are fairly close in absolute terms (100 THz ± 10 MHz is a fairly small difference.)
This helps us understand how the light carrier and sidebands interact with optical elements in a similar way.
Modulations can be created by specific interactions of the laser carrier with optical elements, including power or frequency fluctuations from the laser, thermal fluctuations of the mirror surface, “popsical” modes of mirror mounts, or seismic motion of a suspended mirror.
Anything that interacts with the laser imposes some modulations upon it, but these can be measured and controlled.
1.9Modulations in the Quadrature Picture¶
Amplitude and phase quadratures offer a convenient way of representing light. Instead of upper and lower sidebands, modulations are broken down into how they affect the carrier.
The quadrature operators can be written as a vector representing the modulations of the total electric field:
where is the amplitude quadrature and is the phase quadrature.
This representation is a bit different than our previous quadrature representation of the real (cosine) and imaginary (sine) quadratures.
This amplitude and phase quadrature representation can be well-motivated by Carlton Caves two photon formalism.
While I won’t go into this here, quantum optics textbooks, and several LIGO papers and theses give a nice overview of the two photon formalism relationship between the sideband and quadrature picture.
We can express the sideband amplitude and phase modulations from (16) and (12) in quadrature representation using (26).
We break up the total electric field into a ``static’’ component centered around the carrier frequency and a modulation, or Fourier, component at the relative signal frequencies . Expressing an electric field modulated in both intensity and frequency from Eqs (16) and (12) in quadrature representation yields
Here, we add our upper and lower sidebands from Eqs.~(16) and (12) together to produce the quadrature scalers.
For example, we recover intensity noise from Eq.~(16). Let for in Eq.~(27), and take the dot product of with itself to get power :
2Demodulations¶
Above, we’ve been calculating the effects of modulations on electric fields and power quantities for phase and amplitude modulations.
Some of the information we’ll care about for interferometers, especially relative lengths, will be caught up in the beatnote between our carrier frequency and sideband frequency .
Demodulation is the process of extracting that information.
Demodulation is simply the process of integrating a power signal over one cycle of the frequency of interest.
So if I have some power signal and I care about the signal at frequency ,
I would integrate over one full cycle of :
where is the constant DC power on the diode, and and are the power signals measured in the I-quadrature (cosine quadrature) and Q-quadrature (sine quadrature). Normally demodulations are written as an integral over all time , but if the power signal is stationary the power signals should remain the same over one cycle .
Basically, what Eq. (29) allows us to “pick-out” the signals of the total electric field quadratures incident on the photodiode at the beatnote frequency .
Imagine that the time signal .
When we multiply by , we get
Integrating the above over one cycle of will give
so we’d get the constant out of that integral.
Multiplying by similarly picks out .
In this way, demodulation allows us to reconstruct the total electric field incident on a photodetector, simply by measuring the power signal and comparing it to some oscillator at .
This can be an incredibly powerful tool, as we will see when we study Pound-Drever-Hall laser locking.
2.2Example: Length Estimation using two frequencies of light¶

Solution to Exercise 2 #
First, our input phasors for our lasers light will be
and after the propogate a distance , they will have accrued a different phase , where and :
The total electric field is
where in the last line we factor out the common phasor .
The total power is
Then, our demodulation integrals become
remember that
These results points to a clear way of reconstructing , as well as isolating .
We can get our complex phasor back by looking at :
which is the non-time-dependent part of the beatnote term of .\
By finding the argument of , that will be equal to . If we know the frequency , we can estimate :
The issue arises from phase-wrapping: if , we’ll underestimate .
One can alter to make ,
or use other methods to find the correct order-of-magnetude for that makes sense.
2.3Homodyne Detection¶
Suppose we have an interesting signal we would like to detect from some optical system,
like the small vibration of a mirror in a Michelson interferometer corresponding to gravitational wave motion.
Unfortunately, that mirror motion produces a phase modulation for us
Homodyne detection is a crucial concept for understanding the self-demodulation of laser signal incident on a photodetector.
Homodyne Angle ¶
The \textit{homodyne angle} is the static angle between the carrier phase and the signal sideband basis. The homodyne angle controls what mixed quadrature is measured on the photodetector \cite{KLMTV, Harms2003, GerryKnight2004, Enomoto2016}:
In the sideband picture, the total electric field can be written
where is some arbitrary complex modulation.
\begin{figure}[hbt!] \centering \includegraphics[width=\textwidth]{./chapters/modulations/figures/homodyne_angle_diagram.pdf} \caption[Homodyne angle diagram]{ Diagram (a) illustrates a local oscillator beating with a signal sideband with homodyne angle . Diagram (b) is a phasor diagram illustrating the homodyne angle. In this diagram, is entirely in , so the homodyne angle must be adjusted to or . } \label{fig:homodyne_angle} \end{figure}

Figure~\ref{fig:homodyne_angle} shows a basic example of homodyne detection, with local oscillator carrier and sidebands . The local oscillator phase can be adjusted by the homodyne angle
In terms of the total electric field and total power oscillations, using the quadrature representation,
Suppose that is in , as in Figure~\ref{fig:homodyne_angle}. Then the detected power oscillations at is:
and we can detect the phase modulation when the homodyne angle .

