Статус валидации
О допусках. «Validated» ниже означает, что калибровочный тест подтверждает совпадение смоделированной статистики с эталонным соотношением в пределах принудительно проверяемого порога, в настоящее время относительной ошибки 20–25 % (с усреднением по seed) для соотношений Аллана и бюджета шумов. Медианное наблюдаемое согласие часто значительно лучше (несколько процентов), но гарантированной границей служит порог, а не медиана. Там, где встречается значение вроде «~2 %», это типичное наблюдение, а не принудительно проверяемый допуск. См. Заявления и реальность.
Правило повышения статуса#
Строка машинно проверяемой матрицы верификации (src/verification.rs) получает статус VALIDATED только тогда, когда оракул, независимый от Kshana, согласуется с реализацией в пределах допуска, заданного до выполнения сравнения, в тесте, который выполняется в контрольной проверке. Этот раздел — единственное место, где правило записано; матрица, пояснения по строкам и примечания к выпускам ссылаются на него.
Допустимые виды оракулов#
| Вид | Что засчитывается | Примеры, уже имеющиеся в матрице |
|---|---|---|
| Измерено | Реальные измеренные данные о величине, которую утверждает строка: наблюдение физического мира, а не результат модели. | Отложенные две трети реальной записи цезиевых часов; архивные нормальные точки лазерной локации Луны; ряд Circular T UTC(k) BIPM (Международное бюро мер и весов); тайл рельефа SRTM (Shuttle Radar Topography Mission). |
| Библиотека | Независимая сторонняя библиотека или инструмент, вычисляющие однозначно определённую величину на тех же входных данных, где библиотека сама реализует предметное вычисление. Согласие библиотеки с библиотекой — настоящая проверка только потому, что у величины есть единственный правильный ответ. | allantools, Orekit, ANISE, RTKLIB, gnss_lib_py, lamberthub, pymcdm, scikit-learn, статистические распределения SciPy. |
| Справочник | Опубликованные эталонные векторы, таблицы или проверочные примеры: числа, которые стандарт, агентство или справочный текст приводят, чтобы реализации можно было сверять с ними. | Векторы SOFA/ERFA (Standards of Fundamental Astronomy), проверочные векторы SGP4 AIAA (Американский институт аэронавтики и астронавтики), проверочные примеры ITU-R (Международный союз электросвязи, сектор радиосвязи), разобранный пример ARAIM рабочей группы C, JPL (Лаборатория реактивного движения) Horizons. |
Пограничные случаи решают ещё два стандарта. Оба приняты для выпуска 0,30.
- P1, опубликованное расчётное значение. Опубликованное расчётное значение, вычисленное по той же замкнутой формуле, которую реализует строка, засчитывается как опубликованный эталонный вектор, если публикация независима от Kshana, а сравнение фиксирует заданный допуск. Значение должно быть напечатано в публикации в виде числа (значение, снятое с графика, засчитывается, только если неопределённость отсчёта укладывается в заданный допуск), а тест должен заставлять Kshana вычислять его по входным данным публикации; сравнение константы с документом, из которого она скопирована, — это проверка переписывания, а не P1.
- P2, независимая численная библиотека. Независимая численная библиотека, такая как numpy или LAPACK (Linear Algebra PACKage), пересчитывающая однозначно определённую величину линейной алгебры на заданных входных данных, засчитывается как независимая библиотека. Библиотека должна выполнить разложение, обращение, решение или шаг наименьших квадратов собственным алгоритмом на входных данных, зафиксированных вместе с набором тестовых данных; подтверждаемым утверждением тогда является линейная алгебра на этих данных, а не физические величины репрезентативного сценария. Скрипт, который заново вычисляет скалярную замкнутую формулу арифметикой numpy, — это вторая собственная реализация, а не P2.
Условия, применимые ко всем видам: оракул не написан, не запускается и не публикуется этим проектом (поэтому собственная серия статей этого репозитория от него не независима); допуск находится в тесте и был зафиксирован до первого сравнения; тест, привязанный к данным, который пропускается при отсутствии публичных данных, сообщает об этом при пропуске.
Что не засчитывается#
- Наша собственная вторая реализация: второй путь кода в этом крейте (
ReferenceImpl) или скрипт в этом репозитории, который заново вычисляет ту же замкнутую формулу. - Согласие с нашим собственным прежним результатом: эталонные значения (goldens), регрессионные фиксации, снимки или таблица из собственных статей этого проекта.
- Переписывание констант из цитируемого источника: сверка коэффициента, предустановки, значения из спецификации или листа параметров с документом, из которого они скопированы.
- Проектное решение: распределение, взвешивание, порог, предел тревоги или репрезентативный сценарий. Для решения не существует внешней истины.
- Внутреннее тождество: численный интеграл против собственной аналитической формы, прямой и обратный проход, обращение, проверка свойства или монотонности.
- Интеграционный прогон против реального хоста (
IntegrationRun): загрузка плагина в реальный сервер Signal K или OpenCPN либо подача выхода реального шлюза потребителю TCP и проверка того, что хост принимает вход и показывает ожидаемое состояние. Это показывает, что связующая часть работает. Хост не является оракулом ни для одного значения, которое переносит интеграция, поэтому внешнего эталона для сравнения нет, и такая строка (строка морских интеграций) имеет статус MODELLED, а не VALIDATED.IntegrationRun— самостоятельный вид оракула, допустимый только для строк MODELLED:integration_run_only_on_modelled_rowsвsrc/verification.rsзавершается ошибкой, если его несёт строка VALIDATED, аvalidated_rows_require_an_external_oracleуже требует, чтобы каждая строка VALIDATED былаExternalDataset. - Правдоподобие на реальных входных данных: реальные данные, используемые только как вход, с проверками масштаба, а не сравнением с внешним значением.
- Допуск, выбранный после того, как сравнение уже увидено.
Как правило применяется#
Каждая строка VALIDATED объявляет в validated_oracle_basis() в src/verification.rs, на чём она основана (Measured, Library, Reference, P1 или P2), независимый источник (дословно из собственного текста оракула строки) и один тест, который проводит сравнение. Модульные тесты рядом с таблицей завершаются ошибкой, если строка VALIDATED не объявлена или объявлена дважды, если объявление называет строку, не имеющую статуса VALIDATED, если объявленный источник не совпадает с названным в тексте оракула строки или является самой Kshana, если объявленный тест не тот, на который ссылается строка, или если строка P2 не называет независимую численную библиотеку. Затем tests/verification_rows_declare_an_oracle_basis.rs требует, чтобы объявленный тест существовал на диске как настоящий #[test], не отключённый. Машина не может проверить, сравнивает ли названный тест с объявленным источником; это остаётся проверкой человеком. Количества по видам здесь не вводятся: источником служит таблица.
Существующие строки VALIDATED, пересмотренные по правилу#
Правило применено как к существующим строкам, так и к будущим повышениям статуса.
- Строки P1, названные исследованием валидации 0,30, каждая подкреплена: бюджет односторонней линии (таблица контроля проекта X-диапазона Galileo JPL Pub 82-76, пересобранная из своих статей до потерь в свободном пространстве 4.6e-3 дБ); замкнутые формулы для любого дальномерного сигнала с ограниченной полосой (90,3 процента мощности главного лепестка и опубликованное дрожание когерентного опережающе-запаздывающего дискриминатора); максимальный Доплер навигационного спутника низкой околоземной орбиты (опубликованные значения Xona Pulsar X1 и Iridium); максимальный Доплер, который видит неподвижный пользователь от орбиты LEO или MEO (Таблица 1 статьи о Pulsar, 20 значений); Доплер, с которым должен справляться наземный приёмник для навигационного спутника LEO (те же опубликованные значения для орбиты, на которой аппарат летал). Каждая публикация независима от Kshana, приводит свои числа, а тест задаёт свой допуск.
- Дополнительные строки, опирающиеся на P1, найденные при пересмотре, каждая подкреплена: компромисс при проектировании дальномерного кода (опубликованная кросс-корреляция Голда −23,9 дБ); лунное координатное время (Ashby и Patla 2024, чья перекрёстная проверка скорости Луны по DE440 является проверкой Library); замкнутые формулы спектральных плотностей мощности сигналов L-диапазона (значения Q Kaplan и Hegarty); ионосферная задержка первого порядка по диапазонам (отношение групповых задержек из IS-GPS-200); глобальные усреднённые весовые коэффициенты ошибки дальности сигнала в пространстве (таблица Montenbruck, Steigenberger и Hauschild 2018).
- Строки P2, названные исследованием, каждая подкреплена: информация Фишера и наблюдаемость по Крамеру–Рао (numpy
eigh/inv); идентифицируемость лунной системы отсчёта; связанная калибровка лунной системы отсчёта и шкалы времени; автономный конвейер наблюдаемости неисправностей свободной сети (numpy/SciPy SVD, сингулярное разложение). Каждая заново вычисляет однозначно определённую величину линейной алгебры на зафиксированных входных данных иным алгоритмом, чем собственный решатель собственных значений Якоби в Kshana. - Дополнительные строки, опирающиеся на P2, найденные при пересмотре, каждая подкреплена: вывод приоритетов MCDA (многокритериальный анализ решений) (собственный вектор AHP, метода анализа иерархий, по SciPy/LAPACK; таблица случайного индекса, которую он также воспроизводит, является переписыванием и не засчитывается); дисперсия выбега holdover часов (SciPy
expmрасширенной матрицы Ван Лоана); реализация лунной системы отсчёта (решение Umeyama через numpy SVD); формирование диаграммы CRPA (антенны с управляемой диаграммой приёма) (комплексное решение LAPACK); ядро уровней защиты ARAIM для Луны (обращение LU из RTKLIB с квантилями SciPy); согласованность лунной системы отсчёта и динамики между поставщиками (аппроксимация методом наименьших квадратов через numpy SVD трёх опубликованных эфемерид). - Отмечены при первом проходе, заново подкреплены в раунде 2 прогона 0,30. Три строки были отмечены как не подкреплённые написанным правилом. Теперь каждая опирается на сравнение, предварительно зарегистрированное до получения её набора тестовых данных, поэтому ни одна строка не отмечена; модульный тест рядом с
validated_oracle_basis()фиксирует (теперь пустой) список.- Целостность (RAIM/ARAIM/SBAS). Цитируемые тесты прежде проверяли только правдоподобие на реальной геометрии IGS (Международная служба ГНСС). Теперь строка опирается на три библиотечных оракула: разделение решений ARAIM по множественным гипотезам из Airborne Design Document v4.2 против Stanford MAAST для ARAIM 2 (270 реальных случаев, наихудшая разница VPL 2.2e-3 м при пороге 0,05 м); обнаружение и исключение по снимку RAIM против RTKLIB
raim_fde(идентичны 2016 из 2016 решений) с уровнем защиты по наклону; и уровни защиты SBAS DO-229E L1 против Stanford MAAST на реальных вещательных данных WAAS (2868 пар в пределах 1.6e-5 м). Строка прямо говорит, что функцииraim::araim_raimиraim::araim_dual_raimс единой сигмой не соответствуют ADD и что сравнение двухчастотного SBAS L5 является находкой. - Положения планет по всей Солнечной системе по кеплеровым элементам JPL Standish. Апостериорный порог в удвоенную номинальную ошибку заменён предварительно зарегистрированным порогом: СКО не более значения из Таблицы 8.10.1 Explanatory Supplement для каждой планеты и компоненты относительно JPL Horizons DE441, с учётом разделения Земли и поворота ICRF.
- Время распространения света между телами Солнечной системы. Решатель времени распространения света теперь сравнивается с временами распространения Horizons в пределах 1e-6 с на положениях DE441 — это предварительно зарегистрированный порог, не наследующий порог по положению.
- Целостность (RAIM/ARAIM/SBAS). Цитируемые тесты прежде проверяли только правдоподобие на реальной геометрии IGS (Международная служба ГНСС). Теперь строка опирается на три библиотечных оракула: разделение решений ARAIM по множественным гипотезам из Airborne Design Document v4.2 против Stanford MAAST для ARAIM 2 (270 реальных случаев, наихудшая разница VPL 2.2e-3 м при пороге 0,05 м); обнаружение и исключение по снимку RAIM против RTKLIB
- Строки MODELLED, которые две политики делают пригодными к повышению статуса (только через построчный прогон 0,30, но никогда по этому тексту): по P1 — граница геолокации излучателя по TDOA/FDOA (разности времени и частоты прихода), связь релятивистского хода часов с системой отсчёта, маски синхронизации ITU-T (Сектор стандартизации электросвязи) (только для значений масок, которые Рекомендации печатают в виде чисел; переписанные точки излома, сверенные сами с собой, не засчитываются) и граница позиционирования по нестационарным сетям 5G (только если найдено опубликованное расчётное значение); по P2 — слепота целостности по общему виду, скалярный уровень защиты по времени MHSS (разделение решений по множественным гипотезам) и отбеливание GLS (обобщённый метод наименьших квадратов). Две строки бенчмарка целостности времени (классификатор диаграммы целостности Стэнфорда и оценщик покрытия целостности) — это классификация на основе правил, а не линейная алгебра, поэтому P2 на них не распространяется; им нужен независимый инструмент, а единственный найденный (gLAB) имеет некоммерческую лицензию.
- Согласованность с прежними отказами. Проверка Vallado для строки окна запуска теперь подошла бы под P1, если бы её тест вычислял напечатанный разобранный пример; план 0,30 повышает её статус через Orekit. Таблица пересечения лунного времени по классам часов остаётся MODELLED: воспроизводимая ею таблица взята из собственной статьи этого проекта, которая не независима.
| Шумовой член | Статус | Доказательства |
|---|---|---|
| Паритет оценок Аллана (ADEV/MDEV/TDEV/OHDEV (ADEV: девиация Аллана; MDEV: модифицированная девиация Аллана; OHDEV: перекрывающаяся девиация Адамара)) | validated |
Две проверки по первоисточнику NIST (Национальный институт стандартов и технологий США) SP (Special Publication) 1065 (Riley, Handbook of Frequency Stability Analysis, 2008), обе с относительным допуском 1e-4. (1) tests/allan_reference.rs: оценки перекрывающейся ADEV, модифицированной ADEV, девиации времени и перекрывающейся девиации Адамара воспроизводят девиации для канонического 10-точечного набора данных NBS14 (SP 1065 Таблица 29/30, с. 107) при tau = 1, 2 — согласие на деле составляет ~1e-6 (например, перекрывающаяся ADEV (OADEV) при τ = 2: 85,952868 против 85,95287). (2) tests/allan_nist_sp1065_1000point.rs: те же четыре оценки воспроизводят 1000-точечный набор данных SP 1065 §12,4 (Таблица 31, с. 108) при коэффициентах усреднения 1 / 10 / 100, где набор данных заново порождается в коде из LCG SP 1065 (ур. 73) — герметично, без набора тестовых данных. Те же данные и числа Таблицы 31 служат регрессионной целью в aewallin/allantools (tests/nbs14), здесь воспроизведённой без стороннего кода. Это фиксирует математику оценок относительно эталона, в отличие от строк калибровки шума ниже. |
| Паритет оценок Аллана на реальном измеренном оборудовании | validated |
tests/cs5071a_reference.rs: оценки перекрывающейся девиации Аллана и перекрывающейся девиации Адамара воспроизводят эталонные девиации Stable32 для реального первичного цезиевого стандарта 5071A, измеренного против водородного мазера (556 990 фазовых отсчётов при τ₀ = 1 с; 1 PPS (импульс в секунду) на счётчик 53230A, февраль 2014; собрано A. Wallin, распространяется с allantools). Проверено по всей декадной лестнице τ (16 коэффициентов усреднения, τ = 1 с … 4×10⁴ с): хорошо выбранные коэффициенты — с относительным порогом 1e-3 (наблюдаемое согласие на деле ≤ 3e-5, например OADEV(1 с) 3.317111e-10 против Stable32 3.3171e-10), разреженные коэффициенты при больших τ должны попасть в напечатанную Stable32 доверительную полосу 1‑σ. Это дополняет синтетический паритет NBS14 выше проверкой на измеренных часах. Исходный файл фазы — данные третьей стороны без лицензии на распространение, поэтому он исключён из git; scripts/fetch_cs5071a.sh воспроизводит его, а тест при его отсутствии печатает уведомление о пропуске (CI (непрерывная интеграция) остаётся зелёным). Зафиксированы только публичные эталонные числа Stable32 (tests/fixtures/cs5071a/); сторонний код не используется. |
| Паритет оценок Аллана на каноническом Stable32 PHASE.DAT | validated |
tests/phasedat_reference.rs: оценки перекрывающейся девиации Аллана, модифицированной девиации Аллана и девиации времени воспроизводят эталонные девиации Stable32 для PHASE.DAT — ряда из 1001 точки, распространяемого со Stable32, который независимые инструменты (например, allantools) используют как стандартную регрессионную цель — по всей лестнице коэффициентов усреднения (139 коэффициентов) с относительным порогом 1e-3 (наблюдалось ≤ 5e-5). Второй независимый реальный эталонный ряд наряду с проверкой на измеренном цезии выше. PHASE.DAT поставляется с коммерческим инструментом Stable32, поэтому исходный ряд исключён из git; scripts/fetch_phasedat.sh воспроизводит его, а тест при его отсутствии пропускается без сбоя (CI остаётся зелёным). Зафиксированы только публичные эталонные числа Stable32 (tests/fixtures/phasedat/); сторонний код не используется. |
| Стабильность оптических часов на реальной измеренной кривой | validated |
tests/optical_clock_adev_reference.rs: инверсия параметров шума часов (quantum_trade::qparams_from_adev_curve) воспроизводит опубликованную σ_y(τ) оптических часов на решётке ⁸⁸Sr из Norcia et al., Science 366:93 (2019) (Zenodo 10.5281/zenodo.3382347, CC-BY-4.0 (Creative Commons Attribution 4,0), кривая включена в репозиторий в tests/fixtures/optical_clock_adev/): восстановленный коэффициент белого частотного шума √q_wf ≈ 4.33e-16 совпадает с кратковременной стабильностью статьи ≈4.7e-16/√τ (~10 % СКО (среднеквадратичное отклонение) по кривой), а аппроксимация обнаруживает ненулевой измеренный пол (q_rw > 0). Это фиксирует инверсию измеренной ADEV в параметры шума на реальных оптических часах; выигрыш holdover до порога, построенный на ней, остаётся MODELLED. |
| AUC (площадь под кривой) ROC (рабочая характеристика приёмника) обнаружения аномалий на реальной телеметрии OPS-SAT ESA (Европейское космическое агентство) | validated (воспроизводит метки) |
tests/opssat_ad_reference.rs: на наборе данных OPSSAT-AD (Ruszczak et al. 2025, Zenodo 10.5281/zenodo.12588359, CC BY 4,0) — реальные служебные сегменты OPS-SAT с эталонными метками аномалий — ROC AUC Манна–Уитни в Kshana (impairment_eval::auc) воспроизводит scikit-learn roc_auc_score с точностью < 1e-9 на отложенной тестовой выборке (529 сегментов, 113 аномалий) для двух детерминированных оценок: прозрачного однопризнакового детектора (число пиков сегмента, AUC ≈ 0,851) и оценки по 8 признакам с диагональным расстоянием Махаланобиса, подогнанной на нормальных обучающих сегментах (AUC ≈ 0,556); eval_stats::bootstrap_auc_ci ограничивает точечную оценку, причём её нижняя граница лежит выше случайного уровня. Это подтверждает вычисление AUC на реальных данных ESA и размеченное разделение прозрачным детектором — но не воспроизводит лучшую опубликованную метрику статьи OPSSAT-AD (обучаемая FCNN (полносвязная нейронная сеть), F1 ≈ 0,95), для которой нужна их обученная модель. Данные CC-BY включены в репозиторий (tests/fixtures/opssat/, герметично); оракул порождается заново скриптом generate_opssat_oracle.py. |
| Синтез функционалов гравитационного поля (навигационная карта с гравитационной поддержкой / без GNSS (GNSS: глобальная навигационная спутниковая система)) | validated |
tests/icgem_gravity_reference.rs: ядро функционалов гравитационного поля на сферических гармониках (gravity_sh::gravity_magnitude / gravity_disturbance_mgal) — «считыватель карты», с которым сопоставляет данные навигатор с гравитационной поддержкой — проверено по стандарту нормальной силы тяжести GRS80 (Geodetic Reference System 1980) (Moritz 1980, принят IAG (IAG: Международная ассоциация геодезии)). Построение нормального поля GRS80 по его опубликованным чётным зональным гармоникам J₂…J₈ и синтез силы тяжести (притяжение + центробежная) на эллипсоиде воспроизводят замкнутую нормальную силу тяжести по Сомильяне и опубликованные экваториальное/полярное значения γ_e = 9,7803267715 / γ_p = 9,8321863685 м/с² с относительной точностью 3.5e-12 по всем широтам (порог 1e-9). То же ядро загружает основную реальную земную модель ICGEM (Международный центр глобальных моделей Земли) EGM2008 (Earth Gravitational Model 2008) (NGA (Национальное агентство геопространственной разведки), общественное достояние через ICGEM; считыватель from_gfc также проверяется на лунном поле GRAIL (Gravity Recovery and Interior Laboratory) в tests/agency_lro.rs) и строит физически ограниченную карту возмущений силы тяжести (СКО ≈ 26 мГал, максимум ≈ 89 мГал при d/o 70). Подтверждает корректность кода синтеза; точность навигационной фиксации с гравитационной поддержкой остаётся MODELLED (публичной траектории гравиметра на платформе с эталонной истиной нет). |
| Специфичные для типа шума edf (доверительные интервалы) | validated |
src/allan.rs: доверительная полоса χ² на каждой точке перекрывающейся ADEV использует специфичные для типа шума эффективные степени свободы (замкнутые формы NIST SP 1065 Таблица 5 для белой и фликкерной фазовой модуляции, белой и фликкерной частотной модуляции и частотной модуляции случайного блуждания (WPM/FPM/WFM/FFM/RWFM) — простой набор Stable32), причём степенной тип записи определяется по наклону MDEV в двойном логарифмическом масштабе. Три независимые проверки: (a) пять формул воспроизводят значения, вычисленные вручную, при N=64,m=4 с точностью 1e-12; (b) ансамбль белой FM (FM: частотная модуляция) по Монте-Карло (4 000 записей) измеряет фактическое число степеней свободы хи-квадрат оценки edf = 2·mean²/Var(σ²) и совпадает с формулой в пределах 20 % (и существенно лучше консервативного подсчёта без перекрытия); (c) tests/allan_nist_sp1065_1000point.rs воспроизводит напечатанное в SP 1065 Таблица 32 (с. 109) edf = 146,177 для 1000-точечного набора данных при m=10 (белая FM) с точностью 5e-3 и 95-процентные доверительные границы таблицы (8.223942e-2 / 1.035201e-1) с точностью <0,2 % (малый остаток — приближение Уилсона–Хилферти для χ² против точного χ² NIST). Экспортируемая кривая ADEV несёт определённый тип шума, edf и 95-процентную полосу для каждого τ. |
| Белая FM (кратковременная) | validated |
tests/calibration.rs: смоделированная перекрывающаяся ADEV воспроизводит опубликованную sigma_y(1 с) — обычно в пределах нескольких процентов, принудительно проверяемый порог 20 % (CSAC и цель для оптической решётки) — и кривую белой FM sigma_y(tau)=sigma_y(1s)/sqrt(tau) при tau = 1, 10, 100 с в пределах порога 25 % (совпадает с данными CSAC (чип-масштабные атомные часы) 3e-10 / 1e-10 / 3e-11). |
| FM случайного блуждания (долговременная) | validated |
tests/calibration.rs: смоделированная ADEV совпадает с sigma_y^2(tau)=q_rw*tau/3 (Riley NIST SP 1065) с точностью ~20 % (с усреднением по seed). |
| Старение / линейный дрейф | modeled + откалибровано вне |
Детерминированный; оценщик holdover убирает смещение и старение с помощью квадратичного предиктора, поэтому остаток — это стохастический предел. Проверено в src/estimator.rs / src/models.rs. |
| Оценщик Калмана + граница целостности | validated |
src/kalman.rs: двухсостоятельный фильтр (фаза, частота), точный шум процесса Ван Лоана которого совпадает с истинной моделью; выбег воспроизводит аналитическую дисперсию holdover q_wf*T + q_rw*T^3/3 с точностью 1e-9. Обновление ковариации выполнено в стабилизированной форме Джозефа P⁺ = (I−KH)P(I−KH)ᵀ + KRKᵀ, которая остаётся положительно полуопределённой (проверено по Холецкому) на протяжении 500 шагов предсказания/обновления при предельном отношении R=1e-26 / Q≈1e-30 и совпадает с наивной формой с точностью 1e-9, где последняя хорошо обусловлена. Слой прогона сообщает целостность как долю отсчётов отказа внутри 3-сигма-границы защиты (src/run.rs). |
| Самосогласованность фильтра (NIS (нормированный квадрат инновации) / NEES (нормированный квадрат ошибки оценки)) | validated (модель) |
src/filter_health.rs: оценка согласованности по Монте-Карло (Bar-Shalom §5,4). Объединённые NIS → 1 и NEES → 2 согласованного фильтра попадают в свои 95-процентные полосы χ² (полоса NIS использует объединённое число белых инноваций; полоса NEES — число независимых прогонов, поскольку ошибки оценки коррелированы во времени). Тест перебора рассогласования Q/R проверяет, что монитор сообщает consistent=true только при единичной настройке и consistent=false при расстройке ×0.1/×0.5/×2/×10, причём NIS масштабируется как ≈1/q_factor, как и выведено. Выводится как filter_health в JSON (JavaScript Object Notation) результата часов и в карточке песочницы. Полосы χ² используют квантиль Уилсона–Хилферти (detection::chi2_inv_cdf, проверено по таблице). |
| Модель двусторонней передачи времени | validated (модель) |
src/timetransfer.rs: взаимная синфазная задержка в оценке (m_AB - m_BA)/2 сокращается точно (выведено вручную, точно), а два односторонних измерения усредняются до 1/sqrt(2) (с усреднением по seed); невзаимная дифференциальная задержка — окрашенный процесс белой FM + FM случайного блуждания, чья девиация Аллана следует sigma_y^2(tau) = q_rw*tau/3 (с усреднением по seed, ~20 %, через собственный step() линии). Параметры (на линию sigma_j, q_rw) — репрезентативные значения TWSTFT/оптической линии (TWSTFT: двусторонняя спутниковая передача времени и частоты), не подогнанные к конкретному терминалу. |
| Безопасность (оценка обнаружения спуфинга) | validated (модель) |
src/security.rs: 1-сигма-порог монитора sqrt(r/m + q_wf*tau + q_rw*tau^3/3) и вытекающее из него k-сигма минимально обнаружимое смещение и оценка [0,1] выведены вручную и проверены модульными тестами. Модель (обнаружение по инновации / в стиле RAIM (RAIM: автономный контроль целостности приёмником) с поддержкой часов) обоснована; параметры (окно мониторинга tau, множитель обнаружения k, шум измерения r) репрезентативны, не подогнаны к конкретному приёмнику. |
| Обнаружение атаки спуфинга | validated (модель) |
src/spoof.rs: нарастающая ложная подмена времени отмечается, когда её смещение превышает границу обнаружения часов; время обнаружения совпадает с выведенным вручную start + bound/rate с точностью до одного шага сетки, а часы, чья граница превышает спецификацию, позволяют спуфингу достичь порога необнаруженным. То же ограничение representative-parameters, что и для оценки безопасности. |
| Фликкерная FM (пол) | modeled (по умолчанию выключено) |
Синтезируется как сумма логарифмически разнесённых процессов Орнштейна–Уленбека (OU), откалиброванных на настраиваемый плоский пол ADEV; src/models.rs проверяет, что пол плоский по времени усреднения и находится на заданном уровне (с усреднением по seed). Включается для каждых часов через flicker_floor. Цитируемые эталонные сценарии оставляют его выключенным: CSAC определяется белой FM во всём диапазоне своей спецификации (1–1000 с), а систематический пол оптических часов (~5e-17) представлен их показателем точности. |
| Статистика ансамбля Монте-Карло | validated (агрегирование) |
src/ensemble.rs: процентили по методу ближайшего ранга и среднее по runs воспроизводимым реализациям; единичный прогон схлопывает разброс, полоса по каждому шагу упорядочена как p05 <= p50 <= p95, а повторные прогоны побитово идентичны. Это статистическое агрегирование поверх уже подтверждённого единичного прогона, а не новая физическая модель. |
| Часы | sigma_y(1 с) | Источник |
|---|---|---|
| csac-sa45s (CSAC) | 3.0e-10 | Спецификация Microchip SA65 / SA.45s |
| optical-sr-lattice (решётка Sr) | 1.0e-15 | оптические часы на решётке стронция, цель для космического применения, arXiv:1503,08457 |
Статус: белая FM и FM случайного блуждания проверены независимо; старение смоделировано и откалибровано вне; фликкерная FM смоделирована и проверена независимо (в цитируемых сценариях по умолчанию выключена).
Зрелость: показатели оптических часов — это цель для космического применения на наземном оборудовании — ни одни оптические часы на стронции не летали. Лабораторные часы на Sr достигают 4.8e-17 (Oelker et al. 2019, Nature Photonics). Показатели CSAC взяты у коммерческого изделия, находящегося в эксплуатации.
Соотношения: Riley, NIST SP 1065, ур. 67 -- белая FM sigma_y^2(tau)=h0/(2 tau); FM случайного блуждания sigma_y^2(tau)=(2 pi^2/3) h_-2 tau, что равнозначно q_rw*tau/3 для частотного винеровского процесса с диффузией q_rw.
Пакет 2 — инерциальное счисление пути (квантовый инерциальный измерительный блок)#
| Составляющая | Статус | Доказательства |
|---|---|---|
| Постоянное/остаточное смещение -> положение | validated |
ошибка положения = семейство 0,5bT^2 (Groves, AESS (Общество аэрокосмических и электронных систем), Tutorial); дискретный тест, выведенный вручную, в src/inertial/mod.rs. |
| Случайное блуждание скорости (белое ускорение) | validated |
src/inertial/mod.rs: смоделированное СКО (стандартное отклонение) ошибки положения совпадает с sigma_x(T)=sqrt(S_a*T^3/3) (Groves, ур. 54) в пределах ~12 % наблюдаемых (с усреднением по seed; принудительно проверяемый порог 20 %). |
| Физика акселерометра на холодноатомном интерферометре (CAI) (из первых принципов) | validated (модель) |
src/inertial/quantum_imu.rs: трёхимпульсный холодноатомный интерферометр Маха–Цендера. Проверен вручную по учебной геометрии — Rb-87 k_eff = 4pi/lambda ~ 1.611e7 rad/m; Phi = k_eff*a*T^2 ~ 1.580e4 rad при 1 g, T = 10 ms; шум проекции sigma_Phi = 1/(C*sqrt(N)) = 2e-3 rad при C = 0.5, N = 1e6; на один выстрел sigma_a ~ 1.24e-6 m/s^2; законы масштабирования 1/T^2 и 1/sqrt(N); экспоненциальный спад контраста. q_va() выводит белую PSD (спектральную плотность мощности) ускорения, которую использует классический AccelModel. Честная область применимости: только пол квантового шума проекции (здесь ~0,09 ug/sqrtHz) — значительно ниже реальных приборов, ограниченных вибрацией (1–50 ug/sqrtHz); тензор вибраций, Кориолис и систематические сдвиги света пока не смоделированы (см. QUANTUM.md). |
| Смещение гироскопа + угловое случайное блуждание (ARW) -> наклон -> связь с силой тяжести | modeled (по умолчанию выключено) |
Остаточное смещение гироскопа и ARW вызывают ошибку ориентации; наклон связывает силу тяжести (g*theta) с ошибкой горизонтальной удельной силы. src/inertial/mod.rs точно подтверждает кубический рост положения от чистого смещения и рост ориентации от ARW как винеровский процесс (с усреднением по seed). Включается для каждого датчика через gyro_bias и q_arw; в цитируемых сценариях только с акселерометрами выключено. |
| Нестабильность смещения (фликкерный пол 1/f) | modeled (по умолчанию выключено) |
src/inertial/mod.rs: фликкерный процесс 1/f (тот же синтез OU, подтверждённый для часов), чей плоский пол девиации Аллана лежит на коэффициенте нестабильности смещения; нуль — отсутствие эффекта, ненулевой пол меняет траекторию, и то и другое воспроизводимо. Включается для каждого датчика через bias_instability. |
| Случайное блуждание ускорения (случайное блуждание скорости изменения) | validated |
src/inertial/mod.rs: смещение — винеровский процесс с Var(bias_rw(T)) = q_aa*T, проверено с усреднением по seed в пределах ~20 %. Включается для каждого датчика через q_aa. |
| Перекрёстная проверка NaveGo (коэффициенты шума IMU (инерциального измерительного блока)) | validated |
tests/navego_imu_crossval.rs: внешняя перекрёстная проверка по NaveGo (R. Gonzalez, инструментарий INS/GNSS с открытым кодом (INS: инерциальная навигационная система), github.com/rodralez/NaveGo). Воспроизводит синтетический прямой и обратный проход navego_example_allan.m NaveGo на его опубликованном эталонном профиле Microstrain 3DM-GX3-35: подача на нашу оценку перекрывающейся ADEV (проверенную по NBS14/Stable32) белого шума датчика на уровнях 1-σ NaveGo восстанавливает коэффициенты случайного блуждания скорости и угла (VRW, ARW) (ADEV(1 s) = σ·√dt) с точностью < 5% (на деле ~0,4 %), причём ветвь белого шума идёт с наклоном −1/2. Подтверждает, что наш конвейер Аллана и определения VRW/ARW в NaveGo согласуются. Записанный журнал STIM300 .mat объёмом 40 МБ не загружается (ограничено двоичным форматом). |
| Масштабный коэффициент, более тонкие межосевые члены | not modeled в этом 1-DOF (одна степень свободы) пакете |
В прежнем одноосном пакете нет ошибки масштабного коэффициента и межосевой связи. Трёхосная библиотека бесплатформенной системы и пакет gnss-ins действительно моделируют масштабный коэффициент, рассогласование осей, чувствительность к g, квантование и линейное нарастание скорости (src/inertial/imu_errors.rs; см. таблицу заявлений ниже). |
| Датчик | стабильность смещения | корень из PSD шума | Источник |
|---|---|---|---|
| cold-atom-quat (квантовый) | 5.88e-7 м/с^2 (60 нг, 24 ч) | 22 ug/sqrtHz = 2.16e-4 (м/с^2)/sqrtHz | Templier et al. 2022, Science Advances (arXiv:2209,13209) |
| nav-grade-quartz (классический) | 1.57e-3 м/с^2 (~160 ug) | ~20 ug/sqrtHz = 1.96e-4 (м/с^2)/sqrtHz | Honeywell QA-2000 / Groves AESS Tutorial |
Честная постановка: преимущество холодных атомов — долговременная стабильность смещения (~2600x ниже), которая преобладает при длительном отказе ГНСС через 0,5bT^2. Кратковременный шум сопоставим (квантовый ~22 против классического ~20 ug/sqrtHz) — квантовый датчик выигрывает марафон, а не спринт. Зрелость: акселерометры на холодных атомах — лабораторные/ранние (JRC122785), навигационный кварц эксплуатируется.
Пакет 3 — передача времени (оптическая и радиочастотная (RF), оптическая межспутниковая линия)#
| Составляющая | Статус | Доказательства |
|---|---|---|
| Белое дрожание времени -> точность синхронизации | validated |
src/timetransfer.rs: смоделированное СКО синхронизации воспроизводит дрожание линии sigma_j; выборочное среднее усредняется как sigma/sqrt(N) с точностью <20 % (с усреднением по seed). |
| Время -> односторонняя дальнометрия | validated |
дальность = c * dt, c=299792458 м/с; 1 пс = 0,299792458 мм (точно, тест выведен вручную). |
| Фликкерный/TDEV-пол, остаток двусторонней взаимности | modelled |
src/twstft_budget.rs (вид time-transfer-budget): фликкерный фазовый шум (Kasdin–Walter, плоская TDEV), суточная невзаимность и постоянный остаток взаимности на двустороннем ряду; пакет белого дрожания timetransfer не изменён. |
| Линия связи | дрожание одного отсчёта | тип | источник |
|---|---|---|---|
| optical-isl | 1 пс (1e-12 с) | правдоподобная цель на орбите | оптическая межспутниковая линия, цель синхронизации на уровне пикосекунд; лабораторная O-TWTFT (TWTFT: двусторонняя передача времени и частоты) ~1 фс (Giorgetta 2013 / Deschenes 2016) |
| twstft-rf | 0,5 нс (5e-10 с) | измерено в одном сеансе | BIPM/PTB/NIST (BIPM: Международное бюро мер и весов; PTB: Physikalisch-Technische Bundesanstalt, национальный метрологический институт Германии) TWSTFT |
Честная постановка: оптический показатель — это цель синхронизации на орбите на уровне пикосекунд (ещё не летавшая). Наземный оптический лабораторный пол составляет ~1 фс (значительно лучше); хорошо спроектированная микроволновая линия (микроволновая линия ACES (Atomic Clock Ensemble in Space) (MWL), ~0,3 пс) может соперничать с оптической, поэтому базовое значение «RF = 0,5 нс» относится именно к обычной TWSTFT. Пересчёт дальности односторонний (дальность = cdt); двусторонний/по круговому пути уменьшает его вдвое (дальность = cdt/2).
Пакет 4 — гибридное комплексирование (итоговое)#
Объединяет Пакет 1 (часы), Пакет 2 (инерциальный) и Пакет 3 (передача времени) в один набор PNT (позиционирование, навигация и время). Набор должен удерживать В ПРЕДЕЛАХ и время (< спецификации времени), и положение (< спецификации положения); pnt_holdover_s — время до тех пор, пока одно из них не нарушено. Необязательная передача времени по оптической межспутниковой линии (ISL) заново синхронизирует часы во время отказа (только помощь по времени — положение не синхронизируется заново, так как передача времени даёт время, а не положение).
| Аспект | Статус | Доказательства |
|---|---|---|
| Комбинированная оценка PNT (время И положение) | validated |
src/hybrid.rs тест score_hybrid, выведенный вручную (pnt_holdover = первое из нарушений по времени/положению). |
| Целостность и безопасность для гибридного пакета | validated |
src/hybrid.rs: оценщик времени Калмана, дисциплинируемый по истине (номинально) и заново привязываемый при каждой оптической повторной синхронизации; целостность — это вхождение в границу защиты (граница включает пол дрожания линии), безопасность — оценка обнаружения спуфинга. Проверено для обоих наборов, включая случай с помощью линии. |
| Совместный оценщик комплексирования | validated (модель) |
src/fusion/mod.rs: единый совместный фильтр Калмана ([фаза, частота] ⊕ [положение, скорость]) является навигатором, дисциплинируется ГНСС (обучаясь смещениям по ненулевой начальной ковариации) и получает помощь от передачи времени; совместная ковариация даёт совместную целостность, которая проверена как надёжная (≥0,9) для обоих наборов с датчиками, согласованными по шуму. Пакет наблюдает положение и время раздельно, для чего оптимальный фильтр блочно-диагонален; оценка постоянного смещения в расширенном состоянии и динамическая перекрёстная помощь — дело будущего. |
| Связанный фильтр часов и положения (перекрёстная блочная ковариация) | validated (модель) |
src/fusion/coupled.rs CoupledPntFilter: единый составной фильтр Калмана [pos, vel, phase, freq] (обновления в форме Джозефа), чьё измерение псевдодальности ρ = g·pos + c·phase + noise связывает блоки положения и часов. Тесты: общая псевдодальность делает P[pos,phase] ненулевой (развязанные фильтры сохраняют её строго равной 0); две различные геометрии совместно разрешают введённые смещения положения и часов, которые одна дальность разделить не может; фиксация только по часам уточняет положение через перекрёстную ковариацию (выигрыш, который даёт связь и которого не дают развязанные фильтры); и NEES по Монте-Карло согласуется с χ²(4) (Bar-Shalom §5,4, полоса по числу прогонов). 1-DOF (размерность пакета); пока не подключён к запускаемому пакету, а 3-D-расширение с 8 состояниями — дело будущего. |
| Композиция подтверждённых подмоделей | наследует | члены для часов/инерциальных датчиков/передачи времени подтверждены в своих собственных пакетах. |
Слабосвязанная ГНСС/ИНС (пакет gnss-ins) |
validated (модель) |
src/fusion/{gnss_ins_ekf,closed_loop,pack}.rs: 15-состоятельный EKF с вектором ошибок (δp, δv, ψ, смещения акселерометров/гироскопов; Groves §14) управляет трёхосным бесплатформенным навигатором с обратной связью. Тесты: введённая ошибка положения обнуляется при идеальной помощи по истине; решение с помощью остаётся ограниченным метрами, тогда как свободно работающая ИНС расходится более чем на 100 м; а положение по СКО в комплексированном решении на отказе 60 с превосходит счисление пути без помощи на границу ансамблевого теста (~4× при измерении до 0.27.3; после исправления ниже запас больше). Связь со смещением гироскопа проверяется по самой бесплатформенной системе: известное остаточное смещение гироскопа должно давать ошибку ориентации, которую предсказывает фильтр (closed_loop::tests::gyro_bias_coupling_predicts_the_strapdown_attitude_error), а широкий априорный закон должен научиться смещению гироскопа класса полётного контроллера, оставаясь ограниченным; оба теста не проходят при знаке до 0.27.3. Пересмотрено в 0.27.3: в этой связи был неверный знак, поэтому оценки смещения гироскопа смещались не в ту сторону, и пакет оставался устойчивым только при жёстком априорном законе; опубликованные показатели отказа изменились (CHANGELOG, Fixed). Честное ограничение: смещение акселерометра и наклон в слабосвязанной схеме слабо разделимы, поэтому калибровка по каждому смещению не заявляется. |
| Сильносвязанная ГНСС/ИНС (псевдодальность) | validated (модель) |
src/fusion/gnss_ins_ekf.rs update_tightly_coupled + closed_loop.rs fuse_tightly_coupled: инновация формируется в области дальностей (якобиан линии визирования по δp). Тесты: четыре спутника обнуляют введённую горизонтальную ошибку 8 м/−5 м до < 0,1 м; два спутника (определение положения, скорости и времени (PVT) невозможно) всё равно уменьшают горизонтальную ошибку более чем в 5×; единственный спутник в зените наблюдает только компоненту вдоль линии визирования (вертикальную) и оставляет горизонтальную нетронутой; некорректные входные данные отклоняются. Только по псевдодальности — фаза несущей и явное состояние часов приёмника запланированы. |
| Точность перекрёстной помощи датчиков (полное комплексирование Калмана/факторного графа) | not modeled в пакете hybrid |
Гибридный пакет — это композиция на системном уровне плюс помощь по времени, а не оптимальный оценщик. Фильтры существуют в других местах: слабо- и сильносвязанный EKF (расширенный фильтр Калмана) пакета gnss-ins (строки выше) и 17-состоятельный UKF (фильтр Калмана с сигма-точками) вида hybrid-ukf. Сглаживатель на факторном графе не моделируется. |
Результат: полностью квантовый набор удерживает полный PNT на всём отказе 1,8 ч; полностью классический набор ограничен по положению (навигационный IMU нарушает первым). Передача времени по оптической ISL удерживает в синхронизме даже классические ЧАСЫ, выделяя инерциальный датчик как слабое звено классического набора — основной довод в пользу квантовых инерциальных датчиков и оптического времени вместе.
Геометрия — доступность ГНСС по орбитам#
| Аспект | Статус | Доказательства |
|---|---|---|
| Круговое двухтельное распространение | validated |
src/orbit.rs: период T=2 pi sqrt(r^3/mu) (mu = 3.986004418e14), положение возвращается через один период, экваториальная/полярная плоскостность — тесты, выведенные вручную. |
| Эксцентрическое (кеплерово) распространение | validated |
src/orbit.rs: уравнение Кеплера M = E - e sin E решается методом Ньютона (невязка < 1e-12); радиусы перигея/апогея a(1∓e); круговой случай совпадает с замкнутым путём с точностью 1e-9. |
| Вековой дрейф узла/апсид от J2 | validated |
src/orbit.rs: Omega_dot = -1.5 n J2 (Re/p)^2 cos i, argp_dot = 0.75 n J2 (Re/p)^2 (5cos^2 i - 1) (Vallado); узел регрессирует (прямое движение) / продвигается (обратное) / неподвижен (полярная орбита), а апсиды замирают при критическом наклонении 63,4 град — тесты знака/нуля, выведенные вручную. Только двухтельная задача и вековые члены, не оскулирующие. |
| Видимость по линии визирования (закрытие Землёй + маска возвышения) | validated |
Антиподный спутник закрыт, радиально направленный наружу спутник на возвышении 90 град, тангенциальный спутник на горизонте — точные тесты, выведенные вручную. |
| Видимость -> состояние ГНСС -> временная шкала | validated |
>=4 видимых = номинально, 1–3 = ухудшено, 0 = отказ; генератор Walker-delta; интеграционный тест запускает прогон holdover часов по выведенной временной шкале. |
| Оптимизатор проектирования орбитальной группировки + геометрия полос покрытия | validated (модель) |
src/walker.rs: optimize_walker_design перебирает сетку {planes × sats × inclination} и возвращает ячейку, лучше всего удовлетворяющую DesignObjective (минимум спутников для цели покрытия / максимум покрытия / минимум наихудшего PDOP (PDOP: геометрический фактор положения)) — тест проверяет, что выбор равен независимому полному перебору того же свипа, а разобранный пример подтверждает, что проект GPS (глобальная система позиционирования) Walker 24/6/1 покрывает не хуже прореженного 18-спутникового. Аналитические замкнутые формулы полос покрытия (coverage_half_angle_rad λ = arccos(Re/r·cos ε) − ε; street_half_width_rad cos c = cos λ / cos(π/s), Rider/Beste) проверены вручную по учебной геометрии (GPS при маске 5°: λ ≈ 71,16°, полуширина полосы для 4 спутников ≈ 62,83°) и обнаруживают разрыв из-за недостаточного заселения (λ < π/s ⇒ None). Полный решатель Райдера для минимального числа спутников при глобальном покрытии (число плоскостей, чувствительное к шву) пока не реализован. |
| Геометрический фактор (GDOP/PDOP/HDOP/VDOP/TDOP (GDOP: геометрический фактор; HDOP: горизонтальный геометрический фактор; VDOP: вертикальный геометрический фактор; TDOP: геометрический фактор времени)) -> точность положения | validated |
src/orbit.rs: Q=(HᵀH)⁻¹ по матрице плана линий визирования. Внешний оракул (tests/dop_reference.rs): пять факторов DOP воспроизводят вычисленные gnss_lib_py 1.0.4 (Stanford NAV Lab — независимая рецензируемая библиотека GNSS, используемая здесь так, как ERFA (Essential Routines for Fundamental Astronomy) используется для систем отсчёта) по 8 геометриям, от хорошо обусловленных до почти вырожденных (DOP в сотнях), с относительной точностью 1e-6; происхождение и воспроизведение — в tests/fixtures/dop/. В качестве дополнительной проверки по замкнутой формуле геометрия правильного тетраэдра воспроизводит аналитические DOP (PDOP 1,5, TDOP 0,5, GDOP √2,5, HDOP √1,5, VDOP √0,75) с точностью 1e-9. Сигма положения = PDOP × эквивалентная пользовательская ошибка дальности. |
| Ошибка положения = σ_UERE × DOP для собственного решения методом наименьших квадратов движка | modelled |
src/dop_error_mc.rs, tests/uere_dop_monte_carlo.rs: Монте-Карло с начальным значением (N = 20 000 эпох на геометрию, σ = 1,5 м, ChaCha8 seed 36 + i) для pvt::solve_spp с единичными весами, решаемого от истинного положения, на 8 геометриях tests/fixtures/dop/dop_reference.csv (тех, чей DOP согласован с gnss_lib_py), против σ²·Q, где Q — ковариационный множитель самого ядра orbit::dop (orbit::dop_cofactor, та же арифметика). Допуски предварительно зарегистрированы (коммит e50c88d2, до первого прогона, по проектной записке 0,36 о геометрии, раздел 5,2), каждый — в числе стандартных ошибок: дисперсии восток, север, высота и часы в пределах 5 %; СКО H/V/P в пределах 2,5 %; корреляция восток–север в пределах 0,035; средние в пределах 5 стандартных ошибок; доля внутри 95-процентного горизонтального эллипса в пределах 0,95 ± 0,0077. Первый прогон: все 104 проверки пройдены (наихудшая дисперсия 3,2 %, СКО 1,6 %, корреляция 0,012, среднее 2,2 стандартной ошибки, эллипс 0,0039). Отрицательные контроли не проходят, как и требуется: удвоенный PDOP не проходит на каждой геометрии; ошибки, растущие как 1/sin(возвышение), против невзвешенной Q не проходят проверку дисперсии на каждой геометрии, где самый низкий спутник ниже 20°. Как это сочетается со строкой выше: та строка проверяет DOP этих геометрий относительно gnss_lib_py; эта добавляет шаг от этих факторов к метрам через решатель движка. Рядом сохранена первая, отдельная проверка (src/dop_error_ci.rs, tests/position_error_dop_ci.rs, выполненная до предварительной регистрации и указанная как таковая): четыре выбранных вручную неба (открытое, сгруппированное, каньон, половина неба; σ 1 м) с доверительными интервалами хи-квадрат при суммарном 1e-6 на 20 проверок; отношения от 0,987 до 1,009, а её собственные отрицательные контроли (ошибка DOP 10 %, ошибки 1/sin(возвышение)) не проходят, как и требуется. Почему MODELLED: внешнего набора данных нет; она не показывает, что ошибка реального приёмника следует модели, а σ_UERE является входным параметром. |
| Доступность по нескольким орбитальным группировкам | validated |
src/orbit.rs: дополнительные [[constellations]] объединяются в один набор спутников для видимости/DOP; тест объединённого числа подтверждает объединение. |
| Вещательная модель ионосферы (Klobuchar, IS-GPS-200 (IS: Interface Specification)) → наклонная задержка на L1 | validated |
src/gnss_sim.rs: klobuchar_delay_m, восьмикоэффициентная вещательная одночастотная модель. Внешний оракул (tests/klobuchar_reference.rs): наклонная задержка L1 воспроизводит ionmodel из RTKLIB (библиотеки кинематического позиционирования в реальном времени с открытым кодом) (tomojitakasu/RTKLIB, src/rtkcmn.c — фактический открытый эталон ГНСС, собранный из исходного кода и запущенный независимо) по 10 случаям, охватывающим возвышение, азимут, местное время и два набора коэффициентов (по умолчанию в kshana и из RTKLIB), с точностью < 1e-4 м. Теперь существует считыватель карт TEC (TEC: полное электронное содержание) IONEX (формат обмена картами ионосферы) для файлов GIM (глобальная карта ионосферы) (src/ionex.rs, parse_ionex с билинейной пространственной и временной интерполяцией и наклонным отображением, проверено модульными тестами в крейте); перекрёстная проверка этой интерполяции по реальному продукту GIM CODE (Центр определения орбит в Европе) остаётся следующим шагом. Сама вещательная модель подтверждена извне. |
| Ядро обнаружения RAIM/ARAIM (ARAIM: усовершенствованный автономный контроль целостности приёмником) (χ² / нецентральное χ² / нормальное) → пороги и множители | validated |
src/raim.rs: порог обнаружения по снимку / разделению решений / ARAIM (chi2_quantile), нецентральность пропуска обнаружения pbias=√λ (noncentral_chi2_cdf) и множители K_fa/K_md/K_V (normal_quantile) вычисляются через регуляризованную неполную гамма-функцию без зависимостей. Внешний оракул (tests/raim_reference.rs): 171 случай воспроизводят SciPy 1.17.0 (scipy.stats.chi2/.ncx2/.norm + optimize.brentq — независимая реализация Cephes/Boost, иной алгоритм) по рабочим диапазонам P_fa / P_md / избыточности с относительной точностью ≤ 1e-6. Геометрия, окружающая ядро (наклон/ковариация из (GᵀG)⁻¹), — это ядро DOP, подтверждённое по gnss_lib_py. Область применимости: эта строка фиксирует статистическое ядро. Значение уровня защиты при распределении ARAIM MHSS (разделение решений по множественным гипотезам) фиксируется отдельно по опубликованному разобранному примеру технической подгруппы ARAIM WG-C (рабочая группа C) (tests/araim_reference_vectors.rs, VPL (вертикальный уровень защиты) 18,2926 м против 18,3 м, HPL (горизонтальный уровень защиты) 13,4063 м против 13,45 м, в пределах собственного допуска эталона 0,05 м; см. примечание о стандартах ниже и ARAIM_REFERENCE.md). |
| Уровень защиты SBAS (функциональное дополнение на спутниках) (DO-229E, Приложение J) → горизонтальный / вертикальный уровень защиты (HPL / VPL) | validated |
src/sbas.rs: sbas_protection_level, взвешенный МНК (LS: наименьшие квадраты) D=(GᵀWG)⁻¹ → большая полуось горизонтального эллипса ошибок + вертикальная σ, масштабированные K-коэффициентами DO-229E. Внешний оракул (tests/sbas_reference.rs): HPL в kshana воспроизводит ответвление RTKLIB SBAS-PL (zsiki/rtklib_ws waasprotlevels(), реализация «DO-229D Appendix J» Siki и Takács 2017), запущенное командой rnx2rtkp -ws на реальных данных EGNOS (Европейская служба геостационарного навигационного покрытия) (вещательные сообщения GEO (геостационарная орбита) PRN120 + реальный RINEX BUTE/Будапешт (Receiver Independent Exchange Format), 2017-02-19), по 6 эпохам с точностью < 2e-3 м. σ каждого спутника — собственный полный бюджет SBAS оракула (UDRE (дифференциальная ошибка дальности пользователя) + ионосфера GIVE (вертикальная ошибка ионосферы в узле сетки) + тропосфера + бортовая). ESA gLAB v6.0.0 (core/filter.c) был собран и подтверждён как использующий идентичное соглашение. Примечание о K_V: оба оракула округляют K_V по MOPS (минимальные эксплуатационные характеристики) → 5,33; kshana использует точное Φ⁻¹(1−5e-8)=5.3267 (VPL меньше на ~0,06 %), поэтому вертикальная компонента подтверждена как не зависящая от K-коэффициента d_U (= VPL оракула / 5,33). HPL сопоставлен напрямую (K_H = 6,0 с обеих сторон). |
| Реальная геометрия орбитальной группировки по TLE (строка 2 / кеплеровы элементы) | validated (разбор) |
src/tle.rs: разбирает средние кеплеровы элементы строки 2 (большая полуось из среднего движения); известный набор элементов МКС (Международная космическая станция) при прямом и обратном проходе даёт правильные элементы и период. Для блока только из строки 2 распространение — это двухтельная задача движка (+ необязательно J2) для средних элементов: обоснованное для снимка на общую эпоху, со временем отклоняющееся от SGP4 (Simplified General Perturbations 4). |
| Распространение SGP4 / SDP4 (Simplified Deep-space Perturbations 4) (полные TLE) | validated |
src/sgp4.rs: полный околоземный SGP4 + дальний космос SDP4 (лунно-солнечные вековые/периодические члены + геопотенциальный резонанс 12 ч / 24 ч). Проверено в tests/sgp4_verification.rs по официальным векторам AIAA (Американский институт аэронавтики и астронавтики) 2006-6753 («Revisiting Spacetrack Report #3») — все 666 эталонных состояний (околоземные, дальний космос, резонансные, случаи кодов ошибок) совпадают с наихудшей ошибкой положения ≈ 4,1 мм. Полный двухстрочный набор (строка 1 + строка 2) распространяется с SGP4; набор только из строки 2 остаётся кеплеровым; их можно смешивать. Система координат — TEME (истинный экватор, среднее равноденствие), используется единообразно для пользователя и спутников (без приведения TEME→ECEF (ECEF: геоцентрическая, жёстко связанная с Землёй) — достаточно для геометрии доступности/DOP). |
| Нутация IAU (Международный астрономический союз) 2000A / 2000B + приведение TEME→GCRS (GCRS: геоцентрическая небесная система отсчёта) | validated |
src/nutation.rs: полный ряд IAU 2000A (678 лунно-солнечных + 687 планетных членов, nutation_iau2000a) и 77-членное усечение 2000B (nutation_iau2000b) каждое проверены бит в бит по опубликованным эталонным векторам SOFA/ERFA (SOFA: Standards of Fundamental Astronomy) на JD_TT 2453736,5 — eraNut00a даёт Δψ = −0.9630909107115518e-5, Δε = 0.4063239174001679e-4; eraNut00b даёт Δψ = −0.9632552291148363e-5, Δε = 0.4063197106621160e-4 — оба с точностью 1e-13 рад. Таблица 2000A сгенерирована машиной из исходного кода ERFA nut00a скриптом tools/gen_nut00a.py (воспроизводит зафиксированный nutation_iau2000a_data.rs бит в бит). Матрица нутации (iauNumat), уравнение равноденствий и полная цепочка TEME→TOD→MOD→GCRS (TOD: истинная на дату; MOD: средняя на дату) (teme_to_gcrs, Vallado AIAA-2006-6980) проверены на свойства собственного вращения/прямого и обратного прохода/прецессии плюс нутации, матрица нутации — против ERFA numat поэлементно с точностью 1e-14, а вся цепочка TEME→GCRS — против опубликованного примера Vallado TEME→GCRF (AIAA 2006-6753, 2004-04-06) с точностью 0,11 м (tests/frame_reference_vectors.rs); пока эта сквозная проверка не была добавлена, матрица нутации несла Δψ с неверным знаком — поворот на 2·Δψ (около 25″), которого не видели тесты свойств (см. CHANGELOG, Unreleased, Fixed); 2000A и 2000B согласуются в пределах < 1 мсд, как и требуется. Цепочка основана на равноденствии/GMST (GMST: среднее гринвичское звёздное время); свободное от равноденствия приведение CIO (X,Y,s) и его независимая численная перекрёстная проверка по ANISE/SPICE (ANISE: Attitude, Navigation, Instrument, Spacecraft, Ephemeris — набор инструментов планетарной геометрии на чистом Rust; SPICE: Spacecraft, Planet, Instrument, C-matrix, Events) (≤ 3,6 м на орбите ГНСС, значительно ниже цели < 10 м) приведены в строке CIO ниже. |
| Модель геомагнитного главного поля IGRF-14 (IGRF: Международное геомагнитное эталонное поле) | validated |
src/igrf.rs: поле на сферических гармониках IAGA (Международная ассоциация геомагнетизма и аэрономии) в нормировке Шмидта (степень/порядок 13, 2025,0 + вековая вариация; коэффициенты сгенерированы машиной из официального igrf14coeffs.txt скриптом tools/gen_igrf.py, воспроизводят igrf_data.rs бит в бит). Проверено по пяти независимым направлениям: (1) точечная проверка коэффициентов по файлу IAGA (g₁⁰=−29350,0, g₁¹=−1410,3, h₁¹=4545,5 нТл); (2) синтез степени 1 воспроизводит точное замкнутое поле наклонённого диполя (B_r,B_θ,B_φ) с точностью 1e-6; (3) полное аналитическое поле степени 13 равно −∇V скалярного потенциала (конечные разности, с точностью 1e-4) — сквозная проверка производных Лежандра и члена 1/sinθ; (4) ось диполя воспроизводит известный геомагнитный северный полюс (~80,7°с. ш., −72,7°з. д.) и силу диполя (~29,7 мкТл), а глобальное поле лежит в физической полосе 22–67 мкТл с правильным знаком наклонения по полушариям; и (5) внешний оракул — полный синтез воспроизводит значения официального веб-сервиса IGRF-14 Британской геологической службы на 2025,0 (геодезическая высота, WGS-84 (WGS: Всемирная геодезическая система)) с точностью < 2 нТл по X/Y/Z/F и < 0.02° по D/I в четырёх точках, включая высоту 400 км (synthesis_matches_the_official_bgs_igrf14_values_at_2025). |
| Приведение GCRS↔ITRS (ITRS: Международная земная система отсчёта) по IAU 2006/2000A на основе CIO | validated |
src/cio.rs: цепочка от небесной к земной системе без равноденствия. Координаты CIP (небесный промежуточный полюс) (X, Y) и 66-членный ряд локатора CIO s проверены бит в бит по опубликованному вектору SOFA/ERFA eraXys06a на JD_TT 2453736,5 — X=0.5791308482835292617e-3 (1e-14), Y=0.4020580099454020310e-4 (1e-15), s=-0.1220032294164579896e-7 (1e-18); матрица GCRS→CIRS (CIRS: небесная промежуточная система отсчёта) против eraC2ixys (все девять элементов с точностью 1e-12); угол вращения Земли (ERA) против eraEra00(2400000.5, 54388.0) = 0,4022837240028158102 (1e-12). Таблица s сгенерирована машиной из эталона ERFA s06.c скриптом tools/gen_s06.py (воспроизводит cio_s06_data.rs бит в бит). Полная gcrs_to_itrs_matrix (CIO eraC2tcio = движение полюса · ERA · GCRS→CIRS) проверена на собственное вращение и прямой и обратный проход и показана согласованной с прежним приведением TEME по равноденствию/GMST-1982 в пределах 1 м на радиусе 7 000 км (соглашения различаются там примерно на 5 см). Независимая перекрёстная проверка третьей стороной (xval/anise-frames/): та же gcrs_to_itrs_matrix сравнивается с ANISE (реализация NAIF/SPICE (NAIF: Navigation and Ancillary Information Facility) на чистом Rust), вращающей GCRF→ITRF93 (GCRF: геоцентрическая небесная система отсчёта; ITRF93: Международная земная система отсчёта 1993) по earth_latest_high_prec.bpc от JPL (Лаборатория реактивного движения), при идентичных параметрах ориентации Земли IERS (Международная служба вращения Земли и систем отсчёта) finals2000A, поданных обеим сторонам, на восьми квартальных эпохах 2020–2023. Две независимые реализации системы отсчёта согласуются с максимальным относительным поворотом 0,028″ — ≤ 0,86 м на поверхности, ≤ 0,93 м на LEO (низкая околоземная орбита), ≤ 3,6 м на орбите ГНСС (средний угол 0,023″). Это перекрёстная проверка систем отсчёта «< 10 м» из ROADMAP, выполненная; остаток — ожидаемое различие моделей/датумов ITRF93 и IERS-2010-CIO, а не дефект (привязкой бит в бит остаются векторы SOFA/ERFA выше). ANISE — крейт с лицензией MPL-2.0 (MPL: Mozilla Public License) / издание 2024, поэтому проверка находится в автономном подкрейте, исключённом из рабочей области, который никогда не затрагивает граф зависимостей опубликованного kshana и какие-либо контрольные проверки CI по умолчанию. |
| Прямой и обратный проход экспорта SP3 (Standard Product 3, формат точных орбит) (орбитальная группировка → SP3-c → повторный разбор) | validated |
tests/sp3_export_roundtrip.rs: реальный снимок Celestrak gps-ops (30 спутников GPS) распространяется с SGP4, экспортируется в SP3-c (Sp3File::from_propagators → to_sp3_string), заново разбирается (parse_sp3), а восстановленные положения ECEF сравниваются с истиной SGP4 на каждой эпохе за 24 ч — наихудший остаток < 0,5 м (миллиметровая сериализация записывающей части; допуск уровня TLE (TLE: двухстрочный набор элементов) 10 м вехи выполнен с большим запасом). Путь CLI (интерфейс командной строки) --export-sp3 также охвачен: встроенный орбитальный сценарий экспортирует заново разбираемый SP3 на 30 спутников, а неорбитальный сценарий отклоняется. |
| Реальная геометрия орбитальной группировки GPS по TLE (SGP4 → ECEF) | validated |
tests/igs_real_data.rs: подлинный снимок Celestrak gps-ops (2021-07-28, 30 действующих спутников GPS; происхождение в tests/fixtures/celestrak/NOTICE) разбирается, и каждый спутник распространяется через проверенное ядро SGP4 на общий момент и поворачивается TEME→ECEF. Проверяется, что вся орбитальная группировка ложится на оболочку MEO (средняя околоземная орбита) GPS в пределах 1 %, и что с пункта средних широт с открытым небом реальная полная видимость (девять спутников) даёт PDOP 1,64 с вертикальным геометрическим фактором, превышающим горизонтальный (как и должно быть для наземного пользователя). Это проверяет SGP4 на реальной орбитальной группировке наряду с реальными путями данных SP3 (точные) и RINEX (вещательные). |
| Генератор Walker на средних элементах SGP4 | validated |
src/walker.rs: спроектированный шаблон Walker-delta выдаётся как средние элементы SGP4 (среднее движение Козаи выбрано так, чтобы большая полуось SGP4 попала на целевую оболочку) и распространяется через проверенное ядро. Тесты: 24-спутниковый Walker, подобный GPS, лежит на оболочке MEO в пределах 1 %, плоскости разнесены ровно на 90° по RAAN (прямое восхождение восходящего узла), восстановленному по нормалям орбит, а среднее движение воспроизводит период оболочки GPS ~718 мин. |
| Перебор PDOP орбитальной группировки + показатели качества (FoM) покрытия/повторного посещения | validated (монотонность) |
src/walker.rs: pdop_sweep сводит в таблицу покрытие и медианный/наихудший PDOP по сетке {planes × sats × inclination}; coverage_revisit сообщает долю покрытия и промежутки повторного посещения в наземной точке. Проверено физическими монотонностями, которым должен подчиняться проектный компромисс: добавление спутников никогда не снижает покрытие и строго снижает медианный PDOP (полный 24-спутниковый проект покрывает непрерывно при PDOP ~1,7), а уплотнение прореженной орбитальной группировки строго сокращает наихудший промежуток повторного посещения. Средний промежуток повторного посещения никогда не превышает максимальный. Это таблицы компромиссов по геометрии, а не официально утверждённый бюджет линии связи/покрытия. |
Честная постановка: это детерминированный слой геометрии (круговые орбиты, сферическая Земля среднего радиуса 6371 км, чистая линия визирования). Он устанавливает доступность и геометрическую точность положения (геометрический фактор × репрезентативный бюджет ошибки дальности) по реальной геометрии, а не навигационное решение по точным эфемеридам. Эталон orbit-gnss-challenged.toml помещает космический аппарат внутрь оболочки ГНСС: он удерживает решение лишь ~59 % суток, квантовые часы сохраняют решение по времени с точностью 5 нс через каждый разрыв (доступность 1,0), а чип-масштабные часы держат ~0,73.
Численный (Коуэлла) пропагатор и модель сил#
Численный пропагатор (src/propagator.rs) интегрирует иерархическую модель сил (src/forces.rs) адаптивными интеграторами (src/integrator.rs). Каждый член ниже проверен по аналитической истине или выведенной вручную замкнутой формуле; возмущения выключены по умолчанию, поэтому выпущенные эталонные значения (goldens) не затронуты. Составная модель также перекрёстно проверена по другому инструменту: tests/numerical_cowell_propagator_reference.rs прогоняет 11 случаев LEO и GTO (геостационарная переходная орбита), 275 часовых эпох против пропагатора DormandPrince853 из Orekit 12,2, и консервативные ступени (двухтельная → J2–J6 → Солнце/Луна → шаровая SRP) согласуются с наихудшим 0,08 м за 24 ч (VALIDATED в матрице); ступень сопротивления только охарактеризована (333 м) и остаётся MODELLED.
| Составляющая | Статус | Доказательства |
|---|---|---|
| Пропагатор Коуэлла против аналитической истины Кеплера | validated |
src/propagator.rs: невозмущённая (двухтельная) орбита воспроизводит точное решение Кеплера в универсальных переменных с точностью до долей метра на 24-часовой орбите LEO (более жёсткий порог, чем «против численного эталона < 10 м»); удельная энергия и момент импульса сохраняются с относительной точностью ~1e-9; нодальная регрессия J2 воспроизводит замкнутое j2_secular_rates по теории первого порядка (в пределах 2 %, остаток O(J2²)). solve_kepler_checked возвращает Err вместо молча неверного ответа, когда метод Ньютона не сходится (вблизи перигея e = 0,999). Устойчивый solve_kepler_robust (стартер Markley 1995, src/kepler.rs) сходится там и при 0 ≤ e ≤ 0,999999 в пределах 0,9 ε·|E| от корней mpmath с 50 знаками (tests/kepler_mpmath_oracle.rs). |
| Адаптивные интеграторы (RK4 (метод Рунге–Кутты четвёртого порядка) с удвоением шага + вложенная пара Дормана–Принса RK5(4), DP5(4) ниже) | validated |
src/integrator.rs: RK4 интегрирует y' = y → e с точностью < 1e-9, показывает падение ошибки в ~16× при каждом уменьшении шага вдвое (сходимость 4-го порядка) и сохраняет гармонический осциллятор на периоде. Вложенная оценка ошибки DP5(4) равна O(h⁵) (уменьшение шага вдвое снижает её в ~32×), интегрирует осциллятор на 50 периодах с сохранением энергии до < 1e-6 и достигает той же конечной точки при том же допуске за меньшее число вычислений функции, чем удвоение шага; propagate_dopri проходит тот же порог Кеплера с точностью до долей метра и согласуется с путём RK4 до < 1 м на орбите J2..J6. DOP853 (integrate_dop853): пара Хайрера 8(5 3) с плотным выходом воспроизводит DOP853 из SciPy 1.18.1 шаг в шаг (одиночный шаг в пределах 5.6e-15; идентичные числа шагов на прогонах e = 0,7 и Arenstorf, одно переключение принятия/отклонения на 501 шагах на прогоне LEO; конечные состояния в пределах 1.6e-12) и совпадает с точным решением Кеплера так же близко, как и SciPy (tests/dop853_scipy_oracle.rs). |
| Зональное гармоническое поле J2–J6 | validated |
src/forces.rs: zonal_accel проверяется тремя способами — она сводится к проверенной по 666 векторам j2_accel с машинной точностью при ограничении до [J2]; она совпадает с численным градиентом собственного зонального потенциала через всё поле J2..J6 (золотой стандарт консервативного поля); а нечётные члены J3 в сравнении с чётными J2/J4..J6 показывают характерную (анти)симметрию север–юг при z → −z. Распространённая орбита J2..J6 сохраняет полную энергию с точностью ~1e-8 за сутки. |
| Притяжение третьих тел (Солнце и Луна) | validated |
src/forces.rs + src/ephem.rs: third_body_accel совпадает с точным градиентом своего возмущающего потенциала, обращается в нуль в геоцентре и попадает в учебные значения для LEO (~5e-7 м/с² для Солнца, ~1.1e-6 м/с² для Луны). Маломощная по точности эфемерида Солнца Montenbruck–Gill попадает в выведенные вручную опорные значения J2000 (расстояние в перигелии ≈ 1.471e11 м, склонение в солнцестояние ~−23°, движение ~1°/сут); эфемерида Луны остаётся внутри своей огибающей перигей/апогей, восстанавливает среднее расстояние ~384 400 км, никогда не превышает наклонение 5,3° и возвращается в пределах 1° через один сидерический месяц. Подключение правой части (RHS), управляемое эпохой, бит-в-бит точно (член RHS равен third_body_accel в выбранном положении при t = 0 и t = 1 сутки), а сдвиг эпохи на четверть года даёт другую траекторию. |
| Давление солнечного излучения (SRP) + коническая тень | validated |
src/forces.rs: srp_accel (шаровая ν·P☉·cᵣ·(A/m)·(AU/d)²·d̂) бит-в-бит идентично замкнутой форме при полном Солнце, фиксирует давление излучения на 1 а. е. (AU: астрономическая единица) ≈ 4.5398e-6 Н/м², лежит в полосе LEO ~1.36e-7 м/с², отталкивая от Солнца, уменьшается вчетверо при удвоении расстояния до Солнца (обратный квадрат) и строго равно нулю глубоко в тени. conical_shadow даёт ν = 1 при полном Солнце и ν = 0 в полной тени (точно), плавную монотонную полутень, нарастающую от 0 до 1 в полосе [b−a, b+a], которая выходит за пределы цилиндра тени. |
| Атмосферное сопротивление (первый член, зависящий от скорости) | validated |
src/forces.rs: atmospheric_density (кусочно-экспоненциальная по Таблице 8-4 Vallado) опирается на 1,225 кг/м³ на уровне моря, ограничивается ниже поверхности, монотонно убывает по LEO, лежит в полосе ~1e-12 кг/м³ на 400 км с физически восстановленной шкалой высоты ~58 км; drag_accel противодействует относительной скорости с учётом вращения при величине LEO ~2e-6 м/с². Ключевая проверка: орбита на 300 км теряет удельную энергию монотонно, а её большая полуось убывает ограниченными ~км/сут, тогда как базовый вакуумный случай сохраняет энергию до < 1e-9. |
| Пост-ньютоновская (Шварцшильда) релятивистская поправка | validated |
src/forces.rs: relativistic_accel (IERS β = γ = 1, форма a = (μ/c²r³)·{[4μ/r − v²]·r + 4(r·v)·v}) на круговой орбите сводится к замкнутой форме 3μ²/(c²r³)·r̂ (радиальная, направленная наружу, внеосевые компоненты строго равны нулю), показывает учебное отношение ≈1.9e-9 на LEO к двухтельной задаче, совпадает с упрощённой вручную формой через радиальную скорость μ(4μ + 3v²r)/(c²r³) до < 1e-12 и в пропагаторе возмущает орбиту, удерживая большую полуось в пределах менее метра в сутки — консервативная противоположность распаду от сопротивления. |
Честная область применимости: выпущенные по умолчанию ForceModel интегрируют зональное поле. Тессеральное поле EGM2008 высокой степени (src/gravity_sh.rs, степень/порядок 70), приливы твёрдой Земли/океана/атмосферы (src/tides.rs) и член увлечения системы отсчёта Лензе–Тирринга теперь реализованы и включены в модель сил точной подгонки эфемерид (src/precise_od.rs — см. ниже). Тессеральное поле также является необязательным членом ForceModel Коуэлла (propagator::Geopotential, по умолчанию выключено), проверенным по Orekit 12,2 HolmesFeatherstoneAttractionModel до степени/порядка 70 (6 случаев за 24 ч, наихудшее |Δr| 0,036 м; tests/cowell_tesseral_orekit_oracle.rs). Существуют два вычислителя поля: прежний acceleration (сферические частные производные; верен до степени ~180 вдали от полюсов; выходные данные зафиксированы) и acceleration_hf (модифицированный прямой по столбцам метод Холмса–Фезерстоуна 2002, градиент без 1/cos φ; верен до степени 2190 на любой широте). EGM2008 до 2190 загружается во время выполнения (from_gfc_file, scripts/fetch_egm2008.sh, не встроен). acceleration_hf согласуется с Orekit 12,2 до 7.3e-17 м/с² в восьми точках до степени 2190; он остаётся MODELLED, потому что pyshtools не выполнил предварительно зарегистрированный порог вблизи полюса (проверка mpmath относит ошибку на счёт pyshtools; xval/high-degree-gravity/). Орбита 200×200 за 24 ч согласуется с Orekit до 0,13 м, но её предварительно зарегистрированный контроль чувствительности к степени 70 не выполнен (0,73 м < 1 м), поэтому степени 71–200 на орбите охарактеризованы, а не подтверждены (xval/cowell-tesseral-200-orekit/). Плотность термосферы NRLMSISE-00 (NRLMSISE: модель атмосферы Исследовательской лаборатории ВМС с масс-спектрометром и радаром некогерентного рассеяния) перенесена (src/nrlmsise00.rs: бит-в-бит идентична порту на C из общественного достояния на 720 точках, в пределах 1.9e-6 относительной погрешности от pymsis, воспроизведены 17 опубликованных тестовых случаев; tests/nrlmsise00_reference.rs) и является необязательной ступенью плотности сопротивления (forces::DensityModel, ForceModel::drag_density; по умолчанию остаётся статическая модель Vallado). Это подтверждает порт, а не точность модели относительно измеренной плотности. Солнце и Луна по DE440 (DE: Development Ephemeris) — необязательная ступень эфемерид (ForceModel::with_ephemeris). Тень SRP для сплюснутой Земли WGS-84 необязательна (ForceModel::srp_shadow), согласуется с коэффициентом освещённости Orekit 12,2 в пределах 7.4e-9 на 2400 геометриях (tests/srp_oblate_shadow_orekit_oracle.rs); её вариант с потемнением к краю внешнего оракула не имеет (MODELLED). Ступень сопротивления NRLMSISE-00 согласуется с собственным сопротивлением NRLMSISE-00 в Orekit 12,2 за 24 ч с точностью 0,03 м при смещении от сопротивления до 142 км (tests/drag_tier_orekit_oracle.rs, VALIDATED при общих соглашениях). Перекрёстная проверка по GMAT (General Mission Analysis Tool) остаётся следующим шагом.
Приливы на геопотенциале (src/tides.rs)#
Изменяющиеся во времени поправки ΔC̄_nm, ΔS̄_nm к коэффициентам Стокса (IERS Conventions 2010, Глава 6), проверенные по собственным опубликованным числам соглашений, а не по другому инструменту.
| Вклад | Статус | Доказательства |
|---|---|---|
| Прилив твёрдой Земли (IERS ур. 6,6 / 6.8b / 6,14) | validated |
tests/tides_iers.rs: постоянный (нулевой частоты) прилив ΔC̄₂₀ попадает в пределы 1 % от опубликованного IERS −4,1736×10⁻⁹ (неупругие числа Лява); разобранный пример Step-2 K1 воспроизведён бит в бит (амплитуды sin/cos 470,9 / −30,2 ×10⁻¹² с точностью 0,1×10⁻¹²); путь нормированного многочлена Лежандра зафиксирован замкнутыми значениями, выведенными вручную независимо от рекуррентности. |
| Океанский прилив (IERS ур. 6,15, FES2004 (атлас приливов Finite Element Solution 2004), 8 составляющих) | validated |
Включённое в репозиторий подмножество FES2004 (tools/gen_fes2004.py → src/fes2004_data.rs, разбор Doodson→множитель) точно воспроизводит исходные коэффициенты M2 (2 2); фаза Doodson для K1 равна θ_g + π; секториальная величина степени 2 физична и на порядок меньше прилива твёрдой Земли. |
| Атмосферный воздушный прилив S2 (Ray 2001, NASA (Национальное управление по аэронавтике и исследованию космического пространства) GSFC (Центр космических полётов имени Годдарда)) | validated |
Заимствованные гармоники Рэя преобразуются через соотношение поверхностной нагрузки (ур. 6,21) в пиковое значение ΔC̄₂₂ ≈ 4×10⁻¹¹ (~10 % от океанического члена M2). Честная оговорка: опубликованного оракула по коэффициентам геопотенциала для атмосферного прилива не существует, поэтому он проверяется по целостности источника и по порядку величины, а это более слабый порог, чем для твёрдых и океанических приливов. |
Манёвры и проектирование траектории (src/maneuver.rs)#
| Аспект | Статус | Доказательства |
|---|---|---|
| Импульсный ΔV и распространение ковариации | validated |
Разрыв скорости с ковариацией 6×6, переносимой вперёд (детерминированный манёвр ⇒ единичная матрица перехода состояния (STM); ковариация ошибки исполнения поворачивается из системы координат манёвра — ECI (инерциальная геоцентрическая) или LVLH (местная вертикаль, местная горизонталь) — в блок скорости). |
| Интегрирование конечного импульса и формула Циолковского | validated |
Интегрирование при постоянной тяге на дуге работы двигателя (масса как переменная состояния): достигнутый ΔV совпадает с замкнутой формой уравнения ракеты Циолковского с точностью лучше 0,01 %. |
| Круговая проверка решателя Ламберта (Izzo 2015) | validated |
Результат решателя Ламберта для одного витка (r1, r2, время перелёта ⇒ v1, v2) прогоняется по кругу через точный кеплеровский распространитель в универсальных переменных — он должен вернуться в r2. |
| Развёртка «porkchop» и нижняя граница Гомана | validated |
Минимум сетки C3 старта × прибытия / V∞ прибытия сверяется с аналитической нижней границей C3 для перелёта Гомана между двумя компланарными круговыми орбитами. |
| Решатель Ламберта и независимая библиотека | validated |
tests/lambert_reference.rs: 13 одновитковых перелётов от LEO к GEO и к гелиоцентрической орбите, прямых и ретроградных, сопоставлены с lamberthub 1.0.0 izzo2015; наибольшая разность граничных скоростей — 7e-12 м/с. |
Честные границы применимости: оптимизатора траекторий нет, многовитковых ветвей Ламберта нет, а гелиоцентрическая модель синтетическая, компланарная и круговая (планетных эфемерид DE нет, поэтому перекрёстная проверка C3 для перелёта Земля–Марс в GMAT не проводилась).
Определение орбиты (OD) (src/orbit_determination.rs, src/batch_ls.rs)#
| Аспект | Статус | Доказательства |
|---|---|---|
| Пакетный корректор Гаусса–Ньютона | validated |
Универсальный решатель gauss_newton достигает точного решения взвешенного метода наименьших квадратов для линейной подгонки, восстанавливает истинные параметры при нелинейной подгонке a·exp(b·t) и решает 3-D-задачу многопозиционной дальнометрии по безошибочным дальностям. |
| Пакетное определение орбиты по дальностям | validated |
determine_orbit_batch восстанавливает [r, v] по дальномерным измерениям наземных станций (распространение в модели сил «две задачи тел + J2») с точностью до долей метра и мм·с⁻¹ при безошибочных дальностях и ~2 м с остаточной невязкой после подгонки на уровне шумового порога 5 м — это признак согласованной подгонки методом наименьших квадратов. |
| Последовательное определение орбиты (фильтр с «бесследовым» преобразованием) | validated |
determine_orbit_sequential рекурсивно восстанавливает состояние с точностью до десятков метров на той же динамике и модели дальности. |
| Пакетное и последовательное OD в сравнении с независимым оценивателем | validated |
tests/batch_sequential_orbit_determination_reference.rs: 8 сценариев (6 безошибочных LEO/MEO/эксцентрических с 3–4 станциями, 2 с σ = 5 м) в сравнении с пакетным методом наименьших квадратов и калмановскими оценивателями Orekit 12,2 на согласованной модели сил; наихудший результат пакетного метода 1e-3 м / 1e-6 м/с, последовательного — 0,9 м. |
| Пакетное OD по скорости изменения дальности и азимуту/углу места с маской возвышения | modelled (внешнее сравнение, один заранее зарегистрированный порог не достигнут) | tests/od_tracking_measurements_reference.rs: 8 сценариев в сравнении с пакетным методом наименьших квадратов Orekit 12,2 с пользовательскими мгновенными геометрическими измерениями; множества видимости идентичны, значения измерений совпадают в пределах 5.8e-8 м / 6.3e-10 м/с / 1.4e-13 рад, матрица перехода состояния — в пределах 1.2e-14, зашумлённые состояния — в пределах 1,74 см, а RMS по типам измерений — в пределах 2.7e-4; заранее зарегистрированный порог для безошибочного состояния ≤ 1 см не достигнут в 2 из 4 сценариев (1,46 и 1,74 см; собственная оценка Orekit отстоит на столько же от его смоделированной истины, а у kshana — в пределах 1e-8 м). См. xval/od-measurements-orekit/RESULTS.md. |
Честные границы применимости: учебное OD использует неподвижные инерциальные станции, топоцентрическую систему координат для сферической Земли и мгновенные геометрические измерения (без учёта времени распространения света, аберрации, рефракции и вращения Земли); матрица перехода состояния для пути «скорость изменения дальности/углы» вариационная (интегрируется методом RK4 с аналитическими частными производными для «две задачи тел + J2»), а не в замкнутой форме; последовательного фильтра для скорости изменения дальности или углов нет. Путь только по дальности сохраняет якобиан по конечным разностям. (Движок подгонки эфемерид в полной модели сил, описанный ниже, имеет собственную вариационную матрицу перехода состояния.)
Проверка модели сил подгонкой эфемерид (src/precise_od.rs)#
Точный пакетный оцениватель методом наименьших квадратов по наблюдениям положения в полной модели сил: тессеральный геопотенциал EGM2008 (вычисляемый в земной системе координат через редукцию CIO), дополненный третьим телом Солнце/Луна, SRP, сопротивлением атмосферы, ОТО Шварцшильда/Лензе–Тирринга (общая теория относительности) и приливами, описанными выше; подгонка к серии инерциальных определений положения с якобианом на основе вариационной матрицы перехода состояния. Проверено на синтетических данных, где истиной служит собственный интегратор Kshana, так что каждая невязка принадлежит оценивателю, а не динамике.
| Аспект | Статус | Доказательства |
|---|---|---|
| Состав точной модели сил | validated |
tests/precise_od_synth.rs: поле степени 0 в каждую эпоху есть в точности точечная масса (центральный член инвариантен относительно вращения); степень 8 добавляет сплюснутость полосы J2; третье тело Солнце и приливной член подключаются с побитовой точностью; постоянное радиальное эмпирическое ускорение в RTN (радиальная, трансверсальная, нормальная составляющие) строго радиально. |
| Вариационная матрица перехода состояния | validated |
Каждый столбец Φ на половине орбиты LEO (геопотенциал степени 8 + Солнце + Луна) согласуется с независимым повторным распространением по центральным конечным разностям на всей дуге (FD) с относительной точностью < 1×10⁻⁶ как по отклику положения, так и по отклику скорости — это документированная перекрёстная проверка STM↔FD. Φ(0) = I; расширенный и обычный распространители согласуются с точностью до долей миллиметра. |
| Самовосстановление пакетным методом наименьших квадратов | validated |
1-часовая дуга Kshana (степень 6 + Солнце + Луна), наблюдаемая без шума, восстанавливается из смещения 150 м / 0,1 м·с⁻¹ с точностью состояния на эпоху в пределах 1×10⁻² м и почти нулевым RMS после подгонки; при белом шуме 5 м 3-D RMS после подгонки устанавливается на уровне шумового порога ~σ, без смещения. C_R для SRP восстанавливается с 1,0 с точностью до 1 % от истинного значения 1,4. |
| Редактирование выбросов и представление в RTN | validated |
Грубая ошибка в 500 м отбраковывается редактированием по 5σ после подгонки (ровно одно наблюдение), оставляя чистую подгонку на миллиметровом уровне; невязки представляются как в разложении на радиальную/трансверсальную/нормальную составляющие, так и в виде 3-D. |
| Уровень эмпирических ускорений (постоянная составляющая в RTN + 1-CPR (CPR: один цикл на виток)) | validated |
Девять эмпирических параметров с априорными ограничениями остаются ниже 1×10⁻⁸ м·с⁻² на истине без эмпирических членов и не нарушают подгонку; постоянное поперечное ускорение 3×10⁻⁸ м·с⁻², введённое в истину, восстанавливается с точностью до 20 %. |
Честные границы применимости: синтетическая волна использует номинальные параметры ориентации Земли (EOP: UT1 (всемирное время 1, время вращения Земли) ≈ TT (земное время), без движения полюса) — это точно для самовосстановления, поскольку одна и та же модель порождает и подгоняет дугу. Проверки на наборах данных агентств накладывают на этот движок реальные EOP finals2000A и истину SP3/SPK (SPK: ядро планетных эфемерид) через цепочку систем координат CIO (src/eop.rs, tests/agency_galileo.rs, tests/agency_swarm.rs, tests/agency_lro.rs).
Реальные точные орбиты агентств (tests/agency_galileo.rs, tests/agency_swarm.rs, tests/agency_lro.rs)#
| Набор данных | Статус | Доказательства |
|---|---|---|
| Galileo MEO — < 5 м GREEN | validated |
Движок Kshana в полной модели сил, подогнанный к дословному фрагменту собственной итоговой орбиты ESA/ESOC (ESOC: Европейский центр космических операций) (ESA0MGNFIN, ITRF (Международная земная система отсчёта)) для Galileo E11 на интервале 8 ч, где каждое определение ITRF повёрнуто в GCRS с реальными EOP finals2000A: 3-D RMS после подгонки 0,133 м при чистой модели сил + C_R (RTN 0.105/0.067/0.047 м, C_R 1,174), 0,070 м с эмпирическим уровнем, при исходном рассогласовании 78,7 км. На полной суточной дуге (24 ч) — 0,611 м. Всё это значительно лучше порога 5 м. Поле тяготения сошлось к степени/порядку 8 (одинаково при d/o 8/10/12); задание workflow_dispatch выполняет полную модель d/o-70. Происхождение и SHA-256 (SHA: Secure Hash Algorithm) — в tests/fixtures/agency/NOTICE.md; полная запись — в docs/AGENCY-ORBIT-VALIDATION.md. |
| Swarm-A LEO — < 5 м GREEN | validated |
Движок в полной модели сил (+ сопротивление атмосферы), подогнанный к дословному фрагменту собственной редуцированно-динамической точной орбиты ESA для Swarm-A (SW_OPER_SP3ACOM_2_, L47, ITRF, ~430 км, ~2 см) на интервале 3 ч при d/o-70, с реальными EOP finals2000A через цепочку CIO: динамический уровень (только состояние, статическая плотность, C_R=1) — 3-D RMS после подгонки 2,687 м (RTN 0.925/2.522/0.045 м — невязка ≈ чистое сопротивление атмосферы вдоль трассы), редуцированно-динамический уровень (+ эмпирические ускорения CPR) — 0,098 м (RTN 0.026/0.092/0.025 м) — ~10 см относительно орбиты ESA с точностью ~2 см. Происхождение и SHA-256 — в tests/fixtures/agency/NOTICE.md; полная запись — в docs/AGENCY-ORBIT-VALIDATION.md. |
| LRO (Lunar Reconnaissance Orbiter) лунная — validated, выше 5 м (честно) | validated |
Подгонка модели сил в селеноцентрической системе (src/lunar_od.rs): гравитационное поле GRAIL GRGM660PRIM (d/o 100) в связанной с Луной системе главных осей (src/lunar_frame.rs, средняя система «Земля — Луна» IAU 2015 + фиксированное смещение DE421 (Development Ephemeris 421) из средней системы «Земля — Луна» в систему главных осей (ME→PA), применяемое так, как его определяет SPICE, начиная с 0,36: до этого оно применялось в неверном направлении, с ошибкой около 208″) + третье тело Земля/Солнце, подогнанная через тот же самый универсальный оцениватель Гаусса–Ньютона, что и для земных наборов данных, к реальной реконструированной орбите JPL Horizons LRO (NAIF −85), 4 ч / 241 эпоха, ~98 км. Честный результат после подгонки (0,36): динамический 12,05 м (RTN 2.91/10.11/5.88), редуцированно-динамический 6,67 м (RTN 3.41/4.58/3.44, эмпирические члены 1+2 на виток), при исходном рассогласовании 39,9 м (до исправления ME→PA: 12,6 м, 6,65 м, 53,8 м) — выше порога < 5 м, причём причина не в оценивателе (результат одинаков при d/o 100/150 и atol 1e-6/1e-9). Перекрёстная проверка уровня DE (xval/anise-lunar-od: лунная ориентация главных осей DE440 (Development Ephemeris 440) + эфемериды DE440 через ANISE) скорректировала утверждение об ограничивающем факторе: она дала 12,0 м для динамического и 6,67 м для редуцированно-динамического уровня, и исправленный аналитический стек теперь совпадает с ней на обоих уровнях (прежний разрыв на динамическом уровне, 12,6 → 12,0 м, был вызван ошибкой смещения ME→PA), так что эксплуатационный предел определяется не аналитической ориентацией/эфемеридами, а остаточной невязкой, неустранимой на эмпирическом уровне (что лучше всего согласуется с немоделированной негравитационной динамикой LRO на короткой дуге); облегчённый аналитический стек для редуцированно-динамической орбиты уже совпадает с уровнем DE. Происхождение и SHA-256 — в tests/fixtures/agency/NOTICE.md; полная запись — в docs/AGENCY-ORBIT-VALIDATION.md. Проверено по реальной истине агентств: 3 из 3; достигнут порог < 5 м: 2 из 3. |
Навигация по гравитационной карте / alt-PNT (src/gravimeter.rs, src/mapmatch.rs, src/particle_filter.rs, src/altpnt/terrain.rs)#
| Аспект | Статус | Доказательства |
|---|---|---|
| Поле гравитационных аномалий в сферических гармониках | validated |
src/gravimeter.rs: поле низкой степени с полной нормировкой, проверенное по замкнутым формам функций Лежандра (P̄₁₁ = √3·cosφ, P̄₂₀ = (√5/2)(3sin²φ−1), P̄₂₂ = (√15/2)cos²φ) и по выведенной вручную однотермовой аномалии 1,897 мГал. |
| Модель измерений холодноатомного гравиметра | validated (модель) |
Порог белого шума выводится из ASD акселерометра CAI (σ = ASD/√τ) и вводится как детерминированная последовательность с начальным значением (сопоставитель никогда не получает истину без шума, но прогон побитово воспроизводим). |
| Фильтр частиц с последовательной выборкой по значимости | validated |
src/particle_filter.rs: детерминированное ядро зафиксировано точно — ESS (эффективный размер выборки) в диапазоне 1…N, систематическая передискретизация выбирает индексы пропорционально весу, выпуклая комбинация взвешенного среднего, гауссовское правдоподобие, притягивающее оценку к измерению, и детерминизм предсказания при заданном начальном значении. |
| Правдоподобие сопоставления с картой и восстановление | validated |
src/mapmatch.rs: field_likelihood достигает пика (= 1) при идеальном совпадении и падает до e^(−½) на одну сигму; фильтр частиц на характерном участке синтетического рельефа восстанавливает истинное положение с точностью до 0,1. |
| 60-минутный бенчмарк при отсутствии GPS | validated |
run_gps_denied_gravity_nav (scenarios/gps-denied-gravity-nav.toml): перерыв длительностью около одного часа и протяжённостью ~700 км, на котором инерциальное решение уходит до ≈ 70 км, компенсируется до ≈ 145 м (< 500 м) иерархическим сопоставителем «от грубого к точному» — побитово воспроизводимо, устойчиво к реализациям шума и доказуемо ограничено уровнем уточнения (одна грубая сетка останавливается на ~2 км). |
Загрузчик DEM (цифровая модель рельефа) SRTM (Shuttle Radar Topography Mission) .hgt и билинейная выборка (ORACLE A) |
validated |
src/altpnt/terrain.rs / tests/terrain_nav_validation.rs: построенный вручную буфер .hgt размером 2×2 с углами [100 200;300 400] при билинейной интерполяции даёт ровно 250,0 в центре ячейки (оракул в замкнутой форме), круговое преобразование в 16-битный big-endian точно, а переворот строк помещает самую северную строку файла на наибольшую хранимую широту — всё это по спецификации драйвера GDAL (Geospatial Data Abstraction Library) SRTMHGT (формат файлов высот Shuttle Radar Topography Mission) (16-битные знаковые big-endian, по строкам, северная строка первой, пустое значение -32768, https://gdal.org/en/stable/drivers/raster/srtmhgt.html). Зафиксированный в репозитории образец 11×11 (tools/gen_terrain_fixture.py) проверяет разбор в CI; а зафиксированный в репозитории реальный тайл SRTM v3 NASA/USGS (USGS: Геологическая служба США) из общественного достояния (N36W117, Долина Смерти, прореженный до 6 угловых секунд, 722 КБ, tests/fixtures/terrain/N36W117_sub6.hgt) читается в CI (не отключён, real_srtm_committed_badwater_tile_reads_real_relief) и помещает бассейн Бэдуотер на ≈ −78 м в пределах документированного диапазона [−95,−70] м (съёмка NGS/NOAA (NGS: Национальная геодезическая служба; NOAA: Национальное управление океанических и атмосферных исследований) ≈ −86 м) при максимуме тайла ≈ 2161 м — источником истины служит съёмка, а проверяется DEM (без циклической зависимости). Более крупные опубликованные отметки высот (гора Уитни, 4421 м) остаются в полнотайловых тестах под управлением #[ignore]. |
| Сходимость рельефной навигации (TERCOM/SITAN (TERCOM: сопоставление по контурам рельефа; SITAN: инерциальная навигация с коррекцией по рельефу Sandia)) (ORACLE B) | validated |
run_terrain_nav (scenarios/terrain-nav.toml): выведенный вручную введённый дрейф INS (0,5°с.ш., −0,4°в.д. ≈ 70 км на ~12° широты, вычисленный как дрейф° × M_per_deg × cos lat) компенсируется до < 500 м (в пределах порога разрешения сетки search_step/factor² ≈ 140 m), что более чем в 100 раз лучше свободной инерциальной навигации; проверка идёт по введённому числу, а не по DEM (без циклической зависимости), побитово воспроизводимо и устойчиво к начальным значениям шума. |
| Выигрыш от комплексирования гравитации, магнитного поля и рельефа (ORACLE C) | validated |
run_combined_altpnt (scenarios/combined-altpnt.toml): три скалярных канала (Δg · аномалия коры |B| · высота), объединённые как произведение правдоподобий, дают ограниченную невязку < 500 м на 60-минутном перерыве, которая при усреднении по начальным значениям не хуже лучшего одиночного канала (аддитивность информации / нижняя граница CRLB (нижняя граница Крамера–Рао)). Результат лежит в области «десятков метров» CEP (круговая вероятная ошибка), опубликованной для TERCOM / рельефной навигации (TRN) (https://en.wikipedia.org/wiki/TERCOM; PeerJ 2024 ESKF-TERCOM (ESKF: калмановский фильтр с вектором ошибок), https://peerj.com/articles/cs-3118/). |
Честные границы применимости: гравитационное поле — это низкая степень плюс синтетические масконы, а не полный набор коэффициентов EGM2008/EIGEN (EIGEN: европейская улучшенная модель гравитации Земли новыми методами); магнитный канал опирается на гладкое главное поле IGRF плюс синтетические масконы аномалий коры (реальная высокочастотная карта коры — задача следующего этапа); рельеф в CI для бенчмарков навигационной коррекции — самодостаточная синтетическая DEM, тогда как сам считыватель .hgt теперь проверяется в CI по зафиксированному реальному тайлу SRTM v3 (выше); полноразмерные реальные тайлы по-прежнему остаются под управлением #[ignore]. Монте-Карло по ошибке представления карты остаётся задачей следующего этапа. Все три навигатора теперь подключены к движку сценариев через kind= (gravity-map, terrain-nav, combined-altpnt).
Модель ошибок INS / IMU — проверка по паспортным данным (src/inertial/)#
Стохастическая модель ошибок IMU проверяется по опубликованным паспортным данным производителей и спецификациям наборов данных — но никогда не по значению, полученному самой Kshana. Мост от спецификации в полевых единицах к шумовой модели в СИ (Международная система единиц) — стандартная идентификация по девиации Аллана (Riley, NIST SP 1065 §5; IEEE (Институт инженеров по электротехнике и электронике) Std 952): коэффициент случайного блуждания N — это перекрывающаяся ADEV, считываемая при τ = 1 с на наклоне τ⁻¹ᐟ², а коэффициент нестабильности смещения — плоское плато Аллана (tests/imu_allan_spec.rs, герметично — без загрузки).
| Аспект | Статус | Доказательство / оракул |
|---|---|---|
| Слой преобразования единиц (риск циклической зависимости № 1) | validated |
Проверено вручную: 0,15 °/√ч = 4.3633e-5 рад/√с; 3,6 µg = 3.5304e-5 м/с²; 2,0 °/ч = 9.6963e-6 рад/с. |
| Случайное блуждание угла гироскопа | validated |
ARW ADIS16465 0,15 °/√ч (паспорт Analog Devices) восстановлено по ADEV(1 с) с точностью < 5%. |
| Случайное блуждание скорости акселерометра | validated |
VRW ADIS16465 0,1 м/с/√ч восстановлено с точностью < 5%. |
| Наклон девиации Аллана для белого шума | validated |
Наклон белой ветви ADIS16460 в двойных логарифмических координатах −0,5 ± 0,05. |
| Плато нестабильности смещения в рабочем цикле | validated |
Нестабильность смещения гироскопа ADIS16465 (BI) 2,0 °/ч восстановлена как плоский минимум Аллана с точностью < 15%. |
| Второй профиль IMU | validated |
NaveGo ADIS16488 (ARW 0,3 °/√ч, VRW 0,029 м/с/√ч): оба значения восстановлены с точностью < 5%. |
Честные границы применимости: проверяется стохастическая модель ошибок по паспортным коэффициентам Аллана. Набор данных автомобиля i2Nav-WHU (WHU: Уханьский университет) KF-GINS используется как отдельная проверка, зависящая от данных: слабосвязанный замкнутый EKF с вектором ошибок и моделью рычага GNSS — строка VALIDATED в матрице верификации (слабосвязанный GNSS/INS EKF с рычагом на наборе данных KF-GINS); он сравнивается с эталонной траекторией KF-GINS на C++ по порогам, зарегистрированным до прогона. Он выполняется только там, где набор данных предоставлен (KSHANA_KFGINS_DIR); без него выполняются тесты синтетического загрузчика и рычага. Тесно связанный вариант и вариант по фазе несущей этой строкой не охватываются (строка тесно связанного GNSS/INS по фазе несущей — MODELLED).
Дальний космос и PNT для Марса — основа D0 (src/body.rs, src/mars_frame.rs, src/ephem_provider.rs, src/radiometric.rs, src/timescales.rs)#
Первый этап движка навигации в дальнем космосе: обобщение зашитого под Землю ядра до произвольного центрального тела, добавление динамики Марса, интерфейса поставщика эфемерид, субмикросекундного времени и примитивов светового времени и релятивистской задержки. Каждый существующий земной сценарий побайтово идентичен — эталонные значения кросс-платформенной воспроизводимости (tests/cross_platform_golden.rs, tests/golden.rs) проходят без изменений и без перегенерации, что проверяется на каждом коммите.
| Составляющая | Статус | Доказательства |
|---|---|---|
| Абстракция центрального тела (Земля побайтово идентична) | validated |
src/body.rs: Body{mu,re,zonals,gravity,rotation,IAU-pole} с earth()/mars()/moon()/sun(). tests/mars_dynamics.rs проверяет, что two_body_accel_body(r,&Body::earth()) и zonal_accel_body равны прежним земным функциям с точным побитовым равенством (assert_eq!), а дуга Земли с ForceModel по умолчанию побайтово идентична — эталонные значения воспроизводимости не изменились (тот же SHA, без перегенерации). |
| Гравитация Марса (GMM-3 (GMM: Goddard Mars Model) тессеральная, в связанной системе) | validated (модель) |
Body::mars_gmm3(nmax): зональные C̄20/C̄30/C̄40 из J2/J3/J4 MRO110 (гравитационное решение Mars Reconnaissance Orbiter) (C̄n0=−Jn/√(2n+1), J2 при круговом преобразовании даёт 1.9604e-3) + секториальные/тессеральные C̄22/S̄22, C̄32/S̄32 MRO110B2 (Konopliv et al. 2011; табулированы в Liu, Baoyin & Ma 2012), вычисляемые в связанной с Марсом системе IAU. tests/mars_dynamics.rs проверяет круговое преобразование, отклонение масштаба J2 от точечной массы и то, что поле действительно связано с телом (поворот на четверть марсианских суток меняет инерциальное ускорение). Старшие степени/порядки загружаются из заимствованного .gfc через gravity_sh::from_gfc. |
| Связанная с Марсом система координат (полюс IAU) | validated |
src/mars_frame.rs: поворот IAU 3-1-3 R3(W)·R1(90°−δ0)·R3(90°+α0) (соглашение WGCCRE/NAIF (WGCCRE: Рабочая группа по картографическим координатам и элементам вращения), то же, что в lunar_frame.rs). Тесты: ортонормированность до 1e-12 при det +1, тождество кругового преобразования, нулевой меридиан смещается со скоростью prime_w_dot в сутки. |
| Распространение вокруг Марса / Солнца | validated (внутренняя согласованность) |
tests/mars_propagation.rs: низкая орбита Марса возвращается в исходную точку через один кеплеровский период (замыкание); удельная энергия ε=v²/2−μ/r дрейфует менее чем на 1e-9 на дуге; вековая регрессия узла из-за J2 Марса совпадает с аналитической скоростью по Валладо (независимо вычисленной ≈ −5,15 °/сут при наклонении 60°) с точностью 3%; гелиоцентрическая орбита воспроизводит марсианский год ~687 суток (vis-viva + независимое восстановление периода по дуге). Внешние данные не используются. |
| Перекрёстная проверка по DE440 (гелиоцентрический Марс) | kernel-gated |
xval/anise-mars-od/ (ИСКЛЮЧЕНО из рабочего пространства; ANISE под MPL-2.0 ограничен собственным Cargo.lock; повторяет xval/anise-lunar-od): сравнивает распространение Kshana вокруг Солнца для Марса с JPL DE440 (через ANISE); истина Horizons приведена дословно (происхождение + SHA-256). Воспроизведённый результат (начальная эпоха JD (юлианская дата) 2459580,5 TDB (барицентрическое динамическое время), de440s.bsp SHA-256 c1c7fee…b260a49f2): невязка положения 137 м на дуге в 1 сутки (5,97×10⁻¹⁰ от гелиоцентрического расстояния 2,299×10¹¹ м), возрастающая до 3,3 км на 5 сут, 87,9 км на 30 сут, 1,71 Мм на 90 сут — невязка растёт с длиной дуги, потому что двухтельная модель вокруг Солнца намеренно не учитывает возмущения от планет (главным образом Юпитера) и внутреннее движение системы Марса, которые содержит барицентрическая эфемерида DE440, так что рост — это честный признак немоделированной динамики n тел, а не ошибки интегратора; то, что короткая дуга остаётся ничтожной долей гелиоцентрического расстояния, подтверждает корректность механизмов распространения вокруг Солнца. Выполняется только при наличии ядра DE440 ($KSHANA_ANISE_DE440S или автозагрузка ~32 МБ) — это ручная проверка / workflow_dispatch уровня DE, не обязательный шлюз CI по умолчанию, поэтому опубликованный крейт и все шлюзы по умолчанию остаются побайтово нетронутыми. |
| Световое время и задержка Шапиро | validated |
src/radiometric.rs: итеративное решение для светового времени по запаздывающей эпохе (сходится при |Δτ|<1e-12 с, с ограничением числа итераций) и задержка Шапиро Δt=(2μ/c³)·ln[(r1+r2+r12)/(r1+r2−r12)]. Тесты: Земля–Солнце ≈ 499 с и Земля–Луна ≈ 1,28 с по встроенной эфемериде; синтетический излучатель с постоянной скоростью восстанавливает аналитическое запаздывающее решение с точностью <1e-9 с (решатель доказанно не зависит от какой-либо реальной эфемериды); задержка Шапиро в точности совпадает с вычисленным вручную значением и составляет ~100–250 мкс для луча, скользящего при верхнем соединении Земля–Марс. |
| Интерфейс поставщика эфемерид | validated |
src/ephem_provider.rs: trait EphemerisProvider + не требующий ядер BuiltinEphemeris (Солнце/Луна по Montenbruck–Gill, геоцентрический); для тел, для которых у него нет рядов (например, Марс), возвращает None, и для них путь — поставщик ANISE уровня DE; то же разделение «встроенный — ANISE», что и у LunarEnvironment/AniseLunarEnvironment. |
| Двухчастное время и TT↔TDB | validated |
src/timescales.rs: структура TwoPartJd{day,frac} с накоплением по двойной сумме Кнута восстанавливает субмикросекундные интервалы, которые теряет одиночное f64 JD вблизи J2000 (лучше более чем в 1000 раз, проверено тестом); tt_to_tdb/tdb_to_tt используют доминирующий периодический ряд Фэрхеда–Бретаньона (|TDB−TT|≲1,7 мс, проверено вручную на J2000). Аддитивно — существующий путь времени на одиночном f64 не изменился. |
Радиометрические наблюдаемые дальнего космоса и Tracking Data Message CCSDS — D1 (src/radiometric.rs, src/ccsds_tdm.rs)#
Второй этап движка навигации в дальнем космосе: модель наблюдаемых, превращающая ядро светового времени и релятивистской задержки D0 в реальные величины, которые сообщает сеанс слежения сети Deep Space Network (DSN) или ESTRACK (Европейская сеть космического слежения) — дальность, одно-, двух- и трёхпутевой Доплер, когерентный ретранслятор с поворотом сигнала, регенеративная/PN (PN: псевдошумовая) дальнометрия, Δ-DOR (DOR: дифференциальная однопутевая дальнометрия) и среды распространения, — а также ввод и вывод Tracking Data Message (TDM) CCSDS (Консультативный комитет по системам космических данных) 503.0-B, принимающий и выдающий стандартный файл слежения агентств. Честные границы применимости: это точные геометрические модели по соглашениям Moyer / CCSDS; шум измерений — это задаваемое вызывающей стороной значение sigma для каждого наблюдения, а не часть модели. Воспроизведение конкретного реального сеанса слежения требует реальных данных TDM и решателя определения орбиты в дальнем космосе — это D2, а не D1. Всё ниже аддитивно (эталонные значения воспроизводимости не изменились; тот же SHA, без перегенерации).
| Составляющая | Статус | Доказательства |
|---|---|---|
| Дальность и 1/2/3-путевой Доплер (двухплечевое решение Moyer) | validated (модель) |
src/radiometric.rs: one_way_range/two_way_range объединяют запаздывающее (нисходящее плечо) и опережающее (восходящее плечо) решения светового времени D0; полное соглашение о двойном пробеге — ρ₂ = c·(τ_up + τ_down) (м), документировано и согласовано. one_way_doppler/two_way_doppler/three_way_doppler формируют сдвиг несущей f_D = −(M·f_ul/c)·(ρ̇_up + ρ̇_down) (Гц) по скорости изменения дальности вдоль луча зрения, соглашение о знаке: приближающийся аппарат даёт положительный (синий) сдвиг. Тесты: двухпутевая дальность = сумма плеч с точностью до <1 мм (~2 а. е. двойного пробега Земля–Солнце); однопутевая дальность = c·τ точно; однопутевой Доплер совпадает с аналитическим −(f/c)·ρ̇ для излучателя с радиальной постоянной скоростью до ppt; трёхпутевой режим с совмещёнными станциями побайтово сводится к двухпутевому. |
| Когерентный ретранслятор с поворотом сигнала (точные отношения DSN) | validated |
src/radiometric.rs turnaround_ratio: точные рациональные числа поворота сигнала DSN/CCSDS M = f_down/f_up (Moyer §13; DSN 810-005, модуль 201/214) — S/S 240/221, S/X 880/221, X/S 240/749, X/X 880/749, X/Ka 3344/749, Ka/Ka 3360/3599. Проверено на точное равенство; неопределённая пара диапазонов вызывает панику (явный отказ, никогда не выдумывается отношение). two_way_doppler_coherent применяет несущую диапазона и отношение сквозным образом и с машинной точностью равна явной two_way_doppler. |
| Регенеративная / PN-дальнометрия (CCSDS 414; неоднозначность) | validated |
src/radiometric.rs: regenerative_range_ambiguity = c/(2·chip_rate) (однозначная дальность масштаба разрешения на элемент кода) и pn_range_ambiguity = это значение × длина кода (полная однозначная дальность PN-кода c·L/(2·f_chip)) по CCSDS 414.1-B. Проверено: дальномерная частота 1 МГц даёт ~149,9 м; PN-код CCSDS-414.1 со взвешенным голосованием (1 009 470 элементов) при 1 Мчип/с даёт расчётную однозначную дальность ~151 000 км; удвоение скорости элементов вдвое уменьшает неоднозначность на элемент. |
| Δ-DOR (CCSDS 506, плоскость неба) | validated (модель) |
src/radiometric.rs delta_dor: дифференциальная задержка в плоскости неба Δτ = −B⃗·(ŝ_sc − ŝ_quasar)/c (с) для базы интерферометра B⃗ (CCSDS 506.1-B). Проверено: совпадает с точной аналитической проекцией −B·sin(Δθ)/c для известного смещения вдоль базы с точностью до 1e-15 с, с величиной для малых углов |Δτ| ≈ B·Δθ/c и с нулём (аппарат, сонаправленный с квазаром, даёт строго нулевую дифференциальную задержку). |
| Двухчастотная калибровка плазмы по закону 1/f² | validated (модель) |
src/radiometric.rs: solar_plasma_delay = K_PLASMA·TEC/(c·f²) (дисперсионная групповая задержка заряженных частиц 1/f², K_PLASMA = 40.3 m·Hz²·TECU⁻¹); coronal_tec_from_sep — колонка короны класса Cassini TEC ∝ 1/sin(SEP) (аналитическая замена, а не калиброванная корона); dual_freq_plasma_calibration — дисперсионная инверсия K_disp = (Δt_X−Δt_Ka)/(1/f_X²−1/f_Ka²), которую DSN использует для устранения плазмы. Проверено: закон 1/f² d_X/d_Ka = (f_Ka/f_X)²; корона нарастает к соединению; а введённое TEC восстанавливается с точностью < 1 % (фактически ≪ 1e-9 без шума) — dual_frequency_recovers_injected_plasma. |
| Тропосферная / ионосферная среды (повторное использование моделей GNSS) | validated (модель) |
src/radiometric.rs tropo_delay/iono_delay: наземный сегмент дальнего космоса пересекает ту же земную атмосферу, которую уже моделирует пакет GNSS, поэтому они делегируют вычисление в gnss_sim::tropo_delay_m (зенитная модель Saastamoinen + отображение Niell, недисперсионная) и gnss_sim::klobuchar_delay_m (вещаемая ионосферная модель). Проверено подключение и физический знак: тропосферная поправка положительна и больше при малом возвышении, чем в зените; ионосферная — неотрицательная наклонная задержка (численная точность проверяется собственными тестами пакета GNSS по паспортным данным). |
| Разбор / выпуск CCSDS-TDM 503 и радиометрический мост | validated |
src/ccsds_tdm.rs: читатель и писатель KVN (нотация «ключ — значение») CCSDS 503.0-B-2 (заголовок + сегменты META_START…META_STOP / DATA_START…DATA_STOP; записи RANGE/DOPPLER_*/ANGLE_*/*_FREQ). Тесты (#[cfg(test)] + tests/fixtures/deepspace/reference.tdm): эталонный образец разбирается в ожидаемые именованные поля; разбор→выпуск→разбор даёт равную структуру (семантическое круговое преобразование); мост to_radiometric_obs отображает однозначные записи RANGE/DOPPLER_* в RadiometricObs (путевость из PATH 1,2/1,2,1/1,2,3, диапазон из TRANSMIT_BAND, км→м); многосегментный файл сбрасывает конечный автомат. Честное «пропустить, а не угадывать»: углы/частоты, неизвестные диапазоны, эпохи в виде дня года и нераспознанные системы времени пропускаются, а не отображаются ошибочно, и sigma остаётся 0.0 для взвешивания вызывающей стороной. |
| Бенчмарк DSN/ESTRACK (точность модели ≫ опубликованного порога) | validated (model) |
tests/radiometric_benchmark.rs: наблюдаемые — это точные геометрические вычисления, поэтому честный бенчмарк состоит в том, что собственная численная ошибка модели намного ниже опубликованного порога измерений DSN/ESTRACK — узким местом точности служит не модель, а σ, задаваемая вызывающей стороной. Каждый тест вычисляет наблюдаемую двумя независимыми способами (или восстанавливает введённую истину) и проверяет, что невязка ниже порога: дальность при круговом преобразовании укладывается в <1 мм ≪ порога PN-дальнометрии ~1 м (DSN 810-005, мод. 214 / CCSDS 414.1-B); Доплер совпадает с точной замкнутой формой скорости изменения запаздывающей дальности v/(1+v/c) с точностью ~10⁻⁶ м/с, в несколько раз ниже порога X-диапазона ~0,05 мм/с (DSN 810-005, мод. 203 / Moyer) — невязка есть порог разностей дальности в f64 на ~1 а. е., численная характеристика, а не ошибка моделирования; Δ-DOR воспроизводит замкнутую проекцию с эквивалентным углом в плоскости неба ≪ 1 нрад ≪ порога ~1–10 нрад (DSN 810-005, мод. 210 / CCSDS 506.1-B); двухчастотное восстановление плазмы даёт введённую задержку с точностью ≪ 1 %; а задержка Шапиро попадает в опубликованный диапазон ~100–250 мкс для соединения Земля–Марс. Опубликованные значения приведены и помечены как порядковые спецификации DSN, а не как выдуманные точные числа, и документация модуля прямо оговаривает, что бенчмарк оценивает ТОЧНОСТЬ МОДЕЛИ, а не воспроизведение реального сеанса (это D2 + реальные TDM). |
Редуцированно-динамическое OD в дальнем космосе — D2 (src/deepspace_od.rs, src/clock_state.rs, src/mars_atmos.rs)#
Третий этап движка навигации в дальнем космосе: оцениватель, превращающий радиометрические наблюдаемые D1 в восстановленную траекторию, — численно устойчивый квадратно-корневой информационный фильтр (SRIF) с редуцированно-динамическими эмпирическими ускорениями, трёхсостоянными бортовыми часами, моделью сопротивления атмосферы Марса и радиометрическими частными производными, связывающими дальность/Доплер с состоянием фильтра; всё это замкнуто сквозным синтетическим восстановлением определения орбиты на низкой орбите Марса (LMO). Честные границы применимости: восстановление — это синтетический замкнутый контур (истина и фильтр используют один и тот же распространитель Марса, а наблюдения — та же геометрическая модель наблюдаемых, которую инвертирует фильтр, плюс введённый гауссов шум), поэтому проверяется механика оценивателя, а не абсолютная точность модели сил Марса; внешняя перекрёстная проверка уровня DE — это крейт xval/anise-mars-od, зависящий от ядра (D0.8b). Всё ниже аддитивно (эталонные значения воспроизводимости не изменились; тот же SHA, без перегенерации).
| Составляющая | Статус | Доказательства |
|---|---|---|
| Ядро SRIF (квадратно-корневой информационный фильтр) | validated |
src/deepspace_od.rs Srif: написанный вручную квадратно-корневой информационный фильтр Бирмана — верхнетреугольная R с Λ = RᵀR, информационный вектор b, преобразования Хаусхолдера для обновления по измерениям и по времени, арифметика на чистом Vec<f64> (без nalgebra). Тесты: последовательный SRIF совпадает с решением пакетного взвешенного метода наименьших квадратов (gauss_newton) и по состоянию, и по ковариации с точностью 1e-9 на специально построенной линейно-гауссовой задаче (srif_matches_batch_on_linear); восстановленная ковариация P = R⁻¹R⁻ᵀ симметрична (1e-12) и положительно определена по построению после длинной последовательности обновлений по измерениям и по времени (srif_covariance_is_spd, разложение Холецкого проходит); а информация накапливается (след P монотонно убывает по мере добавления измерений с одинаковой геометрией). |
| Редуцированно-динамические эмпирические ускорения (настройка «перелёт ↔ LMO») | validated |
src/deepspace_od.rs ReducedDynamicOd: девятисостоянный фильтр [r; v; a_emp] с эмпирическими ускорениями RTN как состояниями марковских процессов Гаусса первого порядка; редуцированно-динамическая методика JPL/ESOC, выведенная в виде единственной ручки dynamic_tightness (почти динамический режим ⇒ сглаживает шум на баллистической дуге; почти кинематический ⇒ эмпирический уровень поглощает немоделированный манёвр/сопротивление). Тесты: почти кинематический фильтр отслеживает ступенчатый (двигательный) манёвр с невязкой <½ от невязки почти динамического, тогда как почти динамический фильтр лучше сглаживает зашумлённую баллистическую дугу (reduced_dynamic_tracks_maneuver); перебор степени жёсткости сдвигает невязку после подгонки монотонно — это континуум, а не переключатель (tuning_is_a_continuum). |
| 3-state бортовые часы (фаза/частота/дрейф, Q по van Loan, Аллан) | validated |
src/clock_state.rs ClockState3: состояние ошибки из фазы, относительной частоты и дрейфа частоты с точным дискретным процессным шумом по van Loan и стабилизированным по Джозефу обновлением. Тесты: дискретизированная Q совпадает с выведенным вручную полиномом van Loan с точностью 1e-12 и точно сводится к двухсостоянной Q для KalmanClock при дрейфе = 0 (строгое надмножество); многошаговый выбег наращивает дисперсию фазы до аналитического соотношения holdover по NIST SP 1065 через член случайного блуждания T⁵; состояние дрейфа восстанавливает истинную линейную составляющую старения с точностью < 5 %; профиль Аллана класса USO восстанавливается (перекрывающаяся ADEV при τ=1 с в пределах калибровочного порога), а оцениватель остаётся NEES-согласованным (>95 % в пределах 3σ) и PSD при прогоне с жёстким Q/R. ClockClass содержит приведённые значения CSAC/USO/DSAC (USO: сверхстабильный генератор; DSAC: Deep Space Atomic Clock) σ_y(1 s) и порог Доплера Δv = c·σ_y. |
| Сопротивление атмосферы Марса (Mars-GRAM-lite (GRAM: Global Reference Atmospheric Model)) | validated (model) |
src/mars_atmos.rs: кусочно-экспоненциальный профиль нейтральной плотности Марса (у поверхности ~0,020 кг/м³, приповерхностная шкала высот ~11 км, среднее для малой запылённости по Mars-GRAM 2010 / MCD (база данных климата Марса)) и квадратичное ускорение сопротивления, отсчитываемое относительно вращающейся вместе с планетой атмосферы Марса, а также вариант ..._scaled, который SRIF может умножать. Тесты: плотность убывает монотонно и непрерывно по диапазонам, восстановленная приповерхностная шкала высот физична, ~11 км, сопротивление строго антипараллельно относительной скорости (векторное произведение обращается в нуль с точностью 1e-12) при разумной величине для LMO ~3e-4 м/с² и линейно по баллистическому члену. Честные границы применимости: репрезентативная инженерная атмосфера, а не проверенная в полётах Mars-GRAM/MCD с зависимостью от запылённости, сезона и местного времени. |
| Радиометрические частные производные измерений (дальность/Доплер) для SRIF | validated |
src/deepspace_od.rs range_observable / range_rate_observable: частные производные дальности вдоль луча зрения ρ = |r_sc − r_sta| (∂ρ/∂r = û, ∂ρ/∂v = 0) и скорости изменения дальности ρ̇ = û·(v_sc − v_sta) (∂ρ̇/∂v = û, ∂ρ̇/∂r = (v_rel − ρ̇·û)/ρ), связывающие наблюдаемые D1 с состоянием фильтра, а также частная производная частоты часов для однопутевого Доплера ∂ρ̇_obs/∂y = c. Тесты: обе производные совпадают с центральной конечной разностью наблюдаемой с точностью 1e-6 (range_partial_matches_finite_difference, range_rate_partials_match_finite_difference); одно обновление по дальности уменьшает ковариацию в наблюдаемом направлении (вдоль луча зрения, LOS) более чем в 1000 раз и сохраняет её положительную определённость (PD), а обновление по Доплеру уменьшает дисперсию скорости вдоль LOS (radiometric_update_reduces_covariance_in_observed_direction, range_rate_update_observes_velocity). |
| Сквозное OD для Mars-LMO по радиометрическим данным | validated (synthetic closed-loop) |
tests/mars_lmo_od.rs: истинная дуга низкой орбиты Марса, распространяемая в гравитации Body::mars_gmm3(4), порождает зашумлённые двухпутевые дальность (σ=1 м) + Доплер (σ=0,1 мм/с) относительно двух станций слежения; редуцированно-динамический SRIF восстанавливает её из исходного состояния с возмущением ~2,7 км. Достигнуто: сошедшийся RMS положения ≈ 0,2 м (доли метра, намного лучше критерия «от метров до десятков метров») на 3-витковой дуге с шагом 30 с, при положительно определённой факторизованной ковариации в каждую эпоху (гарантия SRIF, проверяется на всём протяжении). Континуум настройки «перелёт → LMO» проверен сквозным образом: при истине с немоделированным сопротивлением, которого нет в шаблоне фильтра, редуцированно-динамическая ручка (жёсткость 1) даёт ~14 м против ~677 м у почти динамического (жёсткость 0) прогона — улучшение в 48 раз за счёт того, что эмпирический уровень поглощает сопротивление. Честные границы применимости: синтетический замкнутый контур (истина = тот же распространитель, что использует фильтр); внешняя перекрёстная проверка уровня DE — это xval/anise-mars-od, зависящий от ядра (D0.8b), здесь она никогда не выполнялась, сети нет. |
Сценарий PNT в дальнем космосе и объединение однопутевых и двухпутевых данных — D3 (src/mars_pnt.rs, src/deepspace_od.rs)#
Четвёртый этап движка навигации в дальнем космосе: запускаемый продуктовый сценарий Mars-PNT, связывающий тело/систему координат Марса из D0, радиометрические наблюдаемые D1 и редуцированно-динамическое OD из D2 в единый вид сценария mars-pnt. Он моделирует небольшую ретрансляционную группировку в стиле MARCONI, вещающую однопутевой (связанный с часами) сигнал в пространстве и ретранслирующую двухпутевую (когерентную, не зависящую от часов) линию связи на станцию дальнего космоса, и навигирует трёх опорных пользователей (перелёт к Марсу, орбитальный аппарат на низкой орбите Марса, неподвижная точка на поверхности) через совместный оцениватель D3.1 с объединением однопутевых и двухпутевых данных — двенадцатисостоянный SRIF, дополняющий редуцированно-динамический блок орбиты/эмпирических членов D2 трёхсостоянными бортовыми часами. Честные границы применимости: каждый показатель качества — это формальная ковариационная граница оценивателя (1σ / 3σ положения на эпоху) и достигнутый RMS относительно синтетической замкнутой истины (истина и фильтр используют одну и ту же динамику Марса и одну и ту же геометрическую модель наблюдаемых, плюс введённый гауссов шум) — это смоделированный навигационный показатель качества, НЕ авиационный сертифицированный уровень защиты и НЕ утверждение о лётной пригодности (нет сертифицированной модели отказов, нет монитора целостности, нет реальных данных слежения). Всё ниже аддитивно (эталонные значения воспроизводимости не изменились; тот же SHA, без перегенерации).
| Составляющая | Статус | Доказательства |
|---|---|---|
| Совместное радиометрическое объединение однопутевых и двухпутевых данных (объединённое лучше любого по отдельности) | validated |
src/deepspace_od.rs FusionOd: редуцированно-динамический SRIF D2.2, дополненный тремя состояниями бортовых часов (ClockState3), принимающий смешанный временной ряд двухпутевых (не зависящих от часов, фиксирующих орбиту — нулевые столбцы часов в частной производной) и однопутевых (связанных с часами — частная производная частоты ∂ρ̇_obs/∂y = c) дальности/Доплера через fused_observable. Структура «сначала калибровка, затем выбег»: двухпутевые сеансы фиксируют орбиту, затем однопутевые данные калибруют часы и ведут орбиту между сеансами с ошибкой, ограниченной стабильностью Аллана часов. Проверено в src/deepspace_od.rs #[cfg(test)]: объединённое решение лучше, чем любой тип линии по отдельности; ошибка выбега при только однопутевых данных растёт с интервалом между двухпутевыми сеансами в согласии с границей Аллана для класса часов; совместная ковариация остаётся SPD (симметричной положительно определённой) на всём протяжении. |
| Группировка MARCONI (ареостационарный радиус, затмение) | validated (model) |
src/mars_pnt.rs MarconiConstellation: набор из пяти ретрансляторов — три ареостационарных ретранслятора на r = (μ/ω²)^{1/3} ≈ 20 428 km (марсианский синхронный радиус по опубликованным μ и скорости вращения; проверено в диапазоне 20 400–20 500 км), равномерно разнесённые на 120° по долготе с наклонением 5°, плюс два ретранслятора на более высокой (1,4 × ареостационарного) круговой орбите с наклонением 60° для покрытия плоскости неба. Состояния ретрансляторов на каждую эпоху интегрируются вперёд в гравитации mars_gmm3; проверка видимости с учётом затмения Марсом — это геометрия «хорда проходит мимо сферы» (chord_clears_sphere, проверено: диаметрально противоположный ретранслятор затмён, ретранслятор над головой виден). Честные границы применимости: минимальная репрезентативная геометрия «вещание плюс ретрансляция», построенная по опубликованным константам Марса, — а не проект конкретной лётной группировки. |
Сценарий mars-pnt доступен через CLI / Python / WASM (WebAssembly) / MCP (Model Context Protocol) |
validated |
src/mars_pnt.rs MarsScenario / run_mars_pnt подключён как сценарий kind = "mars-pnt" на всех поверхностях (D3.3): исполнитель CLI, привязка Python, сборка WASM/playground и диспетчер сервера MCP направляют вызовы в него (src/api.rs, тест кругового преобразования mars_pnt_kind_round_trips_through_the_dispatch). Поставляемые эталонные сценарии: scenarios/mars-pnt-lmo.toml, scenarios/mars-pnt-surface.toml, scenarios/mars-pnt-transfer.toml. Результат содержит явную fom_note, помечающую показатель качества как ковариационную границу (а не сертифицированный PL), а выходные данные summary / to_svg повторяют эту пометку. |
| Цели MARCONI / LightShip воспроизведены: орбитальный аппарат < 100 м, ровер < 15 м | validated (synthetic closed-loop, under stated assumptions) |
tests/mars_pnt_targets.rs: опубликованные цели программ MARCONI / LightShip (орбитальный аппарат < 100 м, поверхность/ровер < 15 м) воспроизведены в симуляции. Общие допущения: пятиретрансляторная группировка MARCONI по умолчанию; каждый ретранслятор в зоне видимости даёт на эпоху однопутевые дальность и Доплер; когерентный двухпутевой сеанс станции каждые 30 мин; шум класса DSN (σ дальности = 1 м, σ Доплера = 0,1 мм/с); совместный фильтр с объединением редуцированно-динамической орбиты и 3-state часов, инициализируемый априорным состоянием с возмущением ~2,7 км (жёсткость 0,1); показатель качества = 3-D RMS положения на сошедшейся второй половине дуги относительно синтетической истины. Орбитальный аппарат (LMO ~400 км / наклонение 60°, часы USO, шаг 60 с, ~2 ч ≈ дуга в один виток): достигнутый сошедшийся RMS ≈ 0,40 м ≪ цели 100 м (в среднем 3,1 ретранслятора в зоне видимости, ковариация SPD на всём протяжении). Ровер (неподвижная экваториальная точка на поверхности, часы USO, шаг 30 с, дуга ~2 ч): достигнутый сошедшийся RMS ≈ 5,1 м < цели 15 м (в среднем 3,0 ретранслятора в зоне видимости, ковариация SPD). Обе цели достигнуты без ослабления какого-либо утверждения проверки — USO является менее совершенным из реалистичных классов бортовых часов (DSAC лишь улучшил бы результат), а 30-минутный интервал двухпутевых сеансов консервативен для обычного расписания ретрансляционной сети, так что допущения физически справедливы для системы класса MARCONI, а не подогнаны под прохождение. Честные границы применимости: имитационное воспроизведение при заявленных допущениях, а НЕ утверждение о лётной пригодности и НЕ сертифицированный уровень защиты; синтетическая замкнутая истина использует ту же динамику Марса и ту же модель наблюдаемых, что и фильтр. |
Лунное координатное время — релятивистская скорость хода часов Земля–Луна (src/lunar_time.rs)#
Шкала лунного координатного времени (LTC/TCL (TCL: Temps-Coordonnée Lunaire, французское название лунного координатного времени)) требует векового темпа, с которым часы на поверхности Луны идут относительно часов на геоиде Земли (TT). src/lunar_time.rs вычисляет его из первых принципов: первое постньютоновское тождество, суммирующее разность собственных потенциалов (условный потенциал геоида IAU L_G W0 = L_G·c² ≈ 6.26369e7 m²/s² минус собственный потенциал поверхности Луны GM_moon/R_moon ≈ 2.822e6 m²/s²) и кинетический член (доплеровский второго порядка) −<v²>/2c² по геоцентрической скорости Луны (конечными разностями по лунному ряду Montenbruck–Gill из src/ephem.rs). Доминирующий член собственного потенциала даёт ≈ 57,5 мкс/сут, кинетический член — ≈ −0,5 мкс/сут, в сумме ≈ 57 мкс/сут. Сценарий lunar-time-offset сообщает этот темп, накопленное смещение LTC−TT на горизонте и поддерживает минимальный ансамбль с обратными дисперсиями (лунные «бумажные часы»); преобразования TT↔LTC при круговом преобразовании укладываются в < 1 нс/сут.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Релятивистская скорость хода часов Земля–Луна (LTC/TCL) | modelled |
src/lunar_time.rs lunar_rate_breakdown, tt_to_ltc/ltc_to_tt, lunar_ensemble, LunarTimeScenario. Оракул: внутреннее релятивистское тождество в замкнутой форме (геопотенциал IAU L_G / соглашений IERS и собственный потенциал GM/r (GM: гравитационный параметр, G, умноженная на массу)), перекрёстно проверенное по опубликованному диапазону скорости лунных часов [56, 59] мкс/сут. Тесты (lunar_time::tests): член собственного потенциала ≈ 57,5 мкс/сут, скорость Луны ≈ 1 км/с, кинетический член — малая отрицательная величина, сумма названных членов даёт итог в пределах диапазона, смещение LTC−TT за 1 сутки ≈ 57 мкс, а круговое преобразование TT↔LTC укладывается в < 1 нс/сут. Честные границы применимости: основное значение в мкс/сут зависит от выбора отсчёта — от выбранных опорных поверхностей (геоид Земли W0 или лунный селеноид), окна усреднения по времени и пренебрежённых поправок центробежной составляющей/J₂ порядка менее мкс/сут, — поэтому публикуется диапазон, а не единственное сертифицированное число. Это проверка внутренней согласованности уровня Modelled, НЕ внешняя проверка, НЕ субнаносекундная абсолютная точность и НЕ сертифицировано для оперативного хранения времени. |
Лунная геодезическая VLBI — ближнепольная задержка для земной базы, наблюдающей лунный маяк (src/lunar_vlbi.rs)#
Наблюдаемая геодезической VLBI (радиоинтерферометрия со сверхдлинными базами) для двух земных наземных станций (база), наблюдающих однопутевой сигнал передатчика класса NovaMoon на поверхности Луны. Луна находится в ближнем поле, а не создаёт плоскую волну, поэтому геометрическая задержка — это точная разность двух дальностей tau_geom = (|r2 − r_B| − |r1 − r_B|)/c, а не проекция на плоскость неба. Полная наблюдаемая добавляет разность смещений часов станций и разностный шапировский член потенциала Земли (повторно используется из src/radiometric.rs). Станции помещаются в геоцентрические инерциальные (GCRS) координаты через src/frames.rs + src/cio.rs; маяк — через src/ephem.rs (геоцентрическая Луна) + src/lunar.rs (селенографические→MCMF (MCMF: связанная с Луной система с центром в Луне)) + src/lunar_frame.rs (связанная система IAU-2015 ME → инерциальная). Сценарий lunar-vlbi выбирает задержку, её скорость по конечным разностям и ближнепольную поправку на протяжении прохода.
Оракул — наблюдаемая Δ-DOR для плоской волны из той же кодовой базы delta_dor в src/radiometric.rs: в пределе дальнего поля (синтетический маяк на 1e15 м) геометрическая задержка должна свернуться к −(B·ŝ_B)/c = delta_dor(r_B, [0,0,0], B) с машинной точностью; на истинном лунном расстоянии поправка на кривизну волнового фронта в ближнем поле отлична от нуля (от десятков до сотен мкс). Частные производные по маяку dtau/dr_B = ((r_B−r2)/|r_B−r2| − (r_B−r1)/|r_B−r1|)/c (и по станциям) проверены центральной конечной разностью (относительная ошибка < 1e-5).
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Задержка лунной геодезической VLBI и частные производные | modelled |
src/lunar_vlbi.rs geometric_delay_s, vlbi_delay_s, delay_partials_beacon/_station1/_station2, near_field_correction_s, LunarVlbiScenario. Оракул: ReferenceImpl — плоско-волновая delta_dor из той же кодовой базы (src/radiometric.rs) в пределе дальнего поля, а также частные производные по конечным разностям. Тесты (lunar_vlbi::tests): величина вектора станции ≈ радиусу Земли, дальность до маяка на лунном расстоянии (356–407 Мм), геометрическая задержка в дальнем поле совпадает с delta_dor с точностью < 1e-9 с, ненулевая ближнепольная поправка на лунном расстоянии, частные производные по маяку и станциям по конечным разностям в пределах 1e-5 относительно, точный член часов и конечный прогон сценария, выполненный через run_toml. Честные границы применимости: Modelled, НЕ проверено по реальным данным VLBI. Движение полюса опущено (xp = yp = 0), поэтому инерциальные положения станций содержат ошибку системы координат в несколько метров; маяк смешивает ряд для Луны в среднем экваторе даты со связанным со смещением ICRF (Международная небесная система отсчёта) (jd_tdb ≈ jd_tt), то есть рассогласование систем координат ниже точности модели, но не строго; и нет итерации светового времени, вращения Земли за время светового времени, сред (тропосфера/ионосфера/плазма) и члена аберрации, кроме разностного члена Шапиро. TRL (уровень технологической готовности), лётное наследие и одобрение агентств не заявляются. 0,30: по сравнению со световыми временами ANISE через DE440 ни одна задержка этого аналитического пути не укладывается в 1 пс (наибольшее расхождение 24 мкс); этот результат зафиксирован. |
| Лунная геодезическая РСДБ, путь через ядра | validated (0.30) |
src/lunar_vlbi.rs KernelGeometry (Земля и Луна по DE440, главные оси Луны по DE440, ориентация Земли ITRF93, каждое световое время сведено в барицентрической системе), запускается сценарием lunar-vlbi, когда заданы три пути к ядрам. Оракул: Library — NAIF SPICE Toolkit N0067 (spiceypy 8.2.0), сведённые световые времена до DSS-14/43/63, зарегистрировано заранее: 75 задержек в пределах 1 пс (наихудшая 0,06 пс), частные производные по маяку и станциям в пределах 1e-6, на 25 эпохах около J2000 (поправка после того, как 2024 эпохи не прошли из-за собственной двойной точности эпохи излучения в SPICE, около 6 пс, раскрыта и зафиксирована). Разностный член Шапиро, скорость задержки и ближнепольная поправка сценария не сравниваются. |
Совместное многотехнологическое OD и часы на Луне — имитационное восстановление в замкнутом контуре (src/lunar_combination.rs)#
Одноэпоховая (мгновенный снимок) пакетная подгонка методом наименьших квадратов (crate::batch_ls::gauss_newton_qr, шаг QR по Хаусхолдеру с 0,30), которая объединяет методы геодезической VLBI, радиометрии/лунной локальной дальнометрии и межспутниковой дальнометрии на СИМУЛИРОВАННОЙ лунной сети, чтобы восстановить совместно 3-D положение лунной поверхностной станции, положения каждого спутника небольшой группировки и смещение часов каждого объекта. Наблюдаемые: (1) задержки геодезической VLBI на земной базе до лунной станции, трактуемой как маяк (повторно используется src/lunar_vlbi.rs, геоцентрическая инерциальная система) — главная техника; (2) геоцентрические радиометрические дальности «земная станция → спутник» (которые определяют положение группировки многопозиционной дальнометрией по широко разнесённым земным станциям) и лунные локальные дальности «станция ↔ спутник» (евклидово расстояние в MCI (инерциальная система с центром в Луне) плюс разностный член часов); (3) межспутниковые дальности (той же формы); плюс одно псевдонаблюдение синхронизации часов станции, фиксирующее иначе ненаблюдаемое общее смещение часов. Вектор состояния — [station_pos(3), {sat_pos(3)}×N_sat, station_clk, {sat_clk}×N_sat]. Внутри решателя нет распространения по модели сил — спутники представляют собой фиксированные, различные, иллюстративные точки на репрезентативной лунной орбите; это намеренно чистая подгонка по снимку. Внутри положения масштабируются, а часы оцениваются в метрах, эквивалентных дальности, чтобы нормальная матрица оставалась хорошо обусловленной в f64; дальности VLBI и лунные дальности очищаются от среднего относительно номинальной геометрии, чтобы якобиан по конечным разностям не страдал от катастрофического сокращения. Сценарий lunar-joint-od-clock выполняет решение с плечами VLBI и без них на одном и том же начальном значении/истине и сообщает оба решения, а также коэффициент улучшения наблюдаемости станции.
Главный честный результат: лунная локальная дальнометрия от полярной станции до нескольких спутников, все из которых находятся с одной стороны неба, оставляет положение станции слабо наблюдаемым вдоль одного направления, поэтому решение только по дальностям плохо обусловлено, а восстановленная 3-D ошибка станции велика (или решение не сходится). Добавление задержек VLBI на земной базе делает полное 3-D положение станции наблюдаемым, и восстановленная ошибка станции падает до метрового уровня. Тест vlbi_restores_station_observability проверяет, что ошибка станции с VLBI заметно (≥5 раз) меньше ошибки только по дальностям на той же введённой истине — смысл этапа в том, что VLBI возвращает иначе ненаблюдаемое направление станции.
Оракул — внутренняя согласованность: введённое истинное состояние (станция ~50 м на ось, спутники ~30 м на ось, часы ~1e-7 с, с начальным значением для разброса по компонентам) отображается в синтетические наблюдаемые через ту же модель геометрии, которую инвертирует решатель, добавляется гауссов шум с заданным начальным значением (иллюстративные значения по умолчанию: σ VLBI ≈ 1e-11 с, σ дальности ≈ 0,1 м, σ ISL ≈ 0,1 м; веса 1/σ²), и оцениватель должен восстановить введённую истину в пределах шума из нулевого начального приближения. Средний по Монте-Карло NEES Δxᵀ(HᵀWH)Δx по начальным значениям (formal_covariance_nees) лежит в свободной полосе вокруг n_params — это проверка реалистичности ковариации.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Совместное многотехнологическое лунное OD + часы | validated (0,30, P2: линейная алгебра решения) |
src/lunar_combination.rs estimate, formal_covariance_nees, LunarCombinationScenario. Оракул 0,30: P2 — numpy 2.4.6 (LAPACK gelsd и inv) пересчитывает каждый шаг Гаусса–Ньютона, сошедшееся взвешенное решение, формальные сигмы и ошибку станции на зафиксированных якобианах шести сетей (tests/lunar_joint_od_numpy_oracle.rs, шаги в пределах 2.4e-11, сигмы в пределах 1.3e-11); физические модели наблюдений и их величины остаются MODELLED. Прежний оракул: InternalConsistency — восстановление введённой имитационной истины + согласованность ковариации по NEES. Тесты (lunar_combination::tests): полное объединение восстанавливает истину (станция < 5 м, RMS спутников < 5 м, часы < 1e-8 с, сошлось); VLBI восстанавливает 3-D наблюдаемость станции (ошибка станции в ≥5 раз меньше с VLBI, чем только по дальностям, на той же истине); детерминированность (то же начальное значение → побитово идентичное решение, другое начальное значение → иное, но восстановленное); средний NEES в свободной полосе вокруг n_params; конечные/защищённые сообщаемые числа, даже когда решение только по дальностям плохо обусловлено; сценарий выполнен через run_toml. Честные границы применимости: это имитационное восстановление в замкнутом контуре — истина использует ту же модель наблюдений, — НЕ проверка по реальным данным; внутри решателя нет распространения по модели сил; положения спутников и геометрия земных и лунных станций иллюстративны. TRL, лётное наследие и одобрение агентств не заявляются. |
Реализация лунной системы отсчёта — подгонка датума 7-параметрическим преобразованием Гельмерта (src/lunar_frame_realise.rs)#
Тогда как src/lunar_frame.rs применяет ориентацию лунного тела по IAU 2015 WGCCRE (прямая модель), этот модуль оценивает (реализует) лунную систему отсчёта по сети оценённых координат точек, привязанных к датуму. Ядро оценивания — классическое 7-параметрическое преобразование подобия (Гельмерта) — три параметра сдвига, три параметра малого поворота и один параметр масштаба, — отображающее точки p_i (оцениваемая система) в q_i (система датума) как q_i = t + (1 + s)·R(θ)·p_i, где R(θ) = rz(θz)·ry(θy)·rx(θx) построена из crate::precession::{rx, ry, rz, matmul, mat_vec}. Семь параметров [tx, ty, tz, θx, θy, θz, s] оцениваются по ≥ 3 неколлинеарных парам точек взвешенным методом наименьших квадратов через crate::batch_ls::gauss_newton: прямая модель предсказывает каждое q_i по его p_i и разворачивает все три компоненты всех точек в вектор наблюдаемых, наблюдаемые координаты датума образуют z, веса — 1/σ², а решение стартует с x0 = zeros. Углы поворота оцениваются в мкрад, а масштаб — в ppb, чтобы якобиан по конечным разностям оставался хорошо масштабированным при величине координат на лунной поверхности (~1.7e6 м). Небольшая функция icrf_orientation_tie составляет реализованный малый поворот с ориентацией «тело → ICRF» по IAU (transpose(crate::lunar_frame::icrf_to_iau_moon(jd_tdb))) и возвращает остаточное малоугловое смещение реализованной системы относительно осей ICRF — намеренно простая смена формы выражения системы координат, а не независимая оценка лунного полюса.
Оракул — внутренняя согласованность: известное преобразование Гельмерта (сдвиг ~десятки м, поворот ~мкрад, масштаб ~1e-7) вводится в хорошо разнесённую синтетическую сеть точек (различные селенографические широта/долгота → MCMF, часть точек на высоте), добавляется гауссов шум с заданным начальным значением, и подгонка должна восстановить введённые параметры. На безошибочных данных восстановление идёт с точностью ~машинной (сдвиг < 1e-6 м, поворот < 1e-9 рад, масштаб < 1e-12); при метровом шуме восстановленные параметры оказываются в пределах нескольких × формальной σ, а RMS невязки после подгонки лежит около уровня шума. Сценарий lunar-frame-realisation сообщает восстановленный датум, ошибку восстановления каждого параметра относительно введённой истины, RMS невязки после подгонки и привязку ориентации реализованного поворота к ICRF.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Реализация лунной системы отсчёта | modelled |
src/lunar_frame_realise.rs helmert_fit, apply_helmert, realise_frame, icrf_orientation_tie, LunarFrameRealiseScenario. Оракул: InternalConsistency — восстановление введённого 7-параметрического преобразования подобия плюс алгебраическое тождество кругового преобразования для apply_helmert. Тесты (lunar_frame_realise::tests): безошибочное восстановление введённого преобразования (сдвиг < 1e-6 м, поворот < 1e-9 рад, масштаб < 1e-12); восстановление при шуме в пределах нескольких × σ и RMS невязки около уровня шума; применение и обратное преобразование по кругу; детерминированность (то же начальное значение → побитово идентично, другое начальное значение → иное, но восстановленное); привязка ICRF при нулевом повороте равна нулю и сохраняет величину поворота; сценарий выполнен через run_toml. Честные границы применимости: это проверка внутренней согласованности — она восстанавливает введённое преобразование на синтетической сети, — НЕ реализация лунной системы отсчёта по реальным данным слежения / VLBI, и она не заявляет об абсолютной точности системы координат. Привязка ориентации ICRF — простая смена формы выражения, а не независимая оценка полюса. TRL, лётное наследие и одобрение агентств не заявляются. |
Зона обслуживания лунной навигации — DOP / покрытие / доступность и обобщённый лунный PL ARAIM (src/lunar_service.rs)#
Этот модуль составляет уже построенные части в анализ зоны обслуживания лунной навигации: он прогоняет селенографическую сетку широты/долготы на горизонте времени против иллюстративной группировки на лунной орбите класса Moonlight / LCNS по открытым источникам (LCNS: Lunar Communications and Navigation Services) и сообщает DOP / покрытие / доступность, а также обобщённую огибающую уровня защиты лунного ARAIM. Два повторных использования существенны и заданы явно. Геометрия DOP — это ядро crate::orbit::dop, VALIDATED (по gnss_lib_py): service_dop — тонкий фильтр по маске возвышения плюс это ядро, а тест проверяет тождество (service_dop равен прямому orbit::dop на тех же видимых положениях). Целостность повторно использует механизм лунного ARAIM LunaNet LNIS (LunaNet Interoperability Specification) crate::lunar::lunar_araim (σ_URE ≈ 30 м, P_sat ≈ 1e-4); lunar_protection_level обобщает существующий уровень защиты для южного полюса на произвольную точку поверхности, а тест проверяет, что он сводится к случаю южного полюса (на южном полюсе при той же геометрии и бюджете он возвращает в точности существующий результат lunar::lunar_araim с точностью < 1e-9).
Параметры группировки — иллюстративное приближение открытых описаний ESA для данного класса систем (≈ 4 спутника на эллиптических замороженных лунных орбитах, обеспечивающих покрытие южного полюса — апоселений над южным полушарием; 4 — значение библиотеки по умолчанию, а поставляемый moonlight-service-volume.toml задаёт 8, потому что для уровня защиты нужно не менее 6 в зоне видимости). Они не являются реальной эфемеридой Moonlight/LCNS и не подразумевают принадлежности, одобрения, лётного наследия, сертификации или TRL. Состав (покрытие / доступность / целостность) — MODELLED: набор ретрансляторов на круговых/эллиптических кеплеровских орбитах (а не эфемерида LCNS / 9:2 NRHO (почти прямолинейная гало-орбита) с дифференциальной коррекцией), Луна со средним вращением (без физической либрации и прецессирующего полюса) и опубликованные параметры целостности LunaNet LNIS. Он демонстрирует метод зоны обслуживания, а не эксплуатационное значение доступности. Детерминировано (чистая геометрия; без случайности). Сценарий moonlight-service-volume сообщает процент покрытия, огибающие числа видимых спутников и PDOP, огибающую HPL/VPL по зоне и доступность уровня защиты относительно предела тревоги.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Объём навигационного обслуживания на Луне | modelled |
src/lunar_service.rs LunarConstellation, visible_sats, service_dop, coverage, lunar_protection_level, LunarServiceScenario. Геометрия DOP проверена повторным использованием ядра crate::orbit::dop, проверенного по gnss_lib_py; целостность повторно использует опубликованный лунный ARAIM LunaNet/LNIS (crate::lunar::lunar_araim, σ_URE ≈ 30 м). Тесты (lunar_service::tests): service_dop — тождество на проверенном ядре; lunar_protection_level на южном полюсе равен существующему PL lunar::lunar_araim с точностью < 1e-9 (сводится к случаю южного полюса); покрытие не убывает с размером группировки; видимость учитывает маску возвышения; сценарий детерминирован и выполняется через run_toml. Честные границы применимости: группировка иллюстративна, по открытым источникам, НЕ связана с ESA — это не реальная эфемерида Moonlight/LCNS; состав покрытия/доступности/целостности — MODELLED (ретрансляторы на круговых/эллиптических кеплеровских орбитах, Луна со средним вращением, опубликованные параметры LNIS), НЕ эксплуатационное значение доступности Moonlight. TRL, лётное наследие и одобрение агентств не заявляются. |
Лунный дифференциальный PNT — подавление синфазной составляющей + остаток, растущий с базой + уровни защиты DGNSS (src/lunar_dpnt.rs)#
Лунный аналог DGNSS (дифференциальная спутниковая навигация) / SBAS: опорная станция класса NovaMoon в известной селенографической точке вычисляет дифференциальные поправки для каждого спутника по иллюстративной группировке класса Moonlight / LCNS по открытым источникам, а подвижный пользователь, смещённый от неё на базу, применяет их, так что синфазные ошибки вещаемых эфемерид компенсируются. Каждый спутник i несёт введённый общий 3-D вектор ошибки орбиты e_i и общую ошибку часов c_i. Невязка псевдодальности опорной станции — это поправка −e_i · û_ref,i + c_i; исходная ошибка пользователя — −e_i · û_user,i + c_i; скорректированная ошибка пользователя — их разность −e_i · (û_user,i − û_ref,i). Член часов c_i компенсируется точно (он одинаков в обоих наблюдениях), а член орбиты сводится к проекции на разность двух единичных векторов линии визирования, которая → 0 при базе → 0 (порог пространственной декорреляции) и растёт примерно линейно с базой. Скорректированные ошибки дальности по каждому спутнику отображаются через геометрию пользователя небольшим нетребовательным к зависимостям решением снимка взвешенным методом наименьших квадратов (состояние [x, y, z, clock] через crate::orbit::invert4; постоянное смещение дальности поглощается неизвестной часов, а не искажает определение), чтобы получить ошибку положения пользователя. Уровень защиты пользователя повторно использует механизм уровней защиты SBAS по DO-229E (crate::sbas::sbas_protection_level, коэффициенты K для точного захода на посадку), принимая дифференциальную остаточную σ как бюджет 1-σ ошибки каждого спутника.
NovaMoon упоминается только как класс системы (открытое описание лунной опорной станции); группировка повторно использует иллюстративную crate::lunar_service::LunarConstellation по открытым источникам. Это иллюстративные параметры для проверки дифференциального метода, не реальная эфемерида, и они не подразумевают принадлежности, одобрения, лётного наследия, сертификации или TRL. Сценарий lunar-differential-pnt сообщает ошибку положения пользователя с поправками и без них, коэффициент снижения, кривую «ошибка — база» и уровень защиты. В конфигурации по умолчанию скорректированная ошибка пользователя на базе 50 км составляет ≈ 0,008 м против ≈ 24 м без поправок (снижение в ~3000 раз) и ≈ 0 при нулевой базе.
Оракул — внутренняя согласованность: подавление синфазной составляющей есть точное алгебраическое тождество (при noise = 0 скорректированная ошибка < 1e-6 м при нулевой базе; член часов компенсируется с машинной точностью при любой базе), остаток монотонно растёт с базой, а уровень защиты — это тот же алгоритм DO-229E, по которому закреплён стек SBAS. Остаток пространственной декорреляции — модель первого порядка геометрического характера, а не подогнанная модель декорреляции по реальному лунному слежению.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Лунные дифференциальные PNT | modelled |
src/lunar_dpnt.rs differential_corrections, corrected_user_range_errors, user_position_error_m, lunar_dgnss_protection_level, LunarDpntScenario. Оракул: InternalConsistency — тождество дифференциальной компенсации ошибок плюс повторное использование механизма уровней защиты SBAS по DO-229E (crate::sbas). Тесты (lunar_dpnt::tests): при нулевой базе скорректированная ошибка пользователя и каждая скорректированная ошибка дальности по спутникам ~0 (< 1e-6 м) и ≪ нескорректированной ошибки; член часов компенсируется точно при любой базе (случай нулевой ошибки орбиты); скорректированная ошибка монотонно растёт с базой, оставаясь ≪ нескорректированной на небольших базах; дифференциальный режим заметно лучше автономного (> 2 раз); уровень защиты равен прямому вызову sbas::sbas_protection_level и масштабируется с остаточной σ; при недоопределённой геометрии возвращается None; сценарий детерминирован (с заданным начальным значением) и выполняется через run_toml. Честные границы применимости: MODELLED — компенсация синфазной составляющей есть точное тождество, но остаток пространственной декорреляции — модель первого порядка геометрического характера, НЕ подогнанная модель декорреляции по реальному лунному слежению, и это НЕ проверено по реальным данным. NovaMoon упоминается только как класс системы (иллюстративно, по открытым источникам, не связано с ESA). TRL, лётное наследие и одобрение агентств не заявляются. |
Экспорт для лунной совместимости — CCSDS OEM и KIF в согласии с LunaNet/IOAG и проверка соответствия круговым преобразованием (src/lunar_interop.rs)#
Лунная система отсчёта, лунная шкала времени и лунная эфемерида экспортируются в формах обмена на основе CCSDS, согласованных с LunaNet/IOAG (IOAG: Interagency Operations Advisory Group). На этом этапе не изобретается формат передачи: повторно используются существующие в крейте генератор и разборщик CCSDS OEM (Orbit Ephemeris Message) 2,0 (crate::oem::OemFile::to_oem_string / crate::oem::parse_oem) и оболочка Kshana Interchange Format (crate::interchange::Envelope), переименованные для лунного контекста. export_lunar_oem задаёт для REF_FRAME в OEM лунную связанную систему IAU 2015 WGCCRE (MOON_ME, средняя система «Земля — Луна», или MOON_PA, система главных осей), для TIME_SYSTEM — лунную шкалу времени (LTC / TCL / UTC), а для CENTER_NAME — MOON, на примере иллюстративной эфемериды класса LCNS по открытым источникам (положения из crate::lunar_service::LunarSat::position_mci, скорость по центральной конечной разности). export_lunar_time_metadata выдаёт дескриптор лунного времени в согласии с LunaNet/IOAG (идентификатор шкалы, вековой темп мкс/сут из crate::lunar_time::lunar_rate_breakdown, опубликованный диапазон 56–59 мкс/сут, опорная поверхность), проходящий круговое преобразование через serde_json. export_kif_lunar оборачивает OEM + дескриптор + метку системы отсчёта в существующую оболочку KIF с честной меткой MODELLED.
Оракул — круговое преобразование / соответствие полей. Поскольку oem.rs поставляется с обоими направлениями, OEM проходит круговое преобразование через crate::oem::parse_oem (обратно в равный сегмент с сохранением лунной системы отсчёта/времени и числа состояний) и независимо проверяется oem_conformance, которая проверяет наличие каждого обязательного ключевого слова заголовка CCSDS/LunaNet, что REF_FRAME содержит лунный токен MOON_*, а TIME_SYSTEM не пуст, что соблюдено обрамление META_START … META_STOP и что строки данных положения и скорости корректны, — возвращая структурированный итог и список присутствующих/отсутствующих полей, так что неисправный экспорт (например, с потерянным TIME_SYSTEM) обнаруживается и называется. Метаданные времени проходят круговое преобразование через parse_lunar_time_metadata, а оболочка KIF — через Envelope::parse в равные артефакты с меткой MODELLED.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Экспорт для лунной интероперабельности | modelled |
src/lunar_interop.rs export_lunar_oem, export_lunar_time_metadata, parse_lunar_time_metadata, export_kif_lunar, oem_conformance, LunarInteropScenario. Оракул: InternalConsistency — детерминированное круговое преобразование (CCSDS OEM через crate::oem::parse_oem; KIF через crate::interchange::Envelope::parse; метаданные времени через serde_json) плюс соответствие именам полей опубликованной семантике полей CCSDS OEM + LunaNet/IOAG. Тесты (lunar_interop::tests): экспортированный OEM содержит лунные токены REF_FRAME (MOON_ME/MOON_PA) и TIME_SYSTEM (LTC/TCL), CENTER_NAME = MOON, объект и корректные строки данных; метаданные лунного времени проходят круговое преобразование (темп/диапазон/опора) и отклоняют мусор; оболочка KIF сериализуется и десериализуется в равное значение при наличии честной метки MODELLED; намеренно испорченный OEM (без TIME_SYSTEM) не проходит oem_conformance и сообщается как с отсутствующим полем; сценарий выполняется через run_toml. Честные границы применимости: имена и единицы полей согласованы с открытыми стандартами (CCSDS 502.0-B OEM, лунные системы отсчёта IAU WGCCRE 2015, LunaNet Interoperability Specification / лунная архитектура IOAG); экспорт — MODELLED: оракулом служат детерминированное круговое преобразование и соответствие именам полей, это НЕ сертифицированный тест соответствия совместимости, эфемерида иллюстративна, по открытым источникам, не связана с ESA, а TRL, лётное наследие и одобрение агентств не заявляются. |
Заранее зарегистрированные прогнозы#
Заранее зарегистрированный прогноз — это результат MODELLED, зафиксированный до появления каких-либо данных для его оценки, с протоколом оценки, зафиксированным одновременно. Это не проверка и не добавляет строку в реестр. Каждый находится в docs/predictions/ с зафиксированными входными данными, результатом и их хэшами SHA-256, а tests/prediction_frozen.rs завершается ошибкой, если сдвинулся хотя бы один зафиксированный байт; изменённое допущение влечёт новый датированный прогноз рядом со старым, но никогда не правку старого.
| Прогноз | Зафиксирован | Оценивается по | Статус |
|---|---|---|---|
| Покрытие лунной опорной станции | c05dac1d, 2026-10-12 | опубликованным любой стороной точности, доступности, покрытию и уровням защиты южно-полярной лунной дифференциальной станции | пока не оценивается (опубликованных результатов нет) |
Репрезентативность демонстрации и реестр разрывов до полёта (src/representativeness.rs)#
Результат моделирования полезен как доказательство, только если на его лицевой стороне указано, к чему он привязан, что он допускает и что всё ещё отделяет его от лётной системы. Реестр репрезентативности делает это полноценным машинно проверяемым выводом: запись Representativeness содержит внешние привязки (Anchor) демонстрации, её смоделированные допущения, её разрывы (Gap) до полёта (каждый с этапом/деятельностью, которая его закроет) и полосу TRL, для которой она репрезентативна. Это спутник результата на уровне отдельного результата для матрицы verification на уровне возможностей.
Оракул — набор инвариантов в замкнутой форме, обеспечиваемых representativeness::tests: запись Validated должна перечислять хотя бы одну привязку ExternalDataset (имитация не может быть проверена сама по себе); запись Modelled должна перечислять хотя бы один разрыв до полёта и не может заявлять репрезентативную полосу TRL выше 4 (дальнейшее созревание требует доказательств по аппаратуре/полёту, а это разрыв, а не результат моделирования); полоса TRL должна быть корректно сформирована; а запись PartnerOwned ничего не должна утверждать. Эти инварианты воплощают дисциплину «репрезентативность обоснована + оставшиеся разрывы до полёта чётко определены».
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Реестр репрезентативности и разрывов до полёта | modelled |
src/representativeness.rs Representativeness/Anchor/Gap, check/is_valid/report/to_json. Оракул: InternalConsistency — инварианты честности в замкнутой форме, привязанные к границе «статус / вид оракула» в verification. Тесты (representativeness::tests): запись Validated без внешней привязки не проходит; внутренняя привязка (ReferenceImpl) не удовлетворяет Validated; запись Modelled без разрыва не проходит; запись Modelled выше TRL 4 не проходит; некорректные полосы TRL обнаруживаются; запись сериализуется в JSON с ожидаемыми полями и формирует читаемый отчёт. Честные границы применимости: реестр проверяет классификацию доказательств результата — он не доказывает, что названные привязки разрешаются в действующие тесты (они составляются вручную, точно так же, как матрица verification); утверждение о «машинной проверке» ограничено инвариантами статуса, привязки, разрыва и TRL. |
Единое доказательство компромисса «квантовое или классическое» (src/qtrade.rs)#
Каждая область применения квантового PNT отвечает на один и тот же вопрос одним и тем же способом: зафиксировать одну систему сравнения (сценарий + начальное значение + версия движка), пропустить квантового кандидата и классический базовый уровень через один нейтральный путь кода, оценить их по общим показателям качества и сообщить — с доверительным интервалом и честной меткой validated/modelled — где квантовое решение выигрывает, а где нет. TradeEvidence придаёт этому ответу единую форму, так что вертикали синхронизации времени, навигации и обнаружения аномалий выдают один и тот же воспроизводимый и честно помеченный объект. Он не переписывает ни один компромисс: числа по каждому показателю качества берутся из существующих движков (quantum_trade, crossover и модулей вертикалей); это контракт плюс оболочка воспроизводимости и репрезентативности, построенная на реестре репрезентативности и метках верификации.
Оракул — тождества выигрыша/победителя в замкнутой форме плюс точная обёртка существующего вывода компромисса. qtrade::tests: коэффициент выигрыша имеет правильную полярность (ориентирован так, что >1 всегда означает, что квантовая сторона лучше, как для показателей «больше — лучше», например holdover, так и для показателей ошибки «меньше — лучше»); объект доказательства, построенный из реального quantum_trade::TradeResult, воспроизводит свои коэффициенты выигрыша; недобросовестное доказательство отклоняется (репрезентативность Modelled без разрыва или показатель качества Validated, чья запись компромисса не несёт внешней привязки); JSON детерминирован и несёт поля системы сравнения/начального значения/движка/показателя качества/репрезентативности.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Доказательство компромисса «квантовое или классическое» | modelled |
src/qtrade.rs TradeEvidence/TradeFom/TradeFrame/Winner. Оракул: InternalConsistency — тождества выигрыша/победителя в замкнутой форме + точная обёртка quantum_trade::TradeResult; честность привязана к реестру репрезентативности и к границе «статус верификации / вид оракула». Тесты (qtrade::tests) — как выше. Честные границы применимости: обвязка стандартизирует то, как компромисс сообщается и воспроизводится; физика каждого показателя качества — та, что предоставляет вносящий вклад движок, с его собственной меткой validated/modelled — TradeEvidence не повышает смоделированный показатель качества до проверенного. |
Библиотека моделей ошибок квантовых устройств (src/quantum_devices.rs)#
Единое место, где представлены квантовые устройства PNT, участвующие в компромиссах демонстратора, — оптические часы, часы на захваченных ионах, часы на ионах ртути, классические опорные часы, холодноатомный интерферометр и линии передачи времени, — каждое в виде DeviceCard с основной спецификацией и записью репрезентативности. Большая часть физики устройств используется повторно (стабильность часов из holdover::QuantumClockClass и clock_state::ClockClass; холодноатомный интерферометр из quantum_trade/crossover; классические оптические/радиочастотные линии из timetransfer_adv). Единственная действительно новая модель — линия передачи времени на запутанных/одиночных фотонах, чья точность синхронизации ограничена дробовым шумом: σ_t ≈ jitter/√(R·τ) по детектируемой скорости совпадений R и интегрированию τ, ухудшаемой штрафом за тёмные отсчёты √(1 + dark/R) и ограниченной снизу неустранимой систематикой.
Оракул — повторно используемые опубликованные коэффициенты часов/CAI плюс тождества дробового шума и потерь в замкнутой форме. quantum_devices::tests: повторно используемый порядок стабильности часов корректен (оптическая решётка < ионы ртути < CSAC по σ_y(1 с)); точность запутанной линии улучшается как 1/√τ (4 × интегрирования уменьшает σ вдвое) при ограничении дробовым шумом; детектируемая скорость совпадений падает в 10 раз на каждые 10 дБ потерь в линии; тёмные отсчёты монотонно ухудшают точность; систематический порог ограничивает точность снизу; каждая карточка устройства — корректная запись репрезентативности Modelled.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Библиотека моделей ошибок квантовых устройств | modelled |
src/quantum_devices.rs DeviceCard, quantum_clock_card/classical_clock_card, EntanglementTimeLink. Оракул: InternalConsistency — повторно используемые опубликованные коэффициенты часов/CAI + тождества дробового шума и потерь в замкнутой форме для запутанной линии. Тесты (quantum_devices::tests) — как выше. Честные границы применимости: параметры устройств часов/CAI повторно взяты из существующих в движке моделей опубликованных коэффициентов; модель запутанной линии — MODELLED по опубликованному поведению квантовой синхронизации часов с иллюстративными значениями скорости пар, эффективности и потерь по открытым источникам — она не проверена по измеренной линии, а реальная аппаратура источника, канала и детектора — заявленный разрыв до полёта. |
Доверенная квантовая синхронизация времени — сквозная цепочка, защищённое распространение, аномалии и компромисс (src/timetransfer_chain.rs)#
Сценарий quantum-time-transfer составляет цепочку синхронизации времени, нужную демонстратору квантового PNT: сквозной бюджет времени пользователя (ошибка выбега опорных часов и точность синхронизации линии, сложенные квадратурно) для квантовой цепочки (часы на оптической решётке + запутанная/одиночнофотонная линия) в сравнении с классической цепочкой (CSAC + двухпутевая радиолиния); уровень защиты времени (TPL, повторно используется из tpl), ограничивающий необнаруженную ошибку времени; показатель качества безопасности от атак с задержкой/повтором 1 − P_md при заданной частоте ложных тревог (повторно используется из detection); вероятность обнаружения аномалии часов + латентность обнаружения изменений по CUSUM (кумулятивная сумма); и сравнение «квантовое или классическое» в виде честного qtrade::TradeEvidence с записью репрезентативности и разрывов до полёта.
Оракул — квадратурный бюджет в замкнутой форме по повторно используемым, отдельно проверенным ядрам (ADEV по Stable32/NIST; граница TPL; detection::analytic_pd/analytic_pmd). timetransfer_chain::tests: квантовая точность улучшается со временем интегрирования; квантовая цепочка может выиграть и может проиграть по показателю точности (честно — это не универсальная победа; линия с очень большими потерями переворачивает результат); уровень защиты конечен и положителен; показатель безопасности лежит в [0 1] и растёт с задержкой атаки; вероятность обнаружения аномалии монотонна по величине неисправности; а доказательство компромисса внутренне честно (is_honest()).
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Доверенная квантовая синхронизация времени (цепочка + защищённое распространение + аномалии + компромисс) | modelled |
src/timetransfer_chain.rs QuantumTimeTransferScenario/Report, to_svg; kind="quantum-time-transfer". Оракул: InternalConsistency — квадратурный бюджет в замкнутой форме по повторно используемым проверенным ядрам (ADEV/Stable32-NIST, граница TPL, аналитические Pd/Pmd обнаружения); честность привязана к реестру репрезентативности. Тесты (timetransfer_chain::tests) — как выше. Честные границы применимости: параметры часов и линий иллюстративны, по открытым источникам; запутанная линия — это MODELLED модель с ограничением дробовым шумом из quantum_devices; моделируется класс системы доверенной синхронизации времени — она не проверена по измеренной сквозной линии, а реальная аппаратура часов, линии и космического канала — заявленный разрыв до полёта; TRL, лётное наследие и сертификация не заявляются. |
Квантовая навигация без GNSS (src/quantum_nav_od.rs)#
Сценарий quantum-gnss-free-nav сравнивает счисление пути во время перерыва GNSS по квантовому инерциальному бюджету (акселерометр на холодноатомном интерферометре, повторно используется из inertial::quantum_imu/quantum_trade, чей порог белого шума CAI проверен с точностью около 2 порядков величины относительно Freier et al. 2016) и по классическому INS навигационного класса. Он сообщает рост ошибки положения на выбеге, время holdover до порога по положению и компромисс «квантовое или классическое» в виде честного qtrade::TradeEvidence. Наблюдаемость заявлена честно: без внешней коррекции во время перерыва смещение акселерометра ненаблюдаемо, поэтому ошибка положения растёт без ограничения (≈ ½·смещение·t² плюс член случайного блуждания скорости); квантовый датчик с меньшим смещением замедляет этот рост, но не устраняет разрыв — это делает только внешняя коррекция.
Оракул — повторно используемые инерциальные бюджеты (QuantumNavBudget/ClassicalInsBudget, оба реализуют трейт PositionDrift) плюс тождества дрейфа в замкнутой форме. quantum_nav_od::tests: квантовый бюджет превосходит классический на длинном перерыве (меньшая ошибка, большее время holdover); ошибка растёт с длительностью перерыва у обоих (разрыв наблюдаемости); преимущество зависит от перерыва, а не является постоянным коэффициентом выигрыша (квантовая кривая определяется шумом на коротком выбеге и смещением на длинном); доказательство компромисса внутренне честно.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Квантовая навигация без GNSS | modelled |
src/quantum_nav_od.rs QuantumNavOdScenario/Report, to_svg; kind="quantum-gnss-free-nav". Оракул: InternalConsistency — повторно используемые инерциальные бюджеты (CAI проверен повторным использованием с точностью ~2 порядков относительно Freier 2016; классический дрейф в замкнутой форме); честность привязана к реестру репрезентативности. Тесты (quantum_nav_od::tests) — как выше. Честные границы применимости: статическое сравнение бюджетов счисления пути, а не динамический фильтр на реальных траекториях; заявлено, что смещение без коррекции ненаблюдаемо; параметры устройств иллюстративны, по открытым источникам; моделируется класс квантовой навигации без GNSS — реальная аппаратура холодноатомного IMU, динамическая платформа и лётная среда — заявленные разрывы до полёта; TRL, лётное наследие и сертификация не заявляются. |
Обнаружение неисправностей / аномалий для квантовых систем PNT (src/quantum_faults.rs)#
Сценарий quantum-anomaly-detect определяет размеченный каталог неисправностей квантового PNT (скачок частоты часов, дрейф, потеря захвата; ступенька смещения датчика, пропадание), оценивает статистику обнаружения на номинальных и неисправных окнах и сообщает различающую способность детектора как ROC AUC и минимально обнаруживаемую неисправность при фиксированной частоте ложных тревог. Квантово-классический аспект: более стабильные квантовые опорные часы снижают шум монитора σ, поэтому обнаруживают меньшие неисправности — это выдаётся как честное qtrade::TradeEvidence с записью репрезентативности.
Оракул — AUC в замкнутой форме для гауссовой статистики обнаружения (номинальная N(0,σ), неисправность N(μ,σ) ⇒ AUC = Φ(μ/(σ√2))), перекрёстно проверенная по внешне проверенной eval_stats::bootstrap_auc_ci (проверено по scikit-learn) и аналитическим порогам detection. quantum_faults::tests: аналитическая AUC совпадает с известными значениями (0,5 при μ=0, →1 при больших μ/σ, монотонно); эмпирический доверительный интервал бутстреп-AUC охватывает замкнутую форму; квантовый монитор имеет более высокую AUC и меньшую минимально обнаруживаемую неисправность; преимущество исчезает для огромных неисправностей (оба обнаруживают идеально — это не универсальный запас); в каталоге пять размеченных классов; компромисс внутренне честен.
| Возможность | Статус | Оракул / честные границы применимости |
|---|---|---|
| Обнаружение неисправностей/аномалий для квантового PNT | modelled |
src/quantum_faults.rs FaultKind, QuantumAnomalyScenario/Report, analytic_auc, min_detectable_fault; kind="quantum-anomaly-detect". Оракул: InternalConsistency — гауссова AUC в замкнутой форме, перекрёстно проверенная по внешне проверенной бутстреп-AUC eval_stats (по scikit-learn) и аналитическим порогам detection. Тесты (quantum_faults::tests) — как выше. Честные границы применимости: статистика обнаружения — гауссова модель, а не реальная телеметрия; каталог неисправностей размечен синтетически; уровни шума квантового и классического мониторов иллюстративны, по открытым источникам; моделируется класс обнаружения аномалий квантового PNT — реальная телеметрия аппаратуры с эталонными метками — заявленный разрыв до полёта; TRL, лётное наследие и сертификация не заявляются. |
Соответствие стандартам — форматы обмена, бюджет линии и целостность (проверки по внешнему оракулу)#
Эти стандарты проверены восстановлением дословных рабочих примеров / эталонных значений, опубликованных в самих стандартах (или в независимой эталонной реализации), а не собственным круговым преобразованием Kshana. Восстановление примера из приложения самого стандарта — сильнейшая доступная проверка соответствия для разборщика формата обмена.
| Стандарт | Статус | Внешний оракул |
|---|---|---|
| CCSDS OEM (сообщения об орбитальных данных 502.0-B) | validated |
tests/ccsds_reference.rs: parse_oem восстанавливает точные эпохи и векторы состояния X/Y/Z/Ẋ/Ẏ/Ż из примера KVN OEM в CCSDS 502.0-B-3, приложение G §G6, рисунок G-11 («OEM Example with No Acceleration, No Covariance», с. G-10) — оба сегмента эфемерид, включая исходные значения с ведущими нулями (-063.042). Образец tests/fixtures/ccsds/oem_502_b3_figG11.oem воспроизведён посимвольно из официальной Blue Book (редакционные пометки «< intervening data records omitted here >», не являющиеся допустимыми записями OEM, не включены). |
| CCSDS TDM (Tracking Data Message 503.0-B) | validated |
tests/ccsds_reference.rs: TdmFile::parse восстанавливает все 41 записей RANGE (первая 3198,03679519614 км, последняя 3270,46440460551 км) и метаданные из примера KVN TDM в CCSDS 503.0-B-2, приложение E, рисунок E-9 («Range Data with TIMETAG_REF=TRANSMIT», с. E-9). Образец tests/fixtures/ccsds/tdm_503_b2_figE9.tdm дословно взят из Blue Book. (Это оракул по опубликованной Blue Book наряду с ранее существовавшим написанным вручную круговым преобразованием reference.tdm в src/ccsds_tdm.rs.) |
| CCSDS 133,0 (Space Packet Protocol) | validated |
src/space_packet.rs primary_header_matches_published_independent_test_vectors: кодировщик воспроизводит побайтовые тестовые векторы первичного заголовка независимой библиотеки spacepackets (us-irs/spacepackets-py, tests/ccsds/test_space_packet.py) — например, 18 02 40 34 00 16 и максимальный по всем полям 1F FF FF FF FF FF — плюс канонический случай телеметрии (TM) из одних единиц, каждый из которых прошёл круговое преобразование через декодирование. Ширина и порядок битовых полей — по CCSDS 133.0-B-2 §4.1.3. |
| CCSDS 401 / DSN (бюджет линии, DSN 810-005) | validated |
src/linkbudget.rs link_equation_reproduces_descanso_galileo_dct: цепочка FSPL (потери в свободном пространстве) и C/N₀ воспроизводит опубликованную таблицу расчёта и контроля телеметрии дальнего космоса из J. H. Yuen (ed.), Deep Space Telecommunications Systems Engineering (DESCANSO/JPL (DESCANSO: Deep Space Communications and Navigation Systems Center of Excellence) Pub. 82-76), таблица 1-1 — нисходящая линия Galileo в X-диапазоне (8420,43 МГц) на 6,37 а. е.: потери в свободном пространстве 290,54 дБ (<0,05 дБ) и принимаемое Pr/N₀ = 54,6 дБ-Гц (<0,2 дБ). Центры диапазонов лежат внутри выделений нисходящих линий дальнего космоса DSN/CCSDS-401 (DSN 810-005, модуль 201). Параметры миссии по умолчанию остаются репрезентативными (а не калиброванным транспондером); закрепляется именно уравнение линии. |
Стандарты GNSS — состояние внешних оракулов и честные оставшиеся разрывы:
| Стандарт | Состояние и честная оговорка |
|---|---|
| RAIM / ARAIM | Ядро, геометрия и уровень защиты ARAIM проверены внешне. Ядро обнаружения — порог обнаружения неисправностей по χ², нецентральность нецентрального χ² для пропуска обнаружения и K-множители нормального закона — воспроизводит SciPy (tests/raim_reference.rs, 171 случай, ≤ 1e-6 относительно), а оборачивающая геометрия воспроизводит gnss_lib_py (DOP). Значение уровня защиты (PL) ARAIM теперь тоже закреплено: по «числовому примеру LPV-200 (LPV: заход с вертикальным наведением по курсовому маяку)» из ARAIM Reference ADD (Algorithm Description Document) v3.1 рабочей группы WG-C (WG: рабочая группа), src/araim_reference.rs / tests/araim_reference_vectors.rs дают VPL 18,2926 м против 18,3 м, HPL 13,4063 м против 13,45 м и σ_v,acc 1,3694 м против 1,3694 м, в пределах собственного TOL_PL = 0,05 м эталона (вид araim-reference-check). Область применения: режимы неисправностей до одного спутника или одной орбитальной группировки (N_fault,max = 1); подмножества множественных событий неисправностей и исключение не реализованы, а у классического RAIM по-прежнему нет канонического опубликованного тестового вектора «вход → HPL». См. ARAIM_REFERENCE.md. |
| SBAS / DO-229E | Алгоритм уровня защиты теперь проверен внешне. При заданных для каждого спутника (el, az, σ) sbas_protection_level в kshana воспроизводит ответвление RTKLIB для SBAS-PL (zsiki/rtklib_ws waasprotlevels(), Siki & Takács 2017, «DO-229D Appendix J») — при подаче собственных σ этого инструмента, вычисленных по реальным вещательным сообщениям EGNOS + реальному BUTE RINEX, — с точностью < 2e-3 м по HPL на 6 эпохах (tests/sbas_reference.rs); ESA gLAB v6.0.0 (core/filter.c) подтвердил идентичное соглашение. K-коэффициенты (K_H,PA=6.0, K_V=5.33, K_H,NPA≈6.18) совпадают с DO-229E, приложение J. Что проверено, а что нет: закрепляется алгоритм PL (σ на входе → HPL/VPL на выходе); моделирование σ выше по цепочке из сырых сообщений UDRE/GIVE вне области kshana — именно здесь независимые инструменты полного конвейера всё ещё расходятся на метры на реальных данных. K_V совпал при округлённом значении оракула 5,33 (точное Φ⁻¹(1−5e-8)=5.3267 в kshana → VPL примерно на 0,06 % меньше; вертикаль проверена без K-коэффициента как d_U). |
| IONEX / Клобучар | Вещательная модель проверена внешне. Модель Klobuchar L1 воспроизводит ionmodel из RTKLIB (tests/klobuchar_reference.rs, < 1e-4 м) — паритет реализации с де-факто открытым эталоном, поскольку официального рабочего примера с измеренной истиной не существует. Считыватель карт TEC IONEX теперь существует (src/ionex.rs, проверен модульными тестами); оставшийся разрыв — перекрёстная проверка его по реальному продукту GIM, а не вещательная модель. См. строки Klobuchar в Заявления и реальность. |
| Дальномерный код расширения GPS L1 C/A (IS-GPS-200) | Генерация кода проверена внешне. src/sdr.rs (ca_first_ten_chips_match_is_gps_200_octal): генератор кода C/A на G1/G2 LFSR (регистр сдвига с линейной обратной связью) воспроизводит опубликованные назначения фазы кода в IS-GPS-200, таблица 3-Ia — восьмеричные первые десять элементов для PRN (псевдослучайный шум) 1–9 ({1440, 1620, 1710, 1744, 1133, 1455, 1131, 1454, 1626}) — точно. Это закрепляет последовательность элементов дальномерного кода относительно интерфейсной спецификации GPS; окружающие части модуляции, спектрального разделения и слежения за кодом по DLL (петля слежения за задержкой) (navsignal) остаются MODELLED. |
Синхронизация времени для сетей, спектра, Солнечной системы, орбитальных группировок, кампаний и LEO-PNT#
Возможности, добавленные в линии 0,28, оцениваются строка за строкой в сформированной VERIFICATION-MATRIX.md; этот раздел резюмирует, какие из них имеют внешний оракул. Строка получает VALIDATED только при наличии независимого внешнего оракула; всё остальное — MODELLED.
| Возможность (вид) | Статус | Внешний оракул или причина, по которой остаётся модельным |
|---|---|---|
Телекоммуникационные MTIE (максимальная ошибка временного интервала) и TDEV (девиация времени) на ряде holdover (telecom-timing) |
validated |
tests/telecom_timing_reference.rs: 17 коэффициентов усреднения MTIE и 12 TDEV на зафиксированном в репозитории ряде holdover часов чипового масштаба из 2 048 отсчётов в сравнении с allantools 2024,06, с относительной точностью < 1e-12 / < 1e-9. Вердикты PASS/FAIL по маскам ITU-T (Сектор стандартизации электросвязи Международного союза электросвязи) и паспортные пресеты генераторов остаются MODELLED. См. TELECOM-TIMING.md. |
Прогноз holdover по измеренной записи часов (slot-timing) |
validated |
tests/slot_timing_cs5071a_holdout.rs: подгонка по первой трети реальной записи цезиевых часов 5071A, прогноз времени выхода за одну сигму при шести порогах, измерение на отложенных двух третях; порог — множитель 1,5 в обе стороны, наблюдаемые отношения от 0,84 до 1,03. Бюджет защитного интервала слота и частота коррекций, построенные на этом, остаются MODELLED. |
Спектральные плотности мощности в L-диапазоне в замкнутой форме и спектральное разделение (spectrum) |
validated |
Замкнутые формы navsignal в сравнении с опубликованными значениями (строка матрицы «Closed-form L-band signal power spectral densities…»). Водопад с J/S (отношение помехи к сигналу) по диапазонам и эффективным C/N0 (плотность отношения несущей к шуму), а также ввод и вывод SigMF (Signal Metadata Format) остаются MODELLED. |
Положения планет по элементам Standish из JPL (Лаборатория реактивного движения) и световое время между телами (solar-system) |
validated |
0,30, заранее зарегистрировано относительно JPL Horizons (DE441): tests/solar_system_standish_preregistered.rs и tests/solar_system_standish_earth_icrf_preregistered.rs, RMS по каждой планете и компоненте не более значения из таблицы 8.10.1 Explanatory Supplement (наихудшее 0,778), включая разделение Земли и поворот ICRF; tests/solar_system_light_time_solver_preregistered.rs, решатель светового времени на положениях DE441 в пределах 1e-6 с от светового времени Horizons (наихудшее 6.7e-9 с). Более раннее сравнение с вдвое большим номиналом (tests/solar_system_horizons_reference.rs), порог которого был установлен после первого сравнения, сохранено как не блокирующая регрессия. Уран/Нептун из таблицы 1, Плутон, спутники, константы тел и body-pnt остаются MODELLED. |
Геометрия Уокера и опубликованные слоты GPS, Galileo и ГЛОНАСС (GLObal NAvigation Satellite System); глобальный геометрический фактор GPS (constellation-design) |
validated |
constellation::tests: Walker 24/3/1 воспроизводит таблицу определения открытой службы Galileo с точностью 1e-9°, формулу слотов из интерфейсного контрольного документа ГЛОНАСС, экваториальные пересечения GPS; медиана HDOP базового уровня GPS 0,940 против 0,94 в стандарте характеристик Standard Positioning Service. Карты покрытия произвольной мультиорбитальной группировки вокруг любого тела остаются MODELLED. |
Кампании: цепочки миссий, перебор параметров, ансамбли Монте-Карло, прогоны с общими условиями (campaign) |
modelled |
tests/campaign_composition_reference.rs (11 тестов): однофазная кампания побайтово воспроизводит автономный прогон, перебор из одного узла читает то же число, ансамбль с заданным начальным значением побайтово стабилен. Тождества композиции, а не внешний оракул. |
| Физика линии LEO (низкая околоземная орбита): коэффициенты дождя ITU-R (Сектор радиосвязи МСЭ) P.838, ослабление в дожде и сцинтилляции P.618, потери при проникновении в здания P.2109, ионосфера первого порядка, максимальный Доплер | validated |
tests/leo_link_reference.rs, tests/leo_doppler_reference.rs: собственные таблицы Рекомендаций ITU-R и примеры проверки Исследовательской комиссии 3 (зафиксированные вместе с источником и датой получения), отношение групповых задержек IS-GPS-200 для ионосферы и опубликованная таблица максимального Доплера из Leclere, Marathe and Reid (ION GNSS+ 2025, arXiv 2509,19551). |
Навигационное сообщение LEO: пользовательский алгоритм вещательных эфемерид по Galileo ICD (интерфейсный контрольный документ), CRC-24Q (24-битная циклическая проверка избыточности), веса глобально усреднённого SISRE (ошибка дальности сигнала в пространстве) (leo-navmsg) |
validated |
tests/leo_navmsg_reference.rs: пользовательский алгоритм Galileo воспроизводит RTKLIB (библиотеку позиционирования в реальном времени с открытым исходным кодом) с точностью 1 мм на четырёх реальных вещательных эфемеридах Galileo; CRC-24Q даёт контрольное значение каталога 0xCDE703 и контрольные байты примера кадра RTCM (Radio Technical Commission for Maritime Services) 1005; веса SISRE воспроизводят опубликованную таблицу MEO/GEO. Подгонщик, обновление в середине прохода, двоичное кодирование, текст в стиле RINEX-4/CSV (значения, разделённые запятыми) и выбираемые модели эфемерид остаются MODELLED. |
Проектирование сигнала LEO, проход и бюджет линии, Доплер и совместное позиционирование GNSS+LEO, сходимость PPP (прецизионное абсолютное позиционирование), позиционирование 5G NTN (нетерриториальная сеть), передача времени LEO (leo-signal, leo-pass, leo-pvt, leo-ppp, ntn-positioning) |
modelled |
tests/leo_signal_reference.rs, tests/leo_fusion_scenarios.rs: замкнутые формулы, согласованность фильтра (например, усреднённый по прогонам NEES фильтра PPP внутри его полосы 95%) и сопоставление с опубликованными трендами; полевых данных нет. |
Одна система LEO-PNT от начала до конца (leo-pnt-chain) |
modelled |
tests/leo_pnt_chain.rs: каждое передаваемое далее значение равно собственному выходу вышестоящего этапа, а изменение любого входа вышестоящего этапа сдвигает все зависящие от него нижестоящие показатели. |
| Устойчивость LEO и вертикали (спуфинг по Доплеру и по междиапазонной согласованности, зондирование ионосферы) | modelled |
tests/leo_resilience_verticals.rs (10 тестов). Сценарии устойчивости и вертикалей перечислены в RESILIENCE-CROSSWALK.md. |
Выходные данные, которые являются представлениями, а не доказательствами, имеют тесты, но не имеют строки матрицы: экспорты для обмена (CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, эфемериды STK (Systems Tool Kit), SigMF (Signal Metadata Format)), каждый из которых разбирается обратно валидатором, написанным по спецификации формата (tests/interop_formats.rs, 13 тестов; см. INTEROP.md); анимации (tests/animation.rs: побайтно идентичные повторные прогоны, точное число кадров, корректный SVG (Scalable Vector Graphics), отсутствие внешних адресов в HTML-проигрывателе (HyperText Markup Language)); и отчёт о прогоне (tests/advanced_report.rs, tests/advanced_report_cli.rs: каждый встроенный сценарий формирует отчёт без пустых разделов и значений-заполнителей, подписи совпадают с матрицей, а записанная команда воспроизводит result.json и отчёт побайтно).
Рабочая область применимости#
Каждый пакет проверяется во всей заявленной области входных данных тестом tests/scenario_coverage.rs, который утверждает, что любой числовой выход конечен (без NaN/Inf (NaN: не число)) и ограничен. В таблице приведены проверенный диапазон входных данных для каждого пакета, ожидаемое поведение выхода и покрывающий тест.
| Пакет | Перебираемый вход | Проверенный диапазон | Ожидаемый выход | Покрывающий тест |
|---|---|---|---|---|
| clock | threshold_ns (требование к синхронизации времени) |
1 – 500 ns | конечные показатели качества holdover, синхронизации времени и безопасности | clock_pack_covers_the_spec_threshold_envelope |
| inertial | accel.bias |
1e-7 – 1e-2 m/s² (от холодных атомов до грубых MEMS (micro-electro-mechanical systems)) | конечные, ограниченные СКО и p95 положения | inertial_pack_covers_the_accel_bias_envelope |
| orbit | mask_deg (маска возвышения) |
5° – 30° | конечные DOP и доступность; ограничены | orbit_pack_covers_the_elevation_mask_envelope |
| spoof | attack.rate_ns_per_s |
0,1 – 50 ns/s | конечные P_md и показатели безопасности, ограничены | spoof_pack_covers_the_attack_rate_envelope |
| hybrid | position_spec_m |
10 – 1000 m | конечный holdover по времени и положению | hybrid_pack_covers_the_position_spec_envelope |
| орбита (реальная) | реальные TLE Celestrak gps-ops |
снимок из 30 спутников, строгая проверка контрольных сумм | загружается только при верных контрольных суммах; ограниченная геометрия | real_gps_constellation_scenario_loads_with_valid_checksums_and_bounded_output |
| часы (фликкер) | flicker_floor включён/выключен |
0 против 1e-12 | включение уровня 1/f ухудшает дрейф ошибки времени по p95 в режиме holdover | flicker_fm_floor_degrades_the_clock_holdover_when_enabled |
| слияние данных (реалистичность) | accel.bias 0 против 5.88e-7 m/s² |
нулевое и реалистичное ненулевое значение | фильтр по-прежнему сходится, в пределах 3× ошибки при нулевом смещении | fusion_filter_converges_with_a_realistic_non_zero_bias |
Строки о фликкер-ЧМ и смещении при слиянии данных закрывают два конкретных пробела в реалистичности: шумовые члены по умолчанию выключены, но при включении заметно влияют на выход, а совместный фильтр слияния не зависит от обнуления смещений — он сходится и при реалистичном остаточном смещении уровня холодных атомов.
Известные ограничения#
- Квантовые и классические прогоны теперь используют независимые начальные значения ГСЧ (генератора случайных чисел) (классическое значение = seed + 0x9e3779b97f4a7c15), поэтому их реализации шума некоррелированы — исправлено по итогам рецензии.
holdover_sучитывает сегменты: временные линии перерывов делятся на непрерывные сегменты при повторном захвате GNSS, а сообщаемое значение — наихудший (кратчайший) выбег среди них. Оно по-прежнему ограничено разрешением временной сетки (нижняя оценка).- Повторная синхронизация при передаче времени по ISL моделирует остаточную неопределённость линии как новый центрированный джиттер на каждом шаге измерения плюс повторную привязку с заданным интервалом.
Заявления и реальность — краткий справочник#
Контрольный список для придирчивого рецензента. Для каждого термина, который можно понять шире, чем он есть: что Kshana делает сегодня и где на дорожной карте находится настоящая версия.
| Термин, который вы можете встретить | Чем это является сегодня | Чем это не является (пока) |
|---|---|---|
| «гибридный квантово-классический симулятор PNT» | классический стохастический симулятор, управляемый опубликованными коэффициентами Аллана и шума квантовых датчиков | квантовая физика из первых принципов (фаза Маха–Цендера, проекционный шум, систематические эффекты) — см. QUANTUM-MODELS.md |
| «совместное калмановское слияние» / пакет fusion | исполняемый пакет fusion наблюдает часы и положение по отдельности (прямая фиксация времени и прямая фиксация положения), для чего оптимальная оценка действительно блочно-диагональна — два двухсостоятельных фильтра с общим показателем качества |
связанный фильтр для случая псевдодальности теперь существует как fusion::coupled::CoupledPntFilter (4-состоятельный составной [pos,vel,phase,freq], ненулевая ковариация между блоками, проверен по NEES), но ещё не подключён к исполняемому пакету, а пакет одномерный (1-DOF, одна степень свободы) — 3D-расширение до 8 состояний остаётся на будущее |
Показатель качества безопасности (вид spoof) |
1 − P_md стохастического детектора спуфинга времени: двусторонний критерий χ²₁ / Неймана–Пирсона по статистике монитора с поддержкой часов, порог задан по целевому P_fa, P_md оценивается при величине из спецификации как в замкнутой форме, так и методом Монте-Карло (результаты совпадают с точностью до нескольких ×1/√N) |
многоспутниковый детектор RAIM/ARAIM — см. INTEGRITY.md; статистика монитора — гауссова модель с σ, выведенным из СПМ часов, а не корреляция на уровне сигнала |
| «обнаружение спуфинга с поддержкой часов» | монитор расхождения времени по одним часам (гауссова статистика, σ из СПМ часов), а НЕ многоспутниковый (SV: космический аппарат, то есть спутник) RAIM | многоспутниковый RAIM в области дальностей с уровнями защиты |
| P_md детектора спуфинга (замкнутая форма и Монте-Карло) | аналитическая оценка P_md на основе Φ и эмпирическая оценка по mc_runs испытаниям совпадают в пределах выборочной погрешности (≈ 1/√N); проверено в тестах src/spoof.rs / src/detection.rs при повышенном отклонении (μ/σ = 2) |
измеренная ROC детектора по записанным данным спуфинга |
модель псевдодальности gnss-sim |
прямое моделирование: ρ = geometric + clocks + Klobuchar iono + Saastamoinen·Niell tropo + noise + multipath. Каждая модель атмосферы проверена модульными тестами по значениям, подсчитанным вручную (ZHD (zenith hydrostatic delay, гидростатическая задержка в зените) ≈ 2,3 m, Niell = 1 в зените, наклонный фактор Клобушара), а полная вещательная модель Клобушара сверена с эталонной реализацией RTKLIB ionmodel() с точностью до долей миллиметра (klobuchar_agrees_with_rtklib_reference_implementation, 6,1278 m для случая коэффициентов RTKLIB по умолчанию — официального опубликованного тестового вектора Клобушара не существует, поэтому это паритет реализаций, а не измеренная истина); прогон без шума воспроизводит геометрию и поправки с точностью до долей миллиметра (невязка RAIM ≈ 0) |
решение по положению по реальным сигналам (PPP/RTK (PPP: precise point positioning, прецизионное абсолютное позиционирование)), двухчастотная комбинация без ионосферы или разрешение неоднозначностей фазы несущей — не моделируется |
модель подавления (вид jamming) |
цепочка бюджета линии: J/S из потерь в свободном пространстве и усиления антенны по направлениям → эффективное C/N₀ по уравнению помехозащищённости (выигрыш от сжатия спектра × коэффициент спектрального разделения Q) → срыв слежения на пороге (Kaplan & Hegarty §9,4) |
многолучевость, динамика АРУ (автоматической регулировки усиления) во времени, сам поиск при захвате (необязательный гистерезис [acquisition] — это пара порогов); необязательные потери квантования в [front_end] относятся к гауссову входу и неприменимы к CW-помехе; необязательная решётка [crpa] узкополосна и идеальна (без связи и рассогласования), а необязательное затенение [terrain] — это один «нож» на одном тайле SRTM; Q — репрезентативная постоянная для типа, а не выведенная из измеренной СПМ помехи |
| Показатель качества целостности (пакеты часов/holdover) | самосогласованность фильтра (доля отсчётов перерыва внутри собственной границы k·σ) | HPL/VPL, риск нарушения целостности / P_HMI, пределы тревоги, DO-229E/316/ED-259A — они сообщаются отдельно видом integrity (RAIM / ARAIM) и функциями SBAS и никогда не включаются в этот показатель |
показатель качества устаревшего пакета сценариев inertial |
одноосный (1-DOF) бюджет ошибок акселерометра/гироскопа (VRW/ARW, нестабильность смещения) со сбросом по истине | устаревший пакет 1-DOF; 3-осный путь поставляется в пакете gnss-ins (следующая строка) |
3-осная библиотека бесплатформенной инерциальной навигации + пакет gnss-ins (src/inertial/, src/fusion/pack.rs) |
проверенный навигатор на кватернионах/NED (NED: север-восток-вниз) с детерминированной моделью ошибок IMU — смоделированы масштабный коэффициент, неортогональность осей, g-чувствительность, квантование, линейный дрейф скорости (IEEE Std 952-1997 §A.2; Groves 2013 §4,3) — теперь управляется пакетом сценариев gnss-ins и настраивается для каждого датчика из TOML (Tom's Obvious Minimal Language, формат сценариев) ([imu_*.error_model]) |
не моделируется: ошибка выпрямления вибрации, дрейф от градиента температуры. Ошибка объединённого выбега ограничена снизу ошибкой начальной ориентации при передаче (наклон и смещение акселерометра разделяются слабо), поэтому калибровка по отдельным смещениям не заявляется |
«Гибридная интеграция PNT» (пакет hybrid) |
разомкнутое счисление пути, ограниченное сбросами GNSS по истине | связанное (слабо/тесно) калмановское смешение GNSS–INS — это отдельный пакет gnss-ins (EKF) и вид hybrid-ukf |
| «Характеристики позиционирования» (пакеты часов) | СКО времени по фазе часов в ns (timing_rms_ns) |
точность в области положения: СКО/CEP/SEP/взвешенная по DOP (SEP: сферическая вероятная ошибка) |
показатель качества инерциального положения (pos_rms_m) |
одноосные СКО/p95 положения в метрах по одному начальному значению (seed), если runs = N не запрашивает ансамбль (тогда среднее, разброс и бутстрэп-доверительный интервал 95% по каждой метрике) |
ансамблевое распределение CEP / 2DRMS (удвоенное СКО расстояния) (дорожная карта: CEP по Монте-Карло) |
| «проверено с точностью ~2%» | типичное наблюдаемое согласие; обязательный порог — 20–25% относительной ошибки | гарантированная граница точности 2% |
| «воспроизводимый / побитово идентичный» | побитово идентичный повторный прогон в той же ОС (операционной системе) с закреплённым набором инструментов; для Linux, macOS и Windows CI проверяет зафиксированный SHA-256 отпечатка входных данных и формы каждого результата (tests/cross_platform_golden.rs) и числовые значения с точностью 1e-6 (tests/golden.rs) |
побайтно идентичный полный результат в разных операционных системах (различия libm в последнем разряде) |
сценарий SGP4 для GPS (orbit-sgp4-gps.toml) |
подлинный снимок Celestrak gps-ops (2021-07-28, 30 спутников, строгие контрольные суммы), каждый спутник распространён от эпохи собственного TLE |
актуальная орбитальная группировка — обновите снимок с помощью scripts/fetch_tles.sh (см. REAL_TLE_GUIDE.md); каталожные номера NORAD (North American Aerospace Defense Command) настоящие |
Перекрёстные проверки по статьям о лунном PNT (регрессионные доказательства, не строки матрицы)#
Лунный/цислунный набор (возможности «Lunar & cislunar» и «Lunar PNT suite» в README) имеет утверждения из опубликованных статей, независимо перепроверенные в tests/validate_p*.rs, каждое по оракулу из другой реализации:
- орбитальный след передачи/захвата в сравнении с
scipy.special.j1(функция Бесселя J1 из Cephes); - геометрический DOP поверхностных маяков в сравнении с независимым решением NumPy
(HᵀH)⁻¹; - рост ошибки прогноза UT1/EOP по персистентности в сравнении с повторным разбором NumPy тех же дословных строк IERS
finals2000A; - плоское семейство дальних ретроградных орбит в сравнении с базой данных периодических орбит задачи трёх тел NASA/JPL;
- бюджет точности радиодальнометрии в сравнении с эталоном из первых принципов.
Фикстуры и скрипты генерации оракулов находятся в tests/fixtures/{p1_footprint,lunar_service,eop_prediction,rf_ranging_precision,dro_family_jpl,p2_independent_dop}/. Они усиливают доказательную базу возможностей, которые в машинно проверяемой матрице остаются MODELLED (src/verification.rs); это регрессионные проверки, а не новые строки VALIDATED в матрице, поэтому сами по себе они не меняют подсчёт строк машинно проверяемой матрицы. Этот подсчёт здесь не повторяется, потому что набранная вручную копия расходится с оригиналом: актуальное распределение указано в сформированном заголовке VERIFICATION-MATRIX.md, который gen_validation_artifacts записывает из verification_matrix() и который закрепляет tests/verification_artifacts_doc_sync.rs.