Tłumaczenie maszynowe, niezweryfikowane przez osobę, dla której polski jest językiem ojczystym. Wzorcem jest wersja angielska.

Na początekEdytuj na GitHubieŹródło: docs/tutorials/02-clock-holdover.md

Samouczek 2 — Holdover zegara: jak długo można dryfować

Kind: clock · Scenariusz: scenarios/clock-holdover.toml (kopia dydaktyczna: scenarios/clock.toml) · Poziom trudności: początkujący · ~20 min

Na końcu uruchomisz holdover zegara przy odmowie sygnałów GNSS (globalnego systemu nawigacji satelitarnej), odczytasz wskaźnik jakości synchronizacji czasu i zrozumiesz prawo dryfu √(q_wf·T), które wyjaśnia, dlaczego zegar optyczny wytrzymuje dłużej niż zegar w skali układu scalonego; prawo pochodzi z NIST (amerykańskiego Narodowego Instytutu Standardów i Technologii), a nie zostało wymyślone.

Czym jest ten scenariusz#

Gdy sygnały GNSS znikają, system utrzymuje czas na własnym zegarze pokładowym. Faza tego zegara powoli dryfuje, a gdy dryf przekroczy operacyjną specyfikację czasu, system wypada z użytku. Holdover to czas, przez jaki pozostajesz w specyfikacji po utracie GNSS — główny wskaźnik jakości autonomii.

Scenariusz obejmuje oś czasu 2 h: 10 min synchronizacji z GNSS, następnie 6600 s (1,83 h) odmowy, przy specyfikacji czasu 20 ns, próbkowanej co 10 s. Porównuje dwa zegary na identycznym kodzie z ich własnym opublikowanym szumem:

  • Kwantowy: strontowy optyczny zegar sieciowy, cel kosmiczny σ_y(1 s) = 1×10⁻¹⁵ (arXiv:1503,08457), cel demonstratora naziemnego, nielatający. σ_y(τ) to odchylenie Allana, standardowa miara stabilności częstotliwości zegara przy czasie uśredniania τ.
  • Klasyczny: atomowy zegar w skali układu scalonego (CSAC) Microchip SA.45s, σ_y(1 s) = 3×10⁻¹⁰ (karta katalogowa) — wdrożony komercyjny element.

Uruchom#

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

Przeczytaj jednowierszowe podsumowanie#

Przy seed = 42, specyfikacji 20 ns i przerwie 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 — zegar optyczny wytrzymuje całą przerwę 6600 s bez przekroczenia 20 ns. Jego 95. percentyl błędu fazy wynosi 1.20e-4 ns, około jednej dziesięciotysięcznej nanosekundy: prawie się nie rusza.
  • classical holdover 2610s — CSAC przekracza specyfikację 20 ns po ~2610 s, czyli w mniej niż połowie przerwy. Jego p95 błędu fazy (19,7 ns) leży tuż przy linii specyfikacji.
  • security n/a (no attack) — ten scenariusz nie konfiguruje żadnego ataku, więc nie ma czego wykrywać, a podsumowanie nie drukuje liczby. JSON nadal niesie analityczną granicę wykrywalności spoofingu każdego zegara w fom.security (0,997 dla zegara optycznego; 0,000 dla CSAC, którego własny szum dryfu w oknie już przekracza 20 ns), oznaczoną applicable: false w bloku figure_tiers. Ocena detekcji względem prawdziwego ataku to historia z Samouczka 3.
  • integrity 1.000 — tu jest to samospójność filtra (ułamek próbek przerwy mieszczących się w własnej granicy k-sigma filtra Kalmana), nie lotniczy poziom ochrony poziomy lub pionowy (HPL/VPL). Zob. docs/INTEGRITY.md.

Niecykliczna wyrocznia: dlaczego 2610 s dla CSAC?#

