Посібник 2 — Holdover годинника: як довго можна триматися
Kind: clock · Сценарій: scenarios/clock-holdover.toml (навчальна копія: scenarios/clock.toml) · Складність: початкова · ~20 хв
До кінця ви виконаєте holdover годинника за відсутності сигналів GNSS (глобальної навігаційної супутникової системи), прочитаєте показник якості синхронізації та зрозумієте закон дрейфу √(q_wf·T), який пояснює, чому оптичний годинник протримається довше за мікрочиповий; цей закон узято з NIST (Національний інститут стандартів і технологій США), а не вигадано.
Що це за сценарій#
Коли сигнали GNSS зникають, система тримає час за власним бортовим годинником. Фаза цього годинника повільно дрейфує, і щойно дрейф перевищує експлуатаційний допуск синхронізації, ви виходите з обслуговування. Holdover — це час, протягом якого ви залишаєтеся в допуску після втрати GNSS, головний показник якості автономності.
Сценарій розгортає часову шкалу тривалістю 2 год: 10 хв синхронізації з GNSS, потім 6600 с (1,83 год) без сигналу, за допуску синхронізації 20 нс, з вибіркою кожні 10 с. Він порівнює два годинники на однаковому коді з їхнім власним опублікованим шумом:
- Квантовий: оптичний годинник на ґратці зі стронцію, космічна мета σ_y(1 с) = 1×10⁻¹⁵ (arXiv:1503,08457), цільовий показник наземного демонстратора, не літав. σ_y(τ) — девіація Аллана, стандартна міра стабільності частоти годинника за часу усереднення τ.
- Класичний: мікрочиповий атомний годинник (CSAC) Microchip SA.45s, σ_y(1 с) = 3×10⁻¹⁰ (даташит) — серійна комерційна деталь.
Запуск#
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"])
Прочитайте однорядковий підсумок#
Із seed = 42, допуском 20 нс і перервою 6600 с:
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— оптичний годинник витримує всю перерву в 6600 с, не перевищивши 20 нс. Його 95-й процентиль похибки фази становить 1.20e-4 нс, приблизно одну десятитисячну наносекунди: він майже не зсувається.classical holdover 2610s— CSAC перевищує допуск 20 нс приблизно на 2610 с, менш ніж за половину перерви. Його p95 похибки фази (19,7 нс) лежить саме на лінії допуску.security n/a (no attack)— у цьому сценарії не налаштовано жодної атаки, тож виявляти нічого, і підсумок не друкує числа. JSON усе ж містить для кожного годинника аналітичну межу виявності спуфінгу вfom.security(0,997 для оптичного годинника; 0,000 для CSAC, власний шум якого на вільному ході за це вікно вже перевищує 20 нс), позначенуapplicable: falseу блоціfigure_tiers. Оцінювання виявлення на реальній атаці — це історія Посібника 3.integrity 1.000— тут це самоузгодженість фільтра (частка відліків перерви всередині власної k-сигма межі фільтра Калмана), а не авіаційний горизонтальний чи вертикальний рівень захисту (HPL/VPL). Див.docs/INTEGRITY.md.
Некруговий оракул: чому 2610 с для CSAC?#
Для годинника з білою частотною модуляцією (white-FM) 1-σ похибка фази зростає як σ_x(T) ≈ √(q_wf · T), де q_wf = σ_y(1 s)² має одиницю с². Це співвідношення походить із NIST Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis) — співвідношень між σ_y(τ) і фазою; це те саме співвідношення SP-1065, за яким tests/calibration.rs перевіряє девіацію Аллана рушія з точністю ~2 %.
Для CSAC q_wf = (3×10⁻¹⁰)² = 9×10⁻²⁰ s². Знайдімо час, коли 1-σ фаза досягає 20 нс = 2×10⁻⁸ с:
T ≈ (2e-8)^2 / 9e-20 = 4e-16 / 9e-20 ≈ 4444 s (1-sigma crossing)
Значення рушія 2610 с — це не той 1-σ час, і так має бути. holdover_s — перша точка сітки з кроком 10 с (step_s = 10), у якій абсолютна похибка фази цієї реалізації із зафіксованим seed перевищує 20 нс (src/fom.rs). Перетин рівня випадковим блуканням часто настає значно раніше, ніж його 1-σ огинальна сягає цього рівня, а ще реалізація несе залишкову похибку частоти, яку фільтр має після 600 с синхронізації. Тож закон задає масштаб — кілька тисяч секунд для годинника 3×10⁻¹⁰ проти 20 нс, — а не точне значення. Тест перевіряє діапазон 2000–3200 с навколо нього, а не саме число.
Самі опорні значення з даташитів зовнішні, вони наведені в рядках provenance сценарію: оптична мета на ґратці Sr 1×10⁻¹⁵ (arXiv:1503,08457); CSAC Microchip SA.45s 3×10⁻¹⁰ (даташит). А експортована adev_curve збігається з σ_y(τ) із даташиту з точністю ~2 % (tests/calibration.rs, NIST SP 1065). Побудуйте її в плейграунді як діаграму в подвійному логарифмічному масштабі «Стабільність годинника (ADEV, девіація Аллана)».
Що закріплює тест#
tests/tutorials.rs::tutorial2_clock_holdover_holds:
quantum holdover >= classical holdover(оптичний годинник має триматися щонайменше так само довго),quantum holdover ≈ 6600 s(тримається всю перерву),classical holdover ∈ [2000, 3200] s— діапазон допуску навколо масштабу white-FM за SP-1065, а не «магічне число». Оракулом є закон, а не значення.
Підводні камені та одиниці#
- Показники синхронізації — у наносекундах, ніколи в метрах. (Holdover позиції — це інший пакет, див. розділ про інерціальні системи в Посібнику 3.)
q_wfмає одиницю с² і дорівнює σ_y(1 с)². Це міст від числа Аллана з даташиту до моделі.- Holdover — це нижня межа, квантована сіткою (
step_s). Не перечитуйте точне значення; читайте діапазон. integrityтут — це самоузгодженість фільтра, а не авіаційна цілісність.
Що далі#
- Рівень 2: зменшіть
threshold_nsіз 20 до 10 і подивіться, як holdover CSAC падає (2610 с → 1300 с, виміряно за допомогоюexercises/tier2_sweep.py), або скористайтесяkind = "sweep", щоб звести holdover до таблиці залежно від рівня шуму CSACclassical_q_wf(scenarios/sweep-clock-stability.toml: 25 точок від 10⁻²⁴ до 10⁻¹⁸ с², holdover класичного годинника 2610 с → 250 с). - Рівень 3: додайте
runs = 200, щоб перетворити це на ансамбль Монте-Карло, і прочитайте діапазон holdover [p05–p95] (scenarios/clock-ensemble.tomlдрукуєclassical holdover 844s [220-2130]). - Далі — завершальний посібник: Посібник 3 — Квантова проти класичної стійкості.