Skip to content

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_sweep and vibration_sensitivity_sweep studies 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 new multi_drop_cycle model simulates a full N-drop gravimeter measurement cycle. See section 6 below.

1. Why these studies exist

The project now has three complementary lanes:

  1. Signal-processing lane
  2. virtual interferometer I/Q data
  3. baseline vs improved estimators
  4. PSD / Allan deviation / reports

  5. Real-data gravimetry lane

  6. superconducting gravimeter residual data
  7. gap checks, PSD, Allan deviation, long-term drift/stability summaries

  8. AISim gravimeter-study lane

  9. 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.


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:

  1. add run comparison across the three AISim studies
  2. add frequency sweeps for vibration sensitivity, not just amplitude sweeps
  3. add wavefront / beam-size / temperature sensitivity sweeps using AISim inputs
  4. 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 GravityFreePropagator that performs exact ballistic kinematics under uniform g: 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_s2 so 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 TwoLevelTransitionPropagator uses 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_category is now FULLY_SIMULATED (green panel in the report).
  • truth_checks no 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 at g = 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 of n_shots shots samples z(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|²df computed 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 estimate g_est = g_setpoint + (P₃ − 0.5) / fringe_slope.

What is reported:

  • g_estimates_m_s2 - one estimate per drop.
  • timestamps_s - equispaced at cycle_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_SIMULATED when gravity_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: pid alongside the simple integrator.
  • fit_visibility: true fits 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.


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 GravityFreePropagator between 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 standard k_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.