Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Modulations

Syracuse University
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 EE is known as the carrier:

E=E0eiω0t\begin{align} E = E_0 e^{i \omega_0 t} \end{align}

where ω0\omega_0 is the carrier frequency, E0E_0 is the carrier amplitude, and tt is time.

1.1Phase Modulation

A phase modulation of amplitude δϕ\delta \phi at frequency ω\omega can be applied to the carrier light:

Eδϕ=E0eiϕEδϕ=E0ei(ω0t+δϕcos(ωt))\begin{align} \nonumber E_{\delta \phi} &= E_0 e^{i \phi} \\ E_{\delta \phi} &= E_0 e^{i (\omega_0 t + \delta \phi \cos(\omega t)) } \end{align}

This can be thought of as splitting the carrier power, which is always a sine wave at ω0\omega_0, off into sidebands at frequencies ω0±ω\omega_0 \pm \omega. Using the Jacobi-Anger expansion on Eq.~(2) yields:

Eδϕ=E0eiω0tn=inJn(δϕ)exp(inωt)\begin{align} E_{\delta \phi} &= E_0 e^{i \omega_0 t} \displaystyle \sum_{n=-\infty}^{\infty} i^n J_n(\delta \phi) \exp(i n \omega t) \end{align}

where JnJ_n is the nthn^{th} Bessel function of the first kind.

If we assume δϕ\delta \phi is small, then we can ignore the higher-order sidebands n2n \geq 2, and write Eq.~(3) as

Eδϕ=E0eiω0t[J0(δϕ)+iJ1(δϕ)eiωtiJ1(δϕ)eiωt]\begin{align} E_{\delta \phi} &= E_0 e^{i \omega_0 t} \left[ J_0(\delta \phi) + i J_1(\delta \phi) e^{i \omega t} - i J_{-1}(\delta \phi) e^{-i \omega t } \right] \end{align}

Finally, using J1(δϕ)=J1(δϕ)J_{-1}(\delta \phi) = -J_1(\delta \phi), J0(δϕ)1J_0(\delta \phi) \approx 1, and J1(δϕ)δϕ/2J_1(\delta \phi) \approx \delta \phi / 2, we write the final phase modulation in terms of the carrier ω0\omega_0, upper sideband ω0+ω\omega_0 + \omega and lower sideband ω0ω\omega_0 - \omega:

Eδϕ=E0eiω0t(1+iδϕ2E0eiωt+iδϕ2E0eiωt)Eδϕ=E0eiω0t(1+iδϕcos(ωt))\begin{align} E_{\delta \phi} &= E_0 e^{i \omega_0 t} \left( 1 + i \dfrac{\delta \phi}{2} E_0 e^{i \omega t} + i \dfrac{\delta \phi}{2} E_0 e^{-i \omega t} \right)\\ E_{\delta \phi} &= E_0 e^{i \omega_0 t} \left( 1 + i \delta \phi \cos(\omega t) \right) \end{align}

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,

Pδϕ=Eδϕ2=E02(1+(δϕ)22+(δϕ)24(ei2ωt+ei2ωt))PδϕE02.\begin{align} \nonumber P_{\delta \phi} &= |E_{\delta \phi}|^2 \\ \nonumber &= |E_0|^2 \left(1 + \dfrac{(\delta \phi)^2}{2} + \dfrac{(\delta \phi)^2}{4} \left( e^{i 2 \omega t} + e^{-i 2 \omega t} \right) \right) \\ P_{\delta \phi} &\approx |E_0|^2. \end{align}

The sidebands push and pull the phase of the carrier by δϕ\delta \phi, but to first order do not alter the amplitude. Figure illustrates the sideband and quadrature picture of phase modulation.

Screenshot from 2026-01-23 09-28-52.png

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):