Dla zegara z białą modulacją częstotliwości (white-FM) błąd fazy 1-σ rośnie jak σ_x(T) ≈ √(q_wf · T), gdzie q_wf = σ_y(1 s)² ma jednostkę s². Ta zależność pochodzi z NIST Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis) — zależności σ_y(τ)↔faza — jest to ta sama zależność SP-1065, względem której tests/calibration.rs sprawdza odchylenie Allana silnika z dokładnością ~2 %.

Dla CSAC q_wf = (3×10⁻¹⁰)² = 9×10⁻²⁰ s². Rozwiąż dla czasu, w którym faza 1-σ osiąga 20 ns = 2×10⁻⁸ s:

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

2610 s silnika nie jest tym czasem 1-σ i nie powinno nim być. holdover_s to pierwszy punkt siatki 10 s (step_s = 10), w którym bezwzględny błąd fazy tej realizacji z ziarnem przekracza 20 ns (src/fom.rs). Pierwsze przekroczenie poziomu przez błądzenie losowe często następuje znacznie wcześniej niż moment, w którym jego obwiednia 1-σ osiąga ten poziom, a realizacja niesie też resztkowy błąd częstotliwości, jaki filtr ma po synchronizacji 600 s. Prawo ustala więc skalę, kilka tysięcy sekund dla zegara 3×10⁻¹⁰ wobec 20 ns, a nie dokładną wartość. Test sprawdza pasmo 2000–3200 s wokół niej, a nie samą liczbę.

Same kotwice z kart katalogowych są zewnętrzne, przywołane w ciągach provenance scenariusza: cel optycznego zegara sieciowego Sr 1×10⁻¹⁵ (arXiv:1503,08457); Microchip SA.45s CSAC 3×10⁻¹⁰ (karta katalogowa). A wyeksportowana adev_curve zgadza się z σ_y(τ) z karty katalogowej z dokładnością ~2 % (tests/calibration.rs, NIST SP 1065). Narysuj ją w playground jako wykres log-log „Stabilność zegara (ADEV, odchylenie Allana)”.

Co przypina test#

tests/tutorials.rs::tutorial2_clock_holdover_holds:

  • quantum holdover >= classical holdover (zegar optyczny musi wytrzymać co najmniej tak długo),
  • quantum holdover ≈ 6600 s (wytrzymuje całą przerwę),
  • classical holdover ∈ [2000, 3200] s — pasmo tolerancji wokół skali white-FM z SP-1065, a nie magiczna liczba. Wyrocznią jest prawo, a nie wartość.

Pułapki i jednostki#

  • Wartości synchronizacji czasu są w nanosekundach, nigdy w metrach. (Holdover pozycji to inny pakiet — zob. sekcję inercyjną Samouczka 3.)
  • q_wf ma jednostkę s² i jest równe σ_y(1 s)². To most od liczby odchylenia Allana z karty katalogowej do modelu.
  • Holdover to dolna granica skwantowana siatką (step_s). Nie nadinterpretuj dokładnej wartości; czytaj pasmo.
  • integrity jest tu samospójnością filtra, a nie integralnością lotniczą.

Co dalej#

  • Poziom 2: zacieśnij threshold_ns z 20 do 10 i zobacz, jak holdover CSAC spada (2610 s → 1300 s, zmierzone z exercises/tier2_sweep.py) albo użyj kind = "sweep", aby zestawić holdover z poziomem szumu CSAC classical_q_wf (scenarios/sweep-clock-stability.toml: 25 punktów od 10⁻²⁴ do 10⁻¹⁸ s², holdover klasyczny 2610 s → 250 s).
  • Poziom 3: dodaj runs = 200, aby zamienić to w zespół Monte Carlo i odczytać pasmo holdover [p05–p95] (scenarios/clock-ensemble.toml drukuje classical holdover 844s [220-2130]).
  • Potem zwieńczenie: Samouczek 3 — Odporność kwantowa a klasyczna.