Maschinelle Übersetzung, nicht von einem Muttersprachler geprüft. Englisch ist die maßgebliche Fassung.

Erste SchritteAuf GitHub bearbeitenQuelle: docs/tutorials/02-clock-holdover.md

Tutorial 2 — Uhren-Holdover: wie lange können Sie durchhalten

Kind: clock · Szenario: scenarios/clock-holdover.toml (Lehrkopie: scenarios/clock.toml) · Schwierigkeit: Einsteiger · ~20 min

Am Ende haben Sie einen Uhren-Holdover bei verweigerten GNSS-Signalen (Global Navigation Satellite System) durchgeführt, die Zeitgebungs-Kennzahl gelesen und das Driftgesetz √(q_wf·T) verstanden, das erklärt, warum die optische Uhr länger durchhält als die Chip-Scale-Uhr, wobei das Gesetz vom NIST (dem US National Institute of Standards and Technology) stammt und nicht erfunden ist.

Was dieses Szenario ist#

Wenn GNSS-Signale wegfallen, hält ein System die Zeit mit seiner eigenen Borduhr. Die Phase dieser Uhr driftet langsam, und sobald die Drift die betriebliche Zeitgebungsvorgabe überschreitet, sind Sie außer Dienst. Holdover ist, wie lange Sie nach dem GNSS-Verlust innerhalb der Vorgabe bleiben — die zentrale Kennzahl der Autonomie.

Das Szenario läuft über eine Zeitleiste von 2 h: 10 min GNSS-Synchronisation, dann 6600 s (1,83 h) verweigert, gegen eine Zeitgebungsvorgabe von 20 ns, abgetastet alle 10 s. Es vergleicht zwei Uhren mit identischem Code und ihrem eigenen veröffentlichten Rauschen:

  • Quantum: eine optische Strontium-Gitteruhr, Weltraumziel σ_y(1 s) = 1×10⁻¹⁵ (arXiv:1503,08457), ein Zielwert für einen Bodendemonstrator, nicht geflogen. σ_y(τ) ist die Allan-Abweichung, das übliche Maß für die Frequenzstabilität einer Uhr bei der Mittelungszeit τ.
  • Classical: eine Chip-Scale-Atomuhr (CSAC) SA.45s von Microchip, σ_y(1 s) = 3×10⁻¹⁰ (Datenblatt) — ein im Einsatz befindliches kommerzielles Bauteil.

Ausführen#

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"])

Die einzeilige Zusammenfassung lesen#

Mit Seed = 42, der Vorgabe von 20 ns und dem Ausfall von 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 — die optische Uhr hält den gesamten Ausfall von 6600 s, ohne 20 ns zu verletzen. Ihr Phasenfehler im 95. Perzentil beträgt 1.20e-4 ns, etwa ein Zehntausendstel einer Nanosekunde: Sie bewegt sich kaum.
  • classical holdover 2610s — die CSAC verletzt die Vorgabe von 20 ns bei ~2610 s, weniger als die Hälfte des Ausfalls. Ihr Phasenfehler p95 (19,7 ns) liegt genau an der Vorgabelinie.
  • security n/a (no attack) — dieses Szenario konfiguriert keinen Angriff, es gibt also nichts zu erkennen, und die Zusammenfassung gibt keine Zahl aus. Das JSON enthält dennoch die analytische Grenze der Spoofing-Erkennbarkeit jeder Uhr in fom.security (0,997 für die optische Uhr; 0,000 für die CSAC, deren eigenes Coast-Rauschen über das Fenster bereits 20 ns überschreitet), gekennzeichnet mit applicable: false im Block figure_tiers. Die Bewertung der Erkennung gegen einen echten Angriff ist die Geschichte von Tutorial 3.
  • integrity 1.000 — hier ist dies Filter-Selbstkonsistenz (der Anteil der Ausfall-Abtastwerte innerhalb der eigenen k-Sigma-Grenze des Kalman-Filters), nicht ein horizontales oder vertikales Schutzniveau der Luftfahrt (HPL/VPL). Siehe docs/INTEGRITY.md.

Die nicht zirkuläre unabhängige Referenz: warum 2610 s für die CSAC?#