Pδϕ=Eδϕ2Pδϕ=[E0eiω0t(1+iδϕ2E0eiωt+iδϕ2E0eiωt)][E0eiω0t(1iδϕ2E0eiωtiδϕ2E0eiωt)]Pδϕ=E02[1+(δϕ)24+(δϕ)24iδϕ2E0eiωtiδϕ2E0eiωt+iδϕ2E0eiωt+iδϕ2E0eiωt+(δϕ)24ei2ωt+(δϕ)24ei2ωt]Pδϕ=E02(1+(δϕ)22+(δϕ)24(ei2ωt+ei2ωt))\begin{align} P_{\delta \phi} &= |E_{\delta \phi}|^2\\ P_{\delta \phi} &= \left[ E_0 e^{i \omega_0 t} \left( 1 + i \dfrac{\delta \phi}{2} E_0 e^{i \omega t} + i \dfrac{\delta \phi}{2} E_0 e^{-i \omega t} \right) \right] \left[ E_0 e^{-i \omega_0 t} \left( 1 - i \dfrac{\delta \phi}{2} E_0 e^{-i \omega t} - i \dfrac{\delta \phi}{2} E_0 e^{i \omega t} \right) \right] \\ P_{\delta \phi} &= |E_0|^2 \left[ 1 + \dfrac{(\delta \phi)^2}{4} + \dfrac{(\delta \phi)^2}{4} - i \dfrac{\delta \phi}{2} E_0 e^{-i \omega t} - i \dfrac{\delta \phi}{2} E_0 e^{i \omega t} + i \dfrac{\delta \phi}{2} E_0 e^{i \omega t} + i \dfrac{\delta \phi}{2} E_0 e^{-i \omega t} + \dfrac{(\delta \phi)^2}{4} e^{i 2 \omega t} + \dfrac{(\delta \phi)^2}{4} e^{-i 2 \omega t} \right]\\ P_{\delta \phi} &= |E_0|^2 \left(1 + \dfrac{(\delta \phi)^2}{2} + \dfrac{(\delta \phi)^2}{4} \left( e^{i 2 \omega t} + e^{-i 2 \omega t} \right) \right) \end{align}

Note we still have our 2ω2\omega power oscillation here.

Adding in the second order terms in J0=1Γ24J_0 = 1 - \dfrac{\Gamma^2}{4} helps us avoid “adding power” to final term, but does not completely eliminate our issue.

Eδϕ=E0eiω0t((1(δϕ)24)+iδϕ2E0eiωt+iδϕ2E0eiωt)Pδϕ=E02(1+(δϕ)416+(δϕ)24(ei2ωt+ei2ωt))\begin{align} E_{\delta \phi} &= E_0 e^{i \omega_0 t} \left( \left(1 - \dfrac{(\delta \phi)^2}{4} \right) + i \dfrac{\delta \phi}{2} E_0 e^{i \omega t} + i \dfrac{\delta \phi}{2} E_0 e^{-i \omega t} \right) \\ \rightarrow P_{\delta \phi} &= |E_0|^2 \left(1 + \dfrac{(\delta \phi)^4}{16} + \dfrac{(\delta \phi)^2}{4} \left( e^{i 2 \omega t} + e^{-i 2 \omega t} \right) \right) \end{align}

Integrating the right hand side over one period of the 2ω2\omega oscillation eliminates the exponetial terms, yielding

12π02πPδϕd(2ωt)=E02(1+(δϕ)416)\begin{align} \dfrac{1}{2\pi} \int_0^{2\pi} P_{\delta \phi} d(2 \omega t) = |E_0|^2 \left( 1 + \dfrac{(\delta \phi)^4}{16} \right) \end{align}

which is pretty good power conservation for small δϕ\delta \phi.

1.2Frequency noise

Frequency noise is mathematically equivalent to a phase modulation. Using the definition of frequency as the time derivative of phase, dϕ/dtd\phi/dt, and the phase ϕ\phi from Eq.(2), we calculate the relationship between frequency noise and phase modulation \cite{HeinzelThesis}:

dϕdt=ddt(ω0t+δϕcos(ωt))dϕdt=ω0ωδϕsin(ωt)\begin{align} \nonumber \dfrac{d\phi}{dt} &= \dfrac{d}{dt}(\omega_0 t + \delta \phi \cos(\omega t)) \\ \dfrac{d\phi}{dt} &= \omega_0 - \omega \delta \phi \sin(\omega t) \end{align}

The frequency can be broken down into the carrier term ω0\omega_0 and the noise term δν\delta \nu, where

2πδνω=δϕ\begin{align} \dfrac{2 \pi \delta \nu}{\omega} = \delta \phi \end{align}

where δν\delta \nu 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 π/2\pi/2 for both sidebands):

Eδν=E0eiω0t(1πδνωeiωt+πδνωeiωt)\begin{align} E_{\delta \nu} &= E_0 e^{i \omega_0 t} \left( 1 - \dfrac{\pi \delta \nu}{\omega} e^{i \omega t} + \dfrac{\pi \delta \nu}{\omega} e^{-i \omega t} \right) \end{align}

