Тайминг слотов
Вид сценария slot-timing отвечает на три вопроса для часов, которые свободно идут между синхронизациями и должны удерживать трафик внутри временного слота: слота маршрутизации, постановки задач или сеанса связи, защитный интервал которого — наибольшая абсолютная ошибка времени с любой стороны, при которой слот ещё работает.
- Когда нарушается защитный интервал? Секунды от последней коррекции до момента, когда прогнозируемая ошибка времени достигает защитного интервала, с разбивкой всех вносящих вклад составляющих и указанием преобладающей.
- Сколько времени осталось сейчас? Та же величина за вычетом времени, уже прошедшего с коррекции.
- Как часто часы должны получать коррекцию? Наибольший интервал между коррекциями, при котором ошибка остаётся внутри защитного интервала, за вычетом задержки до вступления коррекции в силу.
Необязательный раздел spoofing добавляет уровень защиты времени (TPL) для приёмника на орбите; см. Спуфинг приёмника на орбите.
Запустите встроенный пример командой kshana example slot-timing-ocxo-leo.
Сокращения: GNSS — глобальная навигационная спутниковая система; TCXO — термокомпенсированный кварцевый генератор; OCXO — кварцевый генератор с термостатированием; RAFS — рубидиевый стандарт частоты; CSAC — атомные часы чип-масштаба; USO — сверхстабильный генератор; DSAC — атомные часы для дальнего космоса; ADEV — девиация Аллана; FM — частотная модуляция (здесь шум частоты часов); PM — фазовая модуляция (шум их фазы); IEEE — Институт инженеров по электротехнике и электронике; ITU-T — сектор стандартизации электросвязи Международного союза электросвязи; TIE — ошибка временного интервала; MTIE — максимальная ошибка временного интервала; TDEV — девиация времени; max|TE| — максимальная абсолютная ошибка времени; CUSUM — детектор изменений по кумулятивной сумме; TPL — уровень защиты времени; LEO — низкая околоземная орбита; NIST SP — специальная публикация Национального института стандартов и технологий; UFFC — «Ультразвук, сегнетоэлектрики и управление частотой» (журнал IEEE Transactions); IGS — Международная служба ГНСС; GPS — глобальная система позиционирования; Block IIF — спутники GPS Block II Follow-on; SHA-256 — 256-битный безопасный алгоритм хеширования; PPS — импульс в секунду.
Модель ошибки#
Прогнозируемая ошибка времени после дрейфа в течение t секунд от коррекции равна
E(t) = k·√(σ₀² + (σ_f·t)² + σ_x²(t)) + (|y₀| + |c_T·ΔT|)·t + ½·|D|·t²
σ_x²(t) = σ_PM² + q_wf·t + h_F·t² + q_rw·t³/3 + q_rr·t⁵/20
| Символ | Значение |
|---|---|
k |
коэффициент охвата (3 соответствует примерно 99,7 % гауссовой ошибки) |
σ₀ |
ошибка времени коррекции на один сигма |
σ_f |
ошибка на один сигма частоты, известной на момент коррекции; частота, оценённая по окну W, несёт около σ_y(W) |
σ_PM² |
дисперсия белого фазового шума: дрожание ошибки времени, постоянный пол |
q_wf, q_rw, q_rr |
плотности белого, случайного блуждания и случайного бега FM (члены Ван Лоана из holdover::coast_phase_variance) |
h_F |
фликкер-FM-пол дисперсии Аллана |
y₀ |
остаточный относительный сдвиг частоты, оставшийся после коррекции |
c_T·ΔT |
сдвиг частоты от изменения температуры ΔT через температурный коэффициент c_T |
D |
линейная скорость старения |
Каждый член FM равен t²·σ_y²(t) для собственного типа шума, где σ_y²(τ) = 3σ_PM²/τ² + q_wf/τ + h_F + q_rw·τ/3 + q_rr·τ³/20 (Zucca и Tavella, IEEE Trans. UFFC 52(2), 2005). Для белого, случайного блуждания и случайного бега FM это соотношение точное. Для фликкер-FM это общепринятая оценка ошибки прогноза времени (Riley, NIST SP 1065): у фликкер-FM нет замкнутой формы без низкочастотного среза. Сдвиги частоты складываются по модулю, так как их знаки неизвестны, поэтому детерминированная часть — это наихудший случай. Каждый член неотрицателен и не убывает по t, поэтому у E(t) = guard один корень, найденный методом охвата и бисекции.
Откуда берутся часы#
| Источник | Ключ сценария | Что это | Уровень |
|---|---|---|---|
| Значение класса по умолчанию | oscillator.class |
одно приведённое значение ADEV за одну секунду и пол красного шума, синтезированный на два и четыре порядка ниже него | MODELLED: ответ для стабильных часов определяется принятым полом |
| Предустановка из спецификации | oscillator.preset |
предустановки телекоммуникационной синхронизации (ocxo, rubidium, caesium, csac), каждая — именованная спецификация Microchip |
MODELLED: огибающая максимальных значений из спецификации |
| Встроенная спецификация | oscillator.datasheet |
собственная таблица ADEV заказчика, старение и температурный коэффициент | MODELLED: огибающая заданных максимальных значений |
| Измеренная запись | oscillator.record |
фазовая запись; её перекрывающееся ADEV подгоняется взвешенным методом наименьших квадратов | обращение имеет статус VALIDATED на отложенной реальной записи (ниже) |
Каждый из трёх классов, добавленных в 0.28.0, опирается на одну общедоступную спецификацию:
| Класс | ADEV за одну секунду | Источник |
|---|---|---|
tcxo |
2.0e-10 | EndRun Technologies, Disciplined Oscillator Options, столбец базового TCXO |
ocxo |
5e-12 | Спецификация Microchip OX-208, Rev 12-1-2021 |
rafs |
3e-11 | Спецификация Microchip 8040C Rubidium Frequency Standard, DS00003047A |
Строки EndRun для длинных времён усреднения в этой таблице сходятся (4e-13 для всех генераторов, кроме TCXO, 8e-13, при 10 000 с и 6e-14 для всех при 100 000 с), что указывает на описание ими синхронизированного изделия, а не свободно идущего генератора, поэтому они не используются.
Подгонка записи взвешена. Оценка дисперсии Аллана с edf эквивалентными степенями свободы имеет дисперсию порядка 2σ⁴/edf, поэтому каждая точка входит с невязкой √(edf/2)·(model/σ² − 1). Невзвешенная подгонка позволяла коротким временам усреднения определять члены для длинных времён усреднения: на тестовой записи с белым FM она дала ложный фликкер-пол, который сократил выход за допуск при 2 000 с на 30 %. Спецификация или запись подкрепляет только времена усреднения до своей самой длинной точки; выход за допуск за её пределами помечается как extrapolated.
Валидация: обращение на отложенных реальных часах#
tests/slot_timing_cs5071a_holdout.rs использует запись из 556 990 отсчётов стандарта на цезии 5071A, измеренного относительно водородного мазера (A. Wallin, распространяется с allantools; та же запись, которую использует оракул оценивателя tests/cs5071a_reference.rs). При мазере в качестве эталона запись представляет собой 6,4-суточный свободный ход.
- Подогнать модель шума только по первой трети записи.
- Предсказать по этой модели время дрейфа, при котором ошибка времени на один сигма достигает 0,5, 0,75, 1, 1,5, 2 и 2,5 нс.
- На остальных двух третях выполнять дрейф от точки синхронизации каждые 997 с с частотой, оцененной по предыдущей трети, и измерять, где среднеквадратичная ошибка дрейфа достигает каждого порога.
Порог прохождения, зафиксированный до первого запуска теста, — каждый предсказанный выход за допуск в пределах множителя 1,5 от измеренного. Контроль, в котором одна секунда ADEV читается как белый FM, должен этот порог не пройти, чтобы порог отличал хорошую модель от плохой. Тест печатает свою таблицу; мутация, уменьшающая уровень белого FM вдвое, его не проходит. Исходная запись — сторонние данные, исключённые из git: scripts/fetch_cs5071a.sh загружает её, а рабочий процесс realdata-clock запускает тест с KSHANA_REQUIRE_REALDATA=1, так что отсутствующий файл приводит там к сбою, а не к пропуску.
Что это подтверждает: путь «подгонка, затем обращение» на атомном стандарте с преобладанием белого FM при дрейфе до примерно 50 000 с. Чего не подтверждает: источники из спецификаций и классов, детерминированные члены и кварцевый генератор (следующий раздел).
Тот же прогноз на реальном кварцевом генераторе: консервативный, не проверенный по внешнему эталону#
tests/slot_timing_ocxo_holdout.rs использует измеренный OCXO: 19 982 односекундных отсчётов частоты генератора 10 МГц в импедансном анализаторе HP относительно водородного мазера (A. Wallin, 2015, распространяется с allantools; scripts/fetch_ocxo.sh). Модель шума и линейный дрейф подгоняются по первой трети; каждый дрейф на остальных двух третях начинается с частоты, оценённой за предыдущие 100 с, и модель учитывает неопределённость этой оценки (fix_frequency_sigma, собственная девиация Аллана модели при 100 с).
| Подгонка по | Предсказанный ÷ измеренный выход за допуск, от 0,2 до 10 нс | Вывод |
|---|---|---|
| первая треть (отложена) | от 0,59 до 0,70 | консервативно: никогда позже измеренного, в основном вне порога 1,5 |
| сам оценочный сегмент (диагностика) | от 0,98 до 1,17 | обращение верно; отложенный разрыв — это изменение самого генератора |
Шумовой пол генератора за время записи уменьшился вдвое: девиация Аллана первой трети выходит на полку около 7.5e-12, остальной части — около 3.5e-12. Модель, подогнанная рано, завышает шум, и это безопасное направление. Поэтому случай кварцевого генератора не проверен по внешнему эталону и остаётся MODELLED. Для кварцевого генератора подгонку следует выполнять по установившейся записи и повторять по мере старения детали.
Как был выбран протокол; это указано, потому что выбор не был слепым. Первый разведочный прогон повторил протокол для цезия (частота по предыдущей трети, без частотного члена) и предсказал выходы за допуск в 1,4–2,5 раза позже измеренных: оптимистично, а это опасное направление. Частота кварцевого генератора блуждает, поэтому частота, оценённая за часы до коррекции, устарела, а в модели не было члена, отражающего, насколько хорошо известна частота на момент коррекции. Член fix_frequency_sigma добавлен по этой причине, а протокол зафиксирован до написания теста; порог прохождения не сдвигался. Тест также проверяет, что без этого члена прогноз внутри выборки оптимистичен при каждом пороге, то есть этот член несёт нагрузку.
Тот же прогноз на атомных часах на орбите: 8 из 10, не проверено по внешнему эталону#
tests/slot_timing_igs_holdout.rs использует итоговые комбинированные часы IGS с шагом 30 с за 14 суток (с 17 по 30 августа 2025; scripts/fetch_igs_clocks.sh, каждый файл закреплён по SHA-256): часы каждого спутника GPS Block IIF относительно шкалы времени IGS. Протокол (набор спутников, правило пропусков, окно подгонки, синхронизация каждые 3 570 с с частотой по предыдущему часу, пороги от 1 до 20 нс, порог 1,5 и правило, что класс проходит, только если проходит каждый спутник) был записан до того, как были загружены какие-либо данные.
| Спутники | Предсказанный ÷ измеренный выход за допуск | Вердикт |
|---|---|---|
| G06, G08, G09, G10, G24, G26, G27, G32 | от 0,76 до 1,46 | в пределах порога |
| G25 | от 1,51 до 1,99 | оптимистично |
| G30 | от 1,20 до 1,61 | оптимистично |
| G03 | не оценивалось | исключено правилом пропусков (отсутствует сутки) |
Восемь из десяти — полезное свидетельство, но для двух спутников предсказано, что они продержатся дольше, чем на деле, а это опасное направление, и протокол требует, чтобы проходил каждый спутник. Поэтому орбитальный случай остаётся MODELLED. Спутники Block IIF несут и рубидиевые, и цезиевые стандарты, а файлы IGS не говорят, какой из них активен, поэтому результат сформулирован для спутников, а не для одного типа часов. Почему G25 и G30 отличаются, не исследовалось.
Испытание на стенде (bench) для детали лётного образца (определено по объёму, не выполнено)#
Общедоступная запись OCXO имеет длительность 5,5 часа, получена на одном лабораторном приборе, при ещё не установившемся генераторе. Подтвердить случай кварцевого генератора мог бы более длинный измеренный свободный ход OCXO лётного образца или CSAC относительно эталона:
- счётчик временных интервалов, сравнивающий сигнал 1 PPS генератора с эталоном, синхронизированным по ГНСС, или с мазером, не менее 10 суток при одном отсчёте в секунду, с регистрацией температуры;
- тот же протокол с отложенной выборкой: подгонка по первой трети, предсказание выходов за допуск, измерение на остальной части, с тем же порогом и контролем;
- запись и её хеш публикуются рядом с тестом, чтобы строка воспроизводилась.
Это упирается в доступ к эталонному оборудованию и не обещано.
По какой метрике блуждания следует принимать слот?#
Стандарты синхронизации предлагают три семейства метрик. Для временного слота лишь одна из них измеряет то, что нарушает слот.
- MTIE (ITU-T G.810) — наибольший размах TIE в любом окне заданной длины. Она слепа к постоянному смещению: часы, которые отстоят на 1 мкс, но совершенно стабильны, имеют MTIE около нуля и пропускают каждый слот. Она измеряет, насколько ошибка меняется, а не где она находится.
- TDEV (ITU-T G.810) строится по вторым разностям усреднённой фазы. Она устраняет постоянное смещение и постоянную ошибку частоты, то есть именно те члены, которые доминируют при дрейфе. Она характеризует тип шума; это не метрика приёмки для абсолютной синхронизации времени.
- max|TE| (ITU-T G.8260; метрика бюджета в G.8271) — наибольшая абсолютная ошибка времени относительно эталонной шкалы времени. Её можно сравнивать с защитным интервалом напрямую.
Вывод. Принимать слот следует по max|TE| относительно эталонной шкалы времени сети, вычисляемой как прогнозируемая огибающая от последней коррекции при заданном коэффициенте охвата. Именно это и есть E(t): поскольку каждый член растёт с t, максимум за дрейф длительностью T равен E(T). MTIE и TDEV остаются полезными как диагностика: TDEV — чтобы определить, какой член шума устранять, MTIE(L) — чтобы ограничить, насколько ошибка смещается за слот длительностью L.
Два уточнения, которые подразумевает выбор метрики:
- Защитный интервал относится к относительной ошибке между двумя узлами. Если передатчик и приёмник дрейфуют независимо, их стохастические ошибки складываются квадратично, а детерминированные — по модулю. Когда преобладает стохастическая часть, каждому узлу можно отвести
guard/√2; когда преобладает старение или температура —guard/2. - Коэффициент охвата — это проектное решение, а не свойство часов.
k = 3ограничивает около 99,7 % гауссовых ошибок в один момент времени, а не по каждому слоту за сутки; для плана маршрутизации со многими слотами в сутки нужен допустимый риск на каждый слот.
Спуфинг приёмника на орбите#
Раздел spoofing вычисляет orbital_timing::orbital_timing для тех же часов:
- Геометрия. Наземный спуфер достигает спутника LEO, только пока спутник находится над его горизонтом: на высоте 550 км — не более примерно двенадцати минут за один пролёт над головой. Поэтому спуфер, наращивающий смещение со скоростью
ρ, может увести часы не более чем наρ, умноженное на это окно, либо на интервал до следующей независимой проверки, если он короче (ramp_limited_pull_ns). - Динамика. Синфазный сдвиг времени одинаково смещает все псевдодальности и поглощается смещением часов, а не положением, поэтому проверка положения по орбитальному пропагатору не считается перекрёстной проверкой времени.
- Перекрёстные проверки. У спутника редко есть второй независимый приёмник времени. У него есть дрейф собственных часов (монитор
tpl), двусторонняя передача времени с наземной станцией во время сеансов связи и сравнения времени по межспутниковым линиям. Межспутниковая линия независима от одного наземного спуфера, только если сосед в тот же момент находится вне зоны охвата этого спуфера; отчёт проверяет это по числу спутников в плоскости. - Условная граница. Пол монитора плюс дрейф часов за время обнаружения по CUSUM; она в точности сводится к
tpl::timing_protection_level_ns, когда у часов нет членов фликкера, белой фазы и случайного бега. Как и та граница, она справедлива только при условии обнаружения.
Всё это имеет статус MODELLED: сферическая невращающаяся Земля, пролёт над головой, один наземный спуфер с заданной максимальной скоростью наращивания. Направление прихода сигналов на антенну, направленную в зенит, — реальная перекрёстная проверка, но для неё нужна диаграмма направленности антенны, и она не моделируется. DECEIVED-TIME.md объясняет, почему подписанное управляющее сообщение не устраняет эту угрозу.
Не моделируется#
Скачки частоты, радиационные эффекты и релятивистские сдвиги частоты; тепловая модель (изменение температуры — это ступенька в момент коррекции); сам протокол синхронизации (коррекция сбрасывает ошибку до fix_sigma_ns).