Bei einer Uhr mit weißer Frequenzmodulation (weißes FM) wächst der 1-σ-Phasenfehler wie σ_x(T) ≈ √(q_wf · T), wobei q_wf = σ_y(1 s)² die Einheit s² hat. Diese Beziehung stammt aus der NIST Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis) — den Beziehungen σ_y(τ)↔Phase — der selben SP-1065-Beziehung, gegen die tests/calibration.rs die Allan-Abweichung der Engine auf ~2 % validiert.

Für die CSAC gilt q_wf = (3×10⁻¹⁰)² = 9×10⁻²⁰ s². Lösen Sie nach der Zeit auf, zu der die 1-σ-Phase 20 ns = 2×10⁻⁸ s erreicht:

T ≈ (2e-8)^2 / 9e-20 = 4e-16 / 9e-20 ≈ 4444 s   (1-sigma crossing)

Die 2610 s der Engine sind nicht diese 1-σ-Zeit und sollen es auch nicht sein. holdover_s ist der erste Punkt des 10-s-Rasters (step_s = 10), an dem der absolute Phasenfehler dieser Realisierung mit festem Seed 20 ns überschreitet (src/fom.rs). Das erste Überschreiten einer Schwelle durch einen Random Walk liegt oft deutlich vor der Zeit, zu der seine 1-σ-Hüllkurve diese Schwelle erreicht, und die Realisierung trägt außerdem den Restfrequenzfehler, der dem Filter nach der Synchronisation von 600 s bleibt. Das Gesetz legt also die Größenordnung fest, einige tausend Sekunden für eine Uhr mit 3×10⁻¹⁰ gegen 20 ns, nicht den genauen Wert. Der Test prüft ein Band von 2000–3200 s darum, nicht die Zahl.

Die Datenblattanker selbst sind extern und in den Zeichenketten provenance des Szenarios zitiert: optisches Sr-Gitter-Ziel 1×10⁻¹⁵ (arXiv:1503,08457); Microchip SA.45s CSAC 3×10⁻¹⁰ (Datenblatt). Und das exportierte adev_curve stimmt mit dem σ_y(τ) des Datenblatts auf ~2 % überein (tests/calibration.rs, NIST SP 1065). Stellen Sie es im Playground als doppelt logarithmisches Diagramm „Uhrenstabilität (ADEV, Allan-Abweichung)“ dar.

Was der Test festschreibt#

tests/tutorials.rs::tutorial2_clock_holdover_holds:

  • quantum holdover >= classical holdover (die optische Uhr muss mindestens so lange halten),
  • quantum holdover ≈ 6600 s (hält den gesamten Ausfall),
  • classical holdover ∈ [2000, 3200] s — ein Toleranzband um die SP-1065-Größenordnung für weißes FM, keine magische Zahl. Die unabhängige Referenz ist das Gesetz, nicht der Wert.

Fallstricke und Einheiten#

  • Zeitgebungsangaben sind in Nanosekunden, nie in Metern. (Der Positions-Holdover ist ein anderes Paket — siehe den Trägheitsabschnitt von Tutorial 3.)
  • q_wf hat die Einheit s² und entspricht σ_y(1 s)². Das ist die Brücke von einer Allan-Zahl im Datenblatt zum Modell.
  • Holdover ist eine rasterquantisierte untere Schranke (step_s). Lesen Sie den genauen Wert nicht zu genau; lesen Sie das Band.
  • integrity bedeutet hier Filter-Selbstkonsistenz, nicht Integrität der Luftfahrt.

Wie es weitergeht#

  • Stufe 2: Senken Sie threshold_ns von 20 auf 10 und beobachten Sie, wie der CSAC-Holdover sinkt (2610 s → 1300 s, gemessen mit exercises/tier2_sweep.py), oder verwenden Sie kind = "sweep", um den Holdover gegen das CSAC-Rauschniveau classical_q_wf zu tabellieren (scenarios/sweep-clock-stability.toml: 25 Punkte von 10⁻²⁴ bis 10⁻¹⁸ s², klassischer Holdover 2610 s → 250 s).
  • Stufe 3: Fügen Sie runs = 200 hinzu, um daraus ein Monte-Carlo-Ensemble zu machen, und lesen Sie das Holdover-Band [p05–p95] (scenarios/clock-ensemble.toml gibt classical holdover 844s [220-2130] aus).
  • Dann der Abschluss: Tutorial 3 — Quantum gegen Classical bei Resilienz.