Here we recall the distinction between ω0\omega_0, ω\omega, and δω\delta \omega. The carrier frequency is ω0\omega_0, this is a constant, ω0=2πc/λ=1.77×1015 rad/s\omega_0 = 2 \pi c / \lambda = 1.77 \times 10^{15}~\mathrm{rad/s} (The Advanced LIGO laser wavelength λ=1064 nm\lambda = 1064~\mathrm{nm}). The modulation frequency itself is ω\omega, this is how fast the carrier frequency changes. The frequency modulation amplitude δν\delta \nu is how much the carrier frequency changes.

1.3Amplitude modulation

An amplitude modulation of amplitude δE\delta E at frequency ω\omega can be applied to the carrier light:

EδE=E0eiω0t(1+δEE0cos(ωt))EδE=E0eiω0t(1+δE2E0eiωt+δE2E0eiωt)\begin{align} \nonumber E_{\delta E} &= E_0 e^{i \omega_0 t} \left( 1 + \dfrac{\delta E}{E_0} \cos(\omega t) \right) \\ E_{\delta E} &= E_0 e^{i \omega_0 t} \left( 1 + \dfrac{\delta E}{2 E_0} e^{i \omega t} + \dfrac{\delta E}{2 E_0} e^{-i \omega t} \right) \end{align}

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,

PδE=EδE2=E02(1+2δEE0cos(ωt)+(δE)2E02cos(ωt)2)PδEP0(1+2δEE0cos(ωt)).\begin{align} \nonumber P_{\delta E} &= |E_{\delta E}|^2 \\ \nonumber &= |E_0|^2 \left(1 + \dfrac{2 \delta E}{E_0} \cos(\omega t) + \dfrac{(\delta E)^2}{E_0^2} \cos(\omega t)^2 \right) \\ P_{\delta E} &\approx P_0 \left(1 + \dfrac{2 \delta E}{E_0} \cos(\omega t) \right). \end{align}

The sidebands push and pull the amplitude of the carrier by δE\delta E, but do not alter the phase. Figure illustrates the sideband and quadrature picture of amplitude modulation.

Screenshot 2026-01-21 at 6.56.34 PM.png

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 P0P_0, we define the relative intensity noise in terms of amplitude modulation:

δPP0=2δEE0\begin{align} \dfrac{\delta P}{P_0} &= \dfrac{2 \delta E}{E_0} \end{align}

Going back to the expression for amplitude modulation EδEE_{\delta E} Eq.(13), we can express the electric field EδPE_{\delta P} and power PδEP_{\delta E} in terms of relative intensity noise δP/P\delta P / P:

