Note
Go to the end to download the full example code.
Glauber’s coherent states: displaced vacuum, Poissonian statistics#
Roy Glauber identified the coherent states \(|\alpha\rangle\) –
eigenstates of the annihilation operator, \(\hat a|\alpha\rangle =
\alpha|\alpha\rangle\) – as the quantum states that most closely reproduce
a classical, stable-amplitude light wave: a positive Gaussian in phase
space, displaced away from the origin, whose photon number follows a
Poissonian distribution – the quantum-mechanical signature of what an
ideal, shot-noise-limited laser beam actually is.
coherent_state() constructs this
state directly in a truncated Fock basis (dimension cutoff),
for use with compute_wigner_function()
and any of the package’s other state-based quantum-optics tools. Below,
\(\alpha = 2+i\) (mean photon number \(\langle n\rangle =
|\alpha|^2 = 5\)) is used to compute both the phase-space Wigner function
\(W(x,p)\) and the photon-number distribution \(P(n) =
|\langle n|\alpha\rangle|^2\).
import matplotlib.pyplot as plt
import numpy as np
from physicskit.optics.quantum_optics import coherent_state, compute_wigner_function
A coherent state \(|\alpha\rangle\), its phase-space blob and photon statistics#
A coherent state’s Wigner function is a Gaussian bump displaced from the origin (never negative), and its photon-number distribution is Poissonian: mean and variance both equal \(|\alpha|^2\).
fig, axes = plt.subplots(1, 2, figsize=(9, 4))
axes[0].contourf(x, p, W.T, levels=40, cmap="RdBu_r")
axes[0].set_title(r"$W(x,p)$ for a displaced coherent state")
axes[0].set_xlabel("x")
axes[0].set_ylabel("p")
axes[1].bar(n, P_n)
axes[1].axvline(mean_n, color="r", ls="--", label=r"$\langle n\rangle=|\alpha|^2$")
axes[1].set_title("Poissonian photon-number distribution")
axes[1].set_xlabel("n")
axes[1].legend()
fig.tight_layout()
print(f"alpha = {alpha}, |alpha|^2 = {abs(alpha) ** 2:.4f}")
print(f"measured <n> = {mean_n:.4f} measured Var(n) = {var_n:.4f}")
print("Poissonian statistics: <n> = Var(n) = |alpha|^2, confirmed above.")
print(f"minimum of W(x,p) over the grid: {W.min():.6f} (non-negative: classical state)")

alpha = (2+1j), |alpha|^2 = 5.0000
measured <n> = 5.0000 measured Var(n) = 5.0000
Poissonian statistics: <n> = Var(n) = |alpha|^2, confirmed above.
minimum of W(x,p) over the grid: -0.000000 (non-negative: classical state)
Total running time of the script: (0 minutes 0.327 seconds)