AISim gravimeter studies¶
This document explains the AISim simulation studies in qgrav, what they mean scientifically, and what they do not claim.
v1.0 update: the
gravity_sweepandvibration_sensitivity_sweepstudies now have a fully simulated mode (gravity_propagation: true) in which the gravity phase emerges from a ballistic atom trajectory under a chirped Raman laser. A newmulti_drop_cyclemodel simulates a full N-drop gravimeter measurement cycle. See section 6 below.
1. Why these studies exist¶
The project now has three complementary lanes:
- Signal-processing lane
- virtual interferometer I/Q data
- baseline vs improved estimators
-
PSD / Allan deviation / reports
-
Real-data gravimetry lane
- superconducting gravimeter residual data
-
gap checks, PSD, Allan deviation, long-term drift/stability summaries
-
AISim gravimeter-study lane
- atom-optics simulation studies that are closer to light-pulse gravimeter physics
This AISim stage moves the project from a generic atom-light demo toward a gravimeter-relevant software study.
2. The three studies in this stage¶
2.1 Mach-Zehnder phase scan¶
Config example:
- configs/example_aisim_phase_scan.yaml
Model name:
- mach_zehnder_phase_scan
What is simulated directly in AISim:
- a three-pulse sequence using SpatialSuperpositionTransitionPropagator
- first beam splitter pulse
- free evolution for time T
- mirror pulse
- free evolution for time T
- final beam splitter pulse with a configurable phase_scan
What is reported:
- output-port populations (port 2, port 3)
- differential signal
- fitted fringe visibility
- fitted phase offset
- a fit quality score (R²)
Why it matters: - this is the closest study in the repo to a real light-pulse atom interferometer fringe measurement - it shows whether the selected pulse/ensemble settings produce a usable interferometer signal
What it does not claim: - it is still a compact study, not a full field gravimeter digital twin - it does not include every systematic effect of a deployed absolute gravimeter
2.2 Gravity sweep¶
Config example:
- configs/example_aisim_gravity_sweep.yaml
Model name:
- gravity_sweep
What it does:
- keeps the AISim three-pulse sequence for pulse-transfer/contrast behavior
- maps gravity g to interferometer phase using the standard Mach-Zehnder scaling
In other words, this is a hybrid study: - pulse sequence + imperfect populations: AISim - gravity-induced phase law: analytical gravimeter model
Why this hybrid is used: - it is honest and practical - it gives a gravimeter-relevant sweep now, without pretending AISim alone already includes every deployed-gravimeter effect end-to-end in this repo
What is reported: - gravity values - total phase used for each gravity point - output-port populations - differential / normalized differential signal - mid-fringe slope near the operating point
What it means: - this shows how sensitive the simulated interferometer output is to small gravity changes
2.3 Vibration sensitivity sweep¶
Config example:
- configs/example_aisim_vibration_sweep.yaml
Model name:
- vibration_sensitivity_sweep
What it does: - uses the same hybrid gravimeter idea - adds a sinusoidal reference-mirror motion model - converts that mirror motion into interferometer phase using the three-pulse discrete phase response
The phase model used is the standard pulse-time approximation:
- pulse times at 0, T, 2T
- vibration phase from the mirror positions at those pulse times
What is reported: - vibration amplitude sweep - induced vibration phase - equivalent gravity error - output-port populations and differential signal
Why it matters: - vibration is one of the most important practical limitations in real atom gravimeters - this gives you a software-only way to study vibration sensitivity before any hardware exists
What it does not claim: - it is not a full seismic/isolation model - it is a clean first-order sensitivity study
3. How to interpret the study types¶
full_aisim_three_pulse_sequence¶
This means the three-pulse interferometer sequence itself is simulated directly with AISim.
hybrid_aisim_plus_analytic_gravity_phase¶
This means: - AISim handles the pulse-transfer / atom-optics part - the gravity phase is imposed analytically using the standard Mach-Zehnder gravimeter scaling
hybrid_aisim_plus_analytic_vibration_phase¶
This means: - AISim handles the pulse-transfer / atom-optics part - the vibration phase is imposed analytically from the mirror-motion phase response of a three-pulse interferometer
These labels are intentionally explicit so the report stays scientifically honest.
4. Recommended thesis/report wording¶
A safe and accurate way to describe this stage is:
The project integrates AISim into a software-first gravimeter R&D platform and implements three gravimeter-relevant studies: a full three-pulse Mach-Zehnder phase scan in AISim, a hybrid gravity sweep combining AISim pulse-transfer effects with the standard light-pulse gravimeter phase law, and a hybrid vibration sensitivity sweep using the discrete three-pulse vibration phase response.
A shorter version is:
The simulation layer now goes beyond Rabi oscillations and includes gravimeter-relevant phase, gravity, and vibration studies.
5. What should come next after this stage¶
The best next upgrades are:
- add run comparison across the three AISim studies
- add frequency sweeps for vibration sensitivity, not just amplitude sweeps
- add wavefront / beam-size / temperature sensitivity sweeps using AISim inputs
- compare synthetic stability summaries against the real gravimetry data lane
That is the path from a strong thesis-quality project toward a more publishable methodology study.
6. v1.0 - Fully simulated and multi-drop studies¶
The v0.x version of this document above describes a hybrid gravity sweep in which AISim handles the pulse-transfer / atom-optics part and the gravity phase is imposed analytically through k_eff * g * T^2. In v1.0 that limitation has been removed. The same model name (gravity_sweep) can now be run in either mode:
simulation:
enabled: true
backend: aisim
model: gravity_sweep
gravity_propagation: false # default = hybrid (original behaviour)
vs
simulation:
enabled: true
backend: aisim
model: gravity_sweep
gravity_propagation: true # v1.0 = gravity phase emerges from the simulation
6.1 Gravity sweep, fully simulated (gravity_propagation: true)¶
What is simulated directly:
- A three-pulse sequence using
SpatialSuperpositionTransitionPropagator(same as the hybrid path). - Between pulses, atoms are propagated by a new
GravityFreePropagatorthat performs exact ballistic kinematics under uniformg:z(t+dt) = z + v_z·dt − ½·g·dt²,v_z(t+dt) = v_z − g·dt. An optional linear gravity gradientγ·(z − z_ref)is supported. - The Raman laser is frequency-chirped at
α = −k_eff · gravity_center_m_s2so that, for an atom co-falling with the central gravity value, the velocity-induced Doppler shift cancels (δ = −v_z·k_eff + α·t ≈ 0). - The locally patched
TwoLevelTransitionPropagatoruses the physically correct integrated laser phaseφ_imprint(t₀) = −k_eff·z(t₀) + ½·α·t₀²instead of the upstreamδ·t₀(which double-counts gravity and chirp phases when the detuning is time-varying).
What is reported (same keys as the hybrid path):
- gravity values, output-port populations, differential / normalized differential signal, mid-fringe slope.
What is different:
study_scope_categoryis nowFULLY_SIMULATED(green panel in the report).truth_checksno longer asserts an exact match to the analytical phase formula; instead it asserts that the fringe has reasonable visibility (> 0.3) and that the scope was correctly classified.- A small per-sweep empirical calibration (
_calibrate_gravity_phase_offset) removes a residual pulse-timing offset by running one extra fringe scan atg = gravity_center_m_s2. The cost is O(1) per sweep. - Cross-validation tests verify that the simulated fringe matches the hybrid fringe within atol = 0.15 on populations and atol = 0.30 on the normalized differential signal. The remaining mismatch is a real physical difference: finite Raman pulse durations introduce τ-dependent residual detunings during pulses that the analytical formula ignores. The simulated mode captures this; the hybrid mode does not.
6.2 Vibration sensitivity sweep, fully simulated (gravity_propagation: true)¶
Same logic as above: the AISim pulse sequence is run with GravityFreePropagator and a chirped Wavevectors. The mirror motion is added as a phase scan on the final beamsplitter, in one of two modes selected by vibration_model:
"sinusoidal"(default) — the classic amplitude-axis sweep: a sinusoidal mirror displacement of increasing amplitude, phase per point from the analytic second difference."time_domain"— a synthesized Peterson NLNM/NHNM displacement record drives the sequence: each ofn_shotsshots samplesz(t_i), z(t_i+T), z(t_i+2T)from one continuous series (the same recipe the multi-drop campaign uses), and the realized per-shot phase noise is truth-checked against the frequency-domain Cheinet budget∫S_a·|H_a|²dfcomputed on the same effective PSD — an end-to-end numerical validation of the transfer function (observed ratio 0.92–1.13 across seeds).
6.3 Multi-drop measurement cycle (multi_drop_cycle)¶
This is a new study model, configured by
simulation:
enabled: true
backend: aisim
model: multi_drop_cycle
n_drops: 100
cycle_time_s: 1.0
gravity_true_m_s2: 9.81
gravity_propagation: true
detection_noise_enabled: true
n_detected_per_drop: 1000
servo_enabled: true
servo_gain: 0.5
What it simulates:
- N independent drops at a 1/T_cycle cadence.
- Each drop creates a fresh atom ensemble (
seed = base_seed + i + 1) so the per-drop ensemble noise is genuinely uncorrelated. - Each drop runs a full three-pulse Mach-Zehnder sequence (in either fully simulated or hybrid mode).
- Detection (projection) noise with σ = 1/√N_detected is added to each port population.
- An optional digital integrator servo adjusts the phase bias between drops to keep
P₃ ≈ 0.5(mid-fringe). - A linear mid-fringe inversion converts each
P₃into a gravity estimateg_est = g_setpoint + (P₃ − 0.5) / fringe_slope.
What is reported:
g_estimates_m_s2- one estimate per drop.timestamps_s- equispaced atcycle_time_s.mean_g_m_s2,std_g_m_s2,mean_minus_true_m_s2.allan_taus_s,allan_dev_m_s2- overlapping Allan deviation across octave averaging windows.port_3_raw,port_3_noisy- diagnostics for the readout chain.study_scope_category=FULLY_SIMULATEDwhengravity_propagation: true.
Why it matters:
- This is the closest the platform comes to simulating a full gravimeter measurement campaign.
- Allan deviation is the standard sensitivity figure of merit for atom gravimeters; here it can now be computed end-to-end from a microscopic ensemble simulation, with realistic detection noise and (optionally) a closed-loop servo.
- The servo demonstrates that an integrator loop can lock the operating point and that the resulting g-estimate trajectory is unbiased (truth check:
|mean(g) − g_true| < 1e-5).
Later releases lifted the original limitations:
- Drop-to-drop seismic correlation shipped in v1.1 (
correlated_vibration: true): one continuous Peterson NLNM/NHNM series spans the campaign and every drop samples its three pulse times from it. - A PID servo with anti-windup (integrator clamp) is available via
servo_type: pidalongside the simple integrator. fit_visibility: truefits the fringe contrast from a calibration scan and uses it in the P₃ → g inversion instead of assuming unity.
Still open: non-linear servo extensions beyond the clamped PID.
6.4 Time-domain vibration noise (generate_vibration_timeseries)¶
Not a top-level study model - a building block. Given a duration, sample rate, and Peterson model name (NLNM or NHNM), this generator produces a realistic acceleration time-series whose PSD matches the chosen model, with an optional second-order high-pass isolation filter H²(f) = f⁴/(f² + f_c²)². Velocity and displacement time-series are derived by frequency-domain integration.
This generator now feeds two consumers: the multi-drop campaign's correlated seismic vibration (correlated_vibration: true, v1.1) and the vibration sweep's vibration_model: "time_domain" mode (see §6.2), where the MZ sequence consumes z(0), z(T), z(2T) from the synthesized series instead of an analytical sinusoid and the realized phase noise is truth-checked against the integrated Cheinet budget.
6.5 AC Stark / light shift (single_photon_detuning_hz)¶
TwoLevelTransitionPropagator and SpatialSuperpositionTransitionPropagator accept an optional single_photon_detuning_hz. When non-zero, the two-photon Raman detuning gains the AC Stark contribution Ω_eff² / (4·Δ), where Ω_eff is the position-dependent effective Rabi frequency from the Gaussian beam profile and Δ = 2π·single_photon_detuning_hz. This is wired into _run_mach_zehnder_sequence so any AISim study can be re-run with light-shift effects enabled.
6.6 Wavefront aberrations (_build_wavefront)¶
_build_wavefront(wavefront_zernike_coeffs, wavefront_radius_m) constructs an AISim Wavefront from a dictionary of Zernike coefficients (Wyant ordering by default). When passed to _run_mach_zehnder_sequence, the wavefront imprints a position-dependent phase on each of the three pulses; thermal-velocity-driven drift between pulses makes the wavefront contribution per-atom-non-cancelling, which reduces ensemble visibility and shifts the operating point.
6.7 Projection-noise-limited study (projection_noise, v1.5)¶
With projection_noise: true in the multi-drop block, each drop's readout
draws the detected excited-state count from k ~ Binomial(N_det, P)
(N_det = n_detected_per_drop, seeded from the run's RNG streams), so the
quantum-projection-noise floor emerges from single-atom statistics
instead of being injected as a configured Gaussian σ_P. Composition
order: the binomial draw happens first (it is the measurement physics);
an explicit technical detection_sigma_p adds on top of P̂ = k/N_det.
The legacy default Gaussian σ = 1/√N draw is skipped while the flag is
on — it is the Gaussian approximation of the same physics and keeping both
would double-count QPN.
Analytic cross-check at mid-fringe (contrast C, inversion slope ½·C·k_eff·T²):
σ_P = sqrt(P(1−P)/N_det) = 1/(2·sqrt(N_det)) at P = 1/2
σ_φ = σ_P / (C/2) = 1/(C·sqrt(N_det))
σ_g = σ_φ / (k_eff·T²) ; ASD = σ_g · sqrt(T_c)
Measured (tests/test_projection_noise.py, 2000 drops, N_det = 10⁴,
T = 0.26 s, all technical noise off): predicted σ_g = 9.18×10⁻⁹ m/s²,
measured per-drop σ_g = 9.20×10⁻⁹ m/s² — 0.2 % agreement — with the
first Allan point at 9.14×10⁻⁹ m/s² and white-noise averaging beyond.
Quadrupling N_det halves the floor as expected. Off by default; the
flag is recorded in the result/report and round-trips through the GUI's
multi-drop noise-budget section.
7. Recommended thesis/report wording (v1.0)¶
A safe and accurate way to describe the v1.0 simulation layer:
qgrav's simulation core integrates a locally patched AISim with a self-consistent emergent-gravity model. Atoms propagate under a
GravityFreePropagatorbetween Raman pulses; a chirped Raman laser cancels the common gravity Doppler. The propagator's matrix elements use the time-integrated laser phase−k_eff·z(t₀) + ½·α·t₀²so that the Mach-Zehnder combination yields the standardk_eff·(g − g_chirp)·T²gravity phase from first principles, rather than imposing it through a closed-form formula. A multi-drop measurement cycle with detection noise and an optional fringe-locking servo produces an Allan-deviation time series, providing an end-to-end software analogue of a deployed atom gravimeter.
A shorter version:
The simulation layer now derives the gravity phase from a ballistic atom trajectory under a chirped Raman laser, rather than injecting it analytically, and includes a multi-drop measurement-cycle simulator with realistic detection noise and Allan-deviation analysis.