EδP=E0eiω0t(1+δP4P0eiωt+δP4P0eiωt)PδE=P0(1+δPP0cos(ωt))\begin{align} E_{\delta P} &= E_0 e^{i \omega_0 t} \left( 1 + \dfrac{\delta P}{4 P_0} e^{i \omega t} + \dfrac{\delta P}{4 P_0} e^{-i \omega t} \right)\\ P_{\delta E} &= P_0 \left(1 + \dfrac{\delta P}{P_0} \cos(\omega t) \right) \end{align}
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(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")
arrow3 = ax1.arrow(plot_carrier_real, plot_carrier_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")
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")

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=new_plot_carrier_real, y=new_plot_carrier_imag, dx=new_plot_usb_real, dy=new_plot_usb_imag)
    arrow3.set_data(x=new_plot_carrier_real, y=new_plot_carrier_imag, 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)

    # 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()
Loading...
Loading...
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(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")
arrow32 = ax2.arrow(plot_carrier_real, plot_carrier_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")
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")

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=new_plot_carrier_real, y=new_plot_carrier_imag, dx=new_plot_usb_real, dy=new_plot_usb_imag)
    arrow32.set_data(x=new_plot_carrier_real, y=new_plot_carrier_imag, 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)

    # 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()
Loading...
Loading...

1.5Modulation 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 ω\omega with a small amplitude Δx\Delta x.
An electric field Ein=E0eiω0tE_\mathrm{in} = E_0 e^{i \omega_0 t} is incident on that mirror over a propogation distance LL.
What is the total reflected electric field EreflE_\mathrm{refl}?

The below diagram illustrates the above situation.
We have the incident electric field on the mirror:

Einc=Eineik(L+Δxcos(ωt))\begin{align} E_\mathrm{inc} = E_\mathrm{in} e^{i k (L + \Delta x \cos(\omega t))} \end{align}

and the electric field reflected off and traveling back along that distance again:

Erefl=Einei2k(L+Δxcos(ωt))Erefl=E0eiω0tei2kLei2kΔxcos(ωt)\begin{align} E_\mathrm{refl} &= E_\mathrm{in} e^{i 2 k (L + \Delta x \cos(\omega t))}\\ E_\mathrm{refl} &= E_0 e^{i \omega_0 t} e^{i 2 k L} e^{i 2 k \Delta x \cos(\omega t)} \end{align}

Looking at Equation (2), we can identify the similarities between it and Eq. (18) above.
In short, our phase modulation term δϕ=2kΔx\delta \phi = 2 k \Delta x, where the 2 comes from the double-pass through the length modulation Δx\Delta x.
Following the same Jacobi-Anger math as above, we can write Eq. (18) as

=E0eiω0tei2kL(1+ikΔxeiωt+ikΔxeiωt)\begin{align} &= E_0 e^{i \omega_0 t} e^{i 2 k L} \left(1 + i k \Delta x e^{i \omega t} + i k \Delta x e^{-i \omega t} \right) \end{align}

Now we have three electric fields from our initial single carrier: carrier still at ω0\omega_0, but some sidebands at ω0±ω\omega_0 \pm \omega.
For mirror reflections, normally ω\omega will be in the audio frequencies of 10 - 10000 kHz, but in general could be any frequency.

Screenshot 2026-01-21 at 7.41.29 PM.png

Mirror Reflection Phase Modulation

1.6Review of Modulations

The key to all of the modulations above are the creation of the additional phasors at ω0+ω\omega_0 + \omega and ω0ω\omega_0 - \omega.
These represent entirely different frequencies of light.

Typically, ω0\omega_0 is the carrier frequency, which is a huge number, on the 100 terrahertz scale.
ω\omega 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.7Modulations 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 E\vec{E} representing the modulations of the total electric field:

E=(E1E2).\begin{align} \vec{E} = \begin{pmatrix} E_1 \\ E_2 \end{pmatrix}. \end{align}

where E1E_1 is the amplitude quadrature and E2E_2 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 ()[#eq:intensity_modulation] and ()[#eq:frequency_modulation] in quadrature representation using ()[#eq:quadrature_vector].

We break up the total electric field Etot=E+e(ω)\vec{E}_{tot} = \vec{E} + \vec{e}(\omega) into a ``static’’ component E\vec{E} centered around the carrier frequency ω0\omega_0 and a modulation, or Fourier, component e(ω)\vec{e}(\omega) at the relative signal frequencies ω0±ω\omega_0 \pm \omega. Expressing an electric field modulated in both intensity and frequency Etot\vec{E}_{tot} from Eqs (16) and (12) in quadrature representation yields

Etot=E+e(ω)E=E0eiω0t(10)e(ω)=E0eiω0teiωt[2πδνω(01)+δP2P(10)]\begin{align} \vec{E}_{tot} &= \vec{E} + \vec{e}(\omega) \\ \vec{E} &= E_0 e^{i \omega_0 t} \begin{pmatrix} 1 \\ 0 \end{pmatrix} \\ \vec{e}(\omega) &= E_0 e^{i \omega_0 t} e^{i \omega t} \Bigg[ \dfrac{2 \pi \delta \nu}{\omega} \begin{pmatrix} 0 \\ 1 \end{pmatrix} + \dfrac{\delta P}{2 P} \begin{pmatrix} 1 \\ 0 \end{pmatrix} \Bigg] \end{align}

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 δν0\delta \nu \rightarrow 0 for e(ω)\vec{e}(\omega) in Eq.~(21), and take the dot product of Etot\vec{E}_{tot} with itself to get power PδPP_{\delta P}:

PδP=E+e(ω)2=E2+Ee(ω)+Ee(ω)+e(ω)2E02(1+δP2Peiωt+δP2Peiωt)(10)(10)PδP=P0(1+δPPcos(ωt))\begin{align} \nonumber P_{\delta P} &= \left| \vec{E} + \vec{e}(\omega) \right|^2 \\ \nonumber &= \left| \vec{E} \right|^2 + \vec{E}^* \cdot \vec{e}(\omega) + \vec{E} \cdot \vec{e}^*(\omega) + \left|\vec{e}(\omega)\right|^2 \\ \nonumber &\approx E_0^2 \left( 1 + \dfrac{\delta P}{2 P} e^{i \omega t} + \dfrac{\delta P}{2 P} e^{-i \omega t} \right) \begin{pmatrix} 1 & 0 \end{pmatrix} \cdot \begin{pmatrix} 1 \\ 0 \end{pmatrix} \\ P_{\delta P} &= P_0 \left( 1 + \dfrac{\delta P}{P} \cos(\omega t) \right) \end{align}

The result from Eq.~(22) matches Eq.~(16).

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 ω0\omega_0 and sideband frequency ω0±ω\omega_0 \pm \omega.
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 P(t)P(t) and I care about the signal at frequency ω\omega, I would integrate over one full 2π2\pi cycle of ω\omega:

PDC=12π02πP(t)d(ωt)PI=12π02πP(t)cos(ωt)d(ωt)PQ=12π02πP(t)sin(ωt)d(ωt)\begin{align} P_\mathrm{DC} &= \dfrac{1}{2 \pi} \int_0^{2\pi} P(t) d(\omega t)\\ P_I &= \dfrac{1}{2 \pi} \int_0^{2\pi} P(t) \cos(\omega t) d(\omega t)\\ P_Q &= \dfrac{1}{2 \pi} \int_0^{2\pi} P(t) \sin(\omega t) d(\omega t)\\ \end{align}

where PDCP_\mathrm{DC} is the constant DC power on the diode, and PIP_I and PQP_Q 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 tt, but if the power signal is stationary the power signals should remain the same over one cycle ωt[0,2π]\omega t \in [0, 2\pi].

Basically, what Eq. (23) allows us to “pick-out” the signals of the total electric field quadratures incident on the photodiode at the beatnote frequency ω\omega.
Imagine that the time signal P(t)=2PIcos(ωt)+2PQsin(ωt)P(t) = 2 P_I \cos(\omega t) + 2 P_Q \sin(\omega t).
When we multiply by cos(ωt)\cos(\omega t), we get

P(t)cos(ωt)=2PIcos2(ωt)+2PQsin(ωt)cos(ωt)P(t) \cos(\omega t) = 2 P_I \cos^2(\omega t) + 2 P_Q \sin(\omega t)\cos(\omega t)

Integrating the above over one cycle of ωt\omega t will give

12π02πcos2(ωt)d(ωt)=12 12π02πsin(ωt)cos(ωt)d(ωt)=0\dfrac{1}{2 \pi} \int_0^{2\pi} \cos^2(\omega t) d(\omega t) = \dfrac{1}{2}\\~\\ \dfrac{1}{2 \pi} \int_0^{2\pi} \sin(\omega t) \cos(\omega t) d(\omega t) = 0

so we’d get the constant PIP_I out of that integral.
Multiplying by sin(ωt)\sin(\omega t) similarly picks out PQP_Q.

In this way, demodulation allows us to reconstruct the total electric field incident on a photodetector, simply by measuring the power signal P(t)P(t) and comparing it to some oscillator at ω\omega.
This can be an incredibly powerful tool, as we will see when we study Pound-Drever-Hall laser locking.

2.1General Modulation and Demodulation

Screenshot 2026-01-24 at 12.04.54 AM.png

General modulation terms

Screenshot 2026-01-24 at 12.06.43 AM.png

General demodulation

2.2Example: Length Estimation using two frequencies of light

Screenshot 2026-01-24 at 10.26.13 PM.png
Solution to Exercise 2 #

First, our input phasors for our lasers light will be

Ein1=E1eiω0tEin2=E2ei(ω0+ω)t\begin{align*} E_{in1} &= |E_1|e^{i \omega_0 t}\\ E_{in2} &= |E_2|e^{i (\omega_0 + \omega) t} \end{align*}

and after the propogate a distance LL, they will have accrued a different phase ϕi=kiL\phi_i = - k_i L, where k1=ω0/ck_1 = \omega_0 / c and k2=(ω0+ω)/ck_2 = (\omega_0 + \omega) / c:

E1=Ein1eik1L=E1eiω0teiω0L/cE2=Ein2eik2L=E2ei(ω0+ω)tei(ω0+ω)L/c\begin{align*} E_1 &= E_{in1} e^{-i k_1 L} = |E_1|e^{i \omega_0 t} e^{-i \omega_0 L / c}\\ E_2 &= E_{in2} e^{-i k_2 L} = |E_2|e^{i (\omega_0 + \omega) t} e^{-i (\omega_0 + \omega) L / c} \end{align*}

The total electric field is

Etotal=E1+E2Etotal=E1eiω0teiω0L/c+E2ei(ω0+ω)tei(ω0+ω)L/cEtotal=eiω0(tL/c)(E1+E2eiω(tL/c))\begin{align*} E_\mathrm{total} &= E_1 + E_2\\ E_\mathrm{total} &= |E_1|e^{i \omega_0 t} e^{-i \omega_0 L / c} + |E_2|e^{i (\omega_0 + \omega) t} e^{-i (\omega_0 + \omega) L / c}\\ E_\mathrm{total} &= e^{i \omega_0 (t - L / c)} ( |E_1| + |E_2|e^{i \omega (t - L / c)} ) \end{align*}

where in the last line we factor out the common phasor eiω0(tL/c)e^{i \omega_0 (t - L / c)}.

The total power is

Ptotal=E1+E22Ptotal=(eiω0(tL/c)(E1+E2eiω(tL/c)))(eiω0(tL/c)(E1+E2eiω(tL/c)))Ptotal=(E1+E2eiω(tL/c))(E1+E2eiω(tL/c))Ptotal=E12+E22+2E1E2cos[ω(tLc)]\begin{align*} P_\mathrm{total} &= |E_1 + E_2|^2\\ P_\mathrm{total} &= \left(e^{i \omega_0 (t - L / c)} ( |E_1| + |E_2|e^{i \omega (t - L / c)} ) \right) \left( e^{-i \omega_0 (t - L / c)} ( |E_1| + |E_2|e^{-i \omega (t - L / c)} ) \right)\\ P_\mathrm{total} &= \left( |E_1| + |E_2|e^{i \omega (t - L / c)} \right) \left( |E_1| + |E_2|e^{-i \omega (t - L / c)} \right)\\ P_\mathrm{total} &= |E_1|^2 + |E_2|^2 + 2 |E_1||E_2|\cos \left[ \omega \left(t - \dfrac{L}{c} \right) \right] \end{align*}

Then, our demodulation integrals become

PDC=12π02πPtotald(ωt)PDC=E12+E22 PI=12π02πPtotalcos(ωt)d(ωt)PI=E1E2cos[Lωc] PQ=12π02πPtotalsin(ωt)d(ωt)PQ=E1E2sin[Lωc]\begin{align} P_\mathrm{DC} &= \dfrac{1}{2 \pi} \int_0^{2\pi} P_\mathrm{total} d(\omega t) \\ P_\mathrm{DC} &= |E_1|^2 + |E_2|^2\\~\\ P_I &= \dfrac{1}{2 \pi} \int_0^{2\pi} P_\mathrm{total} \cos(\omega t) d(\omega t) \\ P_I &= |E_1| |E_2| \cos\left[ \dfrac{L \omega}{c} \right] \\~\\ P_Q &= \dfrac{1}{2 \pi} \int_0^{2\pi} P_\mathrm{total} \sin(\omega t) d(\omega t) \\ P_Q &= |E_1| |E_2| \sin\left[ \dfrac{L \omega}{c} \right] \\ \end{align}

remember that cos(A+B)=cos(A)cos(B)sin(A)sin(B)\cos(A + B) = \cos(A) \cos(B) - \sin(A) \sin(B)

These results points to a clear way of reconstructing PtotalP_\mathrm{total}, as well as isolating LL.
We can get our complex phasor PtotalP_\mathrm{total} back by looking at PI+iPQP_I + i P_Q:

PI+iPQ=E1E2exp[iLωc]\begin{align} P_I + i P_Q = |E_1| |E_2| \exp\left[ i \dfrac{L \omega}{c} \right] \end{align}

which is the non-time-dependent part of the beatnote term of PtotalP_\mathrm{total}.\

By finding the argument θ\theta of PI+iPQP_I + i P_Q, that will be equal to Lωc\dfrac{L \omega}{c}. If we know the frequency ω\omega, we can estimate LL:

L=cωarg[PI+iPQ]L = \dfrac{c}{\omega} \arg[P_I + i P_Q]

The issue arises from phase-wrapping: if Lωc>2π\dfrac{L \omega}{c} > 2\pi, we’ll underestimate LL.
One can alter ω\omega to make Lωc<2π\dfrac{L \omega}{c} < 2\pi, or use other methods to find the correct order-of-magnetude for LL that makes sense.

2.3Homodyne Angle