Coherent-Feedback Squeezing with a Beam-Splitter Loop

This example implements the feedback loop to enhance field squeezing using coherent feedback described in J. Gough and S. Wildfeuer, PRA 80, 042107 (2009), see also Example VI.1 of J. Combes, et al. Advances in Physics: X, 2:3, 784-888 (2017). A degenerate parametric oscillator is concatenated with a beam splitter, and the internal wires are eliminated with the SLH feedback reduction rule.

using QuantumInputOutputusing SecondQuantizedAlgebrausing SymbolicUtilsusing Plots
# symbolic Hilbert spacehc = FockSpace(:c)# symbolic operatora = Destroy(hc, :a)# symbolic parameters@variables κ::Real ϵ::Real η::Real

The open-loop OPO has one port, while the beam splitter has two ports. We first form the unconnected network and then apply the two feedback reductions.

r = √(1 - η^2)G_opo = SLH(1, √(κ) * a, 1im * ϵ * (a'^2 - a^2))G_bs = SLH([-r η; η r], [0, 0], 0)G_unconnected = G_opo ⊞ G_bsG_loop = feedback(G_unconnected, 1 => 2, 2 => 1)
S_loop = scattering(G_loop)L_loop = jump_operator(G_loop)[1]
((-sqrt(1 - (η^2))*η*(κ^(1//2))) / ((1.0 + 0.0im) + sqrt(1 - (η^2))) + η*(κ^(1//2))) * a
H_loop = hamiltonian(G_loop)
(-ϵ)im * a * a + (0.0 - 0.5im)*((sqrt(1 - (η^2))*((1 - (η^2))*(κ^(1//2)) + (η^2)*(κ^(1//2)))*(κ^(1//2))) / ((1.0 - 0.0im) + sqrt(1 - (η^2))) + (-sqrt(1 - (η^2))*((1 - (η^2))*(κ^(1//2)) + (η^2)*(κ^(1//2)))*(κ^(1//2))) / ((1.0 + 0.0im) + sqrt(1 - (η^2)))) * a' * a + ϵim * a' * a'

The feedback loop leaves the OPO Hamiltonian unchanged but rescales the coupling operator by $l = \eta / (1 + \sqrt{1-\eta^2})$. For a numerical illustration, we evaluate the effective damping factor $l^2$ as a function of the beam-splitter transmission coefficient.

η_grid = collect(0.0:0.005:0.999)l2_grid = @. (η_grid / (1 + sqrt(1 - η_grid^2)))^2p = plot(    η_grid,    l2_grid;    lw = 2,    label = "",    xlabel = "η",    ylabel = "effective damping fraction",    grid = true,    size = (520, 320),)hline!(p, [1.0]; color = :grey, ls = :dash, label = "open loop")p

Package versions

These results were obtained using the following versions:

using InteractiveUtilsversioninfo()using PkgPkg.status(    ["QuantumInputOutput", "SecondQuantizedAlgebra", "Plots"],    mode = PKGMODE_MANIFEST,)
Julia Version 1.13.0
Commit d1c37793dd2 (2026-09-09 19:00 UTC)
Build Info:
  Official https://julialang.org release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 4 × AMD EPYC 7763 64-Core Processor
  WORD_SIZE: 64
  LLVM: libLLVM-20.1.8 (ORCJIT, znver3)
  GC: Built with stock GC
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
Environment:
  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
  JULIA_DEBUG = Documenter,Literate
  JULIA_NUM_THREADS = 1
Status `~/work/QuantumInputOutput.jl/QuantumInputOutput.jl/docs/Manifest.toml`
⌅ [861a8166] Combinatorics v1.0.2
  [d38c429a] Contour v0.6.3
⌅ [82cc6244] DataInterpolations v9.5.0
  [77a26b50] DiffEqNoiseProcess v5.36.4
  [c87230d0] FFMPEG v0.4.5
⌅ [53c48c17] FixedPointNumbers v0.8.6
  [069b7b12] FunctionWrappers v1.1.3
  [28b8d3ca] GR v0.73.27
  [1019f520] JLFzf v0.1.11
  [682c06a0] JSON v1.9.0
  [b964fa9f] LaTeXStrings v1.4.1
  [23fbe1c1] Latexify v0.16.12
  [442fdcdd] Measures v0.3.3
  [d8a4904e] MutableArithmetics v1.8.1
  [77ba4419] NaNMath v1.1.4
  [e7bfaba1] NumericalIntegration v0.3.4
  [1dea7af3] OrdinaryDiffEq v7.8.1
  [ccf2f8ad] PlotThemes v3.3.0
  [995b91a9] PlotUtils v1.5.0
  [91a5bcdd] Plots v1.41.7
  [aea7be01] PrecompileTools v1.3.4
  [18f9eda6] QuantumInputOutput v0.5.3 `~/work/QuantumInputOutput.jl/QuantumInputOutput.jl`
  [5717a53b] QuantumInterface v0.4.4
  [6e0679c1] QuantumOptics v1.2.10
  [4f57444f] QuantumOpticsBase v0.5.16
  [3cdcf5f2] RecipesBase v1.3.4
  [01d81517] RecipesPipeline v0.6.12
  [189a3867] Reexport v1.2.2
  [05181044] RelocatableFolders v1.0.1
  [ae029012] Requires v1.3.1
  [431bcebd] SciMLPublic v1.3.0
  [6c6a2e73] Scratch v1.3.0
⌅ [f7aa4685] SecondQuantizedAlgebra v0.11.0
  [992d4aef] Showoff v1.1.1
  [276daf66] SpecialFunctions v2.9.0
  [90137ffa] StaticArrays v1.9.22
  [10745b16] Statistics v1.11.5
  [2913bbd2] StatsBase v0.34.13
  [d1185830] SymbolicUtils v4.48.0
  [0c5d862f] Symbolics v7.41.1
  [8ea1fca8] TermInterface v2.0.0
  [1cfade01] UnicodeFun v0.4.1
  [41fe7b60] Unzip v0.2.0
  [2a0f44e3] Base64 v1.11.0
  [ade2ca70] Dates v1.11.0
  [f43a241f] Downloads v1.7.0
  [37e2e46d] LinearAlgebra v1.13.0
  [44cfe95a] Pkg v1.13.0
  [de0858da] Printf v1.11.0
  [3fa0cd96] REPL v1.11.0
  [9a3f8284] Random v1.11.0
  [2f01184e] SparseArrays v1.13.0
  [fa267f1f] TOML v1.0.3
  [cf7118a7] UUIDs v1.11.0
Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m`

This page was generated using Literate.jl.