Rabi oscillations with static intensity noise
In this example we simulate Rabi oscillations of a single two-level atom driven by a resonant field whose Rabi frequency fluctuates between shots due to static (shot-to-shot) intensity noise.
The Rabi frequency is modeled as a random parameter with a specified mean value and standard deviation, and we monitor the excited-state population over many trajectories.
using AtomTwin
using StatsBase
using PlotsParameters
Ω = Parameter(:Ω, 2π * 0.5e6; std = 2π * 0.05e6) # Rabi frequency (rad/s)
pulse_duration = 10e-6 # Total pulse duration (s)
dt = 5e-9 # Time step (s)System construction
We construct a simple two-level atom with states |g⟩ and |e⟩ and add a resonant drive with a shot-to-shot fluctuating Rabi frequency.
g, e = Level("g"), Level("e")
atom = Atom(; levels = [g, e])
display(atom)
system = System(atom)
coupling = add_coupling!(system, atom, g => e, Ω; active = true)Build sequence
We record the excited-state population and also register a motion detector (useful when extending the example to include motional degrees of freedom).
add_detector!(system, PopulationDetectorSpec(atom, e; name = "P_e"))
add_detector!(system, MotionDetectorSpec(atom; dims = [1, 2], name = "atom"))
seq = Sequence(dt)
@sequence seq begin
Pulse(coupling, pulse_duration)
endRun simulations
out = play(system, seq; initial_state = g, shots = 200)Plot results
The plot shows individual trajectories (red, faint) and the shot-averaged excited-state population (black), illustrating the damping due to static intensity fluctuations.
t_us = out.times .* 1e6
plt = Plots.plot(
t_us,
out.detectors["P_e"],
label = "",
xlabel = "Time (μs)",
ylabel = "Excited-state population",
title = "Rabi oscillations with static intensity noise",
linewidth = 0.2,
alpha = 0.2,
color = :red,
legend = :none,
)
Plots.plot!(
plt,
t_us,
mean(out.detectors["P_e"], dims = 2);
color = :black,
linewidth = 3,
)
pltThis page was generated using Literate.jl.