Учебник 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 ns и с отсчётами каждые 10 с. Он сравнивает двое часов на одном и том же коде с их собственным опубликованным шумом:
- Квантовые: оптические часы на решётке из стронция, космическая цель σ_y(1 с) = 1×10⁻¹⁵ (arXiv:1503,08457), цель для наземного демонстратора, не летавшая. σ_y(τ) — девиация Аллана, стандартная мера стабильности частоты часов при времени усреднения τ.
- Классические: атомные часы чипового масштаба Microchip SA.45s (CSAC), σ_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 ns и перерывом 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 ns. Их 95-й процентиль фазовой ошибки равен 1.20e-4 ns, то есть примерно одной десятитысячной наносекунды: они почти не сдвигаются.classical holdover 2610s— CSAC нарушают требование 20 ns примерно на 2610 с, менее чем за половину перерыва. Их p95 фазовой ошибки (19,7 ns) находится прямо на линии требования.security n/a (no attack)— в этом сценарии атака не настроена, поэтому обнаруживать нечего, и сводка не печатает число. JSON всё же несёт аналитическую границу обнаружимости спуфинга для каждых часов вfom.security(0,997 для оптических часов; 0,000 для CSAC, собственный шум которых при движении по инерции на этом окне уже превышает 20 ns), помеченную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 1065 (Riley, Handbook of Frequency Stability Analysis) — соотношений между σ_y(τ) и фазой — того же соотношения SP-1065, по которому tests/calibration.rs проверяет девиацию Аллана движка с точностью около 2 %.
Для CSAC q_wf = (3×10⁻¹⁰)² = 9×10⁻²⁰ s². Решим относительно времени, когда фаза 1-σ достигает 20 ns = 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), в которой абсолютная фазовая ошибка этой реализации с начальным значением превышает 20 ns (src/fom.rs). Первое пересечение уровня случайным блужданием часто происходит заметно раньше момента, когда его огибающая 1-σ достигает этого уровня, а реализация несёт ещё и остаточную ошибку частоты, остающуюся у фильтра после синхронизации в течение 600 с. Таким образом, закон задаёт масштаб — несколько тысяч секунд для часов с 3×10⁻¹⁰ при 20 ns, — а не точное значение. Тест проверяет полосу 2000–3200 с вокруг него, а не число.
Сами опорные значения из спецификаций внешние и приведены в строках provenance сценария: цель для оптических часов на решётке из Sr 1×10⁻¹⁵ (arXiv:1503,08457); Microchip SA.45s CSAC 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 — Устойчивость квантовых и классических систем.