ScenariosGenerated from the repository's scenario files and verification matrix at build time.

Scenario reference

Every bundled scenario file (138), grouped by kind. The description is the file's own header comment; the key parameters are its top-level settings. Status reads the verification matrix for the kind's module. Open in Kshana Studio opens the recorded run.

aperture-duty-cycle#

Aperture duty cycle: the navigation-versus-communications time-share a contact plan implies for a pool of steerable apertures. Takes a contact plan (a list of [[contacts]] aos_s/los_s windows, each asking for navigation or communications — the same aos_s/los_s vocabulary the passes predictor emits), an aperture count, and an ARBITRATION POLICY (navigation-priority by default, or communications-priority, or non-preemptive first-come-first-served), and reports the navigation duty, the communications duty, the idle duty, and the per-session outage — the contact time a session requested and no aperture served. An exact interval sweep over the window boundaries, so touching windows never contend and no aperture-second is double-counted; navigation, communications and idle aperture-seconds are accumulated independently and close against apertures*horizon_s. The report states the resolved policy, its full definition, and the duty and outage definitions, because a duty figure quoted without its arbitration policy is not reproducible. MODELLED scheduling arithmetic: no slew / retune / changeover time is charged when an aperture changes service or session, no data volume, buffer state, energy budget or link closure enters the decision, and the contact windows are inputs — their geometry is whatever produced them. Not a ground-segment scheduling product.

aperture-duty-cycle.toml

kind aperture-duty-cyclenot matched to a ledger module by name

Aperture duty-cycle demonstrator (ground segment & operations).

kind = "aperture-duty-cycle"
apertures = 2
arbitration = "navigation-priority"
name = "nav-1"
service = "navigation"
aos_s = 0.0
los_s = 600.0
name = "comms-1"

Open in Kshana Studio · View on GitHub

araim-reference-check#

Published ARAIM certification reference vectors: the engine's ARAIM horizontal and vertical protection levels run against the WG-C ARAIM Technical Subgroup's OWN worked numerical examples, at the tolerance (TOL_PL = 5e-2 m) those documents themselves state. Two vectors are committed as fixtures, each carrying its retrieval URL, retrieval date, source-file SHA-256 and page: the Reference Airborne Algorithm Description Document v3.1 (2019) Appendix D — self-consistent, and the acceptance vector — and the Milestone 3 Report (2016) Annex A section A.IX, the statement the research bibliographies cite. Every published input (the 10-satellite 2-constellation geometry matrix, the C_int and C_acc variance diagonals, b_nom, P_sat, P_const and the LPV-200 constant set) and every published output (VPL, HPL, EMT, sigma_v_acc, K_fa_3 and the two constellation-fault modes' sigma_3, sigma_ss_3 and b_3) is reported beside the engine's own number and their absolute difference. The protection-level equation is NOT re-solved here: the reference's mode list is handed to the engine's existing raim::araim_protection_level / araim_integrity_risk, so the bisection and the Gaussian-tail algebra under test are the engine's own; only the geometry, the sub-solutions, the detection thresholds and the published budget split are built for it. EXTERNALLY CHECKED against the 2019 vector: VPL 18.2926 m vs 18.3 m published, HPL 13.4063 m vs 13.45 m, EMT 7.2997 m vs 7.2998 m, sigma_v_acc 1.3694 m vs 1.3694 m, and all six published intermediates to within half a unit in their last printed decimal. The 2016 vector carries two internal defects the report states rather than hides — a sign typo in row 3 of G, and a K_fa_3 evaluated at 57 fault modes while the document states N_fault_max = 1 (12 modes) — so its geometry intermediates reproduce exactly while its protection levels are reported as measured discrepancies and excluded from the acceptance figure; the tolerance is never widened to absorb them. Every emitted numeric field carries a unit and a provenance class, and a transcribed figure is labelled published so it can never be mistaken for a computed one. SCOPE: only N_fault_max = 1 (single-satellite and single-constellation fault modes) is implemented, and a case whose priors require simultaneous multi-event fault subsets is REFUSED rather than silently truncated; fault detection, exclusion, the chi-square consistency check and the double-counting re-allocation step of the reference algorithm are out of scope. This reproduces a published reference algorithm's worked example — it is not a certification, an airworthiness artefact or an approval.

araim-reference-check.toml

kind araim-reference-checknot matched to a ledger module by name

The engine's ARAIM protection levels against the WG-C subgroup's OWN worked examples.

kind = "araim-reference-check"

Open in Kshana Studio · View on GitHub

attitude-budget#

3-DOF attitude & pointing error budget: the worst-case gravity-gradient disturbance torque ((3/2)(μ/R³)ΔI) and a root-sum-square pointing-error budget over named 1σ contributors (sensor noise, reaction-wheel jitter, thermal, alignment) with the dominant term, for an orbit altitude + body inertia spread. MODELLED scalar AOCS budget — a pre-hardware complement to Basilisk/42, not a control-loop/6-DoF/flexible-mode simulation.

attitude-budget.toml

kind attitude-budgetkind's ledger rows are Modelled · 0 of 1 rows validated

3-DOF attitude & pointing error budget demonstrator (pre-hardware AOCS/GNC).

kind = "attitude-budget"
altitude_km = 600.0
name = "star_tracker_noise"
sigma_arcsec = 5.0
name = "reaction_wheel_jitter"
sigma_arcsec = 8.0
name = "thermal_distortion"
sigma_arcsec = 4.0

Open in Kshana Studio · View on GitHub

body-pnt#

Positioning around any solar-system body: an orbiter or a surface lander around a central body chosen by name (Mars, the Moon, Europa, Ganymede, Titan and the rest of the solar-system catalogue), navigating with one-way pseudoranges from a small Walker navigation constellation around the body (two-body orbits with the body's own J2 secular drift, an unknown user clock) and optionally a clock-free deep-space two-way range from the Earth, whose direction and distance come from the analytic solar-system ephemeris at every epoch. Lines of sight are blocked by the body's mean sphere, and a surface user also needs the elevation mask. Per epoch: relays in view, whether the Earth is above the limb, the constellation-only GDOP and PDOP (geometric and position dilution of precision), the formal one-sigma position uncertainty with and without the Earth row, and the error of a seeded Gauss-Newton least-squares fix each way; over the run: availability, Earth visibility, median PDOP, RMS error and median formal sigma, plus the Earth-to-body light time, round trip, Shapiro delay and Sun separation at the epoch. MODELLED: the relay orbits, the noise levels and the instantaneous measurement model are modelling choices, not validated against a mission's navigation data; the body constants are the published values cited in body.rs, and the Earth geometry inherits the solar-system ephemeris labels.

europa-surface-pnt.toml

kind body-pntnot matched to a ledger module by name

Positioning a lander on Europa: the Jovian-moon case.

kind = "body-pnt"
body = "Europa"
epoch = "2027-02-19T00:00:00"
duration_s = 306822.0
step_s = 1800.0
seed = 11
kind = "surface"
lat_deg = 20.0

Open in Kshana Studio · Not yet on GitHub

mars-orbit-pnt.toml

kind body-pntnot matched to a ledger module by name

Positioning a low Mars orbiter with a Mars navigation constellation and a deep-space link.

kind = "body-pnt"
body = "Mars"
epoch = "2027-02-19T00:00:00"
duration_s = 88775.0
step_s = 300.0
seed = 7
kind = "orbiter"
altitude_km = 300.0

Open in Kshana Studio · Not yet on GitHub

campaign#

Campaign: existing scenario kinds composed into one run, with every number read from a real run of the named kind. Four sections, in any combination. PHASES: a chained mission on one shared timeline -- each phase runs one or more scenarios (for example jamming, then spoofing, then a clock in holdover with an inertial navigation system coasting beside it, then an integrity alarm, then recovery), their outputs are read into named channels (clock time error against its guard, carrier-to-noise density ratio against the tracking floor, protection level against the alert limit, position error, satellites tracking, alarm flags) by a per-kind preset or by explicit result paths, and resampled onto a common grid by zero-order hold, with phase boundaries and events; state is handed on by carry (a channel continues from the previous phase's end value), handoff (a previous phase's number written into this phase's scenario) and end_at (a phase ends at a time a run computed, such as a spoofing monitor's detection time). SWEEP: a grid over one to three dotted scenario keys of any kind (a whole-number segment indexes an array of tables, as in system.2.sisre_m), with metrics read by result path and, with runs above one, a seeded Monte Carlo ensemble at every node. MONTE_CARLO: realisation k runs at base_seed + k; each metric reports mean, standard deviation, nearest-rank 5th/50th/95th percentiles and a fixed-seed bootstrap 95% confidence interval on the mean. COMPOSE: several scenarios under shared values (one jammer's power and position written into a maritime and a road receiver), with a combined best/worst summary. The result carries a campaign hash, a digest over every member result, and a units entry for every emitted number; the interoperability exports write each member scenario that has geometry as its own file set. Composition identities are tested: a one-phase campaign reproduces the stand-alone run bit for bit, a fixed-seed ensemble is byte-stable, and on a white-frequency-noise clock the ensemble mean falls inside the reported interval with the spread matching sqrt(q_wf * tau). MODELLED: the additive carry and the zero-order hold are modelling choices, and each phase carries the label of the kind that ran it.

campaign-jam-spoof-holdover-integrity.toml

kind campaignnot matched to a ledger module by name

A chained mission: nominal, jamming, spoofing, GNSS loss with clock holdover and inertial coasting, an integrity alarm, and recovery, on one shared timeline.

kind = "campaign"
title = "Jamming, spoofing, holdover and integrity: a chained mission"
seed = 20260928
step_s = 10.0
name = "nominal"
duration_s = 600.0
seed = 42
threshold_ns = 50.0

Open in Kshana Studio · Not yet on GitHub

campaign-monte-carlo-clock-holdover.toml

kind campaignnot matched to a ledger module by name

A seeded Monte Carlo ensemble through a campaign, on a case with a closed form.

kind = "campaign"
title = "Monte Carlo: free-running clock error against its closed form"
seed = 20260928
runs = 200
seed_key = "seed"
metrics = [
seed = 42
threshold_ns = 20.0

Open in Kshana Studio · Not yet on GitHub

campaign-shared-jammer-sea-road.toml

kind campaignnot matched to a ledger module by name

Cross-domain composition: one jammer, two platforms. A ship in the Gulf of Finland (59.80 N, 24.90 E, the maritime-strait-jamming example's receiver) and a car on a Helsinki coast road (60.17 N, 24.94 E) sit under the same broadband jammer, placed at 59.80 N, 25.44 E, 30 m up (about 30 km from the ship and 50 km from the car).

kind = "campaign"
title = "One jammer, a ship and a car"
seed = 20260928
name = "jammer_power"
unit = "dBW"
value = 8.0
name = "jammer_position"
unit = "m"

Open in Kshana Studio · Not yet on GitHub

campaign-spectrum-holdover-integrity.toml

kind campaignnot matched to a ledger module by name

A chained mission driven by the L-band spectrum: a chirp jammer takes GPS L1 C/A and Galileo E1, the clock holds over, and a continuous-wave (CW) tone left on the L1 carrier keeps C/A down while E1 recovers, so the receiver falls back to Galileo and its integrity monitor runs on a Galileo-only sky.

kind = "campaign"
title = "L-band jamming from the spectrum, clock holdover and a Galileo-only fallback"
seed = 20260928
step_s = 1.0
name = "onset"
duration_s = 60.0
end_at = "timeline.bands[0].first_loss_t_s"
end_at_run = 1

Open in Kshana Studio · Not yet on GitHub

campaign-sweep-jammer-power.toml

kind campaignnot matched to a ledger module by name

A parameter sweep through a campaign: the jamming example's receiver (52 N, 4 E, GPS-like 24-satellite Walker shell) under a broadband jammer 1 km away, with the jammer's transmit power swept from -50 dBW (10 nW) to +10 dBW (10 W) in 5 dB steps. Each node is an ordinary jamming run; the campaign records, per node, the fraction of epochs with at least four satellites still tracking, the mean jammer-to-signal ratio (J/S), and the fewest satellites tracking.

kind = "campaign"
title = "Jammer power sweep: availability and J/S against transmit power"
seed = 20260928
metrics = [
name = "jammer_power"
key = "jammer.power_dbw"
unit = "dBW"
start = -50.0

Open in Kshana Studio · Not yet on GitHub

leo-focus-data-services.toml

kind campaignnot matched to a ledger module by name

LEO-PNT focus area: additional PNT data services in the navigation message.

kind = "campaign"
title = "Navigation-message service data against frame length"
seed = 20260929
name = "fit_interval"
unit = "s"
value = 300.0
label = "ephemeris-clock"
bind = { fit_interval = "message.fit_interval_s" }

Open in Kshana Studio · Not yet on GitHub

leo-focus-fused-pnt-sisre.toml

kind campaignnot matched to a ledger module by name

LEO-PNT focus area: MEO + LEO fused PNT.

kind = "campaign"
title = "Fused MEO + LEO positioning against the LEO SISRE"
seed = 20260929
metrics = [
name = "leo_sisre"
key = "system.2.sisre_m"
unit = "m"
start = 0.05

Open in Kshana Studio · Not yet on GitHub

leo-focus-indoor-uhf.toml

kind campaignnot matched to a ledger module by name

LEO-PNT focus area: indoor navigation with UHF.

kind = "campaign"
title = "Indoor LEO-PNT by band and building class"
seed = 20260929
label = "traditional-building"
metrics = [
kind = "leo-pass"
epoch = "2026-09-28T12:00:00"
duration_s = 900.0

Open in Kshana Studio · Not yet on GitHub

leo-focus-iot-eirp.toml

kind campaignnot matched to a ledger module by name

LEO-PNT focus area: low-energy positioning for the Internet of Things (IoT) and mobile.

kind = "campaign"
title = "IoT energy per fix against LEO UHF transmit power"
seed = 20260929
metrics = [
name = "uhf_eirp"
key = "satellite.0.band.0.eirp_dbw"
unit = "dBW"
start = -35.0

Open in Kshana Studio · Not yet on GitHub

leo-focus-ntn-bandwidth.toml

kind campaignnot matched to a ledger module by name

LEO-PNT focus area: 5G/6G non-terrestrial network (NTN) compatibility.

kind = "campaign"
title = "NTN positioning against reference-signal bandwidth"
seed = 20260929
metrics = [
name = "bandwidth"
key = "signal.0.bandwidth_hz"
unit = "Hz"
start = 180000.0

Open in Kshana Studio · Not yet on GitHub

leo-focus-ppp-altitude.toml

kind campaignnot matched to a ledger module by name

LEO-PNT focus area: high-accuracy positioning (precise point positioning, PPP).

kind = "campaign"
title = "PPP convergence against the altitude of a 192-satellite LEO layer"
seed = 20260929
metrics = [
name = "leo_altitude"
key = "case.0.system.0.shell.0.altitude_km"
unit = "km"
start = 500.0

Open in Kshana Studio · Not yet on GitHub

leo-resilience-gnss-jammed-leo-carries.toml

kind campaignnot matched to a ledger module by name

LEO-PNT resilience mission: GNSS jammed, LEO-PNT carries the user, integrity maintained.

kind = "campaign"
title = "GNSS jammed, LEO-PNT carries the user, integrity maintained"
seed = 20260929
step_s = 30.0
name = "nominal"
duration_s = 600.0
series = [
kind = "spectrum"

Open in Kshana Studio · Not yet on GitHub

leo-resilience-multiband-diversity.toml

kind campaignnot matched to a ledger module by name

LEO-PNT resilience by band diversity: one jammer, a four-band receiver.

kind = "campaign"
title = "LEO-PNT band diversity against an L-band barrage jammer"
seed = 20260929
metrics = [
name = "jammer_power"
key = "jammers.0.received_power_dbw"
unit = "dBW"
start = -140.0

Open in Kshana Studio · Not yet on GitHub

leo-resilience-spoof-monitors.toml

kind campaignnot matched to a ledger module by name

LEO-PNT resilience against spoofing: which monitor sees which spoofer.

kind = "campaign"
title = "Spoofing monitors against four spoofers"
seed = 20260929
name = "jump"
unit = "m"
value = 30.0
label = "l-band-only"
bind = { jump = "spoofer.offset_m" }

Open in Kshana Studio · Not yet on GitHub

leo-vertical-5g-network-timing.toml

kind campaignnot matched to a ledger module by name

LEO-PNT vertical: wireless networks, 5G/6G base-station timing.

kind = "campaign"
title = "5G base-station timing: holdover and LEO time"
seed = 20260929
step_s = 300.0
name = "gnss-lost"
duration_s = 86400.0
events = [
kind = "telecom-timing"

Open in Kshana Studio · Not yet on GitHub

leo-vertical-asset-tracking-iot.toml

kind campaignnot matched to a ledger module by name

LEO-PNT vertical: asset tracking and the Internet of Things (IoT), energy per fix.

kind = "campaign"
title = "Container tracking with LEO UHF: energy per fix along a journey"
seed = 20260929
step_s = 10.0
name = "port-hamburg"
duration_s = 480.0
series = [
kind = "leo-pass"

Open in Kshana Studio · Not yet on GitHub

leo-vertical-autonomous-vehicle.toml

kind campaignnot matched to a ledger module by name

LEO-PNT vertical: autonomous vehicles, an urban canyon with a LEO layer.

kind = "campaign"
title = "Autonomous vehicle in an urban canyon with a LEO layer"
seed = 20260929
step_s = 10.0
name = "open-road"
duration_s = 600.0
series = [
alarms = [{ channel = "position_error_m", compare = "above", threshold = 1.5 }]

Open in Kshana Studio · Not yet on GitHub

leo-vertical-critical-infrastructure-timing.toml

kind campaignnot matched to a ledger module by name

LEO-PNT vertical: critical infrastructure timing, holdover with LEO time.

kind = "campaign"
title = "Critical infrastructure timing: holdover with LEO time"
seed = 20260929
step_s = 300.0
name = "gnss-locked"
duration_s = 600.0
alarms = []
seed = 42

Open in Kshana Studio · Not yet on GitHub

leo-vertical-polar-arctic.toml

kind campaignnot matched to a ledger module by name

LEO-PNT vertical: polar and Arctic users.

kind = "campaign"
title = "Polar and Arctic users with a polar LEO layer"
seed = 20260929
step_s = 60.0
name = "tromso"
duration_s = 3600.0
series = [
alarms = [{ channel = "position_error_m", compare = "above", threshold = 3.0 }]

Open in Kshana Studio · Not yet on GitHub

leo-vertical-rail-maritime.toml

kind campaignnot matched to a ledger module by name

LEO-PNT vertical: railway and maritime, the bundled maritime and rail scenarios plus LEO.

kind = "campaign"
title = "Railway and maritime with a LEO layer"
seed = 20260929
step_s = 10.0
name = "strait-jammed"
duration_s = 1800.0
kind = "jamming"
seed = 1

Open in Kshana Studio · Not yet on GitHub

cislunar-arc-recovery#

MODELLED independent-estimator test of the cislunar arc-length observability threshold. That threshold is a RANK read on the observability matrix assembled from the ANALYTIC range Jacobian rows and the ANALYTIC variational state-transition matrix, and its square-root-information-filter cross-check folds those same rows — a consistency check between two numerical machines, not corroboration. This kind supplies the missing arbiter: a batch least-squares estimator that actually RECOVERS the chief's initial state from simulated measurements, with the measurement partials taken as CENTRAL FINITE DIFFERENCES of the composed forward model. It calls no analytic Jacobian row, no variational STM, no singular-value or eigen decomposition, no rank tolerance and no square-root information filter — a source-text guard in tests/cislunar_arc_recovery_reference.rs makes that enforceable — while the dynamics (the same RK4 CR3BP flow), the initial conditions (the same differential-corrected constellation), the scalar observable and the epoch grid are shared deliberately and named in the emitted independence block, because two analyses of one physical problem must agree about the physics to be comparable. Two criteria, each swept over five decades of its own bound: NOISE-FREE RECOVERY (every seeded trial's final state error at most recovery_factor times its a-priori displacement — the rank analogue, with no singular-value tolerance in it) and MONTE-CARLO ESTIMABILITY (the measured RMS position error over a seeded noise ensemble below a stated bound — the estimability analogue, measured rather than predicted). Supports the planar four-state and the spatial six-state, the DRO / L2 halo / L2 NRHO families, range and range-rate observables, and a Moon-centred polar parameterisation in which the transformation is applied to the STATE and the forward model re-differenced there. MEASURED on the published planar DRO grid: the estimator recovers the four-state from 0.782609 h against the rank criterion's 2.086957 h at rel_tol 1e-6 (ratio 0.375) — the rank threshold is NOT corroborated as a recoverability boundary — while the measured estimability boundary lands in the same grid cell as the formal one, 5.739130 h, and the measured error curve reproduces the formal 1-sigma over 21 arc lengths to a geometric-mean ratio of 0.98. MODELLED: the constellation design, the epoch grid, the single tracked link, the displacement magnitude, the measurement sigma and the two stated bounds. Not a certified navigation-performance product.

cislunar-arc-recovery.toml

kind cislunar-arc-recoverynot matched to a ledger module by name

Independent-estimator test of the cislunar arc-length observability threshold (R6, paper B).

kind = "cislunar-arc-recovery"

Open in Kshana Studio · View on GitHub

cislunar-observability#

MODELLED planar cislunar constellation observability (P6): tracks a four-spacecraft differential-corrected planar-DRO constellation with inter-satellite ranging and reports how much of a spacecraft's four-state [x,y,ẋ,ẏ] the arc makes observable. Emits (1) the rank-vs-arc-length table for a single range-only link — instantaneously rank-1, growing toward the full four-state as the arc extends (P6 Table 1); (2) the observability-Gramian eigen-spectrum + condition number over the arc; (3) the range-only-vs-range+range-rate instantaneous-rank comparison (the Doppler design lever) plus the range-only-singular / range+rate-defined GDOP reporting; and (4) an independent SRIF cross-validation whose posterior covariance turns finite / well-conditioned exactly at the arc where the observable rank reaches four. VALIDATED core: the observable rank is a rank-revealing singular-value threshold cross-checked against the Gramian eigen-rank; the eigen-spectrum obeys the spectral invariants (trace=Σλ, det=Πλ, Frobenius²=Σλ²); the variational STM is the finite-difference-validated CR3BP STM; the range/range-rate Jacobian rows are finite-difference-validated analytic partials (cross-checked against the crate's 3-D range-rate observable); the four initial conditions are differential-corrected planar DROs that close to a tight periodicity residual and are retrograde; the rank transition is cross-validated against the crate's square-root information filter (posterior covariance finite exactly at full rank, cond(P)=cond(OᵀO)); a rank-deficient snapshot is flagged GDOP-undefined (fim condition=inf), never a bogus finite value — the same singular-geometry guard pvt::solve_spp applies. MODELLED: the constellation design (DRO perilune amplitudes and phases) and the specific rank progression it produces. Not a certified navigation-performance product.

cislunar-observability.toml

kind cislunar-observabilitynot matched to a ledger module by name

Planar cislunar constellation observability over a tracking arc (P6).

kind = "cislunar-observability"

Open in Kshana Studio · View on GitHub

clock#

Clock holdover vs spec; optional Monte-Carlo ensemble (runs > 1).

clock-ensemble.toml

kind clocknot matched to a ledger module by name

Monte Carlo ensemble of the clock-holdover scenario.

seed = 42
threshold_ns = 20.0
runs = 200
step_s = 10.0
duration_s = 7200.0
windows = [
id = "optical-sr-lattice"
provenance = "Strontium optical lattice clock, space-oriented goal sigma_y(1s)=1e-15 (Origlia/Schiller/Bongs et al., arXiv:1503.08457); q_wf=sigma_y(1s)^2; ground-demonstrator maturity, not flown; flicker floor modeled at sigma_y=1e-16"

Open in Kshana Studio · View on GitHub

clock-holdover.toml

kind clocknot matched to a ledger module by name

Kshana reference scenario: 2 h run, 10 min GNSS sync then ~1.8 h denied. Clock white-FM noise calibrated to published sigma_y(1 s): q_wf = sigma_y(1s)^2. Validated against simulated Allan deviation in tests/calibration.rs (~2%).

seed = 42
threshold_ns = 20.0
step_s = 10.0
duration_s = 7200.0
windows = [
id = "optical-sr-lattice"
provenance = "Strontium optical lattice clock, space-oriented goal sigma_y(1s)=1e-15 (Origlia/Schiller/Bongs et al., arXiv:1503.08457); q_wf=sigma_y(1s)^2; ground-demonstrator maturity, not flown; flicker/aging not modeled"
q_wf = 1.0e-30

Open in Kshana Studio · View on GitHub

clock-holdover-labsr.toml

kind clocknot matched to a ledger module by name

Variant: laboratory-grade strontium optical clock vs CSAC. Lab Sr clocks reach sigma_y(1 s) = 4.8e-17 (Oelker et al. 2019, Nature Photonics).

seed = 42
threshold_ns = 20.0
step_s = 10.0
duration_s = 7200.0
windows = [
id = "optical-lab-sr"
provenance = "Laboratory Sr optical lattice clock, sigma_y(1s)=4.8e-17 (Oelker et al. 2019, Nature Photonics); q_wf=sigma_y(1s)^2; laboratory maturity, not flown; flicker/aging not modeled"
q_wf = 2.304e-33

Open in Kshana Studio · View on GitHub

combined-altpnt#

GPS-denied combined gravity + magnetic + terrain navigator: three scalar field channels fused per waypoint for a sharper (lower-CRLB) drift fix than any single field.

combined-altpnt.toml

kind combined-altpntnot matched to a ledger module by name

Combined gravity + magnetic + terrain GPS-denied navigator — fused alt-PNT.

kind = "combined-altpnt"
start_lat_deg = 12.05
start_lon_deg = 20.05
step_lat_deg = 0.004
step_lon_deg = 0.003
waypoints = 60
drift_lat_deg = 0.5
drift_lon_deg = -0.4

Open in Kshana Studio · View on GitHub

conflict-resilience#

MODELLED layered-PNT conflict resilience (P7): a contested-environment user fields several PNT layers (open-service GNSS, wideband GNSS, an authenticated constellation, an augmentation relay), each with a base availability, a 1σ accuracy and a per-vector denial vulnerability to the shared jamming/spoofing threat. An intensity-swept SEEDED Monte-Carlo denies each layer with probability clamp(vulnerability·intensity·vector_weight,0,1), fuses the survivors by the closed-form inverse-variance rule σ_fused=(Σ 1/σ_i²)^(−1/2), and reports the total-loss probability (all layers denied), the median fused error and per-layer usable/denial statistics vs intensity. The headline resilience ratio (single-layer vs layered total-loss probability) lands at ~7x under the INDEPENDENCE assumption; a one-factor Gaussian-copula correlated-denial sweep then shows that ~7x collapse toward 1 as denial correlation rises (correlation defeats layering). A prior-sensitivity block ranges the headline over the SOURCED vulnerability priors via the mcda tornado + a Dirichlet threat-effort re-allocation + percentile CIs. VALIDATED core: the Monte-Carlo total-loss converges to the closed-form independent product Π_i p_deny_i (within MC standard error at a fixed seed and large N); the inverse-variance fuse is a closed-form identity; at ρ=0 the copula reduces to the independent model and every ρ preserves each layer's marginal denial rate. MODELLED: the per-layer vulnerability/availability/accuracy magnitudes are sourced-but-Modelled inputs (JammerTest 2024, TEXBAT, EASA SIB, RTCA DO-229, LunaNet/IOAG — see conflict_threat_params), and the specific ~7x magnitude and the ratio-vs-correlation curve shape follow from that parameterisation. A §4.2 per-vector survival breakdown then resolves the shared RF threat into the four named vectors (jamming/spoofing/kinetic/cyber) and reports each vector's usable-PNT graceful-degradation curve S_v(x)=1-Prod_i(1-a_i(1-clamp(susceptibility_i,v·x,0,1))) — VALIDATED: the seeded per-layer Monte-Carlo converges to that closed form; jamming is the sharpest vector for the correlated-RF baseline and the RF-immune inertial layer is the decisive survivor. Not a certified navigation-availability product.

conflict-resilience.toml

kind conflict-resiliencenot matched to a ledger module by name

Layered-PNT conflict resilience (paper P7).

kind = "conflict-resilience"
trials = 4000
seed = 20260709
primary_layer = 0
min = 0.0
max = 1.0
steps = 11
values = [0.0, 0.2, 0.4, 0.6, 0.8, 0.95]

Open in Kshana Studio · View on GitHub

constellation-design#

Constellation design at scale: Walker DELTA and Walker STAR patterns in the i: T/P/F convention (nodes spread over 360 or 180 deg, in-plane spacing 360*P/T, inter-plane phase offset 360*F/T), explicit element lists and multi-shell designs, several constellations in one run, around the Earth, the Moon, Mars or any other planet, Pluto or major moon using the constants in the body module (the same ones the solar-system and body-pnt kinds use). PRESETS from published nominal elements: gps-baseline and gps-expandable (the 24 slots and the six fore/aft expandable pairs of the GPS Standard Positioning Service Performance Standard, 5th edition 2020, Tables 3.2-1 to 3.2-3), galileo (Walker 24/3/1 at 29 599.801 km and 56 deg, Galileo Open Service Service Definition Document issue 1.1 Tables 1 and 23), beidou and beidou-meo (Walker 24/3/1 at 21 528 km and 55 deg plus three geostationary satellites at 80, 110.5 and 140 deg E and three inclined geosynchronous satellites at 55 deg, BeiDou Open Service Performance Standard 3.0 section 4.1; the MEO phase and the 118 deg E inclined-geosynchronous crossing are modelled because the standard does not state them) and glonass (24/3/1 at 19 100 km and 64.8 deg from the slot formula of the GLONASS Interface Control Document edition 5.1 section 5.2). COVERAGE AND DILUTION OF PRECISION: over a latitude/longitude grid and a sampled window with an elevation mask, the number of satellites in view, GDOP, PDOP, HDOP and VDOP per cell, the availability (a fix with PDOP at or below a threshold, 6 by default) per cell, globally (area-weighted) and at the worst site, with one receiver clock per constellation unless clock = "common". It scales to thousands of satellites: visibility is a dot product against each satellite's coverage half-angle, and satellites are banded by sub-satellite latitude each epoch so a grid row tests only those that can be in view; the report counts the pair tests saved. The JSON carries the grid maps and downsampled per-satellite ground tracks. VALIDATED: the Walker generator against Galileo OS SDD Table 23 and the GLONASS ICD slot formula, the GPS preset against the published equatorial-crossing column of SPS PS Table 3.2-1, and the GPS baseline global HDOP distribution against SPS PS Appendix B (median 0.94, 95% 1.25, mean 0.96, tolerance 0.03). MODELLED: two-body orbits with optional secular J2, a spherical body, geometric visibility only (no signal power, health or terrain), and the relative phase between different systems, which is not a snapshot of any real date.

constellation-multi-gnss-coverage.toml

kind constellation-designnot matched to a ledger module by name

Multi-constellation coverage: the four global navigation satellite systems (GNSS) together, as a map of satellites in view, dilution of precision (DOP) and availability over the whole Earth for one day.

kind = "constellation-design"
body = "earth"
duration_s = 86164.0
step_s = 900.0
mask_deg = 10.0
pdop_threshold = 6.0
grid_step_deg = 10.0
clock = "per-constellation"

Open in Kshana Studio · Not yet on GitHub

leo-pnt-mega-shell.toml

kind constellation-designnot matched to a ledger module by name

A low-Earth-orbit positioning, navigation and timing (PNT) mega-constellation: 5 000 satellites in four Walker shells, scored as a coverage and dilution-of-precision (DOP) map.

kind = "constellation-design"
body = "earth"
duration_s = 7200.0
step_s = 600.0
mask_deg = 20.0
pdop_threshold = 3.0
grid_step_deg = 10.0
clock = "common"

Open in Kshana Studio · Not yet on GitHub

lunar-relay-constellation.toml

kind constellation-designnot matched to a ledger module by name

A lunar relay and navigation constellation: satellites in elliptical lunar frozen orbits (ELFO) plus a circular low-lunar-orbit shell, scored as a coverage and dilution-of-precision (DOP) map over the whole Moon for one day.

kind = "constellation-design"
body = "moon"
duration_s = 86400.0
step_s = 1800.0
mask_deg = 10.0
pdop_threshold = 6.0
grid_step_deg = 10.0
clock = "common"

Open in Kshana Studio · Not yet on GitHub

earth-gnss-lunar#

Earth-GNSS reception at lunar distance, the weak-signal layer the conflict-resilience paper names and the engine had no model for. A GNSS satellite points its antenna at the Earth; a receiver near the Moon sits about fifteen times the orbital radius away, so three things bite at once. The Earth OCCULTS THE BORESIGHT: from 26,560 km it subtends a 13.9 deg half-angle, so any lunar-bound ray must leave the transmitter at least that far off nadir, which removes the peak of the beam before any power is computed. What remains is the MAIN-LOBE EDGE AND THE SIDELOBES, the regime the LuGRE payload actually operated in during 2025. And the free-space loss is about 208 dB at L1, roughly 25 dB more than a terrestrial user pays. The report emits one row per satellite (off-boresight angle, Earth occultation, range, path loss, transmit gain at that angle, received power, carrier-to-noise density) and aggregates only the links clearing the tracking threshold. IT ALSO REPORTS THE CONDITIONING, because that is what defines this layer: every visible satellite lies inside a cone a couple of degrees wide as seen from the Moon, so the lines of sight are nearly parallel, the dilution of precision is enormous, and an Earth-GNSS fix at lunar distance is a TIMING-grade observation far more than a position-grade one. MODELLED, and the transmit pattern is the reason: the gain at angle is a uniform circular aperture (Airy), while a real GPS L1 antenna is a twelve-element helical array with a shaped main lobe and non-Airy sidelobes. Measured patterns exist and are not vendored here, so orderings and orders of magnitude are meaningful while the dB of any single satellite is not. Deliberately ABSENT, each making the budget optimistic: no ionospheric or tropospheric loss on the limb-grazing rays, no polarisation, pointing or implementation loss, and a spherical Earth with no refractive extension. The Moon position is an INPUT (range plus inertial direction) rather than an ephemeris lookup, because the quantity under test is the link and the beam geometry. Upgrading this row to Validated needs a measured transmit pattern and LuGRE normal points; neither is in the repository and neither is invented here.

earth-gnss-lunar.toml

kind earth-gnss-lunarkind's ledger rows are Modelled · 0 of 1 rows validated

Earth-GNSS reception at lunar distance.

kind = "earth-gnss-lunar"
altitude_km = 20180.0
inclination_deg = 55.0
planes = 6
sats_per_plane = 4
phasing_f = 2.0
epoch_s = 0.0
receiver_range_m = 384400000.0

Open in Kshana Studio · View on GitHub

eo-coverage#

Earth-observation payload footprint & coverage geometry (SMAD space triangle): Earth angular radius, swath width, nadir ground sample distance, maximum off-nadir access, circular period and equatorial ground-track spacing with a contiguous-coverage flag, for an orbit altitude + sensor FOV/IFOV. MODELLED spherical-Earth geometry (no radiometry/MTF/atmosphere/jitter/glint; nodal R_e·ω·T spacing, no J2 regression).

eo-coverage.toml

kind eo-coveragenot matched to a ledger module by name

Earth-observation payload footprint & coverage demonstrator (SMAD space triangle).

kind = "eo-coverage"
altitude_km = 700.0
half_fov_deg = 7.5
ifov_microrad = 14.0
max_off_nadir_deg = 45.0

Open in Kshana Studio · View on GitHub

ephemeris#

Ephemeris & ground track: propagate one satellite (TLE→SGP4 or analytic orbit) and emit its TEME/GCRS state (position + velocity), ITRF/ECEF position, WGS-84 sub-satellite lat/lon/alt, and per-step station az/el/range + range-rate (Doppler). The satellite comes from a tle or from an analytic orbit with its epoch (a tle wins when both are given); with a tle, an epoch overrides the TLE's own epoch as t = 0.

ephemeris.toml

kind ephemerisnot matched to a ledger module by name

Ephemeris & ground track — "where is the satellite right now".

kind = "ephemeris"
tle = """
step_s = 30.0
duration_s = 16740.0
xp_arcsec = 0.0
yp_arcsec = 0.0
lat_deg = 49.8707
lon_deg = 8.6217

Open in Kshana Studio · View on GitHub

fusion#

Joint Kalman sensor-fusion PNT over the same hybrid inputs.

fusion-pnt.toml

kind fusionnot matched to a ledger module by name

Joint sensor-fusion PNT: a single Kalman filter is the navigator, fusing the clock and inertial states and aided by optical ISL time transfer, rather than composing independent predictors. GNSS denied 1.8 h.

kind = "fusion"
seed = 42
timing_spec_ns = 20.0
position_spec_m = 100.0
step_s = 10.0
duration_s = 7200.0
windows = [
enabled = true

Open in Kshana Studio · View on GitHub

gnss-ins#

Loosely- and tightly-coupled GNSS/INS error-state EKF.

automotive-urban-canyon.toml

kind gnss-insnot matched to a ledger module by name

Road vehicle through an urban canyon: GNSS/INS dead-reckoning across an underpass and a roadside jammer, against a lane-level budget.

kind = "gnss-ins"
seed = 7
threshold_m = 1.5
fix_interval_s = 1.0
sigma_pos_m = 1.0
sigma_vel_mps = 0.05
lat_deg = 48.137
lon_deg = 11.575

Open in Kshana Studio · Not yet on GitHub

gnss-ins.toml

kind gnss-insnot matched to a ledger module by name

Loosely-coupled GNSS/INS: the three-axis strapdown navigator disciplined by a 15-state error-state EKF, then coasting through a 60 s GNSS outage. Unlike the inertial pack (a 1-DOF scalar dead-reckoner with a truth-snap reset at every fix), this runs the genuine closed-loop filter: it learns from noisy fixes while GNSS is up and coasts on the corrected state during the gap. The reported error is the real horizontal residual against truth; each sensor also carries its open-loop free-INS RMS so the filter's value is explicit.

kind = "gnss-ins"
seed = 7
threshold_m = 50.0
fix_interval_s = 1.0
sigma_pos_m = 1.0
sigma_vel_mps = 0.05
lat_deg = 45.0
lon_deg = -57.3

Open in Kshana Studio · View on GitHub

small-uas-jammed-nav.toml

kind gnss-insnot matched to a ledger module by name

Small uncrewed aircraft under GNSS jamming: how far a flight-controller-class MEMS inertial unit drifts once the receiver loses lock, against a tactical-grade unit, on the same closed-loop GNSS/INS filter as gnss-ins.toml.

kind = "gnss-ins"
seed = 7
threshold_m = 50.0
fix_interval_s = 1.0
sigma_pos_m = 1.0
sigma_vel_mps = 0.05
lat_deg = 59.437
lon_deg = 24.745

Open in Kshana Studio · View on GitHub

gnss-sim#

Measurement-domain pseudorange simulation (Klobuchar iono, Saastamoinen/Niell tropo) + RAIM.

gnss-sim-raim.toml

kind gnss-simnot matched to a ledger module by name

Measurement-domain GNSS simulation: pseudoranges with ionospheric and tropospheric delays, fed to snapshot RAIM for protection levels.

kind = "gnss-sim"
seed = 7
mask_deg = 5.0
noise_sigma_m = 1.5
multipath_m = 0.5
sat_clock_rms_m = 30.0
uere_m = 3.0
p_fa = 1.0e-5

Open in Kshana Studio · View on GitHub

gravity-map#

GPS-denied gravity-map-matching navigation: a cold-atom gravimeter recovers a constant INS drift from the gravity-anomaly sequence it flies through.

gps-denied-gravity-nav.toml

kind gravity-mapnot matched to a ledger module by name

60-minute GPS-denied gravity-map-matching benchmark (quantum alt-PNT).

kind = "gravity-map"
nmax = 3
start_lat_deg = 10.0
start_lon_deg = 20.0
step_lat_deg = 0.06
step_lon_deg = 0.045
waypoints = 90
drift_lat_deg = 0.5

Open in Kshana Studio · View on GitHub

gravity-map-nav.toml

kind gravity-mapnot matched to a ledger module by name

Quantum gravity-map-matching navigation scenario (GPS-denied alt-PNT).

kind = "gravity-map"
nmax = 3
start_lat_deg = 12.0
start_lon_deg = 24.0
step_lat_deg = 0.18
step_lon_deg = 0.13
waypoints = 12
drift_lat_deg = 0.55

Open in Kshana Studio · View on GitHub

hybrid#

Hybrid PNT capstone: clock + IMU + time-transfer aiding.

hybrid-pnt.toml

kind hybridnot matched to a ledger module by name

Hybrid PNT capstone: all-quantum suite (optical clock + cold-atom IMU + optical ISL time-transfer aiding) vs all-classical suite (CSAC + nav-grade IMU + RF). GNSS denied 1.8 h.

kind = "hybrid"
seed = 42
timing_spec_ns = 20.0
position_spec_m = 100.0
step_s = 10.0
duration_s = 7200.0
windows = [
enabled = true

Open in Kshana Studio · View on GitHub

hybrid-optical-rf#

MODELLED heterogeneous optical + RF PNT joint figure of merit (P5): composes the 1550 nm two-way optical link budget (photon-limited two-way ranging CRLB σ_τ/√N and diffraction footprint λ/D·range), a cross-modality solution-separation RAIM protection level (position AND timing) that fuses the loose RF and tight optical solutions with disparate covariances, the N-station optical clear-sky availability (independent-union 1−Π(1−a_i) and a spatially-correlated variant), an optical↔RF state/covariance handoff with a PROVEN bit-continuous (no-jump) mean and a NEES χ² consistency gate, and a joint P(available AND precision-grade AND integrity-assured) score with correlation handling. VALIDATED closed form: the ranging CRLB, diffraction footprint, χ² protection-level quantile, union combinatorics, handoff mean-continuity + NEES gate, and the joint independent product. MODELLED: the optical loss allocations, RF/optical σ magnitudes, cloud-climatology inputs, correlations, and P_HMI budget. Not a certified availability/integrity product.

hybrid-optical-rf.toml

kind hybrid-optical-rfnot matched to a ledger module by name

Heterogeneous optical + RF PNT joint availability / precision / integrity (P5).

kind = "hybrid-optical-rf"
wavelength_nm      = 1550.0
tx_power_w         = 1.0e-3
tx_aperture_m      = 0.85
rx_aperture_m      = 0.85
range_km           = 384000.0
pulse_rms_ps       = 50.0
integration_s      = 1.0

Open in Kshana Studio · View on GitHub

hybrid-ukf#

17-state hybrid quantum+classical tightly-coupled GNSS/INS UKF (MODELLED): 15 INS error states + CAI-derived accel-bias correction + a 2-state (phase+frequency) clock from the q-parameter clock engine, driven by the bracketed CAI error model. The figure of merit is filter self-consistency (NEES + innovation-whiteness vs χ² bounds) — a self-consistency statement, NOT a real-world accuracy guarantee. Simulation only; no TRL>3, no flight heritage, no external validation.

hybrid-ukf.toml

kind hybrid-ukfnot matched to a ledger module by name

17-state hybrid quantum + classical tightly-coupled GNSS/INS UKF (MODELLED).

kind = "hybrid-ukf"
seed = 1771
speed_m_s = 100.0
sigma_pr_m = 1.0
sigma_rr_mps = 0.05
consistency_seeds = 24
q_factor = 1.0
r_factor = 1.0

Open in Kshana Studio · View on GitHub

impairment-eval#

Machine-learning RF-impairment detection evaluation testbed (13494): generate a labelled, parameter-grounded SYNTHETIC corpus (nominal/jamming/spoof-time/spoof-position/multipath), score a detector (energy|agc|sqm|parity|fused) with the detector-agnostic harness, and report AUC/ROC/confusion + per-class Pd at a target Pfa, plus the in- vs out-of-distribution optimism gap. MODELLED operating characteristics only — never field/IQ, no good/bad verdict.

impairment-eval.toml

kind impairment-evalkind's ledger rows are Modelled · 0 of 1 rows validated

Machine-learning RF-impairment detection evaluation testbed (ESA AO/1-13494 demonstrator).

kind = "impairment-eval"
seed = 42
n_per_class = 200
meas_noise = 0.6
detector = "fused"
target_pfa = 0.05
shift_severity_scale = 0.5
optimism_tol = 0.05

Open in Kshana Studio · View on GitHub

inertial#

1-DOF inertial dead-reckoning during a GNSS outage.

imu-deadreckoning.toml

kind inertialnot matched to a ledger module by name

Dead-reckoning during GNSS outage: cold-atom quantum accelerometer vs navigation-grade. Bias = post-GNSS-calibration residual = published bias stability; q_va = (noise root-PSD)^2.

kind = "inertial"
seed = 42
threshold_m = 100.0
step_s = 10.0
duration_s = 7200.0
windows = [
id = "cold-atom-quat"
provenance = "Exail hybrid quantum accelerometer triad: bias stability 6e-8 g = 5.88e-7 m/s^2 after 24 h (Templier et al., Science Advances 2022, arXiv:2209.13209); noise 22 ug/sqrtHz = 2.16e-4 (m/s^2)/sqrtHz; laboratory maturity, not deployed"

Open in Kshana Studio · View on GitHub

ins-trn-coast#

INS/TRN coasting error model: position error against coast duration, built from IMU coefficients rather than swept as an assumed drift rate. Five growth contributions, each with its own power of time — accelerometer bias (t²), gyro-bias tilt through gravity (t³), velocity random walk (t^1.5), angle random walk (t^2.5) and scale factor against travelled distance (t¹ cruising, t² under sustained specific force) — combined under a STATED rule (root-sum-square by default, or linear-sum, or deterministic-sum with stochastic-rss; all three are computed on every run so the choice is visible rather than buried). The coast durations reaching caller-supplied position thresholds (10 m and 50 m by default) are located by the engine's existing bisection, each with a per-contribution breakdown naming the dominant source, and each single contribution's crossing is additionally inverted algebraically so the two agree. A terrain-relative-navigation mode bounds the coast with periodic position fixes and reports the largest fix interval that holds each threshold; a position-only fix leaves velocity error and tilt alive across the fix, so it does not always bound the coast at any fix rate, and the report says so rather than returning a zero. MODELLED: the IMU class coefficients are representative band figures, not a datasheet, and the terrain-fix residual is an input. An unreached threshold is reported as null with a status, never as a zero. Not a certified inertial-navigation performance product.

ins-trn-coast.toml

kind ins-trn-coastnot matched to a ledger module by name

INS/TRN coasting error model — position error against coast duration, and the coast durations at which it crosses 10 m and 50 m.

kind = "ins-trn-coast"
imu_grade = "navigation"
speed_m_s = 250.0
combination = "rss"
crossing_thresholds_m = [10.0, 50.0]
drift_band_lo_m_per_s = 0.001
drift_band_hi_m_per_s = 0.050
trn_fix_mode = "position-only"

Open in Kshana Studio · View on GitHub

maritime-port-approach-coast.toml

kind ins-trn-coastnot matched to a ledger module by name

Maritime port approach with GNSS jammed: how long an inertial navigation system (INS) keeps a ship inside the harbour-approach accuracy budget once the Global Navigation Satellite System (GNSS) is lost.

kind = "ins-trn-coast"
imu_grade = "navigation"
speed_m_s = 6.17
combination = "rss"
crossing_thresholds_m = [10.0, 100.0]
drift_band_lo_m_per_s = 0.001
drift_band_hi_m_per_s = 0.050
trn_fix_mode = "none"

Open in Kshana Studio · Not yet on GitHub

rail-tunnel-coast.toml

kind ins-trn-coastnot matched to a ledger module by name

Rail tunnel coast: how long a train's inertial navigation system (INS) keeps it inside a track-discrimination budget with no Global Navigation Satellite System (GNSS) in a tunnel.

kind = "ins-trn-coast"
imu_grade = "tactical"
speed_m_s = 44.4
combination = "rss"
crossing_thresholds_m = [2.0, 20.0]
drift_band_lo_m_per_s = 0.001
drift_band_hi_m_per_s = 0.050
trn_fix_mode = "none"

Open in Kshana Studio · Not yet on GitHub

integrity#

Snapshot / solution-separation / ARAIM RAIM with HPL/VPL and a Stanford diagram.

araim-gps-galileo.toml

kind integritynot matched to a ledger module by name

Dual-constellation ARAIM availability: GPS + Galileo evaluated with the advanced ARAIM engine, including the constellation-wide fault hypothesis (araim_dual).

kind = "integrity"
mask_deg = 5.0
sigma_uere_m = 0.75
p_fa = 1.0e-5
p_md = 1.0e-3
al_h_m = 40.0
al_v_m = 50.0
araim_dual = true

Open in Kshana Studio · View on GitHub

integrity-raim.toml

kind integritynot matched to a ledger module by name

GNSS integrity (RAIM) availability over a GPS-like constellation.

kind = "integrity"
seed = 7
mask_deg = 5.0
sigma_uere_m = 1.0
p_fa = 1.0e-5
p_md = 1.0e-3
al_h_m = 40.0
al_v_m = 50.0

Open in Kshana Studio · View on GitHub

jamming#

Link-budget jamming: J/S → effective C/N₀ → loss of lock.

jamming-demo.toml

kind jammingkind's ledger rows are Modelled · 0 of 1 rows validated

RF jamming: a ground-based broadband jammer denying GNSS to a nearby receiver.

kind = "jamming"
seed = 1
mask_deg = 5.0
tracking_threshold_dbhz = 25.0
step_s = 30.0
duration_s = 1800.0
lat_deg = 52.0
lon_deg = 4.0

Open in Kshana Studio · View on GitHub

maritime-strait-jamming.toml

kind jammingkind's ledger rows are Modelled · 0 of 1 rows validated

Maritime GNSS jamming: a shore- or vessel-borne broadband jammer denying the Global Navigation Satellite System (GNSS) to a ship crossing open water.

kind = "jamming"
seed = 1
mask_deg = 5.0
tracking_threshold_dbhz = 25.0
step_s = 30.0
duration_s = 1800.0
lat_deg = 59.80
lon_deg = 24.90

Open in Kshana Studio · Not yet on GitHub

launch-window#

Two-body launch & ascent geometry: launch azimuth(s) (sin Az = cos i / cos lat), minimum reachable inclination, circular velocity, the Earth-rotation eastward bonus, dogleg plane-change Δv when the target inclination is below the site latitude, and the number of daily launch opportunities. MODELLED spherical-Earth geometry (no rotating-Earth velocity-triangle correction, no ascent/drag-loss model).

launch-window.toml

kind launch-windownot matched to a ledger module by name

Launch-window & ascent geometry demonstrator (mission analysis, trade-study tier).

kind = "launch-window"
site_lat_deg = 28.5
target_inclination_deg = 51.6
altitude_km = 400.0

Open in Kshana Studio · View on GitHub

leo-navmsg#

LEO navigation message: the broadcast ephemeris and clock of a low Earth orbit (LEO) positioning, navigation and timing satellite, for any orbit, carrier and model, with optional named presets (Xona Pulsar, Iridium, Starlink, CentiSpace, a representative C-band system, the ATOMIC zero-clock model, Celeste IOD). CONTENT: auxiliary data (SVID, issue of data, band, signal health), synchronisation (week, time of week, a second-order clock polynomial af0-af2 about toc), ephemeris in one of four models -- the Galileo OS SIS ICD 16-parameter Keplerian set; that set plus along-track, cross-track and radial correction polynomials; the Liu et al. 2025 22-parameter model; an ECEF polynomial with no clock terms (ATOMIC zero-clock) -- and other services (a Klobuchar broadcast set, NeQuick-G ai0-ai2 with the effective ionisation level, and system-time-to-UTC parameters with the ICD leap-second logic). FITTER: a truth orbit integrated with zonal J2-J6 or EGM2008 gravity to the chosen degree and drag, and a seeded free or steered clock; Levenberg-Marquardt fit of the Keplerian set on non-singular elements, then linear least-squares correction polynomials; clock fitted net of the relativistic term the user adds. ANALYSES: fit-interval-trade (signal-in-space range error, SISRE, with global-average weights for the orbit altitude, versus fit interval and update period, orbit-only and with clock), model-comparison (four models, parameter count, encoded bits, and Kshana's fit at the Liu et al. altitudes beside the published figures), midpass-update (the highest pass over a user, each message switch's position, clock and user-range jump, worst-geometry jump, PASS/FAIL against a continuity threshold), encode-decode (Kshana's own documented binary frame with CRC-24Q, a per-field half-step quantisation budget, a corrupted-frame check, a RINEX-4-style record export and import labelled a Kshana extension, and a CSV table). VALIDATED: the SISRE weights against the published MEO/GEO table (Montenbruck et al. 2018); the Galileo user algorithm against RTKLIB on real Galileo broadcast ephemerides; CRC-24Q against its catalogue check value and the RTCM 1005 example frame. MODELLED: every fit and SISRE figure is representation error against a Kshana-integrated truth (no orbit determination or prediction error); the Liu et al. comparison uses different orbits; the encoding and text formats are Kshana's own.

leo-navmsg-celeste-iod.toml

kind leo-navmsgnot matched to a ledger module by name

ESA Celeste in-orbit demonstration (IOD) preset: the one scenario that uses material presented at the ESA Navigation Innovation and Support Programme (NAVISP) LEO-PNT workshop, 2026. Withhold it from a release by deleting this file and src/leo_navmsg/presets/celeste_iod.rs (see that file's header).

kind = "leo-navmsg"
name = "Celeste IOD message (workshop preset)"
seed = 15
preset = "celeste-iod"
analysis = ["encode-decode", "fit-interval-trade"]
csv_schema = "celeste-iod"
span_s = 1800
fit_intervals_s = [60, 120, 300, 600, 900]

Open in Kshana Studio · Not yet on GitHub

leo-navmsg-encode-decode.toml

kind leo-navmsgnot matched to a ledger module by name

LEO navigation message: Kshana's binary encoding, its quantisation budget, and the RINEX-style and CSV exports.

kind = "leo-navmsg"
name = "LEO message encode and decode"
seed = 14
analysis = ["encode-decode"]
altitude_km = 550.0
inclination_deg = 97.6
gravity_degree = 20
model = "kepler-rac"

Open in Kshana Studio · Not yet on GitHub

leo-navmsg-fit-interval-trade.toml

kind leo-navmsgnot matched to a ledger module by name

LEO navigation message: signal-in-space range error (SISRE) versus fit interval.

kind = "leo-navmsg"
name = "LEO message fit-interval trade"
seed = 11
analysis = ["fit-interval-trade"]
altitude_km = 550.0
inclination_deg = 97.6
gravity_degree = 20
cd_area_over_mass = 0.005

Open in Kshana Studio · Not yet on GitHub

leo-navmsg-midpass-update.toml

kind leo-navmsgnot matched to a ledger module by name

LEO navigation message: a message update in the middle of a pass, and whether the user sees a jump.

kind = "leo-navmsg"
name = "LEO message mid-pass update"
seed = 13
analysis = ["midpass-update"]
altitude_km = 550.0
inclination_deg = 97.6
gravity_degree = 20
model = "kepler-rac"

Open in Kshana Studio · Not yet on GitHub

leo-navmsg-model-comparison.toml

kind leo-navmsgnot matched to a ledger module by name

LEO navigation message: four ephemeris models on one orbit, and the Liu et al. 2025 SISRE-versus-altitude table.

kind = "leo-navmsg"
name = "LEO message model comparison"
seed = 12
analysis = ["model-comparison"]
altitude_km = 550.0
inclination_deg = 97.6
gravity_degree = 20
model = "kepler-rac"

Open in Kshana Studio · Not yet on GitHub

leo-pass#

LEO pass and link budget, band by band, for LEO-PNT (positioning, navigation and timing from low Earth orbit), system-agnostic: a user (ground, maritime, air or indoor, static or moving) and one or more LEO satellites from a DESIGNED PASS (a circular orbit placed so the user sees one pass of a chosen maximum elevation at a chosen time, sun-synchronous if asked), explicit ELEMENTS, a TLE (two-line element set) through the engine's SGP4, or a WALKER constellation built by the constellation-design code (the highest passes reported). Bands come from a named preset (generic multi-band UHF/L/S/C, generic C band, Xona Pulsar X1/X5, Iridium STL, Starlink as a Doppler-only signal of opportunity, CentiSpace, and an optional Celeste IOD preset marked WORKSHOP) or are written into the scenario; each preset states whether its numbers are PUBLIC (with URL), REPRESENTATIVE or WORKSHOP. Per satellite, band and epoch: elevation, azimuth, range, range rate and range acceleration; free-space path loss; EIRP and the satellite pattern gain (isoflux, Gaussian beam or flat); user antenna gain against elevation (patch, hemispherical or isotropic); gaseous attenuation (ITU-R P.676-10 Annex 2), rain attenuation (ITU-R P.838-3 coefficients and the P.618-14 procedure, from a rain rate and rain height), tropospheric scintillation (ITU-R P.618-14 section 2.4.1), building entry loss for an indoor user (ITU-R P.2109-2), polarisation mismatch, system noise temperature and C/N0 (carrier-to-noise density); Doppler and Doppler rate in closed form from the range rate and range acceleration, each checked against central differences; the first-order ionospheric delay 40.3 STEC/f^2 from a Klobuchar or vertical-TEC slant TEC scaled to the part of the ionosphere below the satellite. Band pairs get the ionosphere-free coefficients, noise amplification and code noise at the pass peak. MEO GNSS satellites (Galileo or GPS presets) are evaluated with the same antenna and noise model from their interface-document received powers, so the LEO bell-shaped pass and the flat GNSS carriers share one plot. An optional [iot] section gives time to first fix, energy per fix and battery life against duty cycle for a stated receiver power budget (MODELLED). Each band pair also gives the slant TEC its geometry-free combination recovers at the peak and that estimate's code-noise sigma (ionosphere sounding). An optional [spoofer] section counterfeits the signals of a claimed position that jumps or is pushed from the true one after an onset and runs two monitors with stated false-alarm and missed-detection probabilities: Doppler and pass-geometry consistency (measured range rates against those predicted from the orbits and an independent prior position and velocity, a generalised least-squares chi-square test over a window, on the GNSS, LEO and all channels) and cross-band consistency (the epoch-to-epoch step of each LEO band pair's model-corrected geometry-free combination), reporting per-epoch statistics and when each monitor detects (MODELLED). VALIDATED components: free-space loss, the P.838-3 coefficients against its Table 5, the P.618-14 rain and scintillation procedures and the P.2109 building entry loss against the ITU-R Study Group 3 validation examples, the IS-GPS-200 L1/L2 group-delay ratio, and the static-user maximum Doppler of a circular orbit against arXiv 2509.19551 Table 1. MODELLED: EIRPs, patterns, the Chapman fraction of TEC below the satellite and the whole pass.

leo-focus-science-iono-sounding.toml

kind leo-passnot matched to a ledger module by name

LEO-PNT focus area: LEO-PNT science, ionosphere sounding from the dual-band delay.

kind = "leo-pass"
name = "LEO ionosphere sounding from multi-band delays"
epoch = "2026-09-28T11:00:00"
duration_s = 900.0
step_s = 5.0
environment = "ground"
lat_deg = 69.66
lon_deg = 18.94

Open in Kshana Studio · Not yet on GitHub

leo-indoor-uhf.toml

kind leo-passnot matched to a ledger module by name

Indoor LEO-PNT: why a UHF carrier reaches inside a building when L, S and C bands struggle.

kind = "leo-pass"
name = "Indoor UHF LEO-PNT"
epoch = "2026-09-28T12:00:00"
duration_s = 900.0
step_s = 5.0
environment = "indoor"
lat_deg = 41.9
lon_deg = 12.49

Open in Kshana Studio · Not yet on GitHub

leo-iot-energy.toml

kind leo-passnot matched to a ledger module by name

Low-energy LEO-PNT for an IoT (Internet of Things) tracker: energy per fix against duty cycle.

kind = "leo-pass"
name = "IoT energy per fix"
epoch = "2026-09-28T06:00:00"
duration_s = 900.0
step_s = 5.0
environment = "ground"
lat_deg = 53.55
lon_deg = 9.99

Open in Kshana Studio · Not yet on GitHub

leo-pass-celeste-iod-multiband.toml

kind leo-passnot matched to a ledger module by name

ESA Celeste IOD, signal configuration #1, all bands over one pass. WORKSHOP PRESET.

kind = "leo-pass"
name = "Celeste IOD multi-band pass"
epoch = "2026-09-28T08:00:00"
duration_s = 600.0
step_s = 2.0
iono_free_pairs = [["E5", "C"], ["UHF", "C"], ["E5", "SR"]]
environment = "ground"
lat_deg = 52.218

Open in Kshana Studio · Not yet on GitHub

leo-pass-iridium.toml

kind leo-passnot matched to a ledger module by name

Iridium STL (satellite time and location) bursts seen from an aircraft.

kind = "leo-pass"
name = "Iridium STL from an aircraft"
epoch = "2026-09-28T14:00:00"
duration_s = 900.0
step_s = 5.0
environment = "air"
lat_deg = 50.0
lon_deg = -30.0

Open in Kshana Studio · Not yet on GitHub

leo-pass-vs-gnss-cn0.toml

kind leo-passnot matched to a ledger module by name

A LEO-PNT pass against the Galileo satellites in view: C/N0 over one pass.

kind = "leo-pass"
name = "LEO pass versus MEO GNSS C/N0"
epoch = "2026-09-28T08:00:00"
duration_s = 900.0
step_s = 2.0
environment = "ground"
lat_deg = 48.137
lon_deg = 11.575

Open in Kshana Studio · Not yet on GitHub

leo-pass-xona-pulsar.toml

kind leo-passnot matched to a ledger module by name

Xona Pulsar X1 and X5 over one pass, with the Pulsar constellation's highest passes.

kind = "leo-pass"
name = "Xona Pulsar pass"
epoch = "2026-09-28T10:00:00"
duration_s = 1200.0
step_s = 5.0
environment = "maritime"
lat_deg = 45.5
lon_deg = -5.0

Open in Kshana Studio · Not yet on GitHub

leo-resilience-spoof-doppler.toml

kind leo-passnot matched to a ledger module by name

LEO-PNT resilience against spoofing: Doppler and pass-geometry consistency.

kind = "leo-pass"
name = "Spoofing detection by LEO Doppler consistency"
epoch = "2026-09-28T08:00:00"
duration_s = 1800.0
step_s = 5.0
environment = "ground"
lat_deg = 50.11
lon_deg = 8.68

Open in Kshana Studio · Not yet on GitHub

leo-pnt-chain#

One LEO-PNT (positioning, navigation and timing from low Earth orbit) system end to end, for any constellation and signal: the leo-signal design named by signal_design (a public preset or an inline [signal] design) sets a [pass] band's centre, bandwidth, chip rate and EIRP split, the leo-pass link budget gives the tracked C/N0 and band-limited code jitter over the pass, a C/N0 line in sin(elevation) and the [navmsg] message's broadcast SISRE (fitted at the pass satellite's altitude) feed every LEO system of the [fusion] leo-pvt joint fix, and optionally the [ppp] leo-ppp cases; every hand-off is listed with its value and unit. MODELLED.

celeste-iod-end-to-end.toml

kind leo-pnt-chainnot matched to a ledger module by name

Celeste IOD end to end (optional preset): the E5 configuration #1 signal -> a Celeste IOD pass -> the Celeste-style navigation message -> GPS + Galileo + Celeste IOD fused fix.

kind = "leo-pnt-chain"
name = "Celeste IOD end to end"
seed = 4
signal_design = "celeste-iod-e5-1-pfa"
od_sisre_m = 0.25
name = "celeste-iod-e5-1-pfa"
system = "Celeste IOD"
source = "WORKSHOP"

Open in Kshana Studio · Not yet on GitHub

leo-pnt-end-to-end.toml

kind leo-pnt-chainnot matched to a ledger module by name

LEO-PNT end to end on a generic constellation: signal design -> pass link budget -> navigation message -> fused MEO + LEO fix and precise point positioning convergence.

kind = "leo-pnt-chain"
name = "LEO-PNT end to end, generic 1080 km constellation"
seed = 5
signal_design = "generic-l"
od_sisre_m = 0.25
presets = ["generic-bands"]
epoch = "2026-09-28T08:00:00"
duration_s = 1200.0

Open in Kshana Studio · Not yet on GitHub

xona-pulsar-end-to-end.toml

kind leo-pnt-chainnot matched to a ledger module by name

Xona Pulsar end to end: the public X5 signal -> a Pulsar pass -> a LEO navigation message -> GPS + Galileo + Pulsar fused fix and precise point positioning convergence.

kind = "leo-pnt-chain"
name = "Xona Pulsar end to end"
seed = 9
signal_design = "xona-x5"
od_sisre_m = 0.25
presets = ["xona-pulsar"]
epoch = "2026-09-28T10:00:00"
duration_s = 1200.0

Open in Kshana Studio · Not yet on GitHub

leo-ppp#

Precise point positioning (PPP) convergence with GNSS only and with LEO augmentation: a float extended Kalman filter on ionosphere-free code and carrier phase with the static station coordinates, a white receiver clock, one inter-system bias per extra system, a random-walk zenith wet delay mapped by 1/sin(elevation) and a float ambiguity per satellite arc; the precise orbit-and-clock error is white and common to the code and phase of a satellite, so each satellite is one correlated two-row update in a Joseph-stabilised form. Measurements are simulated from the same model with seeded noise over several sites and seeds, and each case (GNSS only first, then each [[case]] of LEO systems, any constellation or preset) reports the median convergence time (the first epoch after which the horizontal and vertical errors stay below the thresholds, 10 cm by default), the fraction converged, the median error curves and the filter consistency (the run-averaged position NEES against the two-sided 95% chi-square band). Optionally beside the published Li et al. (2019, J. Geod. 93:749, doi 10.1007/s00190-018-1195-2) mid-latitude figures: 9.6 min for multi-GNSS shortened to 7.0, 3.2, 2.1 and 1.3 min with 60, 96, 192 and 288 LEO satellites. MODELLED: a consistency comparison of the trend, not a reproduction of that study's constellations, noise or stations; no ambiguity resolution, cycle slips, phase wind-up, tides or time-correlated product errors.

leo-ppp-convergence.toml

kind leo-pppnot matched to a ledger module by name

Precise point positioning (PPP) convergence with LEO augmentation.

kind = "leo-ppp"
seed = 20
duration_s = 1800.0
step_s = 10.0
runs = 4
lat_deg = 30.5
lon_deg = 114.4
lat_deg = 48.1

Open in Kshana Studio · Not yet on GitHub

leo-pvt#

Fused medium-Earth-orbit (MEO) and low-Earth-orbit (LEO) positioning, navigation and timing (PNT) over ANY constellations: each [[system]] is a GNSS preset of the constellation-design kind, a LEO preset (xona-pulsar, iridium-stl, starlink-sop, centispace, generic-c-band, the atomic-zero-clock ephemeris model, or another preset file, each in its own file with its sources marked PUBLIC, WORKSHOP or DERIVED), Walker shells or explicit element sets, with a carrier, a chip rate, a carrier-to-noise density (C/N0) envelope from the elevation mask to the zenith, a signal-in-space range error (SISRE), a Doppler sigma and a clock model (its own receiver clock, so the inter-system bias is estimated, or a known broadcast offset). Four modes. DOPPLER: batch Gauss-Newton positioning from range rate with analytic partials, clock-drift and optional velocity states and an optional height constraint, single- or multi-satellite, the error against window length, the Doppler, Doppler-rate and jerk envelope of each LEO system, and the single-pass along-track and cross-track accuracy against the cross-track offset (the cross-track error grows without bound as the pass goes overhead; a single pass also has a mirror solution across the ground track). A Doppler-only signal of opportunity (starlink-sop) runs here. JOINT: per-epoch weighted least-squares pseudorange fixes from GNSS alone, LEO alone and both, per-measurement sigmas from a delay-lock-loop thermal-noise model at C/N0 plus the SISRE (or a fixed sigma, so a signal model can feed them), the estimated inter-system biases, and PDOP/HDOP/VDOP against the number of LEO satellites added. POLAR: satellites in view and DOP against latitude for GNSS, LEO and both. TIMING: time transfer to Coordinated Universal Time (UTC) from LEO satellites at a known position with a two-state clock filter whose process noise comes from the engine's oscillator classes, against C/N0 and the oscillator, and the IS-GPS-200 system-time-to-UTC expression; with [timing] trace = true every row also reports its time error and predicted sigma at every epoch. VALIDATED: the largest Doppler of an overhead-to-horizon pass against the published Iridium (up to 36 kHz) and Xona Pulsar X1 (32 to 34 kHz) figures. MODELLED: everything else; the DOP is checked against a hand-derived case, the fixes against their covariance, and the Doppler model against the range-acceleration identity.

celeste-iod-fused-pvt.toml

kind leo-pvtnot matched to a ledger module by name

GNSS positioning joined by the two ESA Celeste in-orbit demonstration satellites.

kind = "leo-pvt"
mode = "joint"
seed = 4
duration_s = 5700.0
step_s = 30.0
lat_deg = 52.22
lon_deg = 4.42
height_m = 5.0

Open in Kshana Studio · Not yet on GitHub

leo-doppler-positioning.toml

kind leo-pvtnot matched to a ledger module by name

Positioning from LEO Doppler alone, over a generic LEO navigation constellation.

kind = "leo-pvt"
mode = "doppler"
seed = 7
duration_s = 600.0
step_s = 10.0
lat_deg = 48.14
lon_deg = 11.58
height_m = 520.0

Open in Kshana Studio · Not yet on GitHub

leo-timing-utc.toml

kind leo-pvtnot matched to a ledger module by name

Time transfer to UTC from LEO satellites, against C/N0 and the receiver oscillator.

kind = "leo-pvt"
mode = "timing"
seed = 9
duration_s = 21600.0
step_s = 10.0
lat_deg = 39.99
lon_deg = -105.26
height_m = 1655.0

Open in Kshana Studio · Not yet on GitHub

meo-leo-fused-pvt.toml

kind leo-pvtnot matched to a ledger module by name

Fused MEO and LEO pseudorange positioning: GPS and Galileo with a LEO navigation layer.

kind = "leo-pvt"
mode = "joint"
seed = 3
duration_s = 1800.0
step_s = 30.0
lat_deg = 40.42
lon_deg = -3.70
height_m = 650.0

Open in Kshana Studio · Not yet on GitHub

polar-arctic-leo-coverage.toml

kind leo-pvtnot matched to a ledger module by name

Satellites in view and dilution of precision from the equator to the pole: MEO GNSS alone, a near-polar LEO constellation alone, and both.

kind = "leo-pvt"
mode = "polar"
duration_s = 7200.0
step_s = 600.0
lat_step_deg = 10.0
lon_step_deg = 45.0
pdop_threshold = 6.0
name = "GPS"

Open in Kshana Studio · Not yet on GitHub

leo-signal#

LEO-PNT signal designs: parameterised low Earth orbit (LEO) positioning, navigation and timing (PNT) signals for any system, band and structure. A SIGNAL is a band (centre frequency, transmit bandwidth, ITU allocation RNSS/RDSS/MSS/EESS/non-RNSS/other) and components (acquisition, data, pilot; any subset), each with a modulation (BPSK(n) with fractional n, BOC(m,n), MBOC(6,1,p) or a flat OFDM-like band), a power share, optional FDMA sub-carrier offsets, a code length and a data rate. Signals come from compiled-in public preset files (xona-pulsar, iridium-stl, starlink-soo, centispace, generic-c-band, generic-bands; each with its source URL and every unpublished value labelled REPRESENTATIVE) or are written inline. PER SIGNAL: the band-limited power spectral density and the fraction of each component's power the transmit band passes (BPSK closed form beside the numeric value), the RMS (Gabor) bandwidth, the delay-lock-loop code-tracking thermal-noise jitter against C/N0 and early-late spacing from the band-limited coherent (or non-coherent) early-late formula of Betz & Kolodziejski 2009 with its unlimited-band textbook form and its vanishing-spacing Gabor bound, the ranging accuracy in metres, the acquisition search space (Doppler bins from the orbit's maximum Doppler plus oscillator and user terms, times code bins), square-law detection probability and the mean serial and code-parallel acquisition time, the spectral separation coefficient of the signal into GPS L1 C/A, Galileo E1, GPS L5, Galileo E5a, E5b and E5 AltBOC and of each into the signal with the C/N0 degradation, and the CW, wideband and matched J/S the tracked component tolerates, from the spectrum kind's own SSC machinery. A BAND TRADE: first-order ionospheric delay (40.3 TEC/f^2), free-space loss, ranging accuracy at equal C/N0 and at equal EIRP, and jammer tolerance. Optional SHAPE CHECKS hold a design's spectrum against a described measurement (MODELLED consistency). VALIDATED: the BPSK power-in-band (90.3 % in the main lobe) and Gabor-bandwidth closed forms, the band-limited jitter reducing to the textbook coherent early-late form and to its Gabor bound, the offset BPSK spectral separation coefficient against its Parseval closed form, the AltBOC spectrum's unit area, and the maximum LEO Doppler against the published Xona Pulsar (32-34 kHz) and Iridium (36 kHz) figures. MODELLED: every design, power split, C/N0 and jammer level; EFQPSK, CSK and OFDM spectra are approximated.

celeste-iod-classical-pilot-signals.toml

kind leo-signalnot matched to a ledger module by name

Celeste IOD signal designs: the frequency bands and the "Classical Pilot" signal configuration #1 of ESA's Celeste In-Orbit Demonstration (IOD) low Earth orbit (LEO) positioning, navigation and timing (PNT) mission, as parameterised signal designs.

kind = "leo-signal"
noise_figure_db = 2.0
antenna_temp_k = 290.0
loop_bandwidth_hz = 1.0
integration_time_s = 0.02
correlator_spacings_chips = [1.0, 0.5, 0.2, 0.1]
reference_spacing_chips = 0.5
tracking_threshold_dbhz = 25.0

Open in Kshana Studio · Not yet on GitHub

leo-band-trade.toml

kind leo-signalnot matched to a ledger module by name

LEO-PNT band trade, UHF to wide C band: what a low Earth orbit (LEO) positioning, navigation and timing (PNT) signal gains and loses in each band, independent of any particular system.

kind = "leo-signal"
presets = ["generic-bands"]
noise_figure_db = 2.0
antenna_temp_k = 290.0
loop_bandwidth_hz = 1.0
integration_time_s = 0.02
correlator_spacings_chips = [1.0, 0.5, 0.2, 0.1]
reference_spacing_chips = 0.5

Open in Kshana Studio · Not yet on GitHub

xona-pulsar-signals.toml

kind leo-signalnot matched to a ledger module by name

Xona Pulsar signals: the X1 (L1 band) and X5 (L5 band) signals of a commercial low Earth orbit (LEO) positioning, navigation and timing (PNT) constellation, from their published signal table (Leclère, Marathe and Reid, ION GNSS+ 2025, https://arxiv.org/abs/2509.19551), as the compiled-in xona-pulsar preset.

kind = "leo-signal"
presets = ["xona-pulsar"]
noise_figure_db = 2.0
antenna_temp_k = 290.0
loop_bandwidth_hz = 1.0
integration_time_s = 0.02
correlator_spacings_chips = [1.0, 0.5, 0.2, 0.1]
reference_spacing_chips = 0.5

Open in Kshana Studio · Not yet on GitHub

One-way link budget over the CCSDS 401 / DSN 810-005 link equation: free-space path loss, C/N₀, Eb/N₀, margin and closure for a transmit EIRP, receive G/T, range, data rate and band (s|x|ka) against a required Eb/N₀. A deterministic engineering calculation from the supplied inputs (not a calibrated terminal datasheet).

lunar-attack-surface#

Lunar surface-navigation signal-security attack surface (P1): composes the open signal-security analyses into one binary-reachable run. Reports (1) the AFS received power and its power SURPLUS versus a terrestrial GPS reference, plus the 12-18 dB sensitivity band as a genuine multi-axis sweep over the link inputs (reference level x EIRP x slant range) with the 25x-rounded / 28x-unrounded linear-factor reconciliation. REVISED (rule R4): this reported a 15.6 dB power DEFICIT and a 32x/36x factor until the GPS reference was corrected from -125 / -128.5 (which are the dBm figures) to -155 / -158.5 dBW, the ICD-GPS-200 values the jamming module has always carried. The sign inverts: the modelled lunar AFS signal is 14.4 dB STRONGER than terrestrial GPS L1 C/A, not weaker. The received power itself did not move by a bit, and the linear factor is the old one over exactly 1000, which is exactly the 30 dB dBm-to-dBW offset; (2) the required attacker transmit power to spoof (J/S = 3 dB) and to deny (J/S = 30 dB) at each standoff, the inverse of the J/S link; (3) the orbital capture footprint under a real uniform-aperture antenna pattern (Airy [2 J1(x)/x]^2), an altitude-limited sub-hemispheric cap whose limb is NOT captured; (4) a computed tracking-loop spoof-capture pull-in outcome (does a matched-code spoofer at a given power advantage and code offset actually drag the DLL/PLL) rather than the asserted 3 dB threshold; (5) the airless-body geometric horizon reach of a raised surface transmitter; and (6) the OSNMA/TESLA authentication budget (20 bit/s overhead = ~40 % of a 50 bit/s AFS nav message, key-disclosure latency, 2^-40 forgery). An empty body reproduces the P1 baseline; every input is defaulted and overridable. VALIDATED sub-results carry their source module's oracle (closed-form dB radiometry; inverse-J/S round trip; Airy pattern vs A&S Bessel and spherical-cap geometry; DLL/PLL pull-in vs Kaplan & Hegarty; spherical-tangent horizon identity vs eo_payload; OSNMA SIS-ICD field sizing). MODELLED: the representative geometry/power magnitudes and the specific capture-map cell values. Not a certified security product.

lunar-attack-surface.toml

kind lunar-attack-surfacenot matched to a ledger module by name

Lunar surface-navigation signal-security attack surface (paper P1).

kind = "lunar-attack-surface"
afs_eirp_dbw = 26.0
user_gain_dbi = 3.0
slant_range_m = 3.0e6
carrier_hz = 2.4e9
gps_reference_dbw = -155.0
gps_reference_min_dbw = -158.5
transmitter_altitude_m = 100_000.0

Open in Kshana Studio · View on GitHub

lunar-beacon#

Surface-beacon augmentation of a lunar orbital navigation service, as a runnable before/after table. A south-polar user sees a sparse orbital set in a narrow patch of sky, so the ranging geometry is ill-conditioned; a few SURVEYED SURFACE BEACONS supply the low-elevation, wide-azimuth line-of-sight rows an all-overhead set lacks, and the horizontal dilution of precision collapses. The scenario reports three configurations at one epoch — satellites alone, satellites plus the visible beacons, and a larger constellation as the alternative route to the same geometry — each with its visible-source counts, its full DOP, and the realised 1-sigma accuracy in METRES obtained by multiplying through a per-beacon user-equivalent ranging error assembled as the root-sum-square of clock-synchronisation, multipath and survey terms. Beacon visibility is the airless-Moon two-height geometric horizon (no atmosphere, so the bound is exact), and the DOP assembly is the same kernel cross-checked against gnss_lib_py in tests/dop_reference.rs. WHY THIS KIND EXISTS: the module behind it has been in the engine and checked against an independent DOP path since L08/L09, but it was not reachable from a run — no kind, no dispatch arm, no bundled file. The README advertised the capability and the verification matrix carried NO row for it at all, so it was simultaneously claimed in prose and unclaimed in the ledger, while being unreachable in the engine. The defaults are the geometry that already carries a committed golden (a user at -80 deg with a 2 m antenna, three beacons at -80/0, -79/+60 and -79/-60 at 2 km, a six-satellite illustrative LCNS snapshot at t=0, a 5 deg mask), so a bare run reproduces a table an oracle already covers rather than inventing fresh numbers. MODELLED: the constellation design, the beacon placement and every error-budget magnitude are illustrative inputs, not a fielded survey or a measured link; only the DOP arithmetic, the horizon closed form and the sigma = DOP x sigma_URE relation are externally anchored. Not a service-performance commitment.

lunar-beacon.toml

kind lunar-beaconkind's ledger rows are Modelled · 0 of 1 rows validated

Surface-beacon augmentation of a lunar orbital navigation service.

kind = "lunar-beacon"
n_satellites = 6
comparison_n_satellites = 24
epoch_s = 0.0
elevation_mask_deg = 5.0
clock_sync_m = 1.0
multipath_m = 0.5
survey_m = 0.3

Open in Kshana Studio · View on GitHub

lunar-differential-pnt#

Modelled lunar DIFFERENTIAL PNT (a lunar DGNSS/SBAS analogue): a NovaMoon-class reference station at a KNOWN selenographic location computes per-satellite differential corrections from an ILLUSTRATIVE, public-source Moonlight/LCNS-class constellation (NovaMoon referenced only as a system CLASS, not affiliated with ESA), and a user offset by baseline_km applies them so the COMMON-MODE orbit + clock errors cancel. The clock term cancels EXACTLY (an algebraic identity); the orbit term leaves only the line-of-sight-difference projection, which → 0 as baseline → 0 (the spatial-decorrelation floor) and grows ≈ linearly with baseline. Reports the user 3-D position error WITH vs WITHOUT corrections, the reduction factor, the error-vs-baseline curve, and a user protection level that REUSES the DO-229E SBAS machinery (crate::sbas) with the differential residual σ. MODELLED — exact cancellation identity + first-order decorrelation model; not real-data validated; no TRL/heritage/agency endorsement. Deterministic if seeded.

lunar-differential-pnt.toml

kind lunar-differential-pntnot matched to a ledger module by name

Lunar DIFFERENTIAL PNT — a lunar DGNSS / SBAS analogue.

kind = "lunar-differential-pnt"
n_sats = 8
sma_km = 9737.4
eccentricity = 0.6
inc_deg = 57.7
argp_deg = 90.0
ref_lat_deg = -89.0
ref_lon_deg = 0.0

Open in Kshana Studio · View on GitHub

lunar-frame-campaign#

Seven-parameter Helmert (similarity) frame datum driven by a SIMULATED OBSERVING CAMPAIGN rather than by an injected transform. A network of Earth stations observes a catalogue of lunar-surface beacons over an explicit schedule; the lunar-VLBI delay partials are accumulated over that schedule into a beacon-coordinate Fisher information matrix exactly as lunar-vlbi-fim does; and that information is propagated through the Helmert design A = [I3 | [p]_x | p] at the catalogue points into the datum covariance H = A^T M_b A, diagnosed by crate::fim::crlb. NO transform is injected and nothing is recovered from a planted answer, so the reported datum accuracy derives from the observing programme: halving the delay sigma halves it exactly, and lengthening the arc improves it because the libration the report MEASURES (sub_earth_direction_sweep_deg) is what separates the line-of-sight beacon coordinate from the plane-of-sky ones. Rank, datum defect, condition number, the full spectrum, the unobservable directions IN THE SEVEN-PARAMETER BASIS, the weakest direction even at full rank and each parameter's share of it are emitted on every run; a parameter the campaign does not constrain is published as NULL with a status, never read out of a near-singular inverse. Beacon-error correlation is measured, not assumed: with the stations held fixed no observation touches two beacons so the information matrix is exactly block-diagonal (offblock_fraction 0), and with the stations estimated the Schur-marginalised block is coupled, with the induced correlation printed and the whole propagation re-run with it discarded so the price of an independence assumption is a number. The same propagation under an isotropic per-coordinate sigma, and the recovery error the lunar-frame-realisation scenario reports, are both run here and printed beside the campaign value with their ratios. MODELLED: the beacon catalogue is sourced but the CAMPAIGN is simulated — the station network and the delay sigma are illustrative inputs, individual delay observations are treated as independent, and the Moon-centre ephemeris, station clocks, troposphere and Earth-orientation parameters are held FIXED, so the datum covariance is a Cramer-Rao bound for a reduced parameter set. Not a geodetic product.

lunar-frame-campaign.toml

kind lunar-frame-campaignnot matched to a ledger module by name

Seven-parameter Helmert lunar frame datum driven by a SIMULATED OBSERVING CAMPAIGN (G9).

kind = "lunar-frame-campaign"

Open in Kshana Studio · View on GitHub

lunar-frame-realisation#

Modelled lunar reference-frame realisation: a 7-parameter Helmert (similarity) datum fit — 3 translation, 3 small-angle rotation, 1 scale — tying an estimated set of selenographic-derived MCMF point coordinates to a datum by weighted least squares (crate::batch_ls::gauss_newton), plus a simple orientation tie expressing the realised small rotation about the ICRF axes relative to the IAU 2015 WGCCRE body orientation. The scenario injects a known small transform (translation ~tens of m, rotation ~µrad, scale ~1e-7) into a well-spread synthetic point network, adds seeded Gaussian noise, recovers the datum, and reports the recovered transform, the per-parameter recovery error vs the injected truth, and the post-fit RMS residual. MODELLED self-consistency — recovers an injected similarity transform (noiseless to ~machine precision), NOT a realisation against real tracking/VLBI data; deterministic (seeded); no TRL/heritage/agency endorsement.

lunar-frame-realisation.toml

kind lunar-frame-realisationnot matched to a ledger module by name

Lunar reference-frame realisation — a 7-parameter Helmert (similarity) datum fit.

kind = "lunar-frame-realisation"
n_points = 8
tx_m = 25.0
ty_m = -40.0
tz_m = 15.0
rot_x_urad = 3.0
rot_y_urad = -2.0
rot_z_urad = 5.0

Open in Kshana Studio · View on GitHub

lunar-integrity#

Lunar south-pole ARAIM protection-level pass vs a representative LunaNet relay set. sigma_ure_m exposes the signal-in-space ranging accuracy (protection levels scale linearly with it, so sweeping it answers what ranging accuracy an alert limit requires). Defaults to the historical LNIS-class south-pole case.

lunanet-araim.toml

kind lunar-integritynot matched to a ledger module by name

Lunar south-pole integrity: an Artemis-region landed receiver against a representative LunaNet relay set, ARAIM protection levels over a 24 h pass.

kind = "lunar-integrity"
step_s = 3600.0
duration_s = 86400.0
alert_limit_m = 50.0
p_hmi = 1.0e-4

Open in Kshana Studio · View on GitHub

lunar-interop-export#

Modelled lunar interoperability export: emits the lunar reference frame, lunar time scale and lunar ephemeris in LunaNet/IOAG-aligned, CCSDS-based interchange forms with round-trip / field conformance. REUSES the crate's CCSDS OEM 2.0 emitter+parser (crate::oem) re-tagged for the lunar context — the OEM REF_FRAME carries the IAU 2015 WGCCRE lunar body frame (MOON_ME / MOON_PA), TIME_SYSTEM the lunar time scale (LTC / TCL / UTC), CENTER_NAME = MOON — over a sample illustrative LCNS-class ephemeris (positions from crate::lunar_service, velocity by finite difference). Also emits a LunaNet/IOAG-aligned lunar-time descriptor (scale id, secular rate µs/day from crate::lunar_time, published band, reference surface) that round-trips via serde_json, and wraps the artifacts in the existing KIF envelope (crate::interchange) with the MODELLED honesty label. Reports artifacts emitted, OEM line count, field-conformance pass + present/missing field list, OEM round-trip ok, time-metadata round-trip ok, and KIF byte size. MODELLED — deterministic round-trip + field-name conformance vs published CCSDS OEM + LunaNet/IOAG field semantics is the oracle; NOT a certified interoperability conformance test; illustrative public-source ephemeris, not affiliated with ESA; no TRL/heritage/agency endorsement.

lunar-interop-export.toml

kind lunar-interop-exportnot matched to a ledger module by name

Lunar interoperability export — LunaNet / IOAG-aligned, CCSDS-based interchange.

kind = "lunar-interop-export"
frame = "MOON_ME"
time_system = "LTC"
n_states = 9
step_min = 30.0
epoch = "2030-01-01T00:00:00"
object = "LCNS-ILLUSTRATIVE-1"

Open in Kshana Studio · View on GitHub

lunar-jamming#

Lunar-native RF jamming: per-satellite jammer-to-signal ratio, effective C/N₀ and loss of lock for a selenographic surface user under a lunar surface (or raised) jammer, over the illustrative public-source Moonlight/LCNS-class lunar-orbit constellation. Composes the existing open jamming physics (jamming::j_over_s_db, effective_cn0_dbhz, rx_antenna_gain_db, lock_status, q_factor) with the existing lunar sky geometry (lunar_service::LunarConstellation + topocentric, lunar::selenographic_to_mcmf); no geometry or radiometry is re-derived. Unlike the Earth jamming kind, the signal leg is NOT a fixed received power: each satellite's isotropic received power is its own link budget EIRP − FSPL(slant range), so the J/S varies satellite by satellite with lunar range and elevation. Reports ONE ROW PER VISIBLE (epoch, satellite) LINK — azimuth, elevation, slant range, both received powers the J/S is the difference of, the J/S, the nominal and effective C/N₀ and the lock status — plus aggregate figures of merit beside (never in place of) that table, and the same table as a CSV artifact. Every emitted numeric field carries a unit and a provenance class. VALIDATED sub-results carry their source module oracle (the anti-jam equation and J/S link of Kaplan & Hegarty §9.4, externally referenced in tests/gnss_denied_jamming_resilience_reference.rs; the lunar geometry of lunar_service). The composition itself is cross-checked against an independent two-link-budget path (linkbudget::received_signal_power_dbw, a different free-space-loss expression) to 1e-9 dB. MODELLED: the illustrative constellation, the representative EIRP / jammer power / antenna gains / noise temperature, and the absence of terrain shadowing, multipath, AGC dynamics and adaptive nulling. Not a certified denial-of-service product. With a jammer configured the report also carries a DENIAL CONTOUR WITH AN UNCERTAINTY BAND rather than a contour read off one scalar: the full measured wanted-signal C/N₀ distribution over the per-satellite table (n, min, p05, p25, median, p75, p95, max, mean, sample stdev, and the sample's own asymmetry), and the contour evaluated at each of those order statistics under BOTH denial criteria the engine recognises — the incumbent power-ratio one (J/S = 30 dB, as in attack-surface and tracking-loop) and the loss-of-lock one (effective C/N₀ falling to tracking_threshold_dbhz, the criterion this report's own status column uses) — on both axes of the denial plane (required jammer EIRP at the scenario standoff, denial standoff at the scenario EIRP). The band edges ARE contour(p05) and contour(p95), the same closed-form map applied to the sample's own quantiles: not a sigma fitted to the sample and not median ± k·stdev, with stdev emitted for continuity and used by nothing. A quantile already at or below the tracking threshold has no finite denying J/S and its loss-of-lock columns are null with a counted reason, never a clamped radius.

lunar-jamming.toml

kind lunar-jammingnot matched to a ledger module by name

Lunar-native RF jamming: per-satellite J/S for a lunar surface user.

kind = "lunar-jamming"
n_sats = 4
sma_km = 9737.4
eccentricity = 0.6
inc_deg = 57.7
argp_deg = 90.0
site_lat_deg = -89.67
site_lon_deg = 129.78

Open in Kshana Studio · View on GitHub

lunar-joint-od-clock#

Modelled joint multi-technique lunar OD + clock batch estimator on a SIMULATED network: a Gauss-Newton snapshot fit that fuses Earth-baseline geodetic VLBI delays, lunar-local station↔satellite ranges and inter-satellite ranges to recover, together, a lunar surface station's 3-D position, a small constellation's positions and every asset's clock offset from an injected truth. The headline honest result — VLBI makes the station's full 3-D position observable where lunar-local ranging alone leaves a weakly-observed direction — is reported as the with-vs-without-VLBI station-error contrast. MODELLED simulated closed-loop recovery (truth shares the observation model), deterministic (seeded), NOT real-data validated; no force-model propagation inside the solver; no TRL/heritage/agency endorsement.

lunar-joint-od-clock.toml

kind lunar-joint-od-clocknot matched to a ledger module by name

Lunar joint multi-technique OD + clock determination (a SIMULATED network).

kind = "lunar-joint-od-clock"
n_sat = 3
n_earth = 6
seed = 42
sigma_vlbi_s = 1.0e-11
sigma_range_m = 0.1
sigma_isl_m = 0.1
station_lat_deg = -88.0

Open in Kshana Studio · View on GitHub

lunar-llr-datum#

Seven-parameter Helmert lunar frame datum driven by a REAL, ARCHIVED observing campaign rather than a simulated one. Where lunar-frame-campaign removed the injected transform but still stated its station network, its schedule and its per-observation sigma as ILLUSTRATIVE inputs, this kind takes all three from measurement: the epochs are the ground-transmit times of archived ILRS Consolidated Laser Ranging Data normal points, the observations are the laser ranges really fired at the five retroreflector arrays on the Moon, and every observation weight is that normal point's own archived precision bin_rms/sqrt(n_raw) read out of the file. Station coordinates come from the IERS ITRF2020 SLR solution (propagated to epoch by their published velocities) and the reflector coordinates from JPL DE430 Table 7 in the mean-Earth/mean-rotation frame the IAU 2015 WGCCRE model realises. Range partials accumulate into the joint reflector-coordinate Fisher information matrix and propagate through the same Helmert design into the datum covariance, diagnosed by crate::fim::crlb. Rank, defect, condition, spectrum, unobservable directions in the seven-parameter basis, the weakest direction at full rank and each parameter's share of it are emitted on every run, and an unconstrained parameter is published as NULL with a status. Inter-array correlation is MEASURED at exactly zero rather than assumed, because a laser range touches one array. A record the catalogues cannot place — a station with no published ITRF position — is SKIPPED AND COUNTED, never given a substituted coordinate. WHICH LINKS ARE MEASURED AND WHICH ARE MODELLED IS THE REPORT, NOT A FOOTNOTE: the Moon-centre ephemeris and the IAU body orientation remain modelled and their combined size is emitted as the observed-minus-computed one-way range residual over every point used; troposphere, solid-body tides, station eccentricity, polar motion, UT1-UTC, relativistic delay and station clocks are absent and inside that residual. Because an ephemeris error reaches a covariance only through the direction of each line of sight, every run also re-solves the whole datum with all partials tilted by sensitivity_tilt_deg (sign alternating) and emits the ratio, so the covariance's insensitivity to the modelled ephemeris is a number rather than an argument. The simulated campaign's own figures are RUN and printed beside the measured ones, not transcribed. MODELLED: the seven-parameter figures are a Cramer-Rao bound for a reduced parameter set on a real schedule — not a solved datum, not an LLR analysis and not a geodetic product. The committed real-data slice ships with the repository but not with the published crate; point data_dir at a copy of it.

lunar-llr-datum.toml

kind lunar-llr-datumnot matched to a ledger module by name

Seven-parameter Helmert lunar frame datum from a REAL, ARCHIVED observing campaign (V3).

kind = "lunar-llr-datum"

Open in Kshana Studio · View on GitHub

lunar-time-budget#

MODELLED end-to-end Coordinated Lunar Time (LTC) time-error budget: the seven LTC error terms assembled as time-error curves x_i(τ) over a whole averaging-time grid, root-summed into x_Σ(τ), and the clock-vs-frame CROSSOVER τ at which the growing clock term overtakes the constant real-time frame-realisation term (below it the budget is frame-limited, above it clock-limited) — the honest answer to the single-τ artifact. The τ-slopes are closed-form and analytically checkable (clock τ^{+1/2}/τ^{+1}, floors τ^0, measurement τ^{-1/2}) and the clock rows reproduce the published one-day clock specs (crate::clock_specs); the RF/optical-link, frame-realisation, relativistic-residual and ephemeris floor MAGNITUDES are Modelled budget allocations (documented defaults, caller-overridable), not measurements. The contribution is the reproducible crossover τ, not a certified per-term number; not certified for operational timekeeping.

lunar-time-budget.toml

kind lunar-time-budgetkind's ledger rows are Modelled · 0 of 1 rows validated

Coordinated Lunar Time (LTC) end-to-end time-error budget over a tau grid.

kind = "lunar-time-budget"
clock = "passive-h-maser"

Open in Kshana Studio · View on GitHub

lunar-time-offset#

Modelled relativistic Earth–Moon clock rate (Lunar Coordinate Time, LTC/TCL): the secular LTC−TT rate from the self-potential difference and the Moon's kinetic term, reported with the published 56–59 µs/day band, plus the accumulated offset over a horizon.

lunar-time-offset.toml

kind lunar-time-offsetnot matched to a ledger module by name

Lunar coordinate time (LTC/TCL): the relativistic Earth-Moon clock rate.

kind = "lunar-time-offset"
epoch_year = 2000
epoch_month = 1
epoch_day = 1
horizon_days = 1.0

Open in Kshana Studio · View on GitHub

lunar-vlbi#

Modelled lunar geodetic VLBI delay observable: an Earth baseline (two ground stations, GCRS) observes a one-way signal from a NovaMoon-class lunar-surface beacon. Emits the near-field two-range-difference delay, its rate, and the wavefront-curvature near-field correction over a pass — cross-checked against the same-codebase plane-wave Δ-DOR observable in the far-field limit, with finite-difference-verified partials. MODELLED, NOT validated against real VLBI data; carries the frame-consistency, xp=yp=0 polar-motion and plane-wave-vs-near-field caveats.

lunar-vlbi.toml

kind lunar-vlbikind's ledger rows are Modelled · 0 of 1 rows validated

Lunar geodetic VLBI: an Earth baseline observing a lunar-surface beacon.

kind = "lunar-vlbi"
beacon_lat_deg = 0.0
beacon_lon_deg = 0.0
beacon_alt_m = 0.0
epoch_year = 2024
epoch_month = 1
epoch_day = 1
horizon_hours = 6.0

Open in Kshana Studio · View on GitHub

lunar-vlbi-fim#

Lunar-VLBI station-coordinate covariance: the delay partials of the lunar-vlbi observable accumulated over an explicit SCHEDULE (baselines x epochs) into a Fisher information matrix, inverted, and reported as the station coordinate covariance and the per-coordinate station sigma — a computed engine output rather than a scalar delay precision pushed through an assumed isotropic g = 3 equipartition factor. The state carries Earth-FIXED (ITRS) station coordinates, so the Jacobian is the inertial partial rotated by each epoch's GCRS->ITRS matrix: Earth rotation is what makes those coordinates observable, and the report MEASURES the Earth-fixed line-of-sight sweep and the beacon declination rather than assuming them. One observation is one (baseline, epoch) pair with BOTH stations above the elevation mask, weighted 1/delay_sigma_s^2. Reports rank, datum defect, condition number, the full information spectrum, the covariance matrix, per-station per-axis and 3-D sigmas, and the free-network null space on every run; under a rank deficiency the headline sigma is published as NULL with a status, never read out of a near-singular inverse. The equipartition value c*delay_sigma_s*sqrt(g/N) for the SAME schedule is emitted beside the computed value with the ratio, together with the isotropic trace bound sqrt(p/trace(M)) that AM-HM makes a hard floor — so the ratio is the anisotropy the assumption discarded. The delay closure tau_ik = tau_ij + tau_jk makes only n-1 of the n(n-1)/2 baselines geometrically independent; the report states both counts. MODELLED: the Moon-centre ephemeris, station clocks, troposphere and Earth-orientation parameters are held FIXED and observations are treated as independent, so the covariance is a Cramer-Rao bound for a reduced parameter set, not a predicted session result; the delay sigma, station coordinates and schedule are inputs. The partial the geometric-delay Jacobian leaves out (the differenced Shapiro term) is measured by finite difference and emitted. Not a geodetic product.

lunar-vlbi-fim.toml

kind lunar-vlbi-fimnot matched to a ledger module by name

Lunar-VLBI station-coordinate covariance from an explicit observing schedule (G8, paper D3).

kind = "lunar-vlbi-fim"

Open in Kshana Studio · View on GitHub

mars-pnt#

Deep-space Mars PNT: a simulated MARCONI relay constellation (areostationary + inclined relays broadcasting one-way + relaying two-way to a deep-space station) navigates a reference user (transfer | lmo | surface) through the joint one-way/two-way radiometric fusion estimator. Reports per-epoch geometry/visibility, achieved RMS vs truth, and the formal covariance (1σ / 3σ position) — an honest simulated FoM, NOT a certified protection level.

mars-pnt-lmo.toml

kind mars-pntnot matched to a ledger module by name

Mars PNT — Low-Mars-Orbit user navigated against the simulated MARCONI relay constellation (areostationary relays broadcasting one-way + relaying two-way to a deep-space station) through the joint one-way/two-way radiometric fusion estimator.

kind = "mars-pnt"
user = "lmo"
clock_class = "uso"
step_s = 60.0
duration_s = 7200.0
nmax = 4
range_sigma_m = 1.0
doppler_sigma_mps = 1.0e-4

Open in Kshana Studio · View on GitHub

mars-pnt-surface.toml

kind mars-pntnot matched to a ledger module by name

Mars PNT — a fixed surface user (a lander / rover on the rotating Mars surface) navigated against the simulated MARCONI relay constellation through the joint one-way/two-way radiometric fusion estimator.

kind = "mars-pnt"
user = "surface"
clock_class = "uso"
step_s = 30.0
duration_s = 7200.0
nmax = 4
range_sigma_m = 1.0
doppler_sigma_mps = 1.0e-4

Open in Kshana Studio · View on GitHub

mars-pnt-transfer.toml

kind mars-pntnot matched to a ledger module by name

Mars PNT — a Mars transfer / capture user (a high, eccentric areocentric arc — the long arc a vehicle flies on approach / in a capture orbit) navigated against the simulated MARCONI relay constellation through the joint one-way/two-way radiometric fusion estimator.

kind = "mars-pnt"
user = "transfer"
clock_class = "dsac"
step_s = 120.0
duration_s = 28800.0
nmax = 4
range_sigma_m = 1.0
doppler_sigma_mps = 1.0e-4

Open in Kshana Studio · View on GitHub

moonlight-service-volume#

Modelled lunar navigation service-volume analysis from an ILLUSTRATIVE, public-source Moonlight/LCNS-class lunar-orbit constellation (not affiliated with ESA): sweeps a selenographic lat/lon grid over a time horizon and reports DOP / coverage / availability (≥4 sats AND PDOP < threshold) plus a generalised lunar ARAIM protection-level (HPL/VPL) envelope over the volume. The DOP geometry REUSES the gnss_lib_py-VALIDATED kernel (crate::orbit::dop); the protection level REUSES the LunaNet LNIS lunar ARAIM machinery (crate::lunar, σ_URE≈30 m) and reduces to the existing south-pole PL as a special case. MODELLED composition: a circular-/elliptical-Keplerian relay set (not the real differential-corrected LCNS/NRHO ephemeris), a mean-rotation Moon (no libration/precessing pole). Deterministic (pure geometry). No TRL/heritage/agency endorsement.

moonlight-service-volume.toml

kind moonlight-service-volumenot matched to a ledger module by name

Lunar navigation SERVICE-VOLUME analysis — Moonlight / LCNS-class constellation.

kind = "moonlight-service-volume"
n_sats = 8
sma_km = 9737.4
eccentricity = 0.6
inc_deg = 57.7
argp_deg = 90.0
lat_min_deg = -90.0
lat_max_deg = -60.0

Open in Kshana Studio · View on GitHub

ntn-positioning#

Positioning from a 5G non-terrestrial network (NTN) downlink in the mobile-satellite service (MSS) S band (3GPP band n256, downlink 2170 to 2200 MHz; default carrier 2172.5 MHz): the Cramér-Rao bound (CRB) on time of arrival, c / (2 pi beta sqrt(2 (C/N0) T)) with beta the root-mean-square (Gabor) bandwidth of the flat OFDM spectrum (B/sqrt(12)), and on the Doppler of a complex tone, sqrt(3 / (2 pi^2 (C/N0) T^3)), for each signal (default a 5 MHz New Radio channel with 4.5 MHz occupied and a 200 kHz narrowband channel with 180 kHz occupied); then, over any LEO constellation, downlink time-of-arrival fixes with an unknown receiver clock (seeded, with the bound plus a network synchronisation error as the sigma), their PDOP and formal 3D sigma, and a single-satellite Doppler fix over the longest pass with the height held. MODELLED: the bandwidth-to-bound step is the textbook closed form, checked against numerical integration of the flat and band-limited BPSK spectra (internal consistency, no published worked figure pinned), and the positioning accuracy is a bound on a multipath-free channel with a stated synchronisation error, not an achieved result.

ntn-5g-positioning.toml

kind ntn-positioningnot matched to a ledger module by name

Positioning from a 5G non-terrestrial network (NTN) downlink in the mobile-satellite S band.

kind = "ntn-positioning"
seed = 5
carrier_hz = 2172.5e6
integration_s = 0.1
doppler_integration_s = 1.0
sync_error_m = 1.0
duration_s = 600.0
step_s = 10.0

Open in Kshana Studio · Not yet on GitHub

oem-interop#

CCSDS OEM interoperability bridge: import an Orbit Ephemeris Message produced by an external flight-dynamics tool (GMAT/Orekit/STK all emit OEM) and report its segments/objects/frames/epoch-span plus a velocity-consistency check; with no input it round-trips a generated reference orbit and reports the import↔export fidelity. MODELLED structural/physical ingest check, NOT an orbit-accuracy validation of the source.

oem-interop.toml

kind oem-interopnot matched to a ledger module by name

CCSDS OEM interoperability-bridge demonstrator (GMAT / Orekit / STK interop).

kind = "oem-interop"

Open in Kshana Studio · View on GitHub

orbit#

GNSS availability + DOP from an orbital constellation (Walker / TLE / RINEX).

orbit-gnss-challenged.toml

kind orbitnot matched to a ledger module by name

GNSS availability derived from orbital geometry (not hand-authored windows).

kind = "orbit"
seed = 7
threshold_ns = 5.0
mask_deg = 10.0
sigma_uere_m = 1.0
step_s = 60.0
duration_s = 86400.0
altitude_km = 8000.0

Open in Kshana Studio · View on GitHub

orbit-molniya.toml

kind orbitnot matched to a ledger module by name

GNSS availability for a highly-eccentric (Molniya) user, from orbital geometry.

kind = "orbit"
seed = 11
threshold_ns = 5.0
mask_deg = 5.0
sigma_uere_m = 1.0
step_s = 120.0
duration_s = 43200.0
altitude_km = 20229.0

Open in Kshana Studio · View on GitHub

orbit-multignss.toml

kind orbitnot matched to a ledger module by name

Multi-GNSS availability from orbital geometry: GPS + Galileo combined.

kind = "orbit"
seed = 7
threshold_ns = 5.0
mask_deg = 10.0
sigma_uere_m = 1.0
step_s = 60.0
duration_s = 86400.0
altitude_km = 8000.0

Open in Kshana Studio · View on GitHub

orbit-real-tle.toml

kind orbitnot matched to a ledger module by name

GNSS availability from REAL satellite geometry, via two-line element sets.

kind = "orbit"
seed = 13
threshold_ns = 10.0
mask_deg = 5.0
sigma_uere_m = 1.0
step_s = 120.0
duration_s = 43200.0
altitude_km = 500.0

Open in Kshana Studio · View on GitHub

orbit-rinex.toml

kind orbitnot matched to a ledger module by name

GNSS availability from a real RINEX 3 broadcast ephemeris.

kind = "orbit"
seed = 13
threshold_ns = 10.0
mask_deg = 5.0
sigma_uere_m = 1.0
step_s = 120.0
duration_s = 43200.0
altitude_km = 500.0

Open in Kshana Studio · View on GitHub

orbit-sgp4-gps.toml

kind orbitnot matched to a ledger module by name

GNSS availability from the REAL GPS constellation propagated with SGP4/SDP4.

kind = "orbit"
seed = 17
threshold_ns = 10.0
mask_deg = 5.0
sigma_uere_m = 1.0
step_s = 120.0
duration_s = 43200.0
altitude_km = 500.0

Open in Kshana Studio · View on GitHub

passes#

Ground-station pass prediction: the time-domain visibility passes (AOS/TCA/LOS, maximum elevation, duration) of a circular orbit over a station above an elevation mask across a window, with interpolated rise/set crossings and total access time. MODELLED Keplerian propagation + Earth rotation (no SGP4 drag/J2 regression), TCA at the sample-step resolution, no light-time/refraction correction.

passes.toml

kind passeskind has validated ledger rows · 1 of 1 rows validated

Ground-station pass prediction demonstrator (ground segment & operations).

kind = "passes"
altitude_km = 550.0
inclination_deg = 97.6
raan_deg = 0.0
arg_lat_deg = 0.0
station_lat_deg = 52.2
station_lon_deg = 4.4
station_alt_m = 0.0

Open in Kshana Studio · View on GitHub

pvt#

Real-observation single-point positioning: solve a receiver's position from a RINEX 3 observation file and a broadcast-navigation file (code pseudoranges, broadcast ephemeris, Klobuchar iono, Saastamoinen/Niell tropo), optionally validated against a surveyed coordinate.

pvt-abmf.toml

kind pvtnot matched to a ledger module by name

Real-observation single-point positioning (SPP) from a surveyed IGS station.

kind = "pvt"
mask_deg = 5.0
dual_frequency = true
truth_ecef = [2919786.4480, -5383745.1780, 1774604.7340]
obs_rinex = """
nav_rinex = """

Open in Kshana Studio · View on GitHub

quantum-anomaly-detect#

MODELLED fault/anomaly detection for quantum PNT systems: a labelled fault catalog (clock frequency-jump/drift/lock-loss; sensor bias-step/dropout), a detection-statistic ROC AUC (with a bootstrap CI from the externally-validated eval_stats) and a minimum-detectable-fault at a fixed false-alarm rate, with the quantum-clock-aided monitor (lower noise) detecting smaller faults — as honest TradeEvidence + representativeness. Gaussian detection-statistic model (AUC = Phi(mu/(sigma*sqrt2))); models the class, illustrative public-source params, no TRL/flight/certification.

quantum-anomaly-detect.toml

kind quantum-anomaly-detectnot matched to a ledger module by name

Fault/anomaly detection for quantum PNT systems — labelled fault catalog + ROC AUC + minimum-detectable fault, quantum-clock-aided vs classical monitor. MODELLED; illustrative public-source params; models the class, no TRL/flight claim.

kind = "quantum-anomaly-detect"
fault_mu = 1.0
quantum_sigma = 0.3
classical_sigma = 1.0
pfa = 1.0e-3
pd = 0.9
samples = 2000
seed = 42

Open in Kshana Studio · View on GitHub

quantum-gnss-free-nav#

MODELLED GNSS-free quantum navigation: during a GNSS outage, a quantum (cold-atom interferometer) inertial budget vs a classical navigation-grade INS — position-error growth over the coast, holdover to a position threshold, and the quantum-vs-classical trade as honest TradeEvidence with representativeness. Honest observability note: with no external fix the accelerometer bias is unobservable so the error grows; the quantum sensor slows but does not close that gap. Illustrative public-source device params; models the class, no TRL/flight/certification.

quantum-gnss-free-nav.toml

kind quantum-gnss-free-navnot matched to a ledger module by name

GNSS-free quantum navigation — quantum (cold-atom interferometer) vs classical navigation-grade INS dead-reckoning over a GNSS outage. MODELLED; illustrative, public-source device parameters; models the class, no TRL/flight claim.

kind = "quantum-gnss-free-nav"
outage_s = 300.0
threshold_m = 100.0

Open in Kshana Studio · View on GitHub

quantum-time-transfer#

MODELLED trusted-quantum-timing chain: an end-to-end quantum (optical-lattice clock + entanglement/single-photon link) vs classical (CSAC + RF two-way) time-transfer budget, a reused timing protection level + a delay/replay-attack security FoM (1-P_md), a clock-anomaly detection probability + CUSUM latency, and the quantum-vs-classical trade as honest TradeEvidence with a representativeness + gaps-to-flight record. Illustrative public-source device/link params; models the class, no TRL/flight/certification claimed.

quantum-time-transfer.toml

kind quantum-time-transfernot matched to a ledger module by name

Trusted quantum timing — end-to-end time-transfer chain, secure dissemination, anomaly detection and a quantum-vs-classical trade. MODELLED; illustrative, public-source device/link parameters; models the class, no TRL/flight claim.

kind = "quantum-time-transfer"
integration_s = 1.0
dissemination_interval_s = 100.0
link_loss_db = 30.0
classical_link_sigma_s = 1.0e-9
monitor_pfa = 1.0e-3
attack_delay_s = 5.0e-9
clock_fault_sigma = 4.0

Open in Kshana Studio · View on GitHub

quantum-trade#

Quantum-vs-classical PNT trade (13503): timing-holdover + inertial-holdover benefit of a candidate clock (a measured-ADEV curve — the defensibility hinge — or a quantum clock class) vs a classical baseline class, with the long-tau floor-assumption caveat carried on the artifact, plus a GNSS-denied resilience-vs-time envelope. MODELLED; quantifies (never validates) a partner device. The candidate clock is a measured curve (candidate_adev_taus + candidate_adev_values, equal length, at least 2 points; it wins when both forms are given) or a candidate_clock_class.

quantum-trade.toml

kind quantum-tradekind's ledger rows are Modelled · 0 of 1 rows validated

Quantum-vs-classical PNT trade with measured-ADEV ingestion (ESA AO/1-13503 demonstrator).

kind = "quantum-trade"
timing_threshold_s = 20.0e-9
position_threshold_m = 100.0
baseline_clock_class = "csac"
candidate_adev_taus   = [1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0]
candidate_adev_values = [5.0e-16, 1.6e-16, 6.0e-17, 4.0e-17, 6.0e-17, 2.0e-16]
resilience_times_s = [1.0, 60.0, 600.0, 1800.0, 3600.0, 7200.0, 14400.0, 28800.0]

Open in Kshana Studio · View on GitHub

realtime-frame-eop#

Real-time lunar frame / Earth-orientation prediction budget: P4 Table 1 (the frame-error consistency check — post-processed ~0.27 m ↔ ~0.010 ms and real-time ~15 m ↔ ~0.5 ms, each frame position expressed as its equivalent UT1 error via the L19 lever arm Δr = D_EM·ω⊕·ΔUT1) and Table 2 (measured UT1 prediction error vs horizon — the L18 curve read directly off the real IERS finals2000A series: the Bulletin A − Bulletin B final floor and the multi-day persistence-predictor error, each mapped to a Moon-frame position by L19), plus the L21 root-sum-square real-time frame-error budget (EOP + ephemeris + realisation floor). VALIDATED closed form (the L19 lever arm, ω⊕ cross-checked against the CIO Earth-rotation angle) and VALIDATED real data (the L18 curve off the real finals2000A rows); MODELLED are the lunar-relay OD covariance magnitudes and frame-realisation floor (representative allocations) and the persistence predictor (not IERS's operational Bulletin A algorithm). Not a certified real-time frame product.

realtime-frame-eop.toml

kind realtime-frame-eopnot matched to a ledger module by name

Real-time lunar frame / Earth-orientation (EOP) prediction budget.

kind = "realtime-frame-eop"
epoch = "2022-01-01"
horizons_days = [1, 2, 3]

Open in Kshana Studio · View on GitHub

reentry#

Allen-Eggers ballistic re-entry corridor: peak deceleration (ballistic-coefficient-independent, V_e^2 sin|γ|/(2eH)), the velocity and altitude at peak-g, and the peak-heating velocity, for an entry velocity/flight-path-angle/ballistic-coefficient through an exponential atmosphere. MODELLED ballistic (no-lift) analytic entry; heating output is the peak-heating VELOCITY, not a heat-flux (no aerothermal/TPS model).

reentry.toml

kind reentrykind's ledger rows are Modelled · 0 of 1 rows validated

Ballistic re-entry corridor demonstrator (Allen-Eggers, mission analysis).

kind = "reentry"
entry_velocity_m_s = 7800.0
flight_path_angle_deg = 6.0

Open in Kshana Studio · View on GitHub

slot-timing#

Slot timing: seconds until a free-running clock leaves the guard of a time-indexed routing or tasking slot (the largest absolute time error the slot tolerates), the contribution of every term at that moment with the dominant one named (fix uncertainty, white phase noise, white, flicker, random-walk and random-run frequency noise, residual frequency offset, temperature, ageing), the time left since the last fix, and the largest fix interval that keeps the clock inside, net of the fix latency. The oscillator is a CLASS default (csac, uso, dsac, tcxo, ocxo or rafs: one cited one-second Allan deviation and an assumed red-noise floor), a telecom-timing DATASHEET PRESET or an inline DATASHEET (Allan-deviation maxima fitted as an envelope, plus ageing and a temperature coefficient), or an inline MEASURED PHASE RECORD (its overlapping Allan deviation fitted by weighted least squares in the white-phase and IEEE Std 1139 frequency-modulation basis, so the red-noise floor is measured rather than assumed). A breach beyond the longest averaging time the datasheet or record supports is flagged as extrapolated. An optional spoofing section adds the timing protection level for a receiver in orbit: orbital speed and period, how long a single ground spoofer can reach the satellite per pass, the clock-aided monitor floor and CUSUM detection latency, the conditional bound, the pull a spoofer at a stated maximum ramp rate accumulates before the satellite leaves its reach or an independent check runs, and whether each ground-contact or crosslink check is independent of that spoofer. VALIDATED: the holdover inversion from a fitted record, held out on a real caesium clock measured against a hydrogen maser (tests/slot_timing_cs5071a_holdout.rs, data-gated); on a measured crystal oscillator the held-out prediction is conservative but not within the bar, so the crystal case is MODELLED. MODELLED: class and datasheet sources, the deterministic terms and the spoofing assessment.

slot-timing-ocxo-leo.toml

kind slot-timingnot matched to a ledger module by name

Slot timing: how long an oven-controlled crystal oscillator (OCXO) on a low-Earth-orbit smallsat stays inside the guard of a time-indexed routing slot after its last Global Navigation Satellite System (GNSS) fix, and how often it needs a fix.

kind = "slot-timing"
preset = "ocxo"
guard_ns = 100.0
k_sigma = 3.0
fix_sigma_ns = 10.0
elapsed_since_sync_s = 600.0
fix_latency_s = 5.0
temperature_excursion_k = 2.0

Open in Kshana Studio · View on GitHub

solar-system#

The whole solar system at one epoch, for PNT (positioning, navigation and timing) around any body. For the Sun, the eight planets, Pluto, the Moon, Phobos, Deimos, Io, Europa, Ganymede, Callisto and Titan it reports the heliocentric position and velocity in the ICRF (International Celestial Reference Frame, equatorial J2000), the heliocentric distance and J2000 ecliptic longitude and latitude, the gravitational parameter, equatorial and mean radius, J2 where published and its reference radius, the sidereal rotation period, the IAU pole and the prime meridian at the epoch, an orbit track sampled over one revolution (heliocentric for planets, parent-centred for moons), and the light time, one-way and two-way range, solar Shapiro delay and Sun separation from an observer body (default Earth); extra from/to links get the same treatment. Positions: the JPL Keplerian elements of Standish and Williams (Table 1 for 1800 AD to 2050 AD, Tables 2a/2b for 3000 BC to 3000 AD) with each planet's nominal error, the Montenbruck & Gill lunar series for the Earth-Moon split, JPL mean elements with the IAU synchronous rotation rate for the Martian and Galilean moons, and the IAU rotation model for Titan. Light time: the radiometric fixed-point solve, transmitter at its retarded position; Newtonian, with the Shapiro delay reported separately. VALIDATED against JPL Horizons (DE441) within twice the nominal error: Mercury to Saturn and the Earth from Table 1 (worst 1.87 times nominal) and all eight planets from Tables 2a/2b (worst 1.71 times), and the Earth to Mars and Jupiter light time. MODELLED, each row labelled: Uranus and Neptune from Table 1 (2.0 and 5.2 times the nominal error against DE441), Pluto (the 1992 row; no stated error), the Moon and the seven moons (measured against Horizons, no published bound).

solar-system-tour.toml

kind solar-systemnot matched to a ledger module by name

The whole solar system at one epoch.

kind = "solar-system"
epoch = "2026-09-28T00:00:00"
observer = "Earth"
track_points = 180
from = "Mars"
to = "Jupiter"
from = "Saturn"
to = "Earth"

Open in Kshana Studio · Not yet on GitHub

space-packet#

CCSDS 133.0-B Space Packet Protocol framing: encode a synthetic TM/TC packet stream (6-octet primary header + data field) and report the per-packet header decode, total octets and an exact encode↔decode round trip. Deterministic exact bit-layout framing — the agency packet-format interop layer; NOT a conformance certification (no secondary-header/CRC/segmentation logic beyond the flags).

space-packet.toml

kind space-packetkind has validated ledger rows · 1 of 1 rows validated

CCSDS 133.0-B Space Packet framing demonstrator (TM/TC interop).

kind = "space-packet"
apid = 100
telecommand = false
packet_count = 4
data_len = 32

Open in Kshana Studio · View on GitHub

space-weather#

Space-weather environment model: solar (F10.7/F10.7a) and geomagnetic (Kp, with the definitional Kp↔ap table) activity indices, the Jacchia-1971 exospheric temperature they drive (validated vs published solar-min/mean/max), and the activity-corrected vs static thermospheric neutral density at a set of altitudes — the solar-cycle density dependence the static USSA76 atmosphere omits. MODELLED: the density correction is a calibrated first-order scale-height coupling, NOT a data-validated (NRLMSISE) atmosphere.

space-weather.toml

kind space-weatherkind's ledger rows are Modelled · 0 of 1 rows validated

Space-weather environment model demonstrator.

kind = "space-weather"
kp = 4.0
altitudes_km = [300.0, 400.0, 500.0, 600.0, 800.0]

Open in Kshana Studio · View on GitHub

spectrum#

L-band spectrum model and waterfall: the whole GNSS L band as one power spectral density (PSD), frequency across, time down, over a scripted jammer timeline. SIGNALS: GPS L1 C/A and L2C (BPSK(1)), Galileo E1 open service (MBOC(6,1,1/11), or BOC(1,1)), GPS L5 and Galileo E5a (BPSK(10)), each at its carrier with the interface-specification minimum received power (IS-GPS-200, IS-GPS-705, Galileo OS SIS ICD) unless overridden; GLONASS, BeiDou and Galileo E6 are not modelled. JAMMERS: continuous-wave tone, flat narrowband noise, linear sawtooth chirp and broadband noise matched to a band's own modulation, each with a centre, a bandwidth, a received power (direct, or EIRP and range through the jamming kind's free-space path loss) and on/off times. Each jammer is scored against each band by its spectral separation coefficient kappa over the receiver bandwidth, and (C/N0)_eff = [1/(C/N0) + sum (J/S) kappa]^-1; for one jammer this equals the jamming kind's anti-jam equation with Q = 1/(R_c kappa), and the report carries that cross-check (and the jamming kind's representative-Q figure beside it). The noise floor is k T_sys with T_sys = T_ant + 290 K (F - 1). The waterfall averages each cell over its bin and its row (chirps exactly, whole sweeps plus the partial one; jammers switching mid-row by their duty), so the C/N0 timeline and the picture come from the same numbers; result.json carries the grid block-averaged in power, per-band C/N0 and J/S per row, and per jammer per band the SSC, Q, J/S, in-band J/S and steady C/N0. Optional [iq]: the model drawn as complex IQ at one instant, written to and read back from a SigMF recording (cf32_le or ci16_le), and compared with a Welch estimate. Optional [recording] (native builds): a real SigMF recording's Welch PSD beside the model. VALIDATED: the signal PSDs against the textbook main-lobe widths (BPSK(n) 2n x 1.023 MHz null to null; BOC(1,1) lobes centred at +/-1.023 MHz) and the spectral separation coefficients against their Parseval closed forms and Kaplan & Hegarty's Q = 1 (CW) and 1.5 (matched). MODELLED: jammer powers, timeline, front-end bandwidths, the continuous-spectrum (no code lines) treatment and the absence of AGC, blanking and antenna pattern.

l-band-waterfall-jamming.toml

kind spectrumnot matched to a ledger module by name

L-band waterfall under jamming: the whole Global Navigation Satellite System (GNSS) L band as one power spectral density (PSD), frequency across, time down, while a scripted sequence of jammers switches on.

kind = "spectrum"
seed = 7
duration_s = 60.0
step_s = 1.0
noise_figure_db = 2.0
antenna_temp_k = 290.0
tracking_threshold_dbhz = 25.0
f_min_mhz = 1160.0

Open in Kshana Studio · Not yet on GitHub

leo-resilience-js-margin.toml

kind spectrumnot matched to a ledger module by name

LEO-PNT resilience from received power: the jammer-to-signal (J/S) margin.

kind = "spectrum"
seed = 12
duration_s = 100.0
step_s = 1.0
noise_figure_db = 2.0
antenna_temp_k = 290.0
tracking_threshold_dbhz = 25.0
f_min_mhz = 1150.0

Open in Kshana Studio · Not yet on GitHub

multi-band-jamming-waterfall.toml

kind spectrumnot matched to a ledger module by name

Multi-band jamming waterfall: low Earth orbit (LEO) positioning, navigation and timing (PNT) signals in four bands (UHF, L, S and C) beside GPS and Galileo, each band with its own jammer, drawn as one waterfall per band on one timeline.

kind = "spectrum"
seed = 11
duration_s = 60.0
step_s = 1.0
noise_figure_db = 2.0
antenna_temp_k = 290.0
tracking_threshold_dbhz = 25.0
f_min_mhz = 1160.0

Open in Kshana Studio · Not yet on GitHub

spoof#

Stochastic time-spoof detector (Neyman–Pearson / χ²₁) with Monte-Carlo P_fa/P_md.

spoof-attack.toml

kind spoofnot matched to a ledger module by name

Active time-spoofing attack: can each clock's integrity monitor catch the spoof before it does harm?

kind = "spoof"
threshold_ns = 20.0
step_s = 10.0
duration_s = 660.0
start_s = 60.0
rate_ns_per_s = 0.1
id = "optical-sr-lattice"
provenance = "Strontium optical lattice clock, space-oriented goal sigma_y(1s)=1e-15 (arXiv:1503.08457); not flown."

Open in Kshana Studio · View on GitHub

spoof-meaconing.toml

kind spoofnot matched to a ledger module by name

Time-spoof detection with an explicit attack shape and a stochastic detector.

kind = "spoof"
threshold_ns = 0.5
step_s = 1.0
duration_s = 1200.0
start_s = 100.0
target_pfa = 0.001
mc_runs = 20000
kind = "meaconing"

Open in Kshana Studio · View on GitHub

spoof-detect#

Combined RF/measurement spoof detector (multi-SV RAIM-consistency + AGC + SQM, fused) vs a parameterised attack (power advantage, carrier-phase alignment, time/position push; TEXBAT-style).

maritime-spoof-position-push.toml

kind spoof-detectnot matched to a ledger module by name

Maritime GNSS spoofing: detecting a transmitter that drags a ship's reported position.

kind = "spoof-detect"
power_advantage_db = 2.0
carrier_aligned = false
push = "position"
push_magnitude_m = 500.0
num_biased = 4
el_imbalance = 0.12
sat_power_dbm = -130.0

Open in Kshana Studio · Not yet on GitHub

spoof-detect.toml

kind spoof-detectnot matched to a ledger module by name

Combined RF/measurement spoof detector: multi-SV RAIM-consistency + AGC + SQM, fused.

kind = "spoof-detect"
power_advantage_db = 1.5
carrier_aligned = false
push = "position"
push_magnitude_m = 75.0
num_biased = 3
el_imbalance = 0.12
sat_power_dbm = -130.0

Open in Kshana Studio · View on GitHub

sweep#

1-D trade-study sweep over a clock-pack parameter.

sweep-clock-stability.toml

kind sweepnot matched to a ledger module by name

Trade study: how does holdover scale with clock stability?

kind = "sweep"
parameter = "classical_q_wf"
metric = "holdover_s"
start = 1.0e-24
stop = 1.0e-18
steps = 25
scale = "log"
seed = 42

Open in Kshana Studio · View on GitHub

sweep-nd#

Generic N-D sweep over any pack via dotted TOML keys / JSON metric paths.

sweep-nd-inertial.toml

kind sweep-ndnot matched to a ledger module by name

Generic N-D parameter sweep over ANY scenario kind. Unlike the clock-only sweep kind, sweep-nd varies dotted TOML keys of the [base] scenario over the Cartesian product of the axes, re-runs each grid node, and reads the chosen metrics out of the result by dotted JSON path. It works for every pack (inertial, gnss-ins, integrity, spoof, …) because it operates at the TOML/result boundary, not on a per-pack Rust type. Native runs evaluate the grid in parallel (no extra dependency); wasm falls back to sequential. The output grid is deterministic and row-major (the last axis varies fastest).

kind = "sweep-nd"
metrics = ["classical.fom.holdover_s", "classical.fom.pos_rms_m"]
key = "threshold_m"
start = 100.0
stop = 500.0
steps = 5
key = "accel_classical.bias"
start = 1.0e-3

Open in Kshana Studio · View on GitHub

telecom-timing#

Telecom timing: time error, maximum time interval error (MTIE) and time deviation (TDEV) of a GNSS holdover, checked against ITU-T masks with a PASS or FAIL and a margin per mask. Input is either a SYNTHETIC HOLDOVER (an oscillator preset -- ocxo, rubidium, caesium or csac, each carrying the stability, aging and temperature figures of a named public Microchip datasheet -- plus the GNSS-loss time, record length and sample interval; the free-running clock carries white, flicker and, where the datasheet fit needs it, random-walk frequency noise, linear aging and a sinusoidal temperature term) or an INGESTED SERIES of [time_s, time_error_ns] pairs given inline (and, on native builds only, a CSV file). Masks: ITU-T G.8272 (07/2025) PRTC-A and PRTC-B (max|TE| 100 / 40 ns, MTIE Tables 1-2, TDEV Tables 3-4); G.8272.1 (2024) Amd. 1 (07/2025) ePRTC locked (30 ns, Tables 1-2) and ePRTC-A holdover (the Table 3 time-error envelope rising from 30 ns to 100 ns over the holdover period H set by the locked duration, MTIE Table 4, TDEV Table 5); G.8273.2 (2023) Amd. 2 (11/2025) T-BC/T-TSC classes A-C (max|TE|, constant time error, low-pass-filtered MTIE and TDEV) and class D (max|TE_L| 5 ns, the only class D figure not left for further study); G.8271.1 (2022) Amd. 3 (05/2025) reference point C (max|TE_L| 1100 / 600 / 100 ns with MTIE Tables 7-1 to 7-3). Every entry a Recommendation marks for further study is absent rather than filled in, and each report lists what is not implemented. Also reports the time to exceed each maximum-time-error budget (defaults: 100 ns ePRTC max|TE_HO|, 400 ns network holdover allocation, 1100 ns point C, 1.5 us class 4), the MTIE/TDEV curves as a CSV table with each mask limit, and a units-and-provenance entry per numeric field. VALIDATED: the MTIE and TDEV estimators against the allantools package on a committed holdover series. MODELLED: the mask tables are transcriptions, and a synthetic holdover is a model built from datasheet maxima, not a measurement of any unit. Not a conformance test.

telecom-prtc-holdover-24h.toml

kind telecom-timingnot matched to a ledger module by name

Telecom timing reference: a rubidium clock that loses its Global Navigation Satellite System (GNSS) reference and holds over for 24 hours, checked against the masks of the International Telecommunication Union Telecommunication Standardization Sector (ITU-T).

kind = "telecom-timing"
seed = 20260925
masks = ["eprtc-a-holdover", "prtc-a"]
oscillator = "rubidium"
gnss_loss_s = 3600.0
duration_s = 90000.0
sample_interval_s = 1.0
locked_te_sigma_ns = 1.0

Open in Kshana Studio · View on GitHub

telecom-tie-ingest.toml

kind telecom-timingnot matched to a ledger module by name

Telecom timing, ingestion example: a time interval error (TIE) series given inline and checked against the masks of the International Telecommunication Union Telecommunication Standardization Sector (ITU-T).

kind = "telecom-timing"
masks = ["prtc-a", "prtc-b", "eprtc", "eprtc-a-holdover", "t-bc-class-c", "g8271-1-point-c"]
holdover_start_s = 300.0
locked_duration_days = 5.0
samples = [

Open in Kshana Studio · View on GitHub

terrain-nav#

GPS-denied terrain-referenced navigation (TERCOM/SITAN): a radar/baro altimeter matches the ground-elevation profile against an SRTM-style DEM to recover the INS drift.

terrain-nav.toml

kind terrain-navnot matched to a ledger module by name

Terrain-referenced navigation (TERCOM/SITAN) — GPS-denied alt-PNT.

kind = "terrain-nav"
dem_seed = 1
start_lat_deg = 12.05
start_lon_deg = 20.05
step_lat_deg = 0.004
step_lon_deg = 0.003
waypoints = 60
drift_lat_deg = 0.5

Open in Kshana Studio · View on GitHub

terrain-slam#

GPS-denied sequential (recursive) terrain-referenced navigation: a particle filter runs the terrain-match measurement model epoch by epoch (SITAN as a running filter) so a time-varying INS drift is tracked along the track, where the batch terrain-nav only recovers a single constant offset.

terrain-slam.toml

kind terrain-slamnot matched to a ledger module by name

Sequential (recursive) terrain-referenced navigation — GPS-denied alt-PNT.

kind = "terrain-slam"
dem_seed = 1
start_lat_deg = 12.08
start_lon_deg = 20.08
step_lat_deg = 0.004
step_lon_deg = 0.003
waypoints = 60
drift_rate_lat_deg = 0.0006

Open in Kshana Studio · View on GitHub

timetransfer#

Optical vs RF two-way time/frequency transfer.

timetransfer.toml

kind timetransfernot matched to a ledger module by name

Optical inter-satellite time transfer vs classical RF (TWSTFT).

kind = "timetransfer"
seed = 42
samples = 600
step_s = 1.0
range_spec_mm = 10.0
id = "optical-isl"
provenance = "Optical inter-satellite link, picosecond-level synchronization target; free-space optical two-way time-frequency transfer lab floor ~1 fs (Giorgetta 2013, Nature Photonics; Deschenes 2016, PRX). Using a 1 ps target as the on-orbit-credible figure."
sigma_j_s = 1.0e-12

Open in Kshana Studio · View on GitHub

tracking-loop#

Tracking-loop loss of lock: C/N0 -> lock/unlock WITH HYSTERESIS, the time it takes to lose lock, and spoof pull-in as a function of code and carrier offset RATE. The engine's existing denial and capture criteria are ratios on received power (a jammer denies at J/S = 30 dB, a spoofer captures at 3 dB); real loss of lock is not a power ratio, it is where a loop's jitter plus dynamic stress leaves its tracking-threshold budget. Reports (1) carrier (Costas) and code (non-coherent early/late) 1-sigma thermal jitter versus C/N0, squaring loss included, against the stated rules 3*sigma_PLL + theta_e <= 45 deg (the 15-degree rule in three-sigma form) and 3*sigma_DLL + ramp lag <= d/2 chips; (2) the drop and re-lock C/N0 thresholds with the binding loop named, the re-lock threshold DERIVED from the wider bandwidth a receiver re-pulls-in at rather than asserted, so the hysteresis width must fall between 5*log10(ratio) and 10*log10(ratio) dB; (3) the declared time to lose lock from a two-threshold lock detector with confirmation dwells driven over a C/N0 ramp, reported separately from the physical phase-escape time (the Viterbi mean time between cycle slips, in log10 s because it spans hundreds of decades); (4) spoof pull-in limits — the largest code slew and carrier Doppler rate a victim's loops can follow, with a map over both axes, because a spoofer that slews faster than these does not capture the loop, it outruns it; and (5) the DENIAL RADIUS the loop dynamics imply reported ALONGSIDE the existing power-ratio radius, never in place of it, with their signed difference as its own named field (denial_radius_delta_km) and a definition beside it. Every emitted numeric field carries a unit and a provenance class. VALIDATED closed forms: the carrier and code jitter expressions, the loop-filter reduction sqrt(2*B_n*T) and the first-order ramp lag are cross-checked against the engine's own sdr correlator stepped forward on seeded synthetic IF — a different route to the same numbers — to 0.6 %, 3.7 % and 0.17 % respectively, and the modified Bessel I0 behind the cycle-slip time against standard tabulated values to 1e-7. The lower validity limit is asserted, not merely stated: below ~32 dB-Hz at 1 ms the real atan discriminator saturates against its +-pi/2 range and measures less jitter than any linear theory. MODELLED: the loop bandwidths, integration time, correlator spacing, pull-in bandwidth ratio, confirmation dwells, jammer power and antenna gains are representative band figures, not a datasheet. NOT modelled: oscillator (Allan-deviation) and vibration jitter, front-end bandwidth limiting, multipath, AGC dynamics, data-bit-transition loss, external aiding, and any half-cycle correction to the Costas cycle-slip formula. Under loop dynamics spoof capture has no radius at all — the binding constraint is offset rate, not power — so that field is null with a reason rather than a fabricated number. Not a certified receiver-performance product.

tracking-loop.toml

kind tracking-loopnot matched to a ledger module by name

Tracking-loop loss of lock: C/N0 -> lock/unlock with hysteresis, the time it takes to lose lock, and the spoof pull-in limits set by code and carrier offset RATE.

kind = "tracking-loop"
pll_bandwidth_hz = 10.0
dll_bandwidth_hz = 1.0
predetection_integration_s = 0.001
correlator_spacing_chips = 0.5
carrier_allowance_deg = 45.0
pullin_bandwidth_ratio = 2.0
drop_confirm_epochs = 50

Open in Kshana Studio · View on GitHub

Study suites#

A suite is a scenario file that lists other scenarios; kshana --study runs it into one stamped study.json and study.html. This is the free suite runner, not the paid custom study.

quantum-pnt-demonstrator.suite.toml

Quantum-Enabled PNT Demonstrator — the three application areas as one study.

kshana --study scenarios/quantum-pnt-demonstrator.suite.toml

View on GitHub