Машинный перевод, не проверенный носителем языка. Эталоном служит английская версия.

Начало работыПравить на GitHubИсточник: docs/tutorials/02-clock-holdover.md

Учебник 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 в таблицу по уровню шума CSAC classical_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 — Устойчивость квантовых и классических систем.