Vejledning 2 — Urets holdover: hvor længe kan du glide
Kind: clock · Scenarie: scenarios/clock-holdover.toml (undervisningskopi: scenarios/clock.toml) · Sværhedsgrad: begynder · ~20 min
Til sidst har du kørt en urholdover med GNSS-signaler (Global Navigation Satellite System) nægtet, læst tidssynkroniseringens kvalitetsmål og forstået driftsloven √(q_wf·T), der forklarer, hvorfor det optiske ur holder længere end det i chipstørrelse; loven er hentet fra NIST (det amerikanske National Institute of Standards and Technology) og ikke opfundet.
Hvad dette scenarie er#
Når GNSS-signalerne forsvinder, holder et system tiden på sit eget ur om bord. Urets fase driver langsomt, og når driften overskrider den driftsmæssige tidsspecifikation, er du ude af drift. Holdover er, hvor længe du holder dig inden for specifikationen efter tab af GNSS — det centrale kvalitetsmål for autonomi.
Scenariet kører en tidslinje på 2 timer: 10 min GNSS-synkronisering, derefter 6600 s (1,83 timer) nægtet, mod en tidsspecifikation på 20 ns, samplet hver 10 s. Det sammenligner to ure på identisk kode med deres egen offentliggjorte støj:
- Kvante: et optisk strontiumgitterur, rummål σ_y(1 s) = 1×10⁻¹⁵ (arXiv:1503,08457), et mål for en jordbaseret demonstrator, ikke fløjet. σ_y(τ) er Allan-deviationen, det almindelige mål for et urs frekvensstabilitet ved middelværditiden τ.
- Klassisk: et Microchip SA.45s atomur i chipstørrelse (CSAC), σ_y(1 s) = 3×10⁻¹⁰ (datablad) — en kommerciel del i drift.
Kør den#
cargo run -- scenarios/clock-holdover.toml
Python:
import json, kshana
r = json.loads(kshana.run(open("scenarios/clock-holdover.toml").read()))
print(r["quantum"]["fom"]["holdover_s"], r["classical"]["fom"]["holdover_s"])
Læs opsummeringen på én linje#
Med seed = 42, specifikationen på 20 ns og udfaldet på 6600 s:
scenario 5ba83a232b94 | quantum holdover 6600s p95 1.20e-4ns integrity 1.000 security n/a (no attack) | classical holdover 2610s p95 19.7ns integrity 1.000 security n/a (no attack)
quantum holdover 6600s— det optiske ur holder hele udfaldet på 6600 s uden at overskride 20 ns. Dets 95.-percentil af fasefejlen er 1.20e-4 ns, omkring en titusindedel af en nanosekund: det bevæger sig næsten ikke.classical holdover 2610s— CSAC overskrider specifikationen på 20 ns ved ~2610 s, mindre end halvdelen af udfaldet. Dets p95 af fasefejlen (19,7 ns) ligger lige ved specifikationslinjen.security n/a (no attack)— dette scenarie konfigurerer intet angreb, så der er intet at opdage, og opsummeringen udskriver ikke et tal. JSON'en bærer stadig hvert urs analytiske grænse for spoof-detekterbarhed ifom.security(0,997 for det optiske ur; 0,000 for CSAC, hvis egen støj under glidet over vinduet allerede overstiger 20 ns), markeretapplicable: falsei blokkenfigure_tiers. At score detektion mod et reelt angreb er historien i Vejledning 3.integrity 1.000— her er dette filterets selvkonsistens (andelen af udfaldets sampler inden for Kalman-filterets eget k-sigma-bånd), ikke et beskyttelsesniveau i luftfarten for vandret eller lodret (HPL/VPL). Sedocs/INTEGRITY.md.
Den ikke-cirkulære uafhængige reference: hvorfor 2610 s for CSAC?#
For et ur med hvid frekvensmodulation (hvid FM) vokser 1-σ-fasefejlen som σ_x(T) ≈ √(q_wf · T), hvor q_wf = σ_y(1 s)² har enheden s². Denne sammenhæng stammer fra NIST Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis) — sammenhængene σ_y(τ)↔fase — den samme SP-1065-sammenhæng, som tests/calibration.rs validerer motorens Allan-deviation mod med cirka 2 %.
For CSAC er q_wf = (3×10⁻¹⁰)² = 9×10⁻²⁰ s². Løs for den tid, hvor 1-σ-fasen når 20 ns = 2×10⁻⁸ s:
T ≈ (2e-8)^2 / 9e-20 = 4e-16 / 9e-20 ≈ 4444 s (1-sigma crossing)
Motorens 2610 s er ikke den 1-σ-tid, og det skal den heller ikke være. holdover_s er det første gitterpunkt på 10 s (step_s = 10), hvor denne seedede realisations absolutte fasefejl overstiger 20 ns (src/fom.rs). En random walks første krydsning af et niveau kommer ofte længe før det tidspunkt, hvor dens 1-σ-indhylling når det niveau, og realisationen bærer også den resterende frekvensfejl, filteret er efterladt med efter synkroniseringen på 600 s. Så loven fastlægger skalaen, nogle få tusinde sekunder for et ur på 3×10⁻¹⁰ mod 20 ns, ikke den nøjagtige værdi. Testen hævder et bånd på 2000–3200 s omkring den, ikke tallet.
Selve datablads-ankrene er eksterne og citeret i scenariets provenance-strenge: optisk Sr-gitter, mål 1×10⁻¹⁵ (arXiv:1503,08457); Microchip SA.45s CSAC 3×10⁻¹⁰ (datablad). Og den eksporterede adev_curve svarer til databladets σ_y(τ) til cirka 2 % (tests/calibration.rs, NIST SP 1065). Plot den som et log-log-diagram "Clock stability (ADEV, Allan deviation)" i playground'en.
Hvad testen fastlåser#
tests/tutorials.rs::tutorial2_clock_holdover_holds:
quantum holdover >= classical holdover(det optiske ur skal holde mindst lige så længe),quantum holdover ≈ 6600 s(holder hele udfaldet),classical holdover ∈ [2000, 3200] s— et tolerancebånd omkring SP-1065's white-FM-skala, ikke et magisk tal. Den uafhængige reference er loven, ikke værdien.
Faldgruber og enheder#
- Tidsangivelserne er i nanosekunder, aldrig i meter. (Holdover for position er en anden pakke — se afsnittet om inertinavigation i Tutorial 3.)
q_wfhar enheden s² og er lig med σ_y(1 s)². Det er broen fra et Allan-tal i et datablad til modellen.- Holdover er en nedre grænse, kvantiseret til tidsgitteret (
step_s). Læs ikke for meget i den præcise værdi; læs båndet. integrityer her filterets selvkonsistens, ikke integritet i luftfartsforstand.
Hvad så#
- Niveau 2: skærp
threshold_nsfra 20 til 10 og se CSAC-holdover falde (2610 s → 1300 s, målt medexercises/tier2_sweep.py), eller brugkind = "sweep"til at stille holdover op i en tabel mod CSAC-støjniveauetclassical_q_wf(scenarios/sweep-clock-stability.toml: 25 punkter fra 10⁻²⁴ til 10⁻¹⁸ s², klassisk holdover 2610 s → 250 s). - Niveau 3: tilføj
runs = 200for at gøre dette til et Monte Carlo-ensemble og læs [p05–p95]-båndet for holdover (scenarios/clock-ensemble.tomludskriverclassical holdover 844s [220-2130]). - Derefter slutstenen: Tutorial 3 — Kvante mod klassisk modstandsdygtighed.