Модельные возможности — обоснование
Эти возможности реализованы на основе опубликованной или первопринципной физики и покрыты тестами, но честно помечены MODELLED — они не сверены с независимым внешним оракулом с заданным допуском. Инвариантные тесты матрицы гарантируют, что VALIDATED могут быть только строки, опирающиеся на ExternalDataset, поэтому ничто здесь не может быть тихо повышено. В каждой строке указано, почему она остаётся смоделированной.
| Требование | Возможность | Вид оракула | Почему остаётся модельной | Модуль | Тесты |
|---|---|---|---|---|---|
| Тень SRP с потемнением солнечного края (включается по выбору) | Освещённая доля SRP как неэкранированная доля солнечного потока с потемнением к краю (закон в приближении Эддингтона I(mu)/I(1) = 2/5 + 3/5 mu, квадратура Гаусса–Лежандра) над сферической Землёй или Землёй WGS-84 (srp_shadow::limb_darkened_shadow, вариант ShadowModel OblateEarthLimbDarkened) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего нет: в Orekit 12,2 нет коэффициента освещённости с потемнением к краю диска. Проверено только по замкнутым формам того же закона | srp_shadow | srp_shadow::tests (кольцеобразная замкнутая форма, равномерный закон, воспроизводящий коническую тень, пределы полного Солнца и полной тени) |
| Солнце и Луна по DE440 в силовой модели Cowell (включается по выбору) | Уровень эфемерид, включаемый по выбору, для членов третьего тела и SRP численной силовой модели Cowell ForceModel: геоцентрические Солнце и Луна из любого EphemerisProvider (ядро DE440 SPK через KernelEphemeris) при TDB = TT + (TDB - TT), с отказом от поставщика, не способного обслужить эпоху, и подсчётом любого возврата к аналитическому ряду; по умолчанию выключено | ExternalDataset | подутверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся модельной — Orekit 12,2 (Apache-2.0) NumericalPropagator/DormandPrince853 с ThirdBodyAttraction и SolarRadiationPressure на собственном читателе DE440 в Orekit (orekit-data lnxp1990.440), запущенный как отдельная программа; kshana читает побитно идентичный, проверенный по SPICE фрагмент NAIF de440s.bsp. Пороги заранее зарегистрированы в xval/propagator-de440-orekit/PREREGISTRATION.md (22a5a01d). Порог по орбите (0,5 м) и контрольная проба чувствительности выполнены, но порог по положению Солнца/Луны (3 м / 0,2 м) не выполнен: 6,39 м / 0,244 м. SPICE, читающий то же ядро в точный момент TDB, расходится с Orekit на ту же величину (6,25 м / 0,240 м), поэтому расхождение лежит между путём NAIF de440s и читателем DE440 или шкалой времени Orekit; причина не установлена. Зафиксировано и закреплено, поэтому строка остаётся на уровне MODELLED | propagator (ForceModel::with_ephemeris, ForceEphemeris), ephem_provider | tests/propagator_de440_orekit_oracle.rs (5 случаев x 25 почасовых состояний за 24 ч, LEO, GEO и HEO, третье тело и третье тело + SRP: наихудшее |dr| 0,0170 м, |dv| 1.84e-5 м/с; контроль по аналитическому ряду расходится на 9,96 м; Солнце 6,39 м и Луна 0,244 м относительно положений DE440 из Orekit — зафиксированный промах); модульные тесты propagator (отказ провайдера, подсчёт возвратов к запасному варианту, общий для клонов) |
| Атмосферный прилив S1 (включается по выбору) | Суточный прилив S1 атмосферного давления как возмущение геопотенциала: модель N1 Biancale и Bode (2006), степени от 2 до 6, по формуле нагрузки IERS 2010, ур. 6,21 (tides::atmospheric_tide_s1, s1_air_tide_acceleration), включается по выбору в силовых моделях Cowell и точных (air_tide_s1, по умолчанию выключено) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего нет для эффекта геопотенциала. 24 коэффициента переписаны из GFZ STR06/01, таблица 1, модель N1, и сверены построчно с отчётом (SHA-256 890865ae); степени 0, 1, 7 и 8 не используются. Ray и Ponte (2003) не публикуют таблицу сферических гармоник, поэтому со вторым источником сравнение не проводилось | tides, propagator, precise_od | tides::tests (член S1 суточный, поворачивается на 90 град за четверть суток и имеет амплитуду коэффициента нагрузки каждой строки; физическая величина на LEO); propagator::tests::the_s1_air_tide_flag_adds_exactly_the_s1_acceleration |
| Гравитация в сферических гармониках высокой степени (EGM2008 до 2190) | Вычисление полностью нормированного поля до степени 2190, устойчивое к потере значимости и к полюсам (SphericalHarmonicField::acceleration_hf / potential_hf, модифицированная прямая столбцовая рекурсия Holmes-Featherstone 2002 с градиентом, свободным от 1/cos phi), потоковый загрузчик ICGEM .gfc (from_gfc_file / from_gfc_reader; полное поле EGM2008 загружается во время работы, а не входит в поставку), а также вычислитель Holmes-Featherstone, выбираемый в опциональном геопотенциале Cowell | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Orekit 12,2 (Apache-2.0) HolmesFeatherstoneAttractionModel и pyshtools 4.14.1 (BSD-3-Clause) MakeGravGridPoint, запущенные как отдельные программы; пороги заранее зарегистрированы в xval/high-degree-gravity/PREREGISTRATION.md (276c869f) и xval/cowell-tesseral-200-orekit/PREREGISTRATION.md (0aa312a6). Orekit согласуется везде, где определён, но pyshtools не выполняет свой заранее зарегистрированный порог в двух точках вблизи полюса (до 7.3e-10 м/с^2; проверка в mpmath с 50 знаками относит ошибку на счёт pyshtools), точного значения оракула на полярной оси нет, а заранее зарегистрированная контрольная проба чувствительности на степени 70 для 24-часовой орбиты не выполнена (0,726 м при пороге > 1 м). Каждый промах зафиксирован, а не подогнан, поэтому строка остаётся на уровне MODELLED | gravity_sh, propagator (FieldEvaluator) | tests/gravity_sh_high_degree.rs (Orekit в 8 точках вне оси: макс. |da| 2.2e-17 м/с^2 при N = 70, выполняется всегда; 3.5e-17, 3.9e-17 и 7.3e-17 м/с^2 при N = 200, 360, 2190, зависит от наличия данных KSHANA_EGM2008_GFC); tests/cowell_tesseral_200_orekit_oracle.rs (24-часовая орбита 200x200, зависит от наличия данных: наихудшее |dr| 0,1317 м, |dv| 1.45e-4 м/с; контроль на степени 70 — 0,726 м); модульные тесты gravity_sh (согласие с классическим вычислителем до 1e-13 на степени 70, конечная разность и непрерывность на полюсе для поля степени 2190, исчезающе малый член степени 2190 против вычисления с расширенным порядком) |
| Пакетное определение орбиты по дальности, скорости изменения дальности и азимуту/углу места с маскированием станций | Восстановление состояния на эпоху по смешанным измерениям дальности, скорости изменения дальности и азимута/угла места выше маски по углу места методом Гаусса–Ньютона на H = (dh/dx(t)) Phi(t, t0): аналитические частные производные измерений и вариационная матрица перехода состояния с аналитическими производными двухтельной задачи и J2 (интегрируется методом RK4, это не STM в замкнутой форме) | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Orekit 12,2 (Apache-2.0) BatchLSEstimator с пользовательскими мгновенными геометрическими измерениями RangeRate и AzEl (перекрёстно проверенными по TopocentricFrame в Orekit), запущенный как отдельная программа на одинаковых маскированных наблюдениях с фиксированным начальным значением. Пороги заранее зарегистрированы в xval/od-measurements-orekit/PREREGISTRATION.md (0cf9076). Все пороги выполнены, кроме B4 — согласия бесшумного состояния в 1 см, — не выполненного в 2 из 4 сценариев (1,46, 1,74 см): собственная бесшумная оценка Orekit находится на таком расстоянии от его смоделированной истины (причина на стороне Orekit не установлена). Зафиксировано и закреплено, поэтому строка остаётся на уровне MODELLED. Не моделируется: время распространения света, аберрация, рефракция, вращение Земли, последовательный фильтр для этих типов измерений | orbit_determination (determine_orbit_batch_tracking, propagate_with_stm, is_visible), batch_ls (gauss_newton_analytic) | tests/od_tracking_measurements_reference.rs (8 сценариев: радиальная скорость, азимут/угол места и смешанные, LEO и MEO, бесшумные и с заданным начальным значением при сигме 5 м / 5 мм/с / 1e-4 рад, маски 5 и 10 град, против Orekit 12,2: множества видимости совпадают; значения измерений в пределах 5.84e-8 м, 6.30e-10 м/с, 1.44e-13 рад; STM в пределах 1.2e-14 относительно; зашумлённые состояния в пределах 1,74 см и 1.14e-5 м/с; СКО после подгонки по типам в пределах 2.7e-4 относительно; бесшумный kshana против истины 1.06e-8 м; бесшумный kshana против Orekit 1,464 и 1,740 см на двух сценариях — зафиксированный промах порога 1 см); модульные тесты orbit_determination и batch_ls |
| Взвешивание наблюдений по кодам точности SP3 | Сопоставление кодов точности SP3 (экспоненты в заголовке ++ в 2^n мм, база %f, стандартные отклонения base^n мм для каждой записи) со средними квадратическими погрешностями положения для каждого наблюдения в движке прецизионного определения орбиты (sp3::parse_sp3_accuracy, Sp3Accuracy::position_sigma_m) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего нет: веса — выбор моделирования (формат SP3 определяет код лишь как показатель точности от производителя; здесь он читается как односигменная погрешность по каждой оси). Существующие зафиксированные прогоны агентств не изменились | sp3, precise_od | модульные тесты src/sp3.rs; tests/agency_galileo.rs::galileo_e11_sp3_accuracy_weighted_fit (зафиксированный набор ESOC за 8 ч, сигма 0,032 м из показателя заголовка 5: СКО по 3D на уровне 1 0,132 м без изменений, на уровне 2 0,035 м против 0,070 м при сигме 1 м, причём изменение возникает из-за перебалансированного эмпирического априорного ограничения); tests/agency_swarm.rs (продукт Swarm не содержит кодов точности и переходит на запасной вариант, закреплено) |
| Подключение опубликованного гравитационного поля к телу | with_gravity_field (в Body, src/gravity_pds.rs): подключает любое загруженное поле сферических гармоник (например GMM-3 или GL0660B) к Body, чтобы пропагатор вычислял его в системе координат тела; опционально, тела по умолчанию не меняются | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Только внутренняя согласованность. Каждое опубликованное поле определено в связанной с телом системе координат своего производителя (GMM-3 — в системе Марса Konopliv et al. 2006, GL0660B — в лунной системе главных осей DE421), тогда как поле вычисляется в системе IAU; смещение не моделируется | gravity_pds, body, propagator, mars_frame | tests/planetary_gravity_pds.rs::a_shadr_field_attached_to_a_body_drives_the_propagator; gravity_pds::tests::with_gravity_field_is_opt_in |
| Кодировщики навигационных сообщений помимо GPS LNAV (GPS CNAV, Galileo I/NAV и F/NAV) | Сообщения GPS CNAV типов 10/11/30, слова Galileo I/NAV типов 1–5 в номинальных чётных/нечётных страницах и страницы Galileo F/NAV типов 1–4: упаковка и квантование полей по ICD, CRC-24Q, свёрточное кодирование со скоростью 1/2 и K=7 (G2 инвертирован для Galileo), блочное перемежение и синхропоследовательности, с парными тестовыми декодерами | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренний цикл кодирования-декодирования и известные ответы ICD; сторонний декодер не запускался (стенд RTKLIB/GNSS-SDR, читающий KSHANA_NAVMSG_ORACLE_JSON, зависит от наличия данных). MODELLED | gnss_navmsg (gps_cnav, gal_inav, gal_fnav, fec) | gnss_navmsg::tests (контрольное значение CRC-24Q 0xCDE703; импульсная характеристика свёрточного кода; Витерби исправляет внесённые ошибки; ширины полей); tests/gnss_navmsg_roundtrip.rs (начальные биты полей равны номерам битов в ICD; кодирование -> FEC -> перемежение -> Витерби -> декодирование возвращает исходное в пределах половины младшего разряда); tests/gnss_navmsg_galileo_brdc_grid.rs (записи Galileo IGS BRDC 2018-133 на сетке младшего разряда, наихудшее 3.6e-3 младшего разряда; заранее зарегистрированный порог по числу спутников не выполнен, 15 из 20, FINDING) |
| Сглаживание кода по несущей по методу Hatch на реальных наблюдениях RINEX | Фильтр Hatch без расходимости (безионосферный код, сглаживаемый безионосферной несущей, окно N эпох, перезапуск при потере захвата, скачке геометрически-независимой комбинации или пропуске) в сборке прецизионного одиночного определения положения (PPP) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — FINDING относительно опубликованной координаты ITRF2020 WTZR: заранее зарегистрированные пороги (сглаженные медиана и p95 не более 0,6 x исходных; tests/fixtures/gnss_wettzell_2025055/PREREGISTRATION_HATCH.md) не выполнены, отношения 0,718 и 0,923; остаточная ошибка уровня метров носит характер смещения (смещение кода C1C, антенна, приливы, долгопериодная многолучевость), а не белого шума, который удаляет сглаживание. MODELLED: статистика фильтра проверена внутренне | hatch (HatchFilter), pvt (assemble_epoch_precise_smoothed, CarrierSmoother) | hatch::tests (сквозной проход без шума; дисперсия белого шума 1/(2N-1); перезапуски); tests/hatch_wettzell_oracle.rs::hatch_finding_is_pinned (WTZR 2025-02-24 01-06 ч, 600 эпох, N = 100: медианная 3D-ошибка 1,553 -> 1,116 м, p95 3,473 -> 3,207 м) |
| Чтение файлов наблюдений RINEX 4 | Заголовки наблюдений RINEX 4.0x (DOI, LICENSE OF USE, STATION INFORMATION, MERGED FILE; метки сопоставляются в столбцах 61–80 для версии 4 и выше) и записи эпох | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Соответствие формату на реальном опубликованном файле RINEX 4,00 (считанные значения равны напечатанным в файле литералам) и на заголовке, построенном по спецификации; независимый читатель не запускался, поэтому MODELLED | rinex_obs (parse_obs) | tests/rinex4_obs_mao0.rs (первые 4 эпохи файла IGS MGEX RINEX 4,00 MAO000USA_R_20231980000_01D_30S_MO, 58 спутников, 7 систем: записи заголовка и значения первой эпохи равны опубликованным литералам); rinex_obs::tests::parses_a_rinex_4_header_with_its_new_records (синтетический заголовок 4,02 по спецификации) |
| Положение геостационарного спутника BeiDou по бортовым эфемеридам | BDS-SIS-ICD-B1I v3.0 §5.2.4.12: положение геостационарного спутника по бортовым эфемеридам (квазиинерциальная система, затем Rz(Ω̇e·tk)·Rx(−5°)), включается опционально через поле include_beidou_geo в NavParseOptions, поэтому читатель по умолчанию по-прежнему пропускает GEO | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Предварительно зарегистрировано (7aa264b, 110fef9) относительно точной орбиты IGS MGEX с GEO; такой продукт был недоступен из сеанса, в котором это строилось, поэтому сравнение отложено, а строка относится к уровню MODELLED (сверено только с опубликованными номинальными слотами GEO) | rinex (RinexEphemeris::sv_position_ecef_bds_geo, NavParseOptions) | tests/bds_geo_broadcast_oracle.rs (реальные записи C01-C04: геостационарный радиус, долготы 140.02/80.04/110.55/159.99 град в опубликованных слотах, |широта| 2,13 град с учётом наклона против 6,65 без него; заранее зарегистрированное сравнение широковещательных данных с точным SP3 зависит от наличия данных KSHANA_BDS_GEO_SP3 и не запускалось); rinex::tests |
| Тесно связанная комплексная система GNSS/INS по фазе несущей с плавающими неоднозначностями | Фильтр Калмана в пространстве ошибок по 15 состояниям INS, двухкомпонентным часам приёмника и одной плавающей неоднозначности несущей на каждый отслеживаемый спутник; псевдодальность, фаза несущей и опционально скорость изменения дальности от орбитальной группировки Walker на SGP4 (время распространения света и эффект Саньяка), поправки Klobuchar и Saastamoinen/Niell, применяемые в контуре в собственном положении фильтра; обнаружение срывов по разности несущей во времени с порогом для каждого спутника, расширяемым на неопределённость скорости; повторная инициализация неоднозначностей при срывах и при повторном захвате | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: измерения синтезируются из моделей, которые использует фильтр (χ² NEES/NIS по начальным значениям, сходимость без шума, внесение срыва). MODELLED; реальные данные приёмника и сторонний фильтр не сравниваются | fusion::carrier_tc (run_carrier_tc, CarrierTcCfg), fusion::trajectory (truth_epochs) | tests/fusion_carrier_tc.rs (движение по траектории «фигура 8»: установившееся СКО по 3D 0,025 м по несущей против 0,470 м по коду на одинаковых измерениях; 12 начальных значений, среднее NIS/dof 1,00 и установившееся NEES/dof 0,92; срыв на 1 цикл обнаружен в своей эпохе без ложных тревог, решение осталось целым; отключение широковещательных поправок повышает ошибку по коду с 0,51 м до 19,6 м (ионосфера) и 8,0 м (тропосфера); прогон без шума сходится к 0,3 мм) |
| Морские, железнодорожные и авиационные пакеты GNSS/INS с возможностью тесной связи | Три сценария gnss-ins на библиотеке траекторий (судно, идущее зигзагом со скоростью 8 м/с, с пятиминутным перерывом; поезд, проходящий через выемку с двумя видимыми спутниками и туннель; самолёт, у которого перерыв охватывает разворот с креном 25 градусов) и необязательная таблица [tight] пакета: псевдодальности от орбитальной группировки Walker на SGP4, объединяемые замкнутым навигатором, при этом в номинальном режиме используются все спутники выше маски, а в ухудшенном — несколько самых высоких | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутреннее: показатели качества каждого пакета относительно его собственной истины и сравнение слабой и тесной связи на одинаковых входных данных. MODELLED; сравнение аудита с NaveGo не запускалось | fusion::pack (TightCfg, [tight]), сценарии gnss-ins-maritime / gnss-ins-rail / gnss-ins-aviation | tests/gnss_ins_packs.rs (каждый пакет: слитое решение лучше свободной INS на интервале пропадания для обоих датчиков; железная дорога: тесная связь 5,3 м против слабой 12,9 м для навигационного класса и 15,6 м против 18,8 м для тактического на интервале пропадания, доступность 0,97 против 0,95; таблица тесной связи проверена); tests/gnss_ins_legacy_trajectory_pin.rs (слабосвязанный режим по умолчанию побитно идентичен) |
| Связанный фильтр PNT по псевдодальностям с состоянием смещения и 3D-расширением в пакете fusion | Один сводный фильтр Калмана по положению, скорости, фазе и частоте часов, получающий псевдодальности, которые связывают положение и часы (обновления в форме Джозефа с учётом взаимной ковариации); вариант 1-DOF, дополненный состоянием постоянного смещения акселерометра, который пакет fusion запускает в режиме [coupled]; и 3D-версия с 8 состояниями со строками линии визирования | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: истина смоделирована по собственным моделям фильтров (χ² NEES по начальным значениям Монте-Карло, разделённый пакет на одинаковых датчиках). MODELLED | fusion::coupled (CoupledPntFilter, CoupledPntBiasFilter, CoupledPnt3d), fusion (run_coupled_suite), hybrid (CoupledCfg) | tests/fusion_coupled_filters.rs (3D-фильтр на 60 начальных значениях: среднее NEES второй половины 8,12 для 8 состояний, сумма χ² последней эпохи внутри своей 95 %-й полосы; поправка часов в 0,1 нс снижает сигму 3D-положения с 5,58 м до 3,07 м; фильтр смещения на 60 начальных значениях: сумма χ²(5) в полосе, смещение в пределах 3 сигм в 59 из 60; fusion-pnt-coupled со смещёнными акселерометрами: p95 положения 18,7 м / 90,0 м и целостность 1,00 / 0,97 в связанном режиме против 430 м / 4060 м и 0,006 / 0,000 в разделённом); fusion::coupled::tests; tests/fusion_coupled_pack.rs (fusion и hybrid без [coupled] побитно идентичны) |
| Библиотека траекторий GNSS/INS и импорт истинных данных из CSV | Выбираемые профили движения для пакета gnss-ins (прямая, фигура 8, городское движение с остановками, набор высоты самолётом и координированный разворот, съёмочный дрон), заданные командами скоростей Эйлера и ускорения вдоль трека, замкнутыми на истинное состояние с кинематическим IMU (центростремительная, гравитационная и кориолисова составляющие), и импортированная из CSV истинная траектория, превращённая в IMU, который её воспроизводит; прежний дрейф-прогон без изменений, если профиль не задан | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутреннее: тождества кинематики твёрдого тела, цикл записи-чтения CSV и собственная ковариация фильтра. MODELLED (с реальным журналом поездки сравнения нет) | fusion::trajectory (TrajectoryCfg, Trajectory, kinematic_imu, parse_truth_csv), fusion::pack ([trajectory]) | fusion::trajectory::tests (координированный разворот не даёт боковой силы, коэффициент нагрузки 1/cos φ; импорт CSV воспроизводит пролетённый профиль с точностью 1e-3 м/с и 1 м); tests/gnss_ins_trajectory_library.rs (каждый профиль запускается, и слияние лучше свободной INS на интервале пропадания; каждый воспроизводит своё названное движение; наблюдаемость курса: сигма рыскания после 240 с — 1,27 град при прямолинейном крейсерском полёте против 0,039 град при фигуре 8 и 0,062 град при движении с остановками); tests/gnss_ins_legacy_trajectory_pin.rs (прежний результат и хэши истины побитно идентичны) |
| Земля–Луна, CR3BP, NRHO 9:2 относительно орбиты, по которой летел CAPSTONE | Круговая ограниченная NRHO (околопрямолинейная гало-орбита) 9:2 у L2, южная, которую исправляет cr3bp::differential_correct_halo (семейство орбит Gateway и CAPSTONE), сравнивается по средней геометрии (период, радиус перилуния, радиус аполуния) с орбитой, по которой CAPSTONE фактически летел. Измерение того, насколько хорошо член CR3BP описывает реальную орбиту; орбита CR3BP не является орбитой эфемеридной модели и не сравнивается эпоха за эпохой | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Измерено относительно восстановленной эфемериды CAPSTONE из JPL Horizons (NAIF -1176, CAPSTONE_merged, ICRF с центром в Луне, 2023-03-01..31 с шагом 10 мин), зафиксированной байт в байт (tests/fixtures/capstone_horizons/, NOTICE.md), предварительно зарегистрированной 4e868170 до её получения, как измерение с порогами по средней геометрии. Это не валидация: CR3BP не учитывает Солнце, эксцентриситет Луны и поддержание орбиты, которое выполнял CAPSTONE, поэтому пороги описывают, насколько репрезентативна модельная орбита, а не точность. Результаты: docs/design/evidence/cap29d-capstone-nrho/RESULTS.md | cr3bp (differential_correct_halo, PeriodicOrbit) | tests/capstone_nrho_horizons.rs::cr3bp_nrho_matches_capstone_mean_geometry (CAPSTONE, март 2023, 4 перилуны и 5 аполун: период 6,5004 сут против 6,5699 сут (1,07 %, порог 3 %), аполуна 71 182 против 71 215 км (0,05 %, порог 5 %), перилуна 3 385 против 3 245 км (4,1 %, порог 20 %)); cr3bp::tests::reproduces_l2_southern_nrho_92_regime |
| Ошибка положения из геометрии: СКО ошибки = sigma_UERE x DOP для решения движка по методу наименьших квадратов | dop_error_mc::run_geometry и check: Монте-Карло с фиксированным начальным значением (N = 20 000 эпох на геометрию, sigma = 1,5 м, ChaCha8 seed 36 + i) собственного итерационного решения движка по методу наименьших квадратов (pvt::solve_spp, единичные веса, решается от истинного положения) на 8 геометриях из tests/fixtures/dop/dop_reference.csv, с сравнением дисперсий ошибок по востоку, северу, высоте и часам, СКО H/V/P, корреляции восток–север, средних ошибок и доли внутри 95 %-го горизонтального эллипса с sigma^2 Q, где Q — множитель ковариации ядра orbit::dop (orbit::dop_cofactor, та же арифметика) на той же геометрии | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность с замкнутой формой: при линейной гауссовой модели ковариация метода наименьших квадратов равна sigma^2 (H^T H)^-1 (Kaplan and Hegarty (eds.), Understanding GPS: Principles and Applications, 2nd ed., Artech House, 2006, ch. 7). Метод и допуски раздела 5,2 примечания к проекту по геометрии 0,36 зафиксированы в коммите предварительной регистрации до первого прогона: каждая дисперсия в пределах 5 % (5 стандартных ошибок выборочной дисперсии при N = 20 000), каждое СКО в пределах 2,5 %, корреляция восток-север в пределах 0,035 (5/sqrt(N)), каждое среднее в пределах 5 стандартных ошибок, доля 95 %-го эллипса в пределах 0,95 +/- 0,0077 (5 биномиальных стандартных ошибок); отрицательные контроли (удвоенный PDOP; ошибки, растущие как 1/sin(угол места), против невзвешенной Q) должны не пройти. КАК ЭТО СОСТАВЛЯЕТСЯ: Q — множитель ковариации ядра orbit::dop, VALIDATED относительно gnss_lib_py 1.0.4 на этих же 8 геометриях в tests/dop_reference.rs (строка «GNSS geometry / dilution of precision»); эта строка добавляет шаг от этих множителей к метрам через решатель движка и не заимствует статус той строки. ПОЧЕМУ MODELLED: внешний набор данных не задействован; согласие показывает, что оценщик и шум реализуют sigma x DOP по учебниковой модели, а не то, что ошибка какого-либо приёмника равна UERE x DOP, причём sigma_UERE является входным параметром | dop_error_mc (run_geometry, check, TOLERANCES); dop_error_ci (run, GEOMETRIES); orbit (dop, dop_cofactor); pvt (solve_spp) | tests/uere_dop_monte_carlo.rs (position_error_is_sigma_times_dop_on_the_gnss_lib_py_geometries: все 104 проверки пройдены при первом прогоне после предварительной регистрации e50c88d2, наихудшая дисперсия 3,2 %, СКО 1,6 %, корреляция 0,012, среднее 2,2 стандартной ошибки, доля эллипса 0,0039; negative_control_a_doubled_pdop_fails_every_geometry; negative_control_elevation_dependent_errors_fail_the_low_elevation_geometries: оба контроля не проходят, как и требуется; position_error_is_sigma_times_dop_on_masked_skies: две геометрии с маскированным горизонтом из примечания к проекту, небо 10sat-mixed под пресетами городской улицы (4 спутника, PDOP 16,6) и контейнерного терминала (9 спутников, PDOP 2,5), все 26 проверок пройдены при первом прогоне после предварительной регистрации 03999c11, tests/fixtures/dop/PREREGISTRATION-MASKED.md); tests/position_error_dop_ci.rs (первая, отдельная проверка на четырёх выбранных вручную небесах (открытое, сгруппированное, каньон, полнеба; сигма 1 м, начальное значение 0x0D0B5EED) с доверительными интервалами хи-квадрат при суммарном уровне 1e-6 на 20 проверок: отношения от 0,987 до 1,009, собственные PDOP/GDOP решателя равны значениям ядра с точностью 2.5e-12, и отрицательные контроли для ошибки DOP в 10 % и ошибок вида 1/sin(угол места); выполнено до предварительной регистрации, поэтому приведено как результат, а не как предварительно зарегистрированное); dop_error_mc::tests; dop_error_ci::tests |
| Классификация доверия с учётом геометрии: геометрия спутников рядом с оценкой доверия к приёмнику и класс для каждого вычета | receiver_trust::geometry: геометрия спутников для каждой эпохи (хорошая, ухудшенная с причинами few-satellites/high-pdop/high-hdop/sky-blocked или неизвестная, когда журнал не содержит GSV, NAV-SAT или GSA), выведенная из сообщённых углов места и азимутов через orbit::dop или взятая из GSA, с меткой, которая всегда сообщается и никогда не оценивается (good, fair, poor, unknown), и словесным описанием HDOP, PDOP, VDOP, числа спутников и потери сигнала; монитор геометрии в оценке судна, который ничего не вычитает, пока геометрия не станет плохой (отношение max(hdop/4, pdop/6, 5/n_used) выше 1), затем линейно нарастает до предела в 15 баллов при 1,5, и одна геометрия не может опустить оценку ниже ухудшенной полосы (предел, конец нарастания и нижняя граница в [geometry]; без тревоги); класс для каждого вычета (geometry, environment, inconsistency): потеря захвата у спутников ниже 15 град относится к классу geometry, спутники в зоне видимости, но не отслеживаемые, — к классу environment, а вычет за плохую геометрию, у которого заявленный HDOP выходит за пределы max(1,0, 25 % от выведенного HDOP) относительно заявленного неба, — к классу inconsistency | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: классификация проверена по сформулированным ею правилам и по выведенным вручную отношениям на синтетических правках зафиксированного демонстрационного журнала, а закрепления «без изменений» сохраняют результаты 0.35.0: оценки не меняются, если только геометрия не плохая; метка сообщается всегда. ПОЧЕМУ MODELLED: пороги выбраны, а не подогнаны (происхождение — в geometry_model каждого прогона; показатели IEC 61108-1 и GPS SPS приведены как цитируемые, их предстоит сверить с текстом стандартов), и нет внешнего размеченного набора данных о естественном ухудшении геометрии в сравнении с атаками, по которому можно было бы валидировать классификацию. Производный DOP использует ядро orbit::dop, VALIDATED относительно gnss_lib_py, чей статус эта строка не заимствует. Класс геометрии — это утверждение о небе, а не вывод о том, что атаки не было | receiver_trust (geometry: GeometryTracker, geometry_ratio, sky_ratio, geometry_points, GeometryLabel; score: DeductionClass, score_with; monitors; live); telemetry (sample, prometheus, syslog, otlp) | tests/natural_degradation_trust.rs (a_stated_skyline_reads_the_fjord_as_geometry: на синтетическом проходе по фьорду из scenarios/training/fjord-natural-degradation.toml одни и те же 624 эпохи вычитаются с заданным [skyline] и без него; с ним sky-blocked сообщается на 680 эпохах (0 без него: запасной вариант по разрыву азимута ничего не видит в двустороннем фьорде), open_fraction равна 0,758, а эпохи класса окружения сокращаются с 78 до 33, остальное — потери спутников, которых заданный горизонт оставляет на открытом месте; вне события горизонт не меняет ни одной оценки); receiver_trust::geometry::tests (выведенные вручную отношения на порогах, границы порогов, нарастание и ограничение, нижний предел, границы меток, переопределения [geometry], DOP на проверенном ядре, удерживаемые и устаревшие небеса, неизвестное не угадывается, потеря сигнала, допуск на плохую геометрию, сигнальные значения отсутствия решения); tests/geometry_trust.rs (приемлемое маскированное небо помечено и не оценивается, плохое маскированное небо, потеря на малом угле места, падение мощности, подделанный HDOP, полная потеря сигнала, увод во время плохой геометрии, неизвестная геометрия, переопределения сеанса, схема live); tests/geometry_trust_no_change.rs (обе примерные сессии побитно идентичны 0.35.0 после удаления добавленных ключей); tests/geometry_corpus_identity.rs (каждый зафиксированный корпус NMEA судов, в том числе как открытое небо только GPS, и сценарии тренировки экипажа: побитно идентичны 0.35.0, кроме плохих эпох, которые отличаются только вычетом за геометрию) |
| Сокращение городского каньона, секторов и рельефа до таблицы | skyline: городской каньон в замкнутой форме (срез atan((h - a) / d) при d = (w/2) / abs(sin(az - s)), открытые концы для конечной длины), секторы с резкими краями по часовой стрелке с замыканием и точки рельефа, сведённые к таблице с падением из-за кривизны d^2/(2 * 4/3 R); линия горизонта — их поточечный максимум с любой таблицей | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутреннее: замкнутые формы сверены со значениями, посчитанными вручную (углы возвышения верхов стен заданной улицы, условие открытого конца, падение из-за кривизны для заданной точки). Внешнего оракула нет: примечание к проекту относит эти сокращения к уровню MODELLED, а ElevationMask в Orekit принимает таблицу, поэтому сравнение в строке «Azimuth-dependent skyline mask: visible set, azimuth and elevation, and DOP under the mask» читает их таблицы по 360 точек как входные данные и не проверяет их | skyline (Canyon::cut_deg, Sector::contains, TerrainPoint::elevation_deg, reduce_terrain, SkylineCfg::build) | skyline::tests (canyon_matches_hand_computed_wall_elevations; terrain_takes_the_curvature_drop; sectors_have_sharp_edges_and_wrap; a_preset_is_overridden_or_added_to_field_by_field; malformed_sections_are_refused) |
| Предустановки линии горизонта (городская улица, подход к гавани, фьорд, контейнерный терминал) | skyline::PRESETS: четыре REPRESENTATIVE геометрии с размерами, указанными в проектной записке, и строкой происхождения у каждой: city-street (каньон, улица 0 град, 20 м между стенами в 30 м, антенна 1,5 м), harbour-approach (секторы: открыто в сторону моря на 180 град, здания набережной 8 град на 90 град, волнолом 3 град), fjord (рельеф: стены на 600 м выше антенны на расстоянии 1,5 км по обе стороны канала север–юг, с учётом падения из-за кривизны), container-terminal (секторы: штабели 12 град над половиной со стороны суши, стрелы кранов 35 град и 25 град над двумя узкими секторами); переопределяются по полям | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Нет: выбранные и заявленные размеры, а не съёмка какой-либо улицы, порта, фьорда или терминала (отношение сторон улицы лежит в пределах диапазона 0.5-2 по Oke (1988); фьорд порядка западнонорвежских фьордов; штабели используют высоту контейнера high-cube по ISO 668). Тест сверяет пресеты с их собственными заявленными размерами; это проверка переписывания, которую правило валидации не засчитывает | skyline (PRESETS, preset, preset_list) | skyline::tests (presets_carry_the_note_dimensions_and_provenance) |
| Функции геометрии неба: видимость, DOP, ковариация, эллипс ошибок, облако Монте-Карло | geometry (sky_geometry, sky_monte_carlo, skyline_presets, skyline_profile, skyplot_svg; CLI kshana sky и kshana skyline, функции Python и WASM с теми же именами, MCP sky_geometry): по точке, времени и предустановкам орбитальной группировки (или по спутникам в виде азимута/угла места либо ECEF) — видимые и замаскированные линией горизонта спутники, GDOP/PDOP/HDOP/VDOP/TDOP, кофактор единичной дисперсии (H^T H)^-1 и ковариация в системе восток–север–вверх с одними часами приёмника на каждую систему или одними общими, горизонтальный эллипс ошибок (полуоси k sigma sqrt(lambda), k = sqrt(-2 ln(1 - p)), ориентация 0,5 atan2(2 Q_EN, Q_NN - Q_EE) от севера), а также n ошибок метода наименьших квадратов с фиксированным начальным значением при независимых гауссовых ошибках дальности с их эмпирической ковариацией, СКО и 95 %-м охватом. Кофактор — это orbit::cofactor_from_los, единственное ядро, лежащее в основе orbit::dop и orbit::dop_cov (dop — редукция dop_cov): второй реализации DOP нет |
ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Факторы DOP для одних часов опираются на ядро, проверенное относительно gnss_lib_py 1.0.4 (строка «GNSS geometry / dilution of precision (DOP)»); собственные проверки этой строки внутренние: sky_geometry воспроизводит orbit::dop и dop_cov на той же геометрии, эллипс воспроизводит аналитическое разложение 2x2 по собственным значениям, входные данные в ECEF и в азимуте/угле места согласуются, а СКО и 95 %-е вмещение сгенерированного облака согласуются с геометрией. Ковариация ENU с одними часами на систему и эллипс получили VALIDATED в строке «Horizontal error ellipse and per-system cofactor from the geometry covariance» (numpy, P2); здесь на уровне MODELLED остаётся композиция: распространение пресетов до репрезентативного неба, облако Монте-Карло (сверено с геометрией, из которой оно строится, — проверка самосогласованности) и представления. Пресеты орбитальной группировки дают репрезентативное небо, а не датированное; гауссова модель ошибок и UERE — заданные входные данные, а не измеренная точность и не граница целостности | geometry; orbit (cofactor_from_los, dop_cov, dop); surface (sky_geometry, sky_monte_carlo, skyline_presets, skyline_profile, skyplot_svg) | geometry::tests (ellipse_of_an_analytic_two_by_two_case; sky_geometry_equals_orbit_dop_on_the_same_visible_set; ecef_input_matches_azimuth_elevation_input; one_clock_per_system_adds_a_state_and_costs_geometry; monte_carlo_is_seeded_and_agrees_with_the_geometry; presets_propagate_and_are_seen_from_a_site); tests/dop_reference.rs (ядро для одних часов против gnss_lib_py) |
| Holdover часов без ГНСС | Рост ошибки выбега в замкнутой форме + holdover до порога; классы квантовых часов | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Многошаговая рекурсия ковариации clock_state (перекрёстная проверка внутри кодовой базы); лежащее в основе ядро дисперсии выбега и инверсии holdover проверено извне относительно scipy (см. «Clock-holdover coast-variance & threshold inversion»). Показатели holdover по классам при красном шуме на нижнем пределе остаются на уровне MODELLED | holdover | holdover::tests (против многошаговой рекурсии ковариации фильтра Калмана; белый FM точно; круговой проход); ядро дисперсии выбега проверено извне в tests/gnss_denied_clock_holdover_reference.rs (против scipy Van-Loan/brentq) |
| Карточки измеренных устройств-часов (предсказание на отложенных данных) | clock_library: карточка устройства (белый фазовый шум, белый, фликкер и случайное блуждание ЧМ плюс линейный дрейф частоты), подогнанная к одной трети именованной измеренной записи часов после записанного в журнал прохода подготовки (удалены пропуски, выбросы фазы, скачки фазы, всплески; скачки частоты записаны в журнал), с весами по степеням свободы типов шума, определённым по лагу 1, и её предсказанная девиация Аллана, оцениваемая на отложенных двух третях; читатели файлов часов RINEX и IGS, файлов BIPM по лабораториям и раздела Circular T 1; преобразование карточки в модель шума временных слотов, расширенную модель часов для фильтра Калмана и уровни шума монитора спуфинга | ExternalDataset | подутверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся модельной — Измеренные записи, отложенные: итоговые комбинированные часы IGS с шагом 30 с для 11 спутников GPS Block IIF за период с 2026-03-01 по 14 (окно, которое ни один тест не открывал; IGS, открыто с указанием авторства) и приёмник u-blox ZED-F9P в проекте JammerTest 2024 в его неоцениваемых неподвижных сеансах (GPL-3.0-or-later). Внешнее сравнение D9 (предварительно зарегистрировано 2ec76864, предсказанная / измеренная девиация Аллана каждой карточки в пределах [1/1.5, 1,5] на её подогнанных временах усреднения), вывод (остаётся на уровне MODELLED): 10 из 11 карточек GPS IIF укладываются в порог; G27 оптимистична на двухчасовом масштабе (0,662 при 7680 с, наихудший коэффициент 1,510) — периодическая ошибка часового масштаба, которую степенная карточка не несёт. Карточка TCXO приёмника заблокирована: вне записанных передач остальные сеансы набора данных оставляют 167 эпох при требуемых 3600. Сообщено, но не вслепую (записи открыты предыдущими строками): карточка цезиевых часов 5071A укладывается в порог (наихудшее 1,070 до 4096 с), карточка OCXO консервативна и выходит за него (2,348 при 128 с; её уровень шума меняется в течение записи), а карточка стронциевых часов в Norcia, подогнанная по трём самым коротким опубликованным точкам, укладывается в него в двух оцениваемых точках (1,291, 1,405). Пассивные водородные мазеры Galileo (нет доступного без регистрации источника итоговых часов Galileo) и Deep Space Atomic Clock (одно открытое значение в космосе) заблокированы. D9, раунд 2, TCXO приёмника ZED-F9P как класс моделей на 14 сутках 12 статических станций во Вроцлаве (Zenodo 6488497, CC BY 4,0; предварительно зарегистрировано fb475550), вывод: по зарегистрированному конвейеру 11 из 12 станций не поддавались оценке (RAIM отклонял большинство эпох без ионосферы) и BX14 не прошла; раскрытый повторный прогон с исправленным конвейером (предварительно зарегистрировано c9cc0d49) проходит на 1 из 11 станций вслепую (BX12, 1,412; BX07 1,532 и BX13 1,542 лишь чуть за пределами), потому что часы приёмника по одной точке из прерывистых файлов с шагом 30 с — это не чистая запись генератора | clock_library (card, condition, series), realdata::clk, allan (lag1_noise_id) | tests/clock_library_device_cards_oracle.rs (gps_iif_cards_reproduce_the_recorded_finding; receiver_training_is_blocked_by_the_epoch_minimum; non_blind_cards_are_reported; предварительно зарегистрировано 2ec76864); clock_library::card::tests; clock_library::condition::tests; clock_library::series::tests; realdata::clk::tests; tests/clock_library_f9p_cards_oracle.rs (f9p_first_pipeline_reproduces_the_recorded_finding; f9p_corrected_pipeline_reproduces_the_recorded_finding; зависит от наличия данных) |
| Карточки измеренных часов GPS Block IIF с членами на виток (предсказание на отложенных данных) | clock_library::card::DeviceCard::fit_phase_periodic: карточка устройства, несущая фазовые члены от одного до четырёх на виток (период T/k, T = 43 082,05 с), подогнанные совместно с квадратичным методом наименьших квадратов по одной трети измеренной записи часов спутника, с замкнутым вкладом каждого члена в девиацию Аллана 4 A^2 sin^4(pi tau / P) / tau^2 в предсказанной девиации Аллана | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Измеренные записи, отложенные: итоговые комбинированные часы IGS с шагом 30 с для 11 спутников GPS Block IIF за период с 2026-04-01 по 14 (окно, которое ни один тест не открывал; IGS, открыто с указанием авторства). Внешнее сравнение D9 (предварительно зарегистрировано fb475550, предсказанная / измеренная девиация Аллана в пределах [1/1.5, 1,5] на каждом подогнанном времени усреднения на каждом спутнике), вывод (остаётся на уровне MODELLED): 9 из 11 карточек укладываются в порог; G03 (1,947) и G25 (1,581) оптимистичны между 60 с и 2000 с, потому что их отложенные записи шумнее подгоночных третей (в отложенной части G25 есть 16 пропусков и 29 выбросов фазы) — это изменение самих часов, а не отсутствующий периодический член. Исключение периодических членов из предсказания приводит к провалу всех 11 карточек (от 1,77 до 4,96), так что именно эти члены несут предсказание | clock_library (card) | tests/clock_library_periodic_cards_oracle.rs (periodic_cards_reproduce_the_recorded_finding; предварительно зарегистрировано fb475550); clock_library::card::tests (a_periodic_card_carries_the_sinusoid_a_power_law_card_cannot) |
| Оценивание состояния бортовых часов | Часы Калмана с 3 состояниями (фаза/частота/дрейф) по Ван Лоану, стабилизированные по Джозефу | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — filterpy 1.4.5 KalmanFilter (R. Labbe, MIT), с F через scipy.linalg.expm и Q через блочную матрицу Van-Loan 1978 — независимая эталонная реализация, воспроизводящая всю траекторию фильтра kshana. Согласованность между реализациями: физика часов и калибровка девиации Аллана не проверены извне, поэтому уровень остаётся MODELLED. Внешнее сравнение 0,30, вывод (остаётся на уровне MODELLED): на итоговых часах IGS с шагом 30 с для 11 спутников GPS Block IIF (с 2025-08-17 по 30), с Q, подогнанной по ADEV первой половины, и оценкой фильтра на отложенной второй половине фильтр согласован на один шаг вперёд (0,906 – 0,971 эпох внутри его 95 %-й полосы, порог 90 %), но чрезмерно уверен на горизонте одного часа на 9 из 11 часов (0,486 – 0,829), а суммы его инноваций выходят за [2,4, 3,6] на 5. Подогнанный шум белой фазы равен нулю на каждом спутнике, а ошибка часового масштаба (периодические члены, фликкер-FM) не входит в 3-мерную модель состояния. Внешнее сравнение 0,30, раунд 2, расширенный фильтр (фликкер-FM и состояния с частотой один и два раза за оборот) на новых отложенных часах IGS за период с 2025-09-01 по 14 (предварительно зарегистрировано 4b1a841e), вывод (остаётся на уровне MODELLED): критерии согласованности на один шаг и на один час выполняются на всех 11 спутниках (0,948 – 0,988 и 0,907 – 0,996), но критерий суммы инноваций не выполняется на G24 (0,964) и G30 (1,929) относительно [2,4, 3,6]. D9, раунд 3, расширенный фильтр раунда 2, настройка и критерии без изменений после замороженного детектора условий clock_library, на новых часах IGS за период с 2026-04-01 по 14 (предварительно зарегистрировано fb475550), вывод (остаётся на уровне MODELLED): (a) один шаг 0,941 – 0,968 и (c) среднее тройного NIS 2,641 – 3,549 выполняются на всех 11 спутниках; (b) один час не выполняется на G09 (0,894) и G26 (0,876) относительно 0,90 | clock_state | clock_state::tests (аналитическая Q по Van-Loan; NEES; положительность PSD); tests/clock_state_reference.rs (полная траектория предсказания и обновления — состояние x и ковариация P 3×3 на 1925 шагах / 4 наборах параметров против filterpy 1.4.5; наихудшее |relΔ| 2.8e-14); tests/clock_state_igs_holdout_oracle.rs::three_state_filter_on_held_out_igs_clocks_finding (закрепляет вывод); tests/clock_state_ext_igs_fresh_oracle.rs::extended_filter_on_fresh_igs_clocks_finding; tests/clock_state_ext_igs_conditioned_oracle.rs::conditioned_extended_filter_finding (D9, раунд 3) |
| Бюджет ошибок передачи времени | Двусторонняя передача/TWSTFT (Саньяк), общий вид GNSS, PPP; дрожание линии→дальность | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Величина эффекта Саньяка сверена с авторитетным ОПУБЛИКОВАННЫМ ЗНАЧЕНИЕМ — N. Ashby, 'Relativity in the GPS', Living Reviews in Relativity 6:1 (2003), ур. 1,29: кругосветный облёт по экватору в восточном направлении накапливает 207,4 нс (2ωA_E/c²); kshana воспроизводит 207,386 нс. Независимо подтверждено RTKLIB 2.4.3 geodist() (Takasu, BSD-2-Clause), в котором та же геометрия 2Aω/c². Составной бюджет транспондера/общего обзора/PPP для BIPM TWSTFT внешнего оракула не имеет, поэтому возможность остаётся смоделированной | timetransfer, timetransfer_adv | timetransfer::tests (взаимное сокращение; тождество Саньяка в двух формах); tests/time_transfer_error_budgeting_reference.rs (Саньяк при облёте экватора = 207,386 нс против опубликованного значения Ashby 207,4 нс с точностью до <0,05 нс; плюс геометрия Саньяка/geodist перекрёстно проверена относительно RTKLIB 2.4.3 geodist(), скомпилированного из исходного кода на C) |
| Модуляция навигационных сигналов и анализ слежения за кодом | PSD для BPSK-R/BOC, коэффициент спектрального разделения κ, полоса Габора, дрожание DLL, многолучевость | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Взаимная/автокорреляция кодов Gold GPS C/A совпала ТОЧНО (целые ±65/−1/63) с независимой генерацией кодов по IS-GPS-200; форма PSD BPSK-R(1)/BOC(1 1) совпала с независимой периодограммой scipy. Замкнутые формы модуляции/SSC/DLL (Betz 2001 / Kaplan & Hegarty) остаются аналитическими, поэтому строка остаётся на уровне MODELLED, но частное утверждение о кодовой корреляции совпало с внешним источником. Раунд 2 для 0,30, относительно напечатанных значений Betz 2001 и Hein et al. 2006 (предварительно зарегистрировано 9f4f2ce8, половина напечатанной единицы), вывод (остаётся на уровне MODELLED): согласуются все 45 спектральных ячеек таблицы 1, значения корреляции при 1 ГГц, показатели помех MBOC и 2 из 3 смещений на рис. 17; не согласуются первые боковые лепестки на 24 МГц, смещение BOC(8 4) на рис. 17 и каждое наихудшее смещение из-за многолучевости на рис. 18-21 (на 11 – 15 % ниже). Kshana и независимое вычисление в NumPy по предварительно зарегистрированному прочтению согласуются, поэтому расхождение лежит в этом прочтении или в неуказанной детали статьи; причина не выяснена | navsignal | navsignal::tests (собственный SSC BPSK = 2/3R_c; PSD единичной площади; DLL); tests/nav_signal_modulation_code_tracking_reference.rs (точное целочисленное совпадение взаимной/автокорреляции кодов Gold GPS C/A с независимой генерацией кодов по IS-GPS-200; PSD BPSK-R(1)/синусоидального BOC(1 1) против независимой периодограммы scipy); tests/nav_signal_betz_hein_published_oracle.rs (betz_text_correlation_values_over_1_ghz; hein_mboc_interference_improvements; finding_betz_side_lobes_and_multipath, закреплено) |
| Характеристики квантовых инерциальных датчиков | Акселерометр на интерферометре холодных атомов из первых принципов (k_eff·T², QPN) | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Опубликованные числовые векторы из основных статей по CAI (передаточная функция Cheinet 2008; чувствительность Peters/Freier): k_eff·T² совпало точно, односторонний нижний предел ASD дробового шума в пределах ~2× от каждого опубликованного прибора (реальные устройства несут технический шум сверх квантового нижнего предела). Это оценка в вилке, а не равенство. Раунд 2 для 0,30 (предварительно зарегистрировано fcb9ac64), вывод (остаётся на уровне MODELLED): вращательный шум только QPN относительно измеренных точек Gauguet et al. 2009 рис. 14 даёт отношения от 0,695 до 0,788 в трёх допущенных точках (0,751 в рабочей точке), не выполняя предварительно зарегистрированный порог в 30 % на 0,5 пункта; нижний предел QPN лежит на 21 – 31 % ниже измеренного шума, как и ожидается от модели без лазерного шума и шума детектирования. Композиция градиометра совпадает с модельной линией QPN Janvier et al. 2022 (отношение от 1,013 до 1,017, эталон). Измеренный тест не может отличить ошибку композиции в sqrt(2) раз; на это способна только линия Janvier с неравным контрастом | inertial::quantum_imu | quantum_imu::tests (k_eff; Mach-Zehnder T²; вилка нижнего предела Freier-2016); tests/quantum_inertial_sensor_reference.rs (передаточная функция |H(ω)|, k_eff·T² и ASD дробового шума против опубликованных числовых векторов Cheinet 2008 / Peters / Freier); tests/quantum_inertial_measured_qpn.rs (gauguet_finding_qpn_floor_sits_below_the_measured_noise, закреплено; gradiometer_qpn_line_matches_janvier_model) |
| Неоднозначность полос и динамический диапазон квантового инерциального датчика | Динамический диапазон неоднозначности полос Маха–Цандера: 2π-периодичный отсчёт полос задаёт максимальную однозначную удельную силу a_max=π/(k_eff·T²), а однозначный диапазон в ячейках разрешения a_max/σ_a=π/σ_Φ не зависит от оптического масштабного коэффициента — выигрыш чувствительности по T² стоит однозначного диапазона в точном соответствии (время опроса обменивает разрешение на диапазон, оставляя число ячеек заданным фазовым шумом отсчёта) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Самосогласованность модели интерференционной полосы интерферометра: край полуполосы, 2π-периодическая структура наложения и сокращение масштабного коэффициента в отношении диапазона к разрешению — замкнутые алгебраические тождества, проверенные по собственным функциям фазы и чувствительности Маха–Цендера в движке; это проверки внутренней согласованности, а НЕ внешний набор данных, поэтому строка остаётся InternalConsistency. MODELLED: идеальная трёхимпульсная неоднозначность полосы; границ по аберрации волнового фронта и потере контраста для однозначного диапазона нет | inertial::quantum_imu | quantum_imu::tests (a_max лежит на краю полуполосы ±π с масштабированием диапазона 1/T²; восстановление свёрнутой фазы точно внутри [−a_max,a_max] и вне его даёт наложение ровно на 2·a_max; однозначный динамический диапазон a_max/σ_a=π/σ_Φ одинаков при двух сильно различающихся масштабных коэффициентах длины волны/T; методы CaiAccelerometer совпадают со свободными функциями) |
| Устойчивость квантовой инерциальной счисляемой навигации | Составной бюджет положения по смещению, масштабному коэффициенту, VRW и затуханию стабильности в holdover | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Независимое интегрирование SDE методом Монте-Карло в numpy для дважды проинтегрированного шума белого ускорения (проверяет аналитическую дисперсию VRW по действительно независимому алгоритму) + опорное опубликованное значение Groves 2013 для членов смещения и масштабного коэффициента; числа устройств CAI количественно описывают оборудование партнёра и остаются на уровне MODELLED | inertial::quantum_imu (QuantumNavBudget) | budget_tests (смещение против интегратора AccelModel; VRW против аналитического интеграла); tests/quantum_inertial_dead_reckoning_reference.rs (VRW против независимого двойного интегрирования шума белого ускорения методом Монте-Карло в numpy, наихудшее отклонение 0,42% в пределах ±3% на 6 временах выбега; смещение/масштабный коэффициент против замкнутого значения Groves 2013; круговые проходы holdover) |
| Устойчивость к подавлению без ГНСС | Геометрия бюджета линии J/S, C/N₀ с защитой от подавления, потеря захвата по каждому спутнику | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Уравнение бюджета линии C/N₀ при защите от подавления перекрёстно проверено независимым повторным выводом в numpy (общая замкнутая форма → InternalConsistency) плюс характеризация деградации C/N₀ по реальным данным JammerTest-2024. Раунд 2 для 0,30, заблокирован (остаётся на уровне MODELLED): измеренное падение C/N0 в JammerTest 2024 относительно предсказания бюджета линии (предварительно зарегистрировано 6a66994b, в пределах 3 дБ) не выполнялось, потому что положение и наведение антенны F8.1 в Bleik и доля L1 в мощности многодиапазонной рампы 1.6.4 не задокументированы ни в каталоге испытаний, ни в официальном журнале | jamming | jamming::tests (broadband_q_equals_the_spectral_separation_closed_form и cw_q_equals_the_spectral_separation_closed_form: таблица Q, CW и узкополосные 1, широкополосные и качающиеся 2, закреплены по замкнутым формам navsignal; a_cw_jammer_is_more_damaging_than_broadband_noise_at_equal_js); tests/gnss_denied_jamming_resilience_reference.rs (FSPL/J-S/эффективное C-N₀ против независимого повторного вывода в numpy бюджета линии Kaplan & Hegarty §9,4; C/N₀ реального JammerTest монотонно падает через порог 25 дБ-Гц); tests/jamming_jammertest_cn0_oracle.rs (предварительно зарегистрировано, заблокировано, не запускалось) |
| Обнаружение спуфинга | Объединённый для каждой эпохи показатель качества безопасности: χ² с поддержкой часов, RAIM, AGC, SQM | ExternalDataset | подутверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся модельной — Параметры сценариев TEXBAT (Humphreys 2012) — характеризация, а не закреплённые векторы. Внешнее сравнение 0,30, вывод (остаётся на уровне MODELLED): на JammerTest 2024 (Bleik; данные под GPL-3.0) мониторы уровня наблюдаемых величин (хи-квадрат с поддержкой часов, RAIM, отказ решения) не подняли тревогу в пределах 10 с ни от одного из 8 поддающихся оценке опубликованных начал спуфинга (там, где окно до начала было чистым, первая тревога приходила через 10,2 – 39 с после опубликованного начала слота), а в трёх окнах до начала были ложные тревоги монитора часов (81, 64 и 173 эпох). Первым наблюдаемым эффектом стала потеря двухчастотного слежения GPS, а не несогласованность RAIM. Опубликованные начала — это начала слотов расписания с точностью до минуты; то, что они предшествуют радиочастотной записи, — интерпретация, а не измерение. Внешнее сравнение 0,30, раунд 2, относительно официального журнала организаторов JammerTest 2024 (с точностью до секунды; предварительно зарегистрировано 6a66994b с калиброванным по Адамару трёхсостояльным монитором часов без фиксации), вывод (остаётся на уровне MODELLED): монитор подаёт тревогу в пределах 10 с на 4 из 10 записанных начал; на остальных шести он опаздывает на 18 – 211 с или поднимает ложные тревоги часов до начала (1 на 2.1.4, 85 на 2.3.15). D9, раунд 3 (карточка приёмника по другим сеансам устройства JammerTest, предварительно зарегистрировано 2ec76864) заблокирован: 167 эпох обучения при 3600. D9, раунды 4 и 4b (уровни шума по карточке класса моделей u-blox ZED-F9P, Вроцлав 2021, предварительно зарегистрировано fb475550; 4b — раскрытый повторный прогон с исправленным извлечением, c9cc0d49), вывод (остаётся на уровне MODELLED): нулевое число ложных тревог до начала на всех 10 записанных началах и 6 из 10 в пределах 10 с; 2.1.1, 2.3.5, 2.3.10 и 2.6.1 остаются запоздалыми (+211, +23, +18, +51 с), и уровень шума часов этого не меняет | spoof, spoof_detect, spoof_monitors | tests/spoof_texbat_validation.rs (характеризация параметров TEXBAT); tests/spoof_detection_jammertest_oracle.rs::monitors_against_the_published_onsets_reproduce_the_recorded_disagreement (закрепляет вывод); tests/spoof_detection_jammertest_log_oracle.rs::engine_monitors_against_the_logged_onsets_reproduce_the_recorded_disagreement; tests/clock_library_tcxo_card_jammertest_oracle.rs (round_3_is_blocked_by_the_training_minimum; round_4_reproduces_the_recorded_finding; round_4b_reproduces_the_recorded_finding; D9) |
| Уровень защиты времени при спуфинге | Граница в замкнутой форме для наихудшей необнаруженной ошибки времени = порог монитора + σ выбега генератора за задержку обнаружения CUSUM, сообщаемая как полоса уровня красного шума | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Объединяет проверенные примитивы (allan/holdover по Van-Loan, нижний предел безопасности); откалибровано на сценарии JammerTest 2024 2.1.1 (реальное смещение переданного времени ~1,01 мс против заявленных ≤51 нс). Мост над проверенными частями — сам по себе не внешняя валидация. Внешнее сравнение 0,30, вывод (остаётся на уровне MODELLED): на сценариях спуфинга JammerTest 2024 измеренная необнаруженная ошибка переданного времени превышает номинальный TPL на 3 из 8 обнаруженных начал: 184,3 против 34,6 нс (2.1.4), 295,7 против 159,3 нс (2.3.5) и 143,0 против 69,0 нс (2.3.11); три из пяти попавших в границы тривиальны (зафиксированная ложная тревога до начала). Вероятная причина: член выбега из 60-секундной калибровки с нулевым шумом дрейфа не покрывает уход частоты TCXO приёмника на интервале от 15 до 39 с. Измеренная ошибка — это собственная одноточечная оценка часов Kshana относительно прямой, подогнанной по её же оценкам до начала, поэтому даже согласие не было бы полностью независимым. Внешнее сравнение 0,30, раунд 2, относительно начал по официальному журналу JammerTest 2024 и измеренной ошибки времени приёмника (предварительно зарегистрировано 6a66994b), вывод (остаётся на уровне MODELLED): на 4 из 10 записанных начал необнаруженная ошибка превышает TPL состояния дрейфа (634,7 против 458,5 нс на 2.1.1, 232,6 против 16,2 нс на 2.3.5, 41,3 против 6,0 нс на 2.3.10, 218,6 против 47,4 нс на 2.6.3) | tpl | tpl::tests (оракулы в замкнутой форме + CUSUM); examples/tpl_jammertest.rs (калибровка по реальному спуфингу JammerTest 2024); tests/tpl_jammertest_coverage_oracle.rs::tpl_against_measured_time_error_reproduces_the_recorded_disagreement (закрепляет вывод); tests/tpl_jammertest_log_oracle.rs::drift_state_tpl_against_the_logged_onsets_reproduces_the_recorded_disagreement |
| Альтернативное / дополнительное PNT | Сопоставление с картой гравитации, навигация по рельефу (TERCOM/SITAN), магнитные аномалии | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Коэффициенты IGRF-14; нижняя граница Крамера–Рао (CRLB) согласованного фильтра из первых принципов. Поле эталонного теста гравитации на реальном поле проверено извне (строка «Gravity-anomaly synthesis from a spherical-harmonic model»), но его навигационный результат внешнего оракула не имеет | altpnt, mapmatch, gravimeter, igrf | tests/alternative_complementary_pnt_reference.rs (CRLB привязки к карте; поле IGRF-14); mapmatch::tests; gravimeter::tests; igrf::tests; tests/gravity_map_real_field.rs (60-минутный эталонный тест без ГНСС на реальном поле EGM2008 степени 70, предварительно зарегистрированный в xval/icgem-egm2008/: при привязке 3106 м, так что порог < 500 м NOT MET и зафиксирован как не выполненный, а десятикратное сокращение дрейфа 70,6 км MET; плюс Монте-Карло ошибок карты с фиксированным начальным значением); altpnt::terrain::tests::emag2_format_grid_reproduces_the_synthetic_magnetic_channel и tests/emag2_real_grid.rs (читатель EMAG2v3, зависящий от наличия данных, на реальном фрагменте; навигационный результат по нему не заявляется); tests/terrain_slam_rbpf.rs (совместная оценка карты, RBPF в стиле FastSLAM, против SITAN с известной картой при коррелированной ошибке карты 15 м на 20 начальных значениях, предварительно зарегистрировано в xval/terrain-slam-rbpf/: средний выигрыш 1,5% и лучше в 10 из 20, так что пороги 10% и 12 из 20 NOT MET и зафиксированы как не выполненные; вреда на идеальной карте нет, MET) |
| Воспроизводимость и гарантии качества программного обеспечения | Детерминированность, хеширование сценариев, SBOM и межплатформенные эталонные барьеры | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Соответствие SBOM официальной схеме JSON CycloneDX 1,5 (+ допустимые идентификаторы SPDX) — внешнему опубликованному стандарту, ноль ошибок валидации по всему графу зависимостей; часть о детерминизме показателей качества / побитовой воспроизводимости остаётся закреплённой проверкой самосогласованности, поэтому строка остаётся на уровне MODELLED | report, scenario; CI (golden/determinism/SBOM) | tests/golden.rs, tests/determinism.rs, tests/cross_platform_golden.rs; tests/reproducibility_software_assurance_reference.rs (сформированный SBOM проходит проверку без ошибок по официальной схеме JSON CycloneDX 1,5 на всём поставляемом графе из 66 компонентов: функции по умолчанию + python + wasm, зависимости для разработки исключены) |
| Оценка обнаружения радиочастотных нарушений методами машинного обучения (13494) | Размеченный синтетический корпус искажений + независимая от детектора обвязка ROC/AUC/матрица ошибок/Pfa-Pmd; защита от утечки, стратифицированное разбиение, отчёт об оптимизме при сдвиге распределения (внутри и вне режима). Запускается из CLI и привязок как вид сценария impairment-eval (scenarios/impairment-eval.toml) |
InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Границы AUC в замкнутой форме (Манна–Уитни) + детектор с идеальным оракулом; корпус СИНТЕТИЧЕСКИЙ (основан на параметрах, не полевые данные и не IQ) | impairment_eval | impairment_eval::tests (AUC идеальный=1/одинаковый=0.5/ничья=0,125, ROC монотонна, объединённый>0,8, разделение слоёв по классам, защита от утечки, воспроизводимый корпус, сдвиг распределения помечает оптимизм); dominance_demonstrators (достижим + воспроизводим + MODELLED-не-VALIDATED + разрыв оптимизма самосогласован) |
| Исследование разрыва оптимизма в обнаружении радиочастотных нарушений методами машинного обучения и предиктор разрыва только по ID | Контролируемое синтетическое исследование разрыва оптимизма AUC между внутренним и внешним по отношению к распределению для опубликованных методов и обучаемых детекторов (логистическая регрессия / MLP с одним скрытым слоем): тенденции законов масштабирования по классам (ρ Спирмена + наклон по 1−тяжесть) и гребневой предиктор только по ID, оценивающий разрыв лишь по диагностике внутри распределения, оцениваемый с исключением по одному детектору и по одному классу. Воспроизводится через cargo run --release --example optimism_study |
InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Выведенная вручную статистика против замкнутых форм (бинормальный AUC Φ(d'/√2), дисперсия DeLong, Спирмен с учётом связанных рангов, точное восстановление OLS) + перекрёстная проверка с исключением по одному против базового уровня «предсказать среднее». Корпус СИНТЕТИЧЕСКИЙ (основан на параметрах, никогда не полевые данные и не IQ), а разрыв оптимизма — это сдвиг тяжести синтетическое→синтетическое, а НЕ результат перехода от моделирования к полевым данным | impairment_study, impairment_ml, eval_stats | impairment_study::tests (оракульный AUC по классам≈1, выученный разрыв оптимизма>0, форма сетки + доверительный интервал бутстрепа охватывает среднее + положительный тренд масштабирования, признаки ID конечны, предиктор разрыва лучше «предсказать среднее» при ОБЕИХ перекрёстных проверках — с исключением по одному детектору и по одному классу — + детерминирован); impairment_ml::tests (логистическая регрессия разделяет + детерминирована + потери↓, MLP решает XOR, недоступный линейной модели + с фиксированным начальным значением); eval_stats::tests (бутстреп/DeLong/Спирмен/ридж против замкнутых форм) |
| Квантовое и классическое PNT: компромисс и устойчивость без ГНСС (13503) | Приём измеренной ADEV (NNLS), таблица компромиссов (holdover по времени и по инерции + выигрыш), огибающая устойчивости по времени; оговорка о нижнем пределе приложена к артефакту. Запускается из CLI и привязок как вид сценария quantum-trade (scenarios/quantum-trade.toml) |
ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Ядро подгонки измеренной ADEV→PSD (NNLS) совпадает со scipy.optimize.nnls (tests/scipy_reference.rs / tests/quantum_vs_classical_pnt_trade_reference.rs) — независимым внешним ядром; но ЧИСЛА компромисса количественно описывают (а не валидируют) часы/CAI партнёра, поэтому сам компромисс остаётся на уровне MODELLED, без ореола валидации | quantum_trade | quantum_trade::tests (восстановление ADEV по кругу, неотрицательность NNLS, оговорка о нижнем пределе есть/нет, выигрыш>1, монотонная огибающая + граница alt-PNT); dominance_demonstrators (измеренная ADEV определяется данными, а не нижним пределом по допущению, допущенный класс помечает нижний предел + оговорку, некорректная кривая отклоняется, MODELLED-не-VALIDATED) |
| Среда космической погоды и плотность термосферы, определяемая активностью | Солнечные/геомагнитные индексы (определяющая таблица Kp↔ap), экзосферная температура Jacchia-1971 и плотность термосферы Jacchia 1971 (SAO Special Report 332: статические профили диффузии, воспроизводящие его таблицу 7, с суточными, геомагнитными, полугодовыми, сезонно-широтными и гелиевыми вариациями) относительно статической атмосферы USSA76. Запускается из CLI и привязок как вид сценария space-weather (scenarios/space-weather.toml) |
ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Определяющая таблица Kp↔ap + замкнутая форма температуры экзосферы Jacchia-1971 (совпадает с точностью <1 К с опубликованными опорными значениями, tests/space_weather_reference.rs); плотность охарактеризована относительно pymsis NRLMSISE-00 (независимой модели NRL): размах солнечного цикла на 800 км составляет 10.4x против 13.6x по NRLMSISE-00. Пересмотр 0,30: откалиброванный коэффициент активности первого порядка заменён на Jacchia 1971 (плотность по умолчанию в сценарии на 400 км 4.176e-12 -> 6.929e-12 кг/м3; reference_exospheric_temperature_k удалена, добавлена mean_exospheric_temperature_k). Раунд 2 для 0,30, измеренные плотности по акселерометрам TOLEOS CHAMP/GRACE/GRACE-FO (ESA Swarm DISC; предварительно зарегистрировано 20eed695), вывод (остаётся на уровне MODELLED): орбитальные средние на высотах от 400 до 500 км укладываются в коэффициент 2 при солнечном максимуме вне бурь (CHAMP 2001 521/521, GRACE-A 2002 120/120, GRACE-FO 2024 526/547), но Jacchia 1971 даёт плотность примерно в 1.7x выше в солнечный минимум 2008 года (GRACE-A 412/544 в пределах коэффициента 2), поэтому плотность не проверена | space_weather | space_weather::tests (Kp↔ap точно в узлах сетки + круговой проход + монотонность, среднее суточное Ap, T экзосферы против опубликованных опорных значений для солнечного минимума/среднего/максимума и приращения при бурях, плотность равна единице на опорном уровне, размах солнечного цикла в наблюдаемой полосе 5–10×, сценарий воспроизводим + MODELLED-не-VALIDATED + отклонение значений вне диапазона); dominance_demonstrators (достижим + воспроизводим + физичная T + MODELLED-не-VALIDATED); tests/space_weather_density_accelerometer_oracle.rs::jacchia71_finding_is_pinned |
| Окно запуска и геометрия выведения (анализ миссий) | Двухтельные азимуты запуска (sin Az = cos i / cos lat), минимально достижимое наклонение, круговая скорость, восточная добавка от вращения Земли, Δv смены плоскости по dogleg и ежедневные возможности и, при заданных эпохе и строках IERS finals2000A, скорость площадки относительно истинного полюса (launch::site_rotation_speed_at). Запускается из CLI и привязок как вид сценария launch-window (scenarios/launch-window.toml) |
InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Геометрия запуска на сферической тригонометрии в замкнутой форме против опубликованных опорных разобранных примеров (Vallado, Fundamentals of Astrodynamics 4th ed., алгоритм 37 азимута запуска + гл. 6, смена плоскости; tests/launch_window_ascent_geometry_reference.rs). Они используют ту же замкнутую форму, которую реализует kshana (проверка равенства опубликованному значению / переписывания, InternalConsistency); MODELLED двух тел, без модели треугольника скоростей вращающейся Земли / выведения / потерь на сопротивление. Внешнее сравнение 0,30 с Orekit 12,2 (Apache-2.0), вывод (остаётся на уровне MODELLED): геометрия совпадает с точностью до округления (наклонение, считанное из азимута выключения двигателя, в 158 случаях, наихудшее 2.6e-15 рад; минимальное наклонение, круговая скорость и дельта-v манёвра с изломом — до 3e-16), но скорость пункта из-за вращения Земли не выполняет предварительно зарегистрированный порог 1e-6 относительно на широте 62,9 град (1.12e-6). Расхождение растёт как tan(широта), что согласуется со смещением полюса из-за движения полюса примерно на 5.8e-7 рад в земной системе Orekit, которое сферическое ω·R·cos(широта) не учитывает. Заявление не было сужено до прогона, поэтому строка не может быть повышена по этому сравнению. Раунд 2 для 0,30 (предварительно зарегистрировано 71bebf63): при заданной эпохе и строках IERS скорость пункта по истинному полюсу (поле сценария site_rotation_speed_true_pole_m_s) согласуется с Orekit в пределах 1e-6 в 24 пунктах на четырёх долготах (наихудшее 4.9e-8), но номинальная скорость без эпохи, которую сценарий по умолчанию выдаёт как бонус от вращения Земли, всё ещё не укладывается: 1.12e-6, поэтому строка остаётся на уровне MODELLED до решения о выводе по умолчанию | launch | launch::tests (запуск строго на восток достигает i=широте, KSC→ISS = 45° как в учебнике, полярный = с севера на юг, i<широты недостижимо, экваториальный бонус 465 м/с, смена плоскости на 10° ≈ 1,34 км/с + 180° = 2v, число ежедневных возможностей, сценарий воспроизводим/MODELLED + путь с изломом); dominance_demonstrators (достижим + воспроизводим + KSC→ISS 45° + MODELLED-не-VALIDATED); tests/launch_geometry_orekit_oracle.rs::burnout_azimuth_reproduces_the_target_inclination_in_orekit; tests/launch_geometry_orekit_oracle.rs::earth_rotation_speed_gap_is_recorded_as_a_finding; tests/launch_geometry_orekit_oracle.rs::true_pole_site_speed_matches_orekit_at_a_fresh_epoch_and_longitudes |
| Коридор баллистического входа в атмосферу (Аллен–Эггерс) | Пиковое замедление (не зависит от баллистического коэффициента), скорость и высота при пиковой перегрузке и скорость пикового нагрева для баллистического входа в экспоненциальную атмосферу. Запускается из CLI и привязок как вид сценария reentry (scenarios/reentry.toml) |
InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Аналитический вход Аллена–Эггерса в замкнутой форме, дополнительно перекрёстно проверенный численным интегрированием scipy 1,18 solve_ivp (DOP853) того ЖЕ ОДУ входа только с сопротивлением (tests/ballistic_re_entry_corridor_reference.rs, 36 случаев, наихудшее относительное a_max 2.9e-9) — проверка численного интеграла против собственной аналитической формы, поэтому по-прежнему InternalConsistency, а НЕ внешняя валидация. MODELLED баллистический (без подъёмной силы), без аэротермики/TPS — выходной показатель нагрева является скоростью, а не тепловым потоком. Внешнее сравнение 0,30, вывод (остаётся на уровне MODELLED): относительно реконструкции входа капсулы Stardust SRC (Desai and Qualls, NASA NTRS 20080008567) пиковое замедление по Аллену–Эггерсу для напечатанного инерциального состояния входа (12,9 км/с, -8.2 град, H 7200 м) составляет 61,8 g против 32,89 g по наилучшей оценённой траектории, +88 % при допуске 15 %: решение с постоянным углом траектории и без гравитации примерно вдвое завышает пик при пологом входе со скоростью выше убегания. На Stardust не было акселерометра, поэтому реконструкция — это оценка траектории. Раунд 2 для 0,30, заблокирован (остаётся на уровне MODELLED): интегрированное плоское решение для материальной точки (reentry::simulate_planar_entry, US76, гравитация по обратным квадратам, кривизна) согласуется с наилучшими оценёнными траекториями Stardust и Genesis в пределах 15 % (+11,3 %, +5,6 %), но эти максимумы — результаты моделирования агентств, а не измерения, поэтому это лишь перекрёстная проверка. Сравнение по акселерометру (предварительно зарегистрировано a94a283d) заблокировано из-за отсутствия читаемой копии анализа REMM Hayabusa2 (doi 10.57350/jesa.16) | reentry | reentry::tests (пиковая перегрузка не зависит от баллистического коэффициента + физичный диапазон g, растёт при более крутом γ / более быстром входе, скорость пиковой перегрузки = V_e·e^(−1/2) и пикового нагрева = V_e·e^(−1/6) быстрее, высота пиковой перегрузки физична + глубже при большем B, сценарий воспроизводим/MODELLED + вырожденная геометрия отклоняется); dominance_demonstrators (достижим + воспроизводим + доля V_e·e^(−1/2) + MODELLED-не-VALIDATED); tests/reentry_reconstruction_oracle.rs::reentry_overprediction_is_recorded_as_a_finding; tests/reentry_point_mass_reconstruction_oracle.rs::point_mass_peak_deceleration_matches_reconstructed_entries (только перекрёстная проверка); tests/reentry_point_mass_accelerometer_oracle.rs (заблокировано, не запускалось) |
| Адаптивное кодирование и модуляция DVB-S2 на проходе нисходящей линии LEO | Es/N0 нисходящей линии вдоль каждого прохода одного спутника над одной станцией (EIRP, потери в свободном пространстве, потери в атмосфере по закону косеканса, прочие потери, G/T, постоянная Больцмана, символьная скорость), наиболее эффективный MODCOD DVB-S2, который проходит порог квазибезошибочного приёма по ETSI EN 302 307-1 V1.4.1, таблица 13, плюс запас на реализацию на каждом шаге, объём данных ACM за проход и базовый уровень с постоянным кодированием, замыкающийся на маске и на наибольшей дальности. Запускается как вид сценария acm-link. Иллюстративные входные данные; MODELLED. |
InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: спектральная эффективность, вычисленная в замкнутой форме по K_bch из таблицы 5a и длинам кадров, совпадает с эффективностями, напечатанными в таблице 13 (проверка переписывания таблицы порогов); части бюджета линии совпадают со своими замкнутыми формами; выбор монотонен по Es/N0 и соблюдает запас; ACM переносит не меньше данных, чем постоянное кодирование. Геометрия пролёта берётся из отдельно получившего VALIDATED предсказателя кажущихся пролётов. ЧТО НЕ СДЕЛАНО: ни внешний инструмент, ни измеренная линия не сравнивались; пороги — идеальные значения AWGN из стандарта, а не модема; замирание в дожде, потери наведения вдоль пролёта и пилоты не моделируются. | contact_schedule (es_n0_db, select_modcod, fspl_db, atmospheric_loss_db, ccm_modcod, pass_capacity, AcmLinkScenario); passes::predict_passes_apparent | contact_schedule::tests::modcod_efficiency_closed_form_matches_the_printed_table; contact_schedule::tests::modcod_selection_is_monotone_and_honours_the_margin; contact_schedule::tests::link_budget_pieces_have_closed_forms; contact_schedule::tests::acm_link_defaults_run_and_acm_beats_ccm |
| Планирование наземных контактов для нескольких спутников и нескольких станций с разрешением конфликтов | Кандидаты в контакты из каждого прохода «спутник — станция» с объёмом данных ACM; конфликты, когда одна антенна обслуживала бы два спутника в пределах времени перенацеливания либо один спутник передавал бы данные на две станции одновременно; взвешенная по приоритетам целевая функция доставки, ограниченная накопленным объёмом каждого спутника; ленивый жадный план по предельной ценности, базовый план «первым пришёл — первым обслужен» и точный метод ветвей и границ для не более чем 26 кандидатов с указанием разрыва оптимальности жадного плана. Запускается как вид сценария contact-schedule. Иллюстративные входные данные; MODELLED. |
InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: точный метод ветвей и границ совпадает с полным перебором на малых случайных наборах, каждый план проверен на допустимость по правилам конфликтов, а жадный алгоритм никогда не превосходит точный оптимум. ЧТО НЕ СДЕЛАНО: ни внешний планировщик, ни оперативный план не сравнивались; сеансы связи берутся целиком (без разбиения), накопленный объём фиксируется в начале окна, время разворота сверх фиксированной паузы и бортовая память не моделируются. | contact_schedule (conflicts, objective, delivered, schedule_chronological, schedule_greedy, schedule_optimal, ContactScheduleScenario) | contact_schedule::tests::conflicts_cover_turnaround_and_one_station_per_satellite; contact_schedule::tests::greedy_is_feasible_and_the_exact_solver_beats_or_ties_it; contact_schedule::tests::exact_solver_matches_brute_force_and_plans_are_feasible; contact_schedule::tests::exact_solver_declines_above_the_limit; contact_schedule::tests::contact_schedule_defaults_run_reproducibly; contact_schedule::tests::scenarios_reject_bad_inputs |
| Экономичная постановка «стоимость на единицу покрытия» и ROI | Стоимость за процент покрытия и ROI «покрытие на евро» на основе движка расчёта размера орбитальной группировки; стоимость спутника — это заданный вызывающей стороной диапазон низкая/номинальная/высокая (без выдуманных цен) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Арифметика стоимости в замкнутой форме против значений, выведенных вручную; экономическая ПОДАЧА модельного показателя покрытия, а не ценовое предложение и не валидированная модель стоимости | frugal (over walker) | frugal::tests (выведенная вручную стоимость на покрытие 48/96=0,5, отношение ROI 2,667, упорядочение границ + защита от нулевого покрытия) |
| Влияние пропуска обнаружения на целостность (HPL/VPL с учётом контекста против предела тревоги) | Сопоставляет необнаруженное смещение от спуфинга или подавления с эффективной ошибкой → область Стэнфорда (доступно/недоступно/MI/HMI) относительно HAL/VAL для конкретного контекста (открытое небо или город) | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Использует проверенную извне классификацию RAIM по Стэнфорду (raim::classify_stanford); сопоставление пропуска обнаружения с AL само является модельным, а не сертифицированным распределением целостности | integrity_impact (over raim) | integrity_impact::tests (один и тот же пропуск переходит Available→MI→HMI по мере ужесточения контекста; консервативный PL→Unavailable; HMI по осям; защита входных данных) |
| Паспорт параметров модели ошибок CAI с цитируемыми источниками (13503) | Диапазоны (наилучший/номинальный/консервативный) характеристик холодноатомного интерферометра — нестабильность смещения, случайное блуждание скорости и угла, стабильность масштабного коэффициента, частота выборки, ограниченная временем опроса, динамический диапазон при неоднозначности полос, — каждый с прослеживаемой ссылкой; передаётся в QuantumNavBudget без моделирования аппаратуры | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: приведённая вилка VRW перекрёстно проверена по физике CaiAccelerometer::accel_asd + необработанный динамический диапазон, вычисленный из предела неоднозначности полосы; числа — это вилки обзора литературы уровня MODELLED (needs_source_confirmation), ни одно устройство не валидировано, ореола валидации нет | inertial::cai_params (over inertial::quantum_imu) | inertial::cai_params::tests (физический VRW попадает в приведённую вилку VRW на всех 3 уровнях; необработанный диапазон неоднозначности полосы вычислен из k_eff·T²; консервативный бюджет дрейфует больше наилучшего; каждая вилка имеет источник + помечена флагом подтверждения; защита упорядочения вилок) |
| Эталонный тест соответствия целостности времени — классификатор эпох по диаграмме целостности Стэнфорда | Классификация эпох TIB по диаграмме целостности Стэнфорда (номинально/недоступно/MI/HMI) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Независимая повторная реализация правила четырёх областей в numpy (scripts/gen_tib_scorer_reference.py) на идентичном наборе выборок; метод Cited (приведён) из диаграммы целостности Stanford–ESA (Tossaint et al., ION GNSS 2007) и RTCA DO-229 WAAS MOPS. НЕ оракул точности на ExternalDataset — эталонный тест защищён от самообмана. | src/benchmark/stanford.rs | src/benchmark/stanford.rs::tests (четыре области + включающие границы + |ошибка| + недоступность при PL>AL); tests/tib_scorer_reference.rs (число классификаций против независимого numpy на фиксированном синтетическом наборе) |
| Эталонный тест соответствия целостности времени — оценка покрытия целостности | Оценка покрытия целостности TIB (доли HMI/MI/доступности + вердикт о покрытии оценкой с запасом) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Независимый пересчёт областей в numpy в tests/fixtures/tib/reference.json; только перекрёстная проверка механизма подсчёта, без заявлений о точности. | src/benchmark/coverage.rs | src/benchmark/coverage.rs::tests (чистый/с недооценкой границы/полностью недоступный/пустой); tests/tib_scorer_reference.rs (числа + доли + coverage_ok против numpy с точностью до 1e-12) |
| Эталонный тест соответствия целостности времени — каталог неисправностей (параметрические генераторы) | Меню неисправностей TIB (расхождение доменов, скачок часов, дрейф в holdover, статическая/нарастающая/симметричная/асимметричная задержка, повтор в пределах свежести, избирательная по пути, кворум k из N) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Репрезентативные параметрические генераторы неисправностей (Modelled); необнаруживаемое множество (симметричная задержка, повтор в пределах свежести) приведено (Cited) из Mizrahi RFC 7384 и Narula & Humphreys (IEEE JSTSP 2018). Внешнего оракула нет — каталог неисправностей не делает измеренных заявлений. | src/benchmark/faults.rs | src/benchmark/faults.rs::tests (профили смещений, монотонный выбег, пометка необнаруживаемого множества, согласованность max_offset, ровно два необнаруживаемых класса) |
| Эталонный тест соответствия целостности времени — вердикт о поглощении необнаруживаемого | Вердикт TIB о поглощении необнаруживаемого (симметричная задержка и повтор должны поглощаться PL и никогда не сообщаться как обнаруженные) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Проверка свойства: перечисление Verdict структурно не может сообщить необнаруживаемую неисправность как обнаруженную (Mizrahi RFC 7384); поглощено ⟺ PL ≥ смещения. Оракула точности нет. | src/benchmark/scorecard.rs | src/benchmark/scorecard.rs::tests (эталонный PL поглощает; сломанный PL не поглощает и никогда не обнаруживает; вердикт покрытия для обнаруживаемого; свойство честности: для необнаруживаемого сценария недостижим никакой вердикт о покрытии/обнаружении) |
| Самоописание гибридного оптического и радиочастотного отчёта | Отчёт hybrid-optical-rf указывает конфигурацию линии, с которой он действительно выполнялся (длина волны несущей, передающая и приёмная апертура, дальность, длительность импульса, время интегрирования, эффективности и потери, с разрешёнными значениями по умолчанию), и содержит блок единиц с единицей измерения и классом происхождения каждой величины, которую статья, вероятно, будет цитировать, включая следы ковариации передачи в квадратных метрах | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего оракула нет, и быть не может: это самоописание, а не измерение. Оно зафиксировано, потому что его отсутствие было дефектом -- P5 пришлось брать длину волны несущей и апертуру передачи из значений по умолчанию в исходном коде и выводить из проверки внутренней согласованности, что голое variance выражено в квадратных метрах. Вывод оказался верным, и именно поэтому это имело значение: ничто не выявило бы его ошибочность |
hybrid_integrity | hybrid_integrity::tests (разрешённая конфигурация возвращается для значений по умолчанию и для переопределений, без прохода длины волны через метры туда и обратно; каждая запись units несёт и единицу, и класс происхождения; каждое поле, названное блоком units, действительно выдаётся, так что он не может документировать несуществующее) |
| Доступность гибридной оптической и радиочастотной линии на радиочастотной стороне | Отчёт hybrid-optical-rf указывает доступность радиочастотной линии, составленную из величин, которые движок уже вычисляет, а не из импортированной климатологии, и формулирует композицию как именованное правило: A_rf = I_closure * I_track, где I_closure — вердикт о замыкании одностороннего бюджета линии CCSDS-401 / DSN-810-005 (linkbudget::link_budget, запас Eb/N0 >= 0) на собственной дальности сценария, а I_track — вердикт контура слежения (jamming::lock_status) по C/N0, которое вернул ТОТ ЖЕ бюджет. Каждый множитель передаёт класс происхождения своих входных данных на выход, а множители, которые намеренно НЕ входят в произведение — геометрическая видимость, отказ из-за помех и климатология радиочастотных перерывов, — названы с указанием причины, а не молча принимаются равными 1. Разрешённое радиочастотное плечо дублируется в собственном блоке rf_link_configuration, а непрерывные величины рядом с индикатором (запас линии, запас по C/N0, дальности замыкания и слежения в замкнутом виде и использование дальности) — это обращения по дальности того же бюджета. Отчёт полностью указывает — в блоке и в записи единиц, на которую попадает читатель, — что эта величина ОГРАНИЧЕНА ЗАПАСОМ И ГЕОМЕТРИЕЙ и ДЕТЕРМИНИРОВАНА, тогда как оптическая доступность ОГРАНИЧЕНА ПОГОДОЙ И КЛИМАТОЛОГИЕЙ и вероятностна, поэтому их никогда нельзя приводить как сопоставимую пару процентов | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего оракула нет, и ExternalDataset отвергнут. Два входа — запас по Eb/N0 и пересечение порога C/N0 — оба являются функциями MODELLED EIRP, добротности и суммарного распределения потерь; записи измеренной доступности гибридной оптической/радиочастотной службы Земля–Луна, по которой можно было бы проверить составной показатель, нет. Существующие проверки внутренние и названы так: композиция пересчитывается по собственным опубликованным в отчёте запасам, а не по внутренним данным излучателя, а дальность замыкания проверяется повторным прогоном уравнения линии НА ней с требованием, чтобы запас обратился в нуль -- это круговая проверка обращения, а не независимая реализация. Честный предел показателя записан в самом отчёте: это детерминированный индикатор 0/1, а не вероятность, потому что ничто в этом движке не измеряет распределение отказов радиолинии в этом диапазоне и при этой геометрии. Этот недостающий вход назван в rf_availability.factors_not_included, а не выдуман, и именно его предоставление понадобилось бы для вероятностной радиочастотной доступности | hybrid_integrity, linkbudget, jamming | hybrid_integrity::tests (доступность равна произведению двух индикаторов, пересчитанных по собственным запасам отчёта, а эти запасы сами пересобираются из собственных EIRP, потерь в свободном пространстве, суммарных потерь, добротности, члена Больцмана, скорости передачи данных и требования с точностью до 1e-9 дБ; измерено, что значение равно 0 или 1, тогда как оптическая доступность в том же прогоне, как измерено, строго между ними; каждая строка фактора несёт класс происхождения из закрытого словаря field_schema; сообщённая дальность замыкания, повторно пропущенная через бюджет линии, возвращает запас от 0 до 1e-9 дБ и, как измерено, не зависит от дальности, на которой стоял прогон, на четырёх порядках, тогда как использование дальности меняется ровно в отношении дальностей; линия -40 дБВт сообщает доступность 0, LOST, и использование выше 1, а не долю; устаревшая заметка «ни одного радиочастотного аналога доступности этот движок не вычисляет» подтверждённо удалена, а замена подтверждённо называет новое поле; некорректный радиочастотный вход отклоняется, а не усекается) |
| Сопоставимое сравнение оптической и радиочастотной дальнометрии | Отчёт hybrid-optical-rf выдаёт отношение оптической и радиочастотной дальнометрии вместе с ОДНОЙ конфигурацией, при которой оценивались оба плеча, в том же объекте: тот же односторонний путь, та же дальность и то же время накопления. Оптическое плечо — это фотонно-ограниченная граница Крамера — Рао по ToA движка для одностороннего числа фотонов; радиочастотное плечо — это тепловой джиттер слежения за кодом DLL (опережение–запаздывание) движка при C/N0, которое возвращает собственный бюджет линии движка для той же односторонней дальности. Шумовая полоса контура выводится, а не выбирается: B_L = 1/(2*integration_s) ставит радиочастотное плечо ровно на оптическое время накопления, а если вызывающая сторона переопределяет её так, что времена усреднения расходятся, отношение REFUSED — null, с указанием расхождения и обоих времён, — вместо того чтобы приводиться для двух рабочих точек. Отношение с ВЫБРАННЫМ параметрическим rf_position_sigma_m сценария не образуется, и отказ объясняет причину: этот вход не несёт никакой конфигурации. Опубликованный двусторонний оптический итог и точный множитель, связывающий его с плечом одностороннего сравнения, выдаются рядом с отношением, так что отчёт нельзя прочитать как содержащий две расходящиеся оптические сигмы | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего оракула для ОТНОШЕНИЯ нет, и ExternalDataset отвергнут намеренно. У лежащей в основе радиочастотной цепочки он есть -- tests/validate_p5_rf_ranging_precision.rs сверяет linkbudget::link_budget и navsignal::dll_code_jitter_chips с независимым набором Python/NumPy и с зашитым в код разобранным значением Kaplan & Hegarty (2.814e-3 элемента кода / 0,825 м при 45 дБ-Гц), -- а у оптической CRLB есть собственная строка в замкнутой форме. Заявить любую из этих опор для данной строки означало бы заимствовать валидацию, чему и призваны мешать инварианты матрицы: здесь величина — ОТНОШЕНИЕ при конфигурации с MODELLED EIRP, добротностью, мощностью передачи и апертурой, и измеренного сравнения оптической и радиочастотной дальнометрии в общей рабочей точке, по которому его можно было бы проверить, не существует. Внутренне проверяется то, в чём отношение действительно может ошибаться: что обе ветви находятся в одной рабочей точке. Это измеряется масштабированием общего времени накопления с требованием, чтобы обе ветви менялись по одному закону квадратного корня, а отношение оставалось на месте, и обеспечивается прямым отказом выдавать отношение, когда времена усреднения расходятся. Обе ветви — границы по тепловому/дробовому шуму, и обе исключают задержку в среде, ошибку часов и неоднозначность, так что исключение одинаково с обеих сторон; отчёт говорит об этом прямо, а не оставляет это на вывод читателя | hybrid_integrity, optical_linkbudget, linkbudget, navsignal | hybrid_integrity::tests (отношение равно частному двух выданных ветвей с относительной точностью 1e-15, а обратное ему и децибельная форма согласуются; дальность и сигма времени каждой ветви связаны ровно через c; выданная общая конфигурация подтверждённо равна собственным дальности и времени интегрирования сценария, а дальность радиочастотной ветви подтверждённо равна дальности оптической; C/N0 радиочастотной ветви побитно совпадает с значением блока доступности, из одного бюджета линии, а не повторного вывода; свойство ОДИНАКОВОСТИ УСЛОВИЙ MEASURED, а не утверждается -- учетверение общего времени накопления вдвое уменьшает оптическую ветвь с точностью до 1e-12 и радиочастотную с точностью до 1e-7 и оставляет отношение неизменным с относительной точностью 3.19e-9, чего не смогла бы ветвь, тайно усредняющая по чему-то другому; переопределение rf_dll_bandwidth_hz, нарушающее общее время усреднения, делает отношение null с причиной, называющей оба времени, при том что обе ветви по-прежнему выдаются; односторонний прогон делает ветвь сравнения побитно равной выпущенному основному показателю со штрафным коэффициентом ровно 1, а двусторонний воспроизводит штраф 0.5/sqrt(геометрические потери обратного пути), пересчитанный по собственному geometric_loss_db отчёта с точностью до 1e-12) |
| Самоописание отчёта о бюджете линии | Отчёт о бюджете линии указывает каждую абсолютную константу, по которой вычислялся его собственный запас, — частоту несущей, использованную для потерь в свободном пространстве, EIRP, добротность, сводные потери и член Больцмана, — а также требуемое G/T, при котором запас равен нулю, константу линии (EIRP − потери − требуемое Eb/N0), которая является единственной комбинацией, которую может зафиксировать опубликованная таблица скорость/усиление, и, когда вызывающая сторона задаёт шумовую температуру системы, усиление приёмной антенны, которое подразумевает эта добротность | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего оракула нет: это самоописание поверх уравнения, уже проверенного по опубликованной таблице контроля проекта (см. строку об односторонней линии связи). Оно зафиксировано, потому что его отсутствие было измеренным дефектом -- для воспроизведения выпущенного d1_rate_gain_beamwidth.csv требовалось обратным решением найти одну эффективную константу с точностью до 0,0034 дБ по всем тридцати строкам, а теперь движок и называет эту комбинацию, и тестом доказывает, что ни одна выпущенная таблица никогда не могла разделить её три составляющие | linkbudget | linkbudget::tests (по трём диапазонам, четырём порядкам дальности и обоим вердиктам замыкания запас и потери в свободном пространстве под ним пересчитываются по одному лишь отчёту с точностью лучше 1e-9 дБ; требуемая G/T, собранная из членов уравнения, совпадает с той же величиной, полученной как G/T минус запас, а повторный прогон на ней обнуляет запас; три бюджета с сильно различающимися EIRP, потерями и порогом, но равной константой линии дают одинаковое требование, тогда как 1 дБ на константе сдвигает его ровно на 1 дБ; разделение усиления отсутствует, пока не задана шумовая температура, а неположительная отклоняется; каждое поле, названное блоком units, действительно выдаётся) |
| Таблица перехода лунного времени по классам часов | Один прогон бюджета лунного времени выдаёт строку перехода «часы — система отсчёта» для каждого класса часов при едином общем члене системы отсчёта, так что единственной переменной в сравнении остаются часы; каждая строка несёт переход, найденный двумя способами, — делением пополам по общей степенной кривой ошибки времени и алгебраическим обращением по доминирующему типу шума в строке, — с относительной разностью между ними | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Два разных вычисления одной и той же величины внутри кодовой базы, а не одно, переформулированное: бисекция по степенной кривой IEEE-1139 ничего не знает о типе шума, тогда как замкнутая форма алгебраически обращает доминирующий тип, так что неверно определённый тип шума или плохая скобка проявляются как заметная относительная разница. Четыре значения также воспроизводят опубликованную таблицу статьи с точностью до половины последней напечатанной цифры -- но та таблица сама была восстановлена из той же замкнутой формы, так что это проверка воспроизводимости, а не внешний оракул, а член кадра, относительно которого она измерена, является модельным распределением (Modelled) | lunar_time_budget | lunar_time_budget::tests и lunar_time_budget_scenario::tests (все четыре класса присутствуют в одном прогоне и в порядке запрошенного подмножества; каждая строка согласуется со своей замкнутой формой с относительной точностью лучше 1e-12; масштабирование ошибки системы отсчёта в k раз масштабирует точку пересечения в k раз для часов с фликкер-FM и в k^2 раз для часов с белым FM, проверено при k=2 и k=3, что разделяет два класса шума; каждая строка воспроизводит пересечение для одних часов, о котором бюджет уже сообщал; каждая строка восстанавливает единый общий член системы отсчёта; неизвестное имя часов отклоняется) |
| Площадь захвата в зависимости от высоты и ширины луча | Двухосевой перебор взвешенной по диаграмме, ограниченной по высоте площади захвата поверхности по высоте передатчика и диаметру антенны с выдачей одной строки на рабочую точку, с шириной луча по половинной мощности, которую подразумевает каждый диаметр, а захват края диска сообщается как ПОРОГ — для каждой строки J/S на крае, его запас и мощность передачи, которая его замкнула бы; для каждой сетки — найденные пересечения либо явное утверждение, что край диска нигде на сетке не достигается, с указанием недостатка | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Включение множеств: отношение подавителя к сигналу входит как равномерное смещение в децибелах, поэтому захваченное множество при большей мощности передачи содержит множество при меньшей, и доля может только расти -- свойство, которого диаграмма Эйри НЕ даёт по ширине луча или высоте, где захваченная область распадается на кольца, а доля действительно немонотонна. Ни одна опубликованная таблица не даёт долю захваченного диска для лунного орбитального передатчика в зависимости от высоты и ширины луча, поэтому внешнего источника для проверки этих ячеек нет; лежащая в основе диаграмма отдельно получила Validated относительно опубликованных значений функций Бесселя и сохраняет собственную строку | antenna | antenna::tests и attack_surface::tests (сетка полна, и каждая захваченная доля лежит в [0 1]; захваченная доля не убывает с ростом мощности передачи в каждом узле; она НЕ монотонна по ширине луча или высоте, что закреплено собственным тестом, чтобы развёртку нельзя было позже сгладить; базовый узел воспроизводит существующую захваченную долю побитно; вычисление только для лимба побитно идентично последней точке полной развёртки; найденное пересечение лежит на пороге с точностью 1e-9 дБ и обрамлено) |
| Воспроизводимость бюджета ошибки лунного времени | Сценарий lunar-time-budget публикует свои выходы в виде массивов как таблицу длинной формы («индекс сетки, время усреднения, член») рядом с отчётом, так что семь кривых x(tau) по членам и итог по сумме квадратов — это выход движка, а не то, что читатель восстанавливает по описанию метода | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Только самосогласованность: опубликованный итог сверен с корнем из суммы квадратов членов в том же файле, а выданная кривая воспроизводит выпущенный p3_time_budget_curve.csv во всех 57 точках. Обе проверки используют собственные определения членов этого движка, поэтому ни одна не является независимой. Член часов опирается на опубликованные спецификации часов, но ВЕЛИЧИНЫ нижних пределов линии, системы отсчёта, релятивистского члена и эфемерид — документированные распределения бюджета без внешнего оракула | lunar_time_budget_scenario | lunar_time_budget_scenario::tests (все 57 времён усреднения x 8 членов присутствуют, индекс сетки идёт от 0 до 56 включительно и несёт по 8 строк; строка total равна корню из суммы квадратов семи соседних членов при каждом tau; таблица следует запрошенной сетке, а не зашитой в код; её выдача оставляет JSON отчёта побитно идентичным) |
| Лаборатория лунного станционного времени: holdover miniRAFS относительно LTC | Необязательный блок [time_lab] сценария lunar-time-budget моделирует часы лунной опорной станции (по умолчанию класс miniRAFS, любой названный класс или карточка устройства, подогнанная по заданным точкам стабильности), подстроенные под координатное лунное время, а затем свободно идущие или заново подстраиваемые каждые N секунд: кривая ошибки времени x(t) как корень из суммы квадратов степенного члена часов, постоянного остатка подстройки (ILLUSTRATIVE), постоянного остатка реализации LTC и включаемого по выбору члена скорости, зависящего от высоты станции; время после подстройки до 1, 10 и 100 нс (или заданных порогов) делением пополам рядом с обращением в замкнутом виде для доминирующего типа шума, а также доминирующий член на каждом заданном горизонте, всё с единицами измерения | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Только внутренняя согласованность: время до порога, найденное бисекцией, сверено с замкнутой формой, обращающей доминирующий тип шума часов, а член свободно идущих часов — с собственным членом часов бюджета. Классы часов опираются на опубликованные односуточные спецификации (их собственные строки); скорость LTC здесь заново не выводится и сохраняет собственную строку VALIDATED (Lunar coordinate time); остаток коррекции — ILLUSTRATIVE, остаток реализации — распределение бюджета, а тепловая модель не включена. Целевой уровень порядка наносекунды, описанный в материалах ICG WG-B по лунному PNT за июнь 2024, приведён как утверждение источника, а не принят как заявление; ничто здесь не является утверждением о каких-либо реальных часах станции | lunar_time_lab (over clock_specs, lunar_time_budget, lunar_time) | lunar_time_lab::tests (free_run_clock_term_is_the_budget_clock_term: при выключенной коррекции член часов равен члену часов бюджета до бита для всех четырёх классов; bisection_matches_the_closed_form в пределах 1e-9 относительно для обоих классов шума; threshold_below_the_floor_is_flagged; steering_holds_and_resets; height_term_is_opt_in_and_linear; device_card_reproduces_a_named_class; bad_inputs_are_refused); tests/lunar_station_time_lab.rs (the_block_is_additive: документ по умолчанию, таблица и сводка не меняются, а блок добавляет только собственный объект и единицы; time_to_threshold_matches_the_closed_form_through_the_scenario; clocks_are_ordered_over_the_span_where_the_model_orders_them: optical < PHM < RAFS < miniRAFS от 1 с до 7e5 с, причём пересечение кривых PHM и RAFS между 7e5 и 8e5 с закреплено как раскрытое свойство моделей часов с одним типом шума; every_time_lab_field_has_a_unit; unknown_time_lab_fields_and_clocks_are_refused) |
| Лунная геодезическая РСДБ | Задержка РСДБ в ближнем поле для земной базы, наблюдающей лунный маяк, + частные производные | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — delta_dor для плоской волны (в той же кодовой базе) в пределе дальнего поля; частные производные конечными разностями. Внешнее сравнение 0,30, вывод (остаётся на уровне MODELLED): относительно сошедшихся времён распространения света ANISE 0,10 через DE440 (75 задержек на 2024-01-01 по трём базам DSN, сформированных xval/anise-lunar-od без кода Kshana) ни одна задержка не укладывается в допуск 1 пс. Наибольшее расхождение составляет 24 мкс и вызвано аналитическим центром Луны (около 200 км от DE440), единственной мгновенной геометрией без итерации по времени распространения света (3,6 мкс) и отброшенным движением полюса; частные производные маяка различаются до 2.9e-3 относительно при пороге 1e-6. Утверждение из документации модуля о том, что приближения системы отсчёта лежат ниже точности модели, на этом уровне не выполняется. Раунд 2 для 0,30: путь через ядра (lunar_vlbi::KernelGeometry) проверен по временам распространения света NAIF SPICE в собственной строке, Lunar geodetic VLBI, kernel path; сравнение этого пути с ANISE (75/75 в пределах 1 пс, наихудшее 0,12 пс, tests/lunar_vlbi_anise_oracle.rs::kernel_delay_matches_the_anise_light_time_difference) — лишь перекрёстная проверка вычисления по ядрам, потому что решение по времени распространения света в этом стенде принадлежит самому проекту. Эта строка (аналитический путь по умолчанию) остаётся на уровне MODELLED с выводом выше | lunar_vlbi | lunar_vlbi::tests (предел дальнего поля совпадает с delta_dor; поправка ближнего поля; частные производные конечными разностями); tests/lunar_vlbi_anise_oracle.rs::near_field_delay_disagrees_with_the_anise_light_time_difference |
| Земной GNSS на лунном расстоянии | Приём земного GNSS на лунном расстоянии: слой слабого сигнала, который называет таблица 1 в P7 и для которого у движка не было модели. Для каждого спутника и каждой эпохи вычисляются угол от оси относительно надира передатчика, затмевает ли Земля прямой путь, наклонная дальность и потери в свободном пространстве, коэффициент усиления передатчика под этим углом, принимаемая мощность и отношение несущей к спектральной плотности шума; затем агрегируются только линии, проходящие порог слежения, и перебирается полный оборот орбитальной группировки, так что ответом является РАСПРЕДЕЛЕНИЕ, а не один снимок. Результат определяют три факта, и отчёт указывает каждый из них: Земля видна под углом 13,90 градуса с радиуса орбитальной группировки, поэтому ПИК луча геометрически недоступен любому лучу, идущему к Луне; остаются край главного лепестка и боковые лепестки — режим, в котором LuGRE работал у Луны в 2025; а потери на трассе L1 составляют около 208 дБ, примерно на 25 дБ больше, чем платит наземный пользователь. MEASURED на встроенной геометрии класса GPS из 24 спутников на 64 эпохах одного орбитального периода: доступность СИГНАЛА 0,375 при наилучшей линии 30,93 дБ-Гц и доступность РЕШЕНИЯ 0,000 — не более двух одновременно отслеживаемых линий, а не четырёх, нужных для определения положения. Разделение этих двух доступностей и есть главное, и отчёт не допускает их смешения: земной GNSS на лунном расстоянии — слой уровня ВРЕМЕНИ, а не положения, и априорное значение для многослойной устойчивости должно брать доступность решения. Обусловленность выдаётся по той же причине: каждый видимый спутник лежит внутри конуса шириной в пару градусов, если смотреть с Луны, так что линии визирования почти параллельны по построению. Запускается как вид earth-gnss-lunar. Переформулировано по D7: утверждение на лунном расстоянии — это ОТНОСИТЕЛЬНОЕ отношение несущей к спектральной плотности шума между спутниками в одной эпохе по измеренным двумерным диаграммам передачи (NAVCEN, Block IIR/IIR-M) плюс геометрическая видимость; абсолютное C/N0 не заявляется (Parker et al. сообщают об общих потерях 7–12 дБ). |
InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Тождества в замкнутой форме и внутренняя согласованность; внешний оракул НЕ заявляется. Половинный угол лимба сверен с asin(R_earth/r_orbit), и геометрия сверена с ним; потери в свободном пространстве, ядро DOP и распространение SGP4, которые здесь объединяются, проверены извне каждое в своей строке, и эта строка их статус не заимствует. ПОЧЕМУ MODELLED — и дело в диаграмме передачи: усиление под углом — это равномерно освещённая круглая апертура, диаграмма Эйри, тогда как реальная антенна GPS L1 — двенадцатиэлементная спиральная решётка с профилированным главным лепестком, пик которого смещён от оси, чтобы выровнять мощность по диску Земли, и с боковыми лепестками, не соответствующими Эйри. Опубликованные измеренные диаграммы существуют, но здесь не включены, поэтому порядок и порядки величин сохраняются, а децибелы отдельно взятого спутника — нет. ПЕРВАЯ РЕАЛИЗАЦИЯ ЭТОЙ СТРОКИ БЫЛА НЕВЕРНОЙ ТАК, ЧТО ЭТО СТОИТ ЗАФИКСИРОВАТЬ: выражение Эйри справедливо только в передней полусфере, его аргумент меняется как sin(theta), и при theta около 180 град оно заворачивается и возвращает ПОЛНОЕ УСИЛЕНИЕ ПО ОСИ позади апертуры -- поэтому две самые сильные линии в первом отчёте были у спутников, направлявших антенны прочь от Луны, и только эти две преодолели порог. Позади апертуры модель теперь применяет плоский нижний предел заднего лепестка, заданный как граница, а не выдуманная форма диаграммы. Намеренно отсутствуют, и каждое делает бюджет ОПТИМИСТИЧНЫМ: потери в ионосфере и тропосфере на лучах, скользящих по лимбу, поляризационные потери, потери наведения и реализации, а Земля сферическая, без рефракционного расширения. Положение Луны — ВХОДНОЙ ПАРАМЕТР, а не поиск в эфемеридах, потому что проверяемая величина — это линия и геометрия луча. Чтобы повысить эту строку до Validated, нужны измеренная диаграмма передачи и нормальные точки LuGRE для проверки; ни того ни другого в репозитории нет, и здесь они не выдуманы. Раунд 2 для 0,30, вывод (остаётся на уровне MODELLED): путь линии с измеренными входными данными (реальные положения SP3, мощность передачи по блокам, табличные диаграммы передачи и приёма, гистерезис захвата и слежения) сверен с Montenbruck et al. 2023, таблица 3, для GENESIS на 6000 км (предварительно зарегистрировано 5b414f0a): средние для антенны в зенит согласуются в 5 из 6 случаев в пределах одного дБ от чувствительности из статьи; средние для антенны в надир на 1,0 – 2,4 спутника выше напечатанных, вероятно потому, что в статье использовались зависящие от азимута боковые лепестки GPS, которые не опубликованы. Значения для лунного расстояния в этой строке по-прежнему используют заменитель Эйри. 0,30+ D7, вывод (остаётся на уровне MODELLED): пересформулированная величина — РАЗНОСТЬ C/N0 между спутниками Block IIR/IIR-M, отслеживаемыми в одну эпоху, предсказанная по измеренным диаграммам L1 для каждого SVN из NAVCEN (двумерным, в системе координат с управлением рысканием) относительно лётного C/N0 LuGRE (предварительно зарегистрировано 768cb62b: 99 % видимых, СКО пар <= 3,0 дБ, медиана <= 2,0 дБ, не менее 50 записей и 30 пар) — имеет слишком мало данных: 26 подходящих эпох транзита и лунной орбиты содержат 15 отслеживаемых записей IIR/IIR-M (в основном отслеживаются IIF и III) и одну пару. Все 15 предсказаны видимыми, а остаток единственной пары составляет -0.06 дБ; ничего не заявляется | earth_gnss_lunar | earth_gnss_lunar::tests (11 библиотечных тестов: половинный угол лимба Земли против замкнутой формы asin(R/r) с дополнительным утверждением, что КАЖДАЯ неэкранированная линия лежит вне этого конуса, так что проверка затмения и угол лимба не могут расходиться; предикат затмения проверен на ближней стороне, дальней стороне и в случае, когда тело находится ПОЗАДИ передатчика; потери на трассе ограничены правдоподобным диапазоном лунных расстояний на каждой линии; отслеживаемое множество показано как подмножество геометрически видимого и не пересекающееся с затмённым; монотонность в обоих направлениях - большее усиление приёма никогда не уменьшает число, более строгий порог никогда не увеличивает его; ни одной линии не приписано усиление больше осевого; приёмник внутри Земли отклоняется; развёртка подтверждённо РАЗЛИЧАЕТСЯ по эпохам; а доступность сигнала и решения подтверждённо различны, правильно упорядочены и согласованы со строками по эпохам); tests/earth_gnss_measured_montenbruck_oracle.rs::finding_genesis_nadir_counts_exceed_the_paper (закреплено); tests/lugre_relative_cn0_visibility.rs::too_few_iir_records_at_lunar_distance_for_the_relative_cn0_bar (закреплённый вывод) |
| Определение лунной орбиты: земной GNSS против наземных радиометрических измерений | Определение орбиты на околопрямолинейной гало-орбите (или эллиптической замороженной орбите) по двум независимым типам данных: псевдодальностям земного GNSS, принятым на борту (правило линии из строки «Земной GNSS на лунном расстоянии» плюс затмение Луной), и наземным двусторонним измерениям дальности и скорости изменения дальности с трёх станций Deep Space Network. Каждое — одношаговый пакетный метод наименьших квадратов около опорной орбиты с его формальной ковариацией; Монте-Карло с начальным значением (seed) для разности двух оценок проверяет, объясняют ли её две ковариации (q = d' (P_G + P_R)^-1 d, хи-квадрат с шестью степенями свободы при совпадении моделей), и что делает с этой статистикой немоделируемое ускорение. | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Независимая программа на scipy/numpy интегрирует те же уравнения в вариациях (порог O1). Ничего не сравнивается с измерением лунной орбиты. Оракул проверяет численные методы заданных формул, а не физику, поэтому строка остаётся на уровне MODELLED. Ограниченная модель трёх тел: без Солнца, без лунных гармоник, ось вращения Земли направлена по нормали к орбите, входные данные приёмника и станции ILLUSTRATIVE. | lunar_infra::{orbit, gnss, od} | tests/lunar_infra_od_consistency.rs (порог O1: матрица перехода состояния, цепочкой за три суток и за один период, равна scipy DOP853 с относительной точностью 1e-6; порог C1: среднее q и доля внутри 95 %; порог C2: выборочный след относительно формального для каждого оценщика; порог C3, NOT MET и закреплён: при 3e-10 м/с2 немоделируемого ускорения превышение внутри 95 % составляет 0,0525, а не не менее 0,5 - бортовая оценка известна лишь с точностью до сотен метров, так что около десяти метров смещения скрываются внутри её ковариации); lunar_infra::orbit::tests, lunar_infra::gnss::tests, lunar_infra::od::tests, lunar_infra::la::tests |
| Разрешение неоднозначностей фазы несущей на Луне: поверхность и орбитальный аппарат | Межприёмные однократно разностные фаза несущей и код земного GNSS на лунной поверхностной станции и орбитальном аппарате, с исключением разности часов для каждой эпохи, одной неоднозначностью на непрерывный проход и самым длинным проходом в качестве калибровки. Ковариация неоднозначностей с плавающей точкой — дополнение Шура; LAMBDA разрешает целые числа, вероятность, найденная методом бутстрэпа, приводится рядом с долей успеха целочисленных наименьших квадратов по Монте-Карло с начальным значением (seed) и сигмами положения для плавающего и фиксированного решений. Сообщается как найдено: при зарегистрированных 12 дБи задача двойных разностей неформируема (поправка 1 перенесла значение по умолчанию на 25 дБи после того, как были увидены только подсчёты доступности), а при 25 дБи целочисленная фиксация НЕ достигается — вне досягаемости (самое большее несколько процентов), хотя плавающее решение улучшается с длиной дуги. | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Независимое решение тех же нормальных уравнений в numpy по экспортированным строкам (Q3) и полный перебор целых чисел (Q4). Ни одно измерение фазы несущей GNSS или лунной не сравнивается. MODELLED. | lunar_infra::phase; lambda | tests/lunar_infra_carrier_phase.rs (порог Q1: успех по Монте-Карло не ниже границы бутстрепа минус три стандартные ошибки; Q2: нет падения с длиной дуги сверх трёх стандартных ошибок; Q4: LAMBDA равна полному перебору для 200 выборок размерности до пяти; Q3: проектная матрица с плавающими значениями равна независимому решению numpy с точностью 1e-9 для ковариаций неоднозначностей и положения, а бутстрепная частота NOT MET при 1e-9, закреплено: она отличается на относительную величину 1.7e-6, потому что нормальная функция распределения в LAMBDA — это приближение Абрамовица и Стегуна) |
| Совместное оценивание лунной системы отсчёта: поверхностные станции и орбитальные аппараты | Информация Фишера для семипараметрического лунного датума системы отсчёта по лазерной дальнометрии с земных станций до пяти отражателей отдельно и с добавлением измерений дальности от орбитальных аппаратов до поверхностных станций: информационная матрица, ранг, сигмы Крамера — Рао, метрика вырожденности модуля лунной идентифицируемости и случайные наборы станций с начальным значением (seed). Орбита считается известной в лунных осях (её ошибка учитывается сигмой дальности орбитального аппарата). | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Независимая конечная разность в numpy для прямой модели (F2). Ничего не сравнивается с реальными решениями лунной системы отсчёта. Коэффициент зависит от допущения об известной орбите и сигме дальности 1 м. MODELLED. | lunar_infra::frame; lunar_datum; lunar_identifiability; lunar_llr_geometry | tests/lunar_infra_studies_3_5.rs (порог F1: след CRLB не растёт, а наименьшее собственное значение не убывает при добавлении линий с орбитальным аппаратом, в примере и в 20 случайных наборах с фиксированным начальным значением; порог F2: частные производные дальности равны независимой конечной разности numpy longdouble для прямой модели Родрига на 50 геометриях; порог F3: наименьшее собственное значение растёт не менее чем в 2.0x, найдено около 111x) |
| Точность привязки систем отсчёта в космосе: совмещённые GNSS, РСДБ и лазерная дальнометрия | Точность по Крамеру — Рао межтехнологических смещений переноса, масштаба и поворота между системами отсчёта GNSS, РСДБ и лазерной дальнометрии, когда один космический аппарат несёт все три, с исключением положения аппарата в каждой эпохе и девятью мешающими параметрами локальной привязки с априорным значением, при переборе точности локальной привязки. Ковариации — методом квадратного корня (нормальные уравнения теряют разряды, когда технологии почти идеальны). | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Независимая составная система numpy, в которой неизвестные положения исключены явными дополнениями Шура (T3). Данные GRASP, Genesis и других миссий не сравниваются. MODELLED. | lunar_infra::tie; fim::crlb_srif | tests/lunar_infra_studies_3_5.rs (порог T1: сигмы смещения не падают по мере ослабления локальной привязки; T2: при сигмах методов, умноженных на 1e-6, сигма смещения каждой пары в пределах 1 % от sqrt(2), умноженного на сигму локальной привязки, найдено в пределах 3e-7; T3: информационная матрица равна независимой составной сборке numpy с точностью 1e-9). Первый прогон T2 с обращением нормальных уравнений не выполнил порог (1,3 % при привязке 0,1 м, значения ниже нижнего предела при 1 м); причина была численной, и ковариацию перенесли на квадратно-корневой путь до повторной оценки порога. |
| Чувствительность к числам Лява и либрации Луны | Информация Фишера для h2, k2, l2 и амплитуд физической либрации по лазерной дальнометрии (радиальное и горизонтальное приливное смещение, вращение отражателя), слежению за орбитальным аппаратом (ускорение k2 степени 2, проинтегрированное вдоль линии визирования, с удалённым трендом), поверхностному гравиметру (гравиметрический фактор 1 + h2 - 1,5 k2) и поверхностным часам (относительная скорость хода (1 + k2 - h2) W2/c2, привязанная к константам лунного времени). Номинальные значения h2 и l2 — точки линеаризации; исследование говорит, что к чему чувствительно, а не каковы эти числа. | ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Независимая сборка конечными разностями в numpy (G2) и вычисление в замкнутой форме (G4). Чувствительность к k2 для семейства орбитального аппарата — оценка верхнего края (состояние орбиты здесь поглощает лишь константу и тренд). Измерения лунных приливов или либрации не сравниваются; k2 приведено из Lemoine et al. 2014 как номинальное. MODELLED. | lunar_infra::geodesy; lunar_od::degree2_tide_accel; lunar_time | tests/lunar_infra_studies_3_5.rs (порог G1: аналитические частные производные равны центральной конечной разности каждой прямой модели с точностью 1e-8; G2: информационная матрица 5x5 равна независимой сборке numpy с точностью 1e-6; G4: амплитуда прилива часов и её чувствительности к k2 и h2 равны независимому вычислению с точностью 1e-9; порог G3 NOT MET в части следа, закреплено: добавление семейства никогда не снижает наименьшее собственное значение (28 из 28), но след псевдообратной матрицы вырос в 12 из 28 добавлений, потому что добавленное семейство повысило ранг) |
| Дополнение DOP маяками на лунной поверхности | Геометрический фактор DOP с дополнением маяками для лунного поверхностного пользователя: строки линий визирования видимых спутников и строки дальнометрии видимых поверхностных маяков объединяются в одну матрицу плана и вычисляются через общее ядро DOP, а полученный DOP отображается в реализованную точность 1 сигма В МЕТРАХ через эквивалентную пользовательскую ошибку дальнометрии для каждого маяка, составленную как корень из суммы квадратов членов синхронизации часов, многолучевости и привязки. Видимость маяков — геометрический горизонт безвоздушной Луны для двух высот, у которого нет рефракционного расширения, и потому он точен, а не приближён. Запускается как вид сценария lunar-beacon, который сообщает результаты для одних спутников, спутников плюс маяков и более крупной орбитальной группировки как конкурирующего пути к той же геометрии. MEASURED на встроенной эталонной геометрии (пользователь на -80 градусах, три привязанных маяка, иллюстративная LCNS из шести спутников при t=0, маска 5 градусов): 5 видимых спутников дают PDOP 9,6941 и 3-D 1 сигма 11,222 м; добавление маяков, которые действительно выходят за горизонт, даёт PDOP 4,1160 и 4,765 м, выигрыш в 2,355 раза; служба из 24 спутников вместо этого даёт PDOP 2,4226 и 2,804 м, выигрыш в 4,002 раза. Отчёт печатает число ВИДИМЫХ маяков, а не настроенное, и на этой геометрии за горизонт выходит только ОДИН из трёх маяков: два боковых пункта находятся примерно в 333 км от пользователя при горизонте 86 км для антенны высотой 2 м, так что читателю не приходится считать, что вклад внесли все три |
ReferenceImpl | сверено с отдельной реализацией в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Арифметика DOP — это ядро crate::orbit::dop, отдельно проверенное извне относительно gnss_lib_py в tests/dop_reference.rs; эта строка не заимствует статус той строки повторно. Горизонт видимости маяка — замкнутая форма L01, а sigma = DOP x sigma_URE — стандартное соотношение GNSS (Kaplan and Hegarty, Understanding GPS/GNSS, раздел 7). В пределах этой строки само усиление проверено по независимому пути DOP в репозитории и закреплено по зафиксированному эталону. ПОЧЕМУ MODELLED: проект орбитальной группировки, расстановка маяков, высоты антенн и все три величины бюджета ошибок — иллюстративные входные данные, а не полевая съёмка или измеренная линия, поэтому приведённые метры — свойство выбранного сценария, а не какой-либо развёрнутой службы. ЗАМЕЧАНИЕ О ПРОИСХОЖДЕНИИ: эта возможность была объявлена в README и проверялась двумя тестами валидации, но НЕ имела ни строки матрицы, ни вида сценария, так что до неё вообще нельзя было добраться из прогона. Она была заявлена в тексте, отсутствовала в реестре и была недоступна в движке одновременно. Строка и вид добавлены вместе. Раунд 2 для 0,30 (предварительно зарегистрировано db0eb9ec), заблокирован (остаётся на уровне MODELLED): видимость по ANISE 0.10.6 и DOP в numpy на геометрии строки согласуются (множества видимости точны, включая 72 случая у горизонта и 48 случаев у маски; DOP в пределах 7.2e-13), но приведённые метры — это DOP, умноженный на иллюстративную СКО дальности в 1,158 м по корню из суммы квадратов, без оракула; сужение формулировки, которое исключило бы их, ожидает решения владельца | lunar_beacon | lunar_beacon::tests (видимость по горизонту против замкнутой формы L01; DOP с усилением маяками против исходного; корень из суммы квадратов бюджета ошибок; соотношение DOP и метров); tests/validate_p2_beacon_before_after_table.rs (вся таблица «до/после» закреплена по зафиксированному эталону с относительной точностью 1e-9); tests/validate_p2_beacon_before_after_independent_dop.rs (та же геометрия через НЕЗАВИСИМЫЙ путь DOP, так что усиление проверяется не относительно ядра, которое его выдало); tests/validate_lunar_beacon_anise_visibility_dop.rs::beacon_visibility_and_augmented_dop_match_anise_and_numpy |
| Уровень защиты от синфазных ошибок и полная огибающая целостности | cmpl_horizontal ограничивает k-сигмовую горизонтальную ошибку положения, вносимую слепым классом общего режима, формируя blind_position_covariance = SCovS^T и проецируя её в ENU; integrity_envelope сообщает hpl_total = hpl_araim + cmpl. Различие, ради которого существует эта пара: тест ОСТАТКОВ RAIM/ARAIM доказуемо слеп к ошибкам из range(G), но УРОВЕНЬ ЗАЩИТЫ ARAIM — нет: его член без неисправностей уже ограничивает их вплоть до URA провайдера плюс номинальное смещение. Поэтому CMPL — это лишь межпровайдерный ИЗБЫТОК, который URA/ISM отдельного провайдера не перекрывает, а сумма — консервативная граница по неравенству треугольника, а не RSS, справедливая только там, где этот избыток ещё не входит в URA. | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Алгебра аналитических проекторов, проверенная сама по себе: ковариация, заключённая в range(G), должна давать положительный CMPL, ковариация, заключённая в пространстве чётности, — примерно нуль, а огибающая должна суммировать два вклада, ортогональных в пространстве измерений. Ковариация общего режима, геометрия орбитальной группировки и k — репрезентативные входные данные уровня Modelled, а НЕ сертифицированный бюджет, и не заявляется, что граница по неравенству треугольника точная. ЗАМЕЧАНИЕ О ПРОИСХОЖДЕНИИ: cmpl_horizontal, blind_position_covariance и integrity_envelope открыты и поставляются, а их модульные тесты уже цитировались строкой о слепоте общего режима, но САМО УТВЕРЖДЕНИЕ ОБ ОГИБАЮЩЕЙ строки не имело -- поэтому единственная оговорка, сохраняющая его честность (сумма — граница по неравенству треугольника, а не RSS), нигде в реестре не была изложена. Строка регистрирует утверждение и оговорку вместе. | lunar_common_mode | lunar_common_mode::tests (common_mode_covariance_gives_positive_cmpl, parity_only_covariance_gives_near_zero_cmpl, envelope_sums_the_two_classes, state_map_matches_split) |
| Наблюдаемость абсолютного положения лунных станций (дефект датума) | Наблюдаемость по информации Фишера для совместного лунного решения: без земных баз датум абсолютной системы отсчёта лежит в нуль-пространстве HᵀWH (положение станции ненаблюдаемо); ≥3 баз восстанавливают полный ранг и ограничивают ошибку станции по Крамеру — Рао, которую достигает оцениватель | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Аналитическая структура дефекта датума — ненаблюдаемая мода абсолютной системы отсчёта лежит в нуль-пространстве информации Фишера (замкнутая форма), порог ранга совпадает с опубликованным обоснованием схемы с 3 станциями, а оценщик достигает получающейся CRLB по Монте-Карло. Сама лунная геометрия — репрезентативная сеть (не пролетевшая эфемерида), поэтому строка остаётся на уровне MODELLED; лежащий в основе движок FIM/CRLB отдельно проверяется по замкнутым формам Kay (1993). Раунд 2 для 0,30 (предварительно зарегистрировано fab02df9), заблокирован (остаётся на уровне MODELLED): NumPy/SciPy пересчитывают ранг и дефект при заявленном пороге 1e-9, долю осей станции в нуль-пространстве (в пределах 8.4e-10) и CRLB станции (в пределах 1.2e-10) на 17 зафиксированных конфигурациях, сгенерированных Kshana (P2). Не повышено: утверждение, что оценщик достигает границы (эффективность по Монте-Карло около 0,98), оракула не имеет, а сужение формулировки, которое оставило бы его на уровне MODELLED, ожидает решения владельца | lunar_combination (lunar_observability) + fim | lunar_combination::tests (ранг неполон без земных баз; три базы восстанавливают полный ранг — порог в 3 станции определяется рангом информации, а не ошибкой решения; CRLB станции достигается оценщиком с эффективностью 0,98; CRLB монотонно ужесточается с числом баз); tests/lunar_observability_numpy_oracle.rs::lunar_observability_matches_numpy_on_the_committed_jacobians |
| Генерация расширяющих кодов LunaNet AFS (LSIS V1.0) | Коды Augmented Forward Signal из LSIS V1.0 (29 января 2025): первичный код AFS-Q из 10230 чипов, сформированный по построению пилота L1C из IS-GPS-800 с индексами IS-GPS-800J (те же 210 назначений, что печатает приложение D LSIS), коды Голда AFS-I из 2046 чипов, сформированные по g1 = x^11 + x^2 + 1 и g2 = x^11 + x^8 + x^5 + x^2 + 1 с задержкой G2 каждого PRN, восстановленной по файлу приложения 3 стандарта, четыре вторичных кода, третичные коды из 1500 чипов, временное назначение узлов по таблице 11 и ярусный пилотный код. Содержимое LSIS считывается во время выполнения из локального кэша, проверенного по SHA-256 и заполненного из размещённого NASA PDF, и никогда не распространяется заново | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Эталон: значения, которые LSIS V1.0 печатает для валидации (таблицы C-1 – C-5, D-1 – D-6, E-1 – E-6), и его файлы электронных кодов приложения 3 при критерии нулевого расхождения, заданном до сравнения. Критерий не выполнен из-за одной напечатанной ячейки, внутренне не согласующейся с собственным файлом приложения 3 стандарта, поэтому строка остаётся на уровне MODELLED; составлена заметка об опечатке. Те же элементы кода равны и элементам LANS-AFS-SIM (строка «LunaNet AFS baseband rendering against an independent generator, given its channel state») | lunar_afs::codes, lunar_afs::lsis, lunar_afs::params (индексы IS-GPS-800J) | lunar_afs::codes::tests (регистры максимальной длины, баланс Лежандра, круговой проход задержки G2, композиция уровней); tests/lunar_afs_codes_lsis_reference.rs::afs_codes_finding_one_misprinted_table_cell (без кэша LSIS: четыре приведённых числа закрепляют вывод; с ним: 2 937 232 элементов кода и битов против файлов приложения 3 LSIS, напечатанные первые/последние 24 элемента кода, таблицы Лежандра D-1 и E-1 и инициализации G2 дают ровно одно расходящееся значение — ячейку «последние 24 элемента кода» для PRN 147 в таблице E-5, которая дублирует ячейку PRN 151, тогда как файл приложения 3 согласуется с генератором); строгий предварительно зарегистрированный тест afs_codes_match_lsis_v1_tables_and_annex3_bit_exact пропускается из-за этого расхождения |
| Декодируемость LunaNet AFS в замкнутом контуре независимым приёмником (LSIS V1.0) | Запись Kshana AFS, захваченная, отслеженная и декодированная независимым программным приёмником и сопоставленная с собственными истинными метками записи. Это доказывает только соответствие стандарту и согласованность меток; это не утверждение о физике канала, распространении, принимаемой мощности или бюджетах линии, значения которых в записи — выбранные входные данные | ExternalDataset | частное утверждение проверено извне, но вся возможность составлена из модельных частей, поэтому она остаётся смоделированной — Библиотека: PocketSDR-AFS (T. Ebinuma по PocketSDR 0,13 T. Takasu, BSD-2-Clause, коммит 5b23809f30d68518b7fad7a564fd0fac57cc497d, сборка для S-диапазона, копия только с печатью уровня журналирования), при критериях, заданных до каждого прогона. Третье предварительно зарегистрированное сравнение полностью выполняет пороги декодирования и слежения C1 и C2, но не выполняет охранный порог G0 в написанном виде (два прогона неизменённого приёмника различаются в одних и тех же четырёх записях захвата), а второе не выполнено на 5 нарушений, поэтому строка остаётся на уровне MODELLED. LANS-AFS-SIM и PocketSDR-AFS имеют общего автора и считаются одной независимой реализацией; проверки напечатанных векторов в строке о кодировании кадров защищают от общего неверного прочтения | lunar_afs::waveform (запись и метки истины), xval/lunar-afs/run_pocketsdr.sh | tests/lunar_afs_decodability_pocketsdr_v3_oracle.rs::third_run_finding_c1_c2_hold_g0_is_receiver_nondeterminism (третья предварительная регистрация: 2 узла, отслежено 4 канала, наихудшая ошибка Доплера 0,57 Гц, наихудшая ошибка смещения кода 0,008 элемента кода, все 6 кадров декодированы с правильным TOI через переход 99 -> 0 и совпадающий подкадр 2; G0 не выполнен в написанном виде — из-за собственной разницы между прогонами приёмника в его записях захвата); tests/lunar_afs_decodability_pocketsdr_4bit_oracle.rs::decodability_finding_five_violations (вторая: 5 нарушений); tests/lunar_afs_decodability_pocketsdr_oracle.rs::first_run_finding_no_acquisition_outside_the_receivers_4_bit_range (первая: недействительна); строгие тесты из трёх файлов пропускаются из-за их расхождений |
| Кросс-генераторное соответствие GPS L1 C/A | Расширяющие коды GPS L1 C/A (sdr::CaCode) и подкадры LNAV 1–3 (gps_lnav: квантование полей по IS-GPS-200 со значением числа пи из спецификации, упаковка в дополнительном коде, слова TLM и HOW, чётность по таблице 20-XIV с инверсией D29*/D30*, биты, решающие чётность, в словах 2 и 10), сравнённые бит в бит с gps-sdr-sim на его поставляемом brdc0010.22n (32 спутника) | InternalConsistency | сверено с собственным замкнутым / аналитическим тождеством — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — gps-sdr-sim (MIT, коммит 28ca29a6, запущен как отдельная программа через зафиксированный стенд), предварительно зарегистрировано f88f2969 с побитовым порогом на (A) элементы кода C/A, (B) каждое вычисленное поле LNAV, (C) каждый бит чётности. ВЫВОД: (A) различаются 0 из 32 736 элементов кода, (C) чётность различается в 0 из 1 920 слов, (B) 230 из 1 152 вычисленных полей различаются на единицу: eph2sbf в gps-sdr-sim усекает к нулю приведениями типов C там, где для широковещательного целого нужно округление (каждое расходящееся значение лежит в пределах 0,01 единицы от округлённого целого Kshana). Остаётся на уровне MODELLED: зарегистрированный порог был конъюнкцией | gps_lnav, sdr | tests/gps_l1ca_gpssdrsim_cross_generator.rs::gps_sdr_sim_truncates_where_the_broadcast_integer_needs_rounding (закреплённый вывод); tests/gps_l1ca_gpssdrsim_cross_generator.rs::ca_codes_lnav_fields_and_parity_match_gps_sdr_sim_bit_exactly (строгий, пропускается из-за расхождения); gps_lnav::tests |
| Захват GNSS IQ на независимо сформированных отсчётах I/Q | iq::acq::acquire (параллельный поиск фазы кода по БПФ с порогом Marcum-Q для квадратичного закона) с репликой GpsL1Ca на 20 мс собственного 8-битного выхода I/Q gps-sdr-sim, декодированного декодером отсчётов iq::io (ci8, 2,6 МГц, 11 спутников, без шума): каждый PRN с 1 по 32 ищется в двух окнах по 10 мс, результат сравнивается с фазой кода и Доплером, которые промодулировал gps-sdr-sim | ExternalDataset | подтверждена внешней проверкой одна из частных гипотез, но возможность в целом составлена из смоделированных частей, поэтому она остаётся Modelled — отсчёты I/Q gps-sdr-sim (MIT, коммит 28ca29a6) и его собственное состояние канала, предварительная регистрация 7777da53: (B1) захвачен каждый смоделированный PRN, (B2) никакой другой PRN не захвачен, (B3) кодовая фаза в пределах 0,5 элемента кода, (B4) доплеровский сдвиг в пределах 125 Гц. РЕЗУЛЬТАТ: B1, B3 и B4 выполняются в обоих окнах (худшие значения 0,195 элемента кода, 72 Гц), но B2 не выполняется: все 21 PRN, которые gps-sdr-sim не моделировал, также пересекают порог (статистика от 151 до 206 при пороге 79,5; смоделированные PRN — 1 300 и выше). Порог задан для гауссова шума измеренной мощности отсчётов; gps-sdr-sim шум не добавляет, поэтому ячейки отсутствующего PRN содержат взаимную корреляцию других спутников. Остаётся MODELLED: зарегистрированный порог представлял собой конъюнкцию | iq::acq (acquire, AcqConfig); iq::io (decode_samples); iq::scene (GpsL1Ca) | tests/iq_gpssdrsim_cross_generator.rs::acquisition_threshold_is_crossed_on_gps_sdr_sim_noise_free_samples (зафиксированный результат); tests/iq_gpssdrsim_cross_generator.rs::acquisition_finds_gps_sdr_sim_satellites_in_its_samples (строгий, игнорируется вместе с пробелом) |
| Мониторы IQ, оцениваемые в кампаниях лабораторного воспроизведения: обнаружение, пропуски, ложные тревоги и показатели ложной тревоги в замкнутом виде | iq::campaign::detect и исполнитель кампании: необязательная таблица [monitors] запускает мониторы IQ на каждой ячейке за единый проход исполнителя. Мониторы мощности и спектра видят отсчёты после каждой цепочки входного каскада; мониторы C/N0, SQM и захвата видят обновления контуров каждого отслеживаемого канала. Каждая тревога оценивается по заявленным событиям: обнаружено или пропущено для каждой тройки (событие, вид тревоги, канал), время обнаружения и ложные тревоги вне событий за время их экспозиции. Для каждого теста указан показатель ложной тревоги в замкнутом виде: мощность на блок (точный хвост гамма-распределения), избыток спектра на блок (приближение), эксцесс (односторонний гауссов), импульсы (биномиальный потолок), SQM на усреднённое обновление (2Q(k) = Q(1/2, k^2/2), новое) и ARL0 для CUSUM по C/N0 (Siegmund). Без таблицы ячейки, ключи и дайджесты не меняются. Помеховый сигнал не синтезируется | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Собственные замкнутые формы мониторов на собственных сценах GPS L1 C/A Kshana (шум и легитимные сигналы; события ослабления собственных сигналов спутников) относительно порогов, предварительно зарегистрированных в docs/design/MONITORS-IN-CAMPAIGN.md (382ab2f4). РЕЗУЛЬТАТ: M1, M2 и M4 выполнены (met). M3 выполнен по обнаружению (18 из 18 ослаблений, P_md 0) и NOT MET по условию о времени: медианное время обнаружения составляет 1,001 с против 2 x ARL1 отсчётов = 0,433 с. CUSUM видит одну оценку на окно в 1 с, поэтому граница в числе отсчётов меньше одного отсчёта. Только внутренняя согласованность: ни реальный приёмник, ни записанные помехи не проверяются | iq::campaign (detect, runner, spec); iq::monitor (stats::gaussian_two_sided_pfa, sqm) | tests/iq_campaign_monitors.rs: m1_power_test_false_alarm_rate_matches_the_closed_form (73 из 5900 блоков при 99 % биномиальном интервале [40, 80] для P_fa 0,01), m2_sqm_false_alarm_fraction_is_within_a_factor_of_2_of_2q_k (delta 0,0160, ratio 0,0131 при 0,01), m4_cn0_false_alarms_stay_within_the_poisson_bound_of_arl0 (0 при 0), the_monitors_table_parses_and_validates; m3_every_attenuation_is_detected_within_twice_the_arl1 (строгий, игнорируется вместе с пробелом); тесты iq::campaign::detect; тесты iq::monitor::stats (gaussian_two_sided_tail_matches_known_values); tests/iq_campaign.rs (зафиксированные дайджесты не меняются без таблицы) |
| ROC обнаружения мониторов IQ по оценённой кампании лабораторного воспроизведения | iq::campaign::detect (windows, roc) и iq::campaign::report::rocs: каждая ячейка кампании с мониторами хранит для каждого вида тревоги и канала максимум собственной тестовой статистики монитора по каждому заявленному окну события (положительные) и по разбитым на плитки окнам roc_window_s вне событий (отрицательные). Статистики — отклонение мощности блока, избыток PSD, эксцесс z, |z| SQM усреднённой метрики и CUSUM по C/N0. Отчёт объединяет их по видам в эмпирическую ROC на уровне окон с её AUC и рабочей точкой при заданном пороге, записанную как roc.json (kshana.campaign-roc/1) и раздел Detection ROC в report.html. Кампания без мониторов не пишет ни того ни другого | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Синтетические кампании на собственных сценах GPS L1 C/A Kshana (ослабления собственных сигналов спутников) относительно порогов, предварительно зарегистрированных в docs/design/DETECTION-ROC.md (b47e358d). РЕЗУЛЬТАТ: R2 выполнен (уровень случайности, когда обнаруживать нечего). R1 NOT MET: AUC cn0_drop 0,7855 при пороге 0,95, потому что каждое отрицательное окно после события наследует от обнаружения спад CUSUM (все 18 послесобытийных отрицательных окон достигают 81 или больше; все 18 дособытийных остаются на 0). Только внутренняя согласованность: ни реальный приёмник, ни записанные помехи не проверяются | iq::campaign (detect, report, runner); iq::monitor::spectral (kurtosis_reference) | tests/iq_campaign_roc.rs: r2_with_nothing_to_detect_the_roc_sits_at_chance (AUC cn0_drop 0,500, sqm_delta 0,566, power_drop 0,639 на заданных событиях, которые ничего не ослабляют); r1_the_cn0_drop_roc_separates_6_db_attenuations (строгий, игнорируется вместе с пробелом); тесты iq::campaign::detect (the_roc_of_separated_and_of_identical_samples, windows_tile_the_time_outside_the_events) |
| Калибровка моделей C/N0 и захвата открытого приёмника по результатам кампаний IQ с заявленной ошибкой прогноза | iq::labfit (campaign, cn0, iqfit, iqreport) и [input] campaign на kshana iq labfit, Python kshana.iq_labfit и инструмент labfit для MCP (только папки кампаний внутри его рабочего каталога): читает выходную папку kshana iq campaign по её ДАЙДЖЕСТУ и группирует оценённые ячейки в единицы подгонки (сигнал x структура контура x цепочка входного каскада x тип помехи, никогда не объединяются). Для каждой единицы подгоняет измеренное C/N0 к заявленному J/S в форме спектрального разделения. Q_eff не идентифицируется по данным C/N0 без независимого измерения мощностей помехи и сигнала, поэтому Q задаётся, а не подгоняется (таблица типов, q события или для неизвестного типа наиболее вредное заявленное значение, cw Q = 1). Подгоняемый параметр — идентифицируемое смещение delta_eff = delta - 10 log10 Q, а защита по корреляции сообщает о вырожденности. Ячейки C/N0 с захватом ниже 90 % цензурируются и перечисляются. Пороговое J/S задаётся напрямую и в замкнутом виде; модели слежения и эмпирического захвата связаны через модель C/N0 с интервалами срыва и повторного захвата. Кластерный бутстрэп по записям с начальным значением (seed) (1000 реплик) даёт перцентильные интервалы; 90 % интервалы прогноза получают из розыгрышей остатков; отложенные проверки с исключением одной записи делятся на интерполяцию и экстраполяцию; зарегистрированная заранее таблица [validation] хешируется, и каждый порог оценивается как PASS/FAIL. Отчёт kshana.labfit-iq/1 в виде JSON, CSV и сгенерированного Markdown с блоком единиц. Только синтетика (без записи третьей стороны, без сигнала помехи). Путь labfit по журналу приёмника не изменён |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Синтетическое восстановление параметров на собственных сценах GPS L1 C/A Kshana с известным профилем C/N0, заданным по формуле раздела 3,1, со сопровождением и оценкой с помощью kshana iq campaign, относительно порогов, предварительно зарегистрированных в docs/design/LABFIT-FROM-IQ.md (раздел 5,1, изменён 2026-10-12 в b7117bf, раздел 13). Оценщик C/N0 кампаний (M2M4) зафиксирован в 5b13e3c2 и отправлен до первой оценки порога (закоммичен вместе с кодом подгонки, а не отдельно) после одного раскрытого диагностического прогона сопровождения. РЕЗУЛЬТАТ на кампании из 18 событий с порогом: (c) PASS; (a') NOT MET, ошибка delta_eff -1.097 дБ при пороге 0,5 дБ (всё ещё -0.89 дБ в интервалах от 38 дБ-Гц и выше); (b') NOT MET, 0 из 50 кампаний охватывают истинное значение (ошибка -1.189 +/- 0,093 дБ, интервал около 0,3 дБ); (d) NOT MET, замкнутая форма на 2,20 дБ ниже прямого J/S в момент потери, около подогнанного падения, умноженного на время выдержки и на скорость нарастания (2,09 дБ); исходные условия по Q в (a) и (b) NOT MET, потому что Q не идентифицируем. ПРОДОЛЖЕНИЕ (пороги предварительно зарегистрированы в 1e532f84, docs/design/evidence/labfit-followup/RESULTS.md): на кампании со ступенчатым J/S delta_eff восстанавливается с точностью +0,185 дБ (S1 MET: ошибка при нарастании объясняется запаздыванием оценщика); (d) в исходной формулировке на ней выполняется для модели петли слежения (0,45 дБ), но не для эмпирической (6,42 дБ), поэтому S2 NOT MET; на новой кампании с нарастанием (d) с подогнанным падением, умноженным на время выдержки, плюс скорость нарастания каждого события укладывается в 1 дБ для обеих моделей (R1 MET), а (a') и (d) в исходной формулировке снова не выполняются (-1.25 дБ; 2,32 и 9,47 дБ). Проверен метод, а не какой-либо приёмник: по синтетическим данным он не может быть VALIDATED | iq::labfit (campaign, cn0, iqfit, iqreport, schema, mod); iq::cli::labfit | tests/iq_labfit_campaign.rs: bar_c_holdout_prediction_intervals_cover_between_80_and_98_percent (покрытие PI90 0,891 по 558 интервалам, 0,900 по 10 событиям времени до потери при каждой модели захвата), the_report_carries_its_inputs_censoring_validation_and_labels (входные данные, цензурирование, хеш и вердикты [validation], аудит блока единиц), the_cluster_bootstrap_reproduces_from_the_campaign_and_seed, a_validation_mode_fit_refuses_to_start_without_its_table; bar_a_prime_delta_eff_is_recovered_and_q_is_stated_not_fitted, bar_d_closed_form_threshold_matches_the_direct_estimate_within_1_db и bar_b_prime_ci_subset (строгие, игнорируются вместе с пробелом); bar_b_prime_full_set_of_50_campaigns (игнорируется, запускается перед выпуском); тесты iq::labfit::cn0 (точное вырождение Q-delta, восстановление delta при заданном Q, обращение замкнутой формы порога); тесты iq::labfit::iqfit (условия модели захвата точно воспроизводят модель C/N0); tests/iq_labfit_followup.rs (продолжение, зарегистрированное в 1e532f84: s1_delta_eff_on_the_stepped_campaign MET, s2_d_as_written_on_the_stepped_campaign с проверкой записанного NOT MET, r1_dwell_corrected_d_on_the_fresh_ramp_campaign MET, в режиме release) |
| Кодирование GPS LNAV, декодированное независимой библиотекой приёмника | Подкадры LNAV 1–3 Kshana (gps_lnav::encode_subframes) для 32 эфемерид brdc0010.22n, поданные в decode_word и decode_frame RTKLIB: чётность каждого слова, декодирование подкадров с согласованным выпуском данных и каждый декодированный параметр относительно целого числа Kshana и входного значения | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — decode_word/decode_frame из RTKLIB v2.4.2-p13 (BSD-2-Clause, коммит 71db0ffa) как отдельная программа, предварительная регистрация ca5f0142: R1 чётность и декодирование, R2 декодированное значение равно целому числу Kshana, умноженному на масштаб IS-GPS-200, с относительной точностью 2^-52, R3 в пределах половины кванта от входного значения. РЕЗУЛЬТАТ: R1 960 из 960 слов и 96 из 96 подкадров; R3 каждый параметр, неделя и опорные времена точны; R2 не выполняется для 41 значений (af1, delta-n, IDOT) на 1–4 единицы в последнем разряде, потому что P2_43 в RTKLIB — это десятичное число 1.136868377216160E-13, на 2.6e-16 относительно отличающееся от 2^-43; деление на константу RTKLIB во всех случаях возвращает целое число Kshana. Остаётся MODELLED: зарегистрированный порог R2 оказался слишком жёстким для собственной константы оракула | gps_lnav | tests/gps_lnav_rtklib_decode_oracle.rs::rtklib_recovers_every_integer_and_differs_only_by_its_decimal_two_to_the_minus_43 (зафиксированный результат); tests/gps_lnav_rtklib_decode_oracle.rs::kshana_lnav_subframes_decode_in_rtklib_to_the_broadcast_parameters (строгий, игнорируется вместе с пробелом) |
| Кодирование навигационного сообщения GPS LNAV | Подкадры LNAV 1–3 по IS-GPS-200 (gps_lnav::encode_subframes: квантование с округлением до ближайшего каждого параметра часов и орбиты при масштабных множителях и значении числа пи из спецификации, упаковка в дополнительном коде, слова TLM и HOW, чётность по таблице 20-XIV с инверсией D29*/D30*, биты, решающие чётность, в словах 2 и 10) — сообщение, которое передаёт генератор сигнала GPS L1 C/A | ExternalDataset | подтверждена внешней проверкой одна из частных гипотез, но возможность в целом составлена из смоделированных частей, поэтому она остаётся Modelled — разбор readrnx из RTKLIB v2.4.2-p13 (BSD-2-Clause, коммит 71db0ffa) ежедневного навигационного файла IGS BRDC00IGS_R_20250610000_01D_MN.rnx и декодирование слов Kshana через decode_word/decode_frame, запущенные как отдельная программа; предварительная регистрация d4d9eb9d до получения файла, порог — точное совпадение целых чисел. Мутация: усечение вместо округления даёт 235 отказов. Более ранние сравнения того же кодировщика зафиксированы как результаты: с gps-sdr-sim, который усекает (230 полей), и со масштабированными значениями RTKLIB, чья десятичная константа 2^-43 не уложилась в порог в один младший разряд (41 значений). Последующая проверка интегратором (остаётся MODELLED): сравнение согласуется, и мутация набора чётности тоже даёт красный результат, но предварительная регистрация d4d9eb9d попала в публичную ветку в 20:02:29 UTC, через две секунды после коммита результата 1783f904 (20:02:27 UTC), уже содержащего вывод RTKLIB для этого файла, поэтому порядок «зарегистрировано до получения файла» показать нельзя; новая регистрация, отправленная до получения ранее не виденного навигационного файла, решила бы вопрос | gps_lnav | tests/gps_lnav_rtklib_integer_oracle.rs::kshana_lnav_integers_decode_in_rtklib_from_an_unseen_broadcast_file (32 спутника навигационного файла IGS от 2 марта 2025: 960 из 960 слов проходят проверку чётности RTKLIB, 96 из 96 подкадров декодируются, 608 из 608 декодированных целых чисел эфемерид равны числам Kshana, каждый вход в пределах половины кванта, неделя и времена точны); gps_lnav::tests |
| Захват и оценка C/N0 на реальных лунных IQ | Параллельный поиск фазы кода (acquisition::pcps_acquire: переносимое БПФ, когерентное свёртывание, некогерентное накопление, порог хи-квадрат для вероятности ложной тревоги по всему поиску), уточнение, разомкнутая мгновенная корреляция с доплеровским сдвигом кода и оценщик C/N0 M2M4, запущенные на пакетах IQ LuGRE L1 с 4-битными отсчётами, считанных через realdata::ion_sdr | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — GNSS-SDR 0.0.19 (GPL-3.0, отдельная программа, зафиксированная конфигурация) на девяти неповерхностных пакетах L1 и на RAW C/N0 лётного приёмника (данные миссии LuGRE, Zenodo 16411687, CC BY 4,0), предварительная регистрация 768cb62b. РЕЗУЛЬТАТ: считыватель Kshana декодирует все 288 сравниваемых отрезков так же, как независимый конвертер; GNSS-SDR объявляет положительными 266 из 288 поисков, и Kshana согласуется по всем 266 решениям, но лишь 250 локализованы в ячейке GNSS-SDR (A2 не выполняется); ветвь C/N0 пуста, поскольку ни одна лётная эпоха RAW не лежит в пределах 30 с от какого-либо пакета (ближайшая — 141 с). Большинство положительных результатов — артефакты: «голые» уровни в дополнительном коде имеют среднее -0.5 по I и Q, то есть линию нулевой частоты на 32 дБ выше шума в полосе 1 кГц, которую захватывают оба приёмника. Два пакета (OP5, OP12) были исключены по ошибке: прочтение их метаданных с отброшенными цифрами приняли за противоречие их заголовкам; реальная причина состояла в том, что считыватель не мог прочитать отсчёт шире слова (с тех пор исправлено). Остаётся MODELLED | acquisition, portable_math, realdata::ion_sdr, realdata::lugre | tests/lugre_acquisition_gnss_sdr_oracle.rs::finding_dc_artefacts_and_no_contemporaneous_flight_cn0 (зафиксированный результат, зависит от данных); tests/lugre_acquisition_gnss_sdr_oracle.rs::acquisition_and_relative_cn0_on_lugre_iq_match_gnss_sdr_and_the_flight_receiver (строгий, игнорируется вместе с пробелом); acquisition::tests; realdata::ion_sdr::tests; realdata::lugre::tests |
| Захват на реальных лунных IQ относительно предсказанного по орбите Доплера (решение по мощности отсчётов) | acquisition::pcps_acquire с решением по мощности отсчётов на девяти неповерхностных пакетах LuGRE L1 с уровнями mid-rise; разности Доплера между захваченными спутниками сравниваются с разностями, предсказанными по окончательным орбитам ESA и реконструированной Firefly траектории Blue Ghost | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Предсказанный доплеровский сдвиг по окончательным орбитам ESA/ESOC и восстановленной траектории NAIF CLPS (xval/lugre-predicted-doppler/predict.py, независимо от Kshana), предварительная регистрация 0d1839d2. РЕЗУЛЬТАТ: все 288 поисков пересекают порог на шуме (статистики мощности отсчётов около 430–520 при пороге 346,3), поэтому P1 выполняется тривиально и P3 выполняется (274 из 288 предсказаны видимыми), тогда как P2 не выполняется на 4033 из 4036 пар. Ограниченный по полосе входной тракт повышает шум каждой ячейки примерно в 1,46 раза (зафиксировано: уровень шума 292 против 200 для белого шума на OP2 PRN 1), чего статистика мощности отсчётов не видит. Остаётся MODELLED | acquisition, realdata::ion_sdr | tests/lugre_acquisition_predicted_doppler_oracle.rs::noise_alone_crosses_the_sample_power_threshold_on_lugre_iq (зафиксированный результат, зависит от данных); tests/lugre_acquisition_predicted_doppler_oracle.rs::acquired_doppler_differences_on_lugre_iq_match_the_orbit_prediction (строгий, игнорируется вместе с пробелом) |
| Захват на реальных лунных IQ с оценкой по предсказанному по орбите Доплеру | acquisition::pcps_acquire с решением по усреднению ячеек (пик относительно средней ячейки сетки, устойчивое к шуму с ограниченной полосой) на девяти неповерхностных пакетах LuGRE L1 с уровнями mid-rise; разности Доплера между захваченными спутниками сравниваются с разностями, предсказанными по окончательным орбитам ESA и реконструированной Firefly траектории Blue Ghost | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Предсказанный доплеровский сдвиг по окончательным орбитам ESA/ESOC и восстановленной траектории NAIF CLPS (xval/lugre-predicted-doppler/predict.py, независимо от Kshana), предварительная регистрация a81a9a4e. РЕЗУЛЬТАТ: P1 и P3 выполняются (4 пакета, 12 из 12 захватов предсказаны видимыми), но P2 не выполняется на 8 из 8 пар. Две самые сильные пары совпадают с предсказанием по модулю при обратном знаке (OP2 PRN 18/24: измерено +7670,0 Гц, предсказано -7693.9; OP17 PRN 11/30: +11155,0, -11114.4), так что зарегистрированный порядок с I в младшем полубайте является сопряжённым по отношению к пакетам; шесть обнаружений чуть выше порога не совпадают ни с одним знаком. Разброс доплеровского сдвига при уточнении (от 30 до 50 Гц между двумя прогонами) также был занижен регистрацией. Остаётся MODELLED | acquisition, realdata::ion_sdr | tests/lugre_acquisition_cell_average_doppler_oracle.rs::strong_pairs_match_the_prediction_only_with_the_doppler_sign_reversed (зафиксированный результат, зависит от данных); tests/lugre_acquisition_cell_average_doppler_oracle.rs::cell_average_acquisitions_on_lugre_iq_match_the_orbit_predicted_doppler (строгий, игнорируется вместе с пробелом) |
| Захват на отложенных реальных лунных IQ относительно предсказанного по орбите Доплера | acquisition::pcps_acquire (решение по усреднению ячеек, вероятность ложной тревоги 1e-7) с refine_doppler_coherent на пакетах LuGRE L1, записанных на лунной поверхности (I в старшем полубайте, уровни mid-rise); разности Доплера между захваченными спутниками относительно разностей, предсказанных по окончательным орбитам ESA и посадочному ядру Firefly | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Предсказанный доплеровский сдвиг по окончательным орбитам ESA/ESOC и ядру места посадки NAIF CLPS Firefly (xval/lugre-predicted-doppler/predict_surface.py, независимо от Kshana), предварительная регистрация 2108e6ff на пакетах, ранее никогда не открывавшихся. РЕЗУЛЬТАТ: условие непустоты не выполняется; ни один пакет не содержит двух захватов. OP40 исключён (метаданные называют отсутствующий файл); OP38, OP73, OP77_0, OP77_1 ничего не захватывают и не показывают ложной тревоги при 1e-7 (верхние статистики от 325 до 356 при 385,9); OP74 и OP76 захватывают PRN 31, а OP78_0 и OP78_1 — PRN 12, каждый в единственном числе, все предсказаны видимыми. Остаётся MODELLED. Раскрытые отклонения: зарегистрированный порог по доплеровскому сдвигу в 10 Гц опирается на синтетический расчёт Монте-Карло когерентного уточнения, а не на разброс уже виденных пакетов, которого требовал интегратор; OP40 исключён до прогона, потому что его метаданные называют файл отсчётов, которого нет в наборе данных | acquisition, realdata::ion_sdr, realdata::lugre | tests/lugre_surface_acquisition_doppler_oracle.rs::each_surface_acquisition_is_a_single_predicted_visible_satellite (зафиксированный результат, зависит от данных); tests/lugre_surface_acquisition_doppler_oracle.rs::surface_acquisitions_match_the_orbit_predicted_doppler (строгий, игнорируется вместе с пробелом) |
| Лунные дифференциальные PNT | Дифференциальная опорная станция класса NovaMoon: подавление синфазной ошибки + остаток, растущий с базой + уровни защиты DGNSS | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Тождество взаимного сокращения ошибок в дифференциальном режиме + повторное использование механизма PL SBAS по DO-229E; одиночная разность + решение WLS дополнительно перекрёстно проверены по lsq()/matinv() из RTKLIB (Takasu, BSD-2-Clause, скомпилированный C) — код независимого решателя, но та же алгебра первого порядка для разности линий визирования, поэтому по-прежнему InternalConsistency | lunar_dpnt | lunar_dpnt::tests (синхронная составляющая часов сокращается точно; остаток растёт с базой; повторно используется PL SBAS; число спутников соблюдается до предела построителя в 24, поэтому более крупная орбитальная группировка не может незаметно вернуть меньшую); tests/lunar_differential_pnt_reference.rs (остаток одиночной разности + позиционное решение WLS в сравнении с lsq() из RTKLIB, скомпилированным из исходного кода на C) |
| Экспорт для лунной интероперабельности | Экспорт лунной системы отсчёта, времени и эфемерид, согласованный с LunaNet/IOAG (CCSDS OEM + KIF), с проверкой соответствия при круговом обходе | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — лунный экспорт OEM kshana повторно разобран независимой сторонней библиотекой oem (R. J. Anderson): токены системы координат и времени и состояние по эпохам согласуются с точностью записи (1 мм / 1e-9 км/с), а экспорт без TIME_SYSTEM отклоняется — структурный круговой обмен; физическая семантика лунной системы координат и времени проверена отдельными строками, поэтому эта остаётся MODELLED. Внешнее сравнение 0,30, результат (остаётся MODELLED): второй независимый считыватель, разборщик CCSDS OEM Orekit 12,2 (Apache-2.0, строгие настройки по умолчанию), отвергает оба лунных файла, потому что не реализует системы времени LTC и TCL (он декодирует OEM крейта в EME2000/UTC и декодирует лунные файлы, если заменить TIME_SYSTEM на TDB); oem 0.4.5 декодирует их в пределах записанной точности только за счёт отката от неподдерживаемой системы времени. Обмен этими лунными файлами с распространёнными считывателями CCSDS не установлен |
lunar_interop | lunar_interop::tests (OEM содержит лунные REF_FRAME/TIME_SYSTEM; метаданные времени проходят круговой обмен; конверт KIF); tests/lunar_interoperability_export_reference.rs (выданный kshana лунный OEM повторно разобран независимой библиотекой Python oem: токены REF_FRAME/TIME_SYSTEM/CENTER + состояние по эпохам с точностью формата; испорченный экспорт отклоняется); tests/lunar_interop_oem_oracle.rs::recorded_two_reader_outcome_is_for_todays_export |
| Оценка по рамкам устойчивости PNT | Подоценки по измерениям для семи собственных категорий устойчивости Kshana (не термины DHS), функций RDRR RethinkPNT и критериев Yang, каждая помечена Modelled с указанием своего драйвера; предварительный уровень RPCF с условием ограниченной деградации. Самооценка на основе моделирования, никогда не сертификация. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Выведенные вручную формулы по метрикам: разнообразие по обратному индексу Симпсона, взвешенное среднее составного показателя, ограниченные/неограниченные длительности временной шкалы, лестница уровней по слабейшему звену | resilience::arch, resilience::score, resilience::diversity, resilience::timeline | resilience::score::tests (монотонность, границы составного показателя, ограничение уровня, смоделированное происхождение); resilience::diversity::tests (обратный индекс Симпсона, общая причина отказа, SPOF) |
| Исследование нестабильности решений по оценке устойчивости | Количественно показывает, как одна композитная оценка или уровень RPCF переупорядочивает архитектуры при допустимом симплексе весов и ансамбле угроз (доля смен top-1, дисперсия тау Кендалла, доля смен уровня, диапазоны рангов); анализ «заявлено против измерено» и схлопывания разнообразия. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые тождества ранговых статистик (tau в [-1,1] со значениями, рассчитанными вручную; детерминированное Дирихле с начальным значением) и построенные устойчивые/неустойчивые свидетельства | resilience::stats, resilience::study, resilience::panel | resilience::stats::tests (ручной пример тау Кендалла, симплекс Дирихле, доля переключений); resilience::study::tests (контроль устойчивости, свидетельство неустойчивости, заявленное против измеренного, коллапс разнообразия) |
| Репрезентативность демонстрации и разрывы до полёта | Реестр честности для каждого результата, уточняющий выход демонстрации: его внешние опоры, смоделированные допущения, разрывы до полёта и репрезентативный диапазон TRL, с принудительными инвариантами (Validated требует внешней опоры; Modelled требует разрыва и не может заявлять выше TRL 4). | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые инварианты, отражающие дисциплину compliance «репрезентативность обоснована + выявлены пробелы до лётной эксплуатации»; привязано к границе статуса верификации и вида оракула | representativeness | representativeness::tests (validated-needs-external-anchor, modelled-needs-gap, modelled-TRL-ceiling, malformed-band, поля JSON) |
| Свидетельства компромисса «квантовое против классического» (общая форма) | Один воспроизводимый объект TradeEvidence (фиксированная рамка: сценарий + seed + движок; общие значения «квантовое против классического» для каждого показателя качества с корректной по знаку выгодой, необязательный 95% доверительный интервал, метка validated/modelled), несущий запись о репрезентативности, так что каждая квантовая вертикаль PNT сообщает компромисс одинаково честно. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые тождества выигрыша/победителя + точная обёртка существующего quantum_trade::TradeResult; честность привязана к реестру репрезентативности и меткам верификации | qtrade | qtrade::tests (полярность выигрыша: больше — лучше / меньше — лучше, точно оборачивает реальный TradeResult, недобросовестные доказательства отклоняются, для FoM со статусом validated нужен внешний якорь, детерминированный JSON) |
| Библиотека моделей ошибок квантовых устройств | Карточки устройств (оптические/на захваченных ионах/на ионах ртути + классические часы, повторно используемые из holdover/clock_state; холодноатомный интерферометр; классические линии передачи времени и линии на запутанных/одиночных фотонах), каждая несёт запись о репрезентативности; линия на запутанных фотонах добавляет модель точности синхронизации, ограниченной дробовым шумом (~jitter/sqrt(R*tau), штраф за тёмные отсчёты, систематический нижний предел). | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Повторно используемые коэффициенты часов/CAI (holdover/clock_state, опубликованные значения) + замкнутые тождества дробового шума и потерь для канала запутанности | quantum_devices | quantum_devices::tests (карточки часов честные и упорядоченные; точность запутанности ~1/sqrt(tau); обнаруженная скорость -10x/10 дБ; темновые отсчёты ухудшают; границы систематического минимума; карточка смоделирована и допустима) |
| Доверенное квантовое время (передача времени + защищённое распространение + аномалии) | Сквозная цепочка передачи времени «квантовая против классической» (инерционный ход часов + точность линии в квадратуре), повторно используемый уровень защиты времени, показатель безопасности по атакам с задержкой и повтором (1-P_md) и вероятность обнаружения аномалии часов + задержка CUSUM, выдаваемые как честный TradeEvidence с записью о репрезентативности. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутый квадратурный бюджет поверх повторно используемых проверенных ядер (ADEV относительно Stable32/NIST; граница TPL; обнаружение analytic_pd/pmd); честность привязана к реестру репрезентативности | timetransfer_chain | timetransfer_chain::tests (точность улучшается с интегрированием; квант может и выиграть, и проиграть; PL конечен и положителен; FoM безопасности в [0 1] и растёт с задержкой атаки; Pd аномалии монотонна; обмен is_honest) |
| Квантовая навигация без GNSS | Квантовое (холодноатомный интерферометр) против классического счисления пути навигационного класса по INS при отсутствии GNSS: рост ошибки положения, holdover до порога положения и компромисс «квантовое против классического» как честный TradeEvidence; честное замечание о наблюдаемости (смещение ненаблюдаемо без решения, поэтому ошибка растёт). | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Повторно используемые инерциальные бюджеты, перекрёстно проверенные независимым двойным интегрированием в Octave того же ОДУ счисления пути (другая среда исполнения, общая модель → ReferenceImpl), плюс опубликованный краткосрочный шум Freier-2016 как односторонний якорь; составной квантовый-против-классического остаётся MODELLED | quantum_nav_od | quantum_nav_od::tests (квантовый превосходит классический при длительном перерыве; преимущество зависит от длительности перерыва; обмен is_honest); tests/gnss_free_quantum_navigation_reference.rs (рост позиционной ошибки при счислении пути в сравнении с независимым двойным интегрированием в Octave + опубликованным якорем шума Freier-2016) |
| Обнаружение неисправностей и аномалий для квантовых систем PNT | Каталог квантовых неисправностей с метками (скачок частоты/дрейф/потеря захвата часов; скачок смещения/пропадание датчика), AUC ROC статистики обнаружения с бутстрэп-доверительным интервалом и минимально обнаружимая неисправность при фиксированной частоте ложных тревог; монитор с квантовыми часами обнаруживает меньшие неисправности, чем классический, и выдаётся как честный TradeEvidence. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутая гауссова AUC = Phi(mu/(sigma*sqrt2)), перекрёстно проверенная по внешне валидированной eval_stats::bootstrap_auc_ci (относительно scikit-learn) + аналитические пороги обнаружения | quantum_faults | quantum_faults::tests (известные значения аналитической AUC; эмпирическая бутстреп-AUC охватывает замкнутую форму; квантовый обнаруживает меньшие отказы / более высокая AUC; преимущество исчезает для огромных отказов; каталог из 5 классов; обмен is_honest) |
| Пассивная геолокация излучателя по TDOA/FDOA | Определение положения излучателя (источник помех или спуфер, либо оппортунистический источник для обратной PNT) по разности времён прихода в сети приёмников — пересечение гиперболоидов τᵢ=(Rᵢ−R₀)/c, решаемое методом наименьших квадратов Гаусса — Ньютона, — и, добавляя разность частот прихода (разности скоростей изменения дальности) при движущихся приёмниках, совместное восстановление положения и скорости; с нижней границей Крамера — Рао для ковариации положения по геометрии измерений | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Самосогласованность оценщика и геометрии: круговые преобразования прямой→обратной задачи, тождество Фишера/CRLB J·CRLB=I, монотонность GDOP и достижение оценщиком собственной границы Крамера–Рао при шуме Монте-Карло — проверки внутренней согласованности, НЕ внешний набор данных, поэтому строка остаётся InternalConsistency. MODELLED пассивная геолокация — модель прямой видимости для точечного источника; без многолучевости / NLOS, смещения часов приёмника и членов атмосферной рефракции. 0,30 раунд 2, относительно Ho и Chan 1993 и Ho и Xu 2004 (предварительная регистрация f89018b8, 1 % от каждого напечатанного значения), результат (остаётся MODELLED): граница TDOA с ограничением по поверхности воспроизводит 40 N геометрических множителей (-0.11 %, -0.02 %) и максимальную TDOA; совместная граница TDOA+FDOA воспроизводит рис. 6 (+0,06 %, -0.17 %) и, для источника, который код самих авторов называет для рис. 7 (поправка записана после того, как результат стал известен, раскрыто), рис. 7 (+0,11 %, -0.02 %); она равна опубликованному коду границы авторов (стиль BSD, запущен под GNU Octave) с точностью 3e-12; решатель максимального правдоподобия со взвешиванием по ковариации достигает напечатанной границы (от +0,3 до +0,4 %). Множители для Оттавы, которые статья печатает по расчёту Монте-Карло (251, 7,1), отличаются на +1,3 % и +4,4 %, то есть выходят за порог в 1 % | geolocation | geolocation::tests (прямая→обратная TDOA без шума с точностью 1e-6 м; J·CRLB=I при симметричной положительно определённой ковариации; след дисперсии положения по CRLB не возрастает при добавлении приёмника; совместная TDOA+FDOA восстанавливает положение+скорость движущегося излучателя; <4 приёмников отклоняются); tests/geolocation_reference.rs (круговые преобразования на четырёх геометриях с сетью, разнообразной в 3D; оценщик Гаусса–Ньютона достигает своей границы Крамера–Рао — эмпирическая ковариация ошибки следует за аналитической границей на 4000 испытаниях Монте-Карло); tests/geolocation_crlb_published_oracle.rs (ho_chan_1993_maximum_tdoa; ho_xu_2004_fig7_with_the_authors_corrected_source; ho_xu_2004_bound_matches_the_authors_code; finding_ho_chan_ottawa_printed_values_are_not_the_bound и finding_ho_xu_fig7_printed_source_is_not_the_plotted_one, зафиксированы) |
| Конвективный нагрев критической точки при входе (Sutton-Graves) на входе по 3-DoF | Конвективный тепловой поток в критической точке q = k sqrt(rho/R_n) V^3 с константами Sutton-Graves для земного воздуха и атмосферы Марса (NASA TR R-376, 1971), его пик и интегральная тепловая нагрузка вдоль входа по 3-DoF, баллистического или с подъёмной силой при постоянном крене, на Земле или Марсе. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: соотношение и константы в том виде, как они напечатаны в NASA TR R-376, проверка сходимости по половинному шагу и ожидаемый порядок пиков нагрева и торможения. ЧЕГО НЕТ: ни одно опубликованное значение нагрева не сопоставлено (в статьях по Stardust приведены проектный предел и оценка конвективного плюс радиационного нагрева около 1200 Вт/см2, которой конвективное соотношение соответствовать не может); нет радиационного нагрева, поправки на температуру стенки или каталитичность, нет отклика теплозащиты. | entry_eo_ascent::entry_heating (stagnation_heat_flux, simulate_entry) | entry_eo_ascent::entry_heating::tests::heat_flux_relation_has_the_published_form_and_constants; entry_eo_ascent::entry_heating::tests::lift_lowers_peak_deceleration_and_heat_flux_of_a_shallow_entry; entry_eo_ascent::entry_heating::tests::mars_entry_runs_with_the_mars_constants; tests/entry_stardust_published.rs (фиксирует 746 Вт/см2 для Stardust без порога) |
| Радиометрия электрооптического формирователя изображений, MTF, относительный отклик края и NIIRS по GIQE 4 | Бюджет отношения сигнал/шум надирного формирователя изображений (ламбертова яркость сцены, уравнение камеры, дробовой, темновой, считывающий шум и шум квантования), системная MTF на частоте Найквиста как произведение дифракции неперекрытой апертуры, апертуры детектора, линейного смаза и гауссова дрожания, отклик края и относительный отклик края, интегрированные по этой MTF, Q = lambda F / p, и NIIRS по GIQE версии 4 без компенсации MTF. Запускается как вид сценария eo-radiometry. |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые формы: дифракционная MTF на половине частоты среза, однопиксельный краевой скат чистой апертуры детектора (RER 1), краевая нормальная ФР гауссова размытия (RER = erf(0.5/(sigma sqrt 2))), масштабирование дробового шума и коэффициенты GIQE 4 в опубликованном виде (Leachtenauer et al., Applied Optics 36(32), 1997). ЧЕГО НЕТ: ни внешний формирователь изображений, ни измеренная MTF, ни оценённое по шкале изображение не сопоставлены; GIQE — эмпирическая регрессия со своей погрешностью; нет рассеянного света, атмосферной MTF, компенсации MTF и элиазинга. | entry_eo_ascent::eo_radiometry (Imager, snr_budget, giqe4_niirs, EoRadiometryScenario) | entry_eo_ascent::eo_radiometry::tests::diffraction_mtf_has_its_closed_form_values; entry_eo_ascent::eo_radiometry::tests::a_pure_pixel_aperture_has_a_ramp_edge_and_rer_one; entry_eo_ascent::eo_radiometry::tests::a_gaussian_blur_has_the_normal_cdf_edge; entry_eo_ascent::eo_radiometry::tests::snr_budget_scales_as_shot_noise_when_signal_dominates; entry_eo_ascent::eo_radiometry::tests::giqe4_switches_coefficients_at_rer_0_9_and_falls_with_gsd |
| Потери на силу тяжести, сопротивление, управление и противодавление при выведении ракеты | Плоский гравитационный разворот при выведении многоступенчатого аппарата над невращающейся сферической Землёй через стандартную атмосферу США 1976 (плотность и давление) с толчком по тангажу, тягой, уменьшенной противодавлением сопла, отсечками ступеней на точных границах шагов, а также потерями на силу тяжести, сопротивление, управление и противодавление, интегрируемыми рядом с состоянием. Запускается как вид сценария ascent-losses. |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: точное тождество скорость в конце работы двигателя = сумма Isp g0 ln(m0/mf) минус четыре проинтегрированные потери (остаток ниже 1e-6 м/с), уравнение Циолковского для вертикального участка работы двигателя в вакууме, где единственной потерей является гравитация, а также давления US76 на уровне моря и на тропопаузе. ЧЕГО НЕТ: потери ни одной опубликованной ракеты не сопоставлены; нет вращения Земли, пассивного участка, дросселирования и наведения, кроме отклонения (kick); постоянный C_D; это не оптимизатор траектории. | entry_eo_ascent::ascent (simulate_ascent, AscentScenario); reentry::us76_pressure | entry_eo_ascent::ascent::tests::the_loss_identity_holds_to_integration_error; entry_eo_ascent::ascent::tests::vertical_vacuum_burn_has_only_gravity_loss_and_stays_vertical; entry_eo_ascent::ascent::tests::us76_pressure_has_the_standard_values; entry_eo_ascent::ascent::tests::a_larger_kick_lowers_burnout_flight_path_angle |
| Двустороннее уравнение TWSTFT, бюджет неопределённости и стабильность линии с фликкерной и суточной невзаимностью | Двустороннее уравнение TWSTFT, решаемое для T_A - T_B с задержками передачи и приёма станций, ионосферной асимметрией вверх/вниз в Ku-диапазоне, разностью задержек ответчика и членами Саньяка, относительно его точной прямой модели; квадратурный бюджет неопределённости с TDEV линии как членом типа A; двусторонний ряд с белым и фликкерным фазовым шумом (Kasdin-Walter), суточной невзаимностью и постоянным остатком взаимности; а также скорость, СКО остатка, TDEV и ADEV поданных рядов часов станций Circular T, MJD-CSV или IGS RINEX. Запускается как вид сценария time-transfer-budget. |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: прямая модель и решаемое уравнение согласуются с точностью 1e-15 с, член Саньяка равен независимой по отношению к модулю петлевой форме BIPM 2A omega/c^2, ионосферный член равен 40,3 TEC (1/f_up^2 - 1/f_down^2)/c, а шумовые процессы показывают ожидаемые формы TDEV. ЧЕГО НЕТ: ни реальное измерение TWSTFT, ни отчёт о калибровке не сопоставлены; заданные задержки и неопределённости являются входными данными, а не измеренными; о стабильностях переданных рядов сообщается, но они не проверены (validated). | twstft_budget (counter_readings, solve_offset, combined_uncertainty, flicker_phase, two_way_series, series_stability); time_transfer_budget (TimeTransferBudgetScenario, read_series) | twstft_budget::tests (двустороннее уравнение точно восстанавливает смещение; член Саньяка равен замкнутой форме петли BIPM; ионосферный член следует разносу частот, а тропосфера сокращается; фликкерная фаза даёт плоскую TDEV; суточный остаток поднимает TDEV около половины суток; смещение из-за нарушения взаимности сдвигает смещение, но не TDEV; стабильность ряда убирает скорость дрейфа); time_transfer_budget::tests |
| Численные методы атмосферы на наклонной оптической трассе: дисперсия Рытова, сцинтилляция, вероятность замирания гамма-гамма, усреднение по апертуре, оптическая толщина облаков и ясного воздуха | Cn2 Хафнагеля — Валли, интегрируемый вдоль наклонной трассы, для дисперсии Рытова плоской и сферической волны (восходящая и нисходящая линии), индекс сцинтилляции Эндрюса — Филлипса и параметры гамма-гамма, вероятность замирания и запас на замирание гамма-гамма, коэффициент усреднения по апертуре при слабой турбулентности, оптическая толщина облака для столба жидкой воды и оптическая толщина ясного воздуха по видимости Ким плюс Рэлей, заменяющие сводные атмосферные потери бюджета оптической линии, когда задана атмосфера. Запускается внутри вида сценария optical-atmosphere. |
ExternalDataset | подтверждена внешней проверкой одна из частных гипотез, но возможность в целом составлена из смоделированных частей, поэтому она остаётся Modelled — Численные результаты сравниваются с независимой программой (xval/optical-atmosphere/oracle.py, mpmath 1.4.1 при 30 цифрах, квадратура tanh-sinh по исходной переменной высоты и гамма-гамма-плотности через функцию Бесселя K), которая не имеет с Kshana общего кода, по порогам, зафиксированным до появления какой-либо реализации (xval/optical-atmosphere/PREREGISTRATION.md). ПОЧЕМУ MODELLED: этот оракул вычисляет те же опубликованные формулы, поэтому он проверяет реализацию заданных формул, а не атмосферу; не используется ни пример валидации ITU-R, ни измеренная запись сцинтилляции или ослабления на наклонной трассе (значения ITU — открытый вопрос о лицензии, и в репозиторий они не включены). Уровень профиля Cn2, видимость, масштабные высоты аэрозолей и молекул, длина трассы для усреднения по апертуре и подгонка моментов, с помощью которой усреднение по апертуре применяется к параметрам гамма-гамма, являются заданными входными данными или соглашениями. Строка источника в модуле фиксирует, что один широко копируемый обзор печатает второй показатель сцинтилляции как 7/6, тогда как у Эндрюса и Филлипса он равен 5/6; реализована форма 5/6 | optical_atmosphere (rytov_variance, scintillation, gamma_gamma_cdf, fade_margin_db, aperture_averaging_factor, cloud_optical_depth, clear_air_optical_depth); optical_linkbudget (optical_link_budget_atmosphere) | tests/optical_atmosphere_reference.rs (предварительно зарегистрированные пороги A1-A3 относительно независимого оракула mpmath: 216 узлов сетки Рытова, наибольшая относительная ошибка 3.4e-7 при пороге 1e-6, сцинтилляция — наибольшая 4.5e-16, фактор апертуры — наибольшая 5.7e-16, 96 вероятностей замирания гамма-гамма, наибольшая 1.3e-12 в log10, оптическая толщина облаков и ясного неба — наибольшая 6.6e-16); tests/optical_atmosphere_no_moved_output.rs (порог A5: бюджет линии с суммарными потерями и существующие выходные данные доступности площадки побитово совпадают с базовым коммитом на 1 000 наборах параметров) |
| Доступность оптического наземного пункта, зависящая от погоды, и разнесение пунктов с корреляцией по расстоянию | Доступность оптической линии относительно заявленного запаса линии по логнормальному климату облачной жидкой воды (количество по ITU-R P.840, ослабление по геометрической оптике) и независимому замиранию из-за турбулентности по гамма-гамма, запас линии, необходимый для целевых доступностей, и потолок, который никакой запас не поднимает, логнормальные длительности перерывов, гипотетические варианты техник улучшения и сетевая доступность по однофакторной гауссовой копуле, у которой парная корреляция равна exp(-расстояние/длина декорреляции). Запускается как вид сценария optical-atmosphere. |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: замкнутые пределы и монотонность модели разнесения, замкнутая форма потолка облачности и тождества логнормальных простоев. Никакой внешний оракул НЕ заявляется и не сопоставлялся: не используется ни измеренная доступность оптической наземной станции, ни запись о безоблачной линии визирования. ПОЧЕМУ MODELLED: климат облачности (вероятность облаков, медиана и разброс столба жидкой воды, длительности простоев), независимость облаков и турбулентности, гауссова форма копулы, длина декорреляции и каждый выигрыш методов — допущения; встроенные сценарии задают ILLUSTRATIVE климаты, а не набор данных. Чтобы повысить статус этой строки, нужны процитированная измеренная запись доступности и порог, зарегистрированный до сравнения | optical_weather; optical_sitediv; optical_techniques; optical_atmosphere_scenario | tests/optical_atmosphere_identities.rs (порог A4: rho = 0 равно независимому объединению, а rho = 1 — лучшей одиночной площадке с точностью 1e-12, и ноль нарушений монотонности по числу площадок и по корреляции; первый прогон этого порога промахнулся на 3e-9, потому что используемая нормальная ФР была формой Абрамовица–Стегуна с точностью 1.5e-7, то есть дефектом реализации, замещённым ФР через неполную гамма-функцию при неизменном пороге); optical_weather::tests и optical_sitediv::tests (монотонный запас, потолок облачности в замкнутой форме, тождества длительности простоя, обращение поиска запаса) |
| Непрерывность синхронизации и дальнометрии при оптических перерывах | Распределение длительностей перерывов оптического пункта, связанное с дисперсией инерционного хода часов в замкнутом виде из модели holdover: ошибка синхронизации и дальнометрии при заявленных квантилях перерывов, holdover до порога синхронизации, доля перерывов и времени перерывов внутри него и доступность синхронизации A + U E[min(D, T_h)]/E[D] для классических и квантовых классов часов. Запускается внутри вида сценария optical-atmosphere. |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность с модулем holdover, бит в бит; никакой внешний оракул НЕ заявляется. СПМ классов — это синтезированные долговременные минимумы по tau, которые модуль holdover уже содержит, поэтому показатели наследуют его заявленную оговорку: holdover до жёсткого порога определяется принятым минимумом красного шума, а не процитированной девиацией Аллана. Длительности простоев — это логнормальная модель с заданными параметрами, а не измеренная запись длительности облачности | optical_outage_holdover (couple, clock_psds); holdover (coast_phase_sigma, holdover_seconds, phase_to_range_m) | tests/optical_atmosphere_identities.rs (порог A6: ошибка времени на один простой равна holdover::coast_phase_sigma, а ошибка дальности равна phase_to_range_m бит в бит для 9 часов, 3 средних длительностей, 3 разбросов и 4 квантилей); optical_outage_holdover::tests |
| Запас оптической линии во времени: одна реализация погоды пункта с начальным значением (seed) | Включаемая по выбору таблица [timeseries] (длительность, шаг, seed) заставляет вид optical-atmosphere также записывать для каждого пункта одну реализацию с начальным значением заявленной модели пункта во времени: эпизоды облачности (ясные промежутки экспоненциальны, облачные перерывы логнормальны с заявленными средним и разбросом, доля времени в облаках задана заявленной вероятностью облачности), один логнормальный столб жидкой воды на каждый эпизод облачности, один отсчёт сцинтилляции гамма-гамма на шаг и по ним запас линии, замирания из-за облаков и сцинтилляции и флаг работоспособности линии, с реализованными доступностью, долей облачности, числом перерывов и самым долгим перерывом. Без таблицы результат — документ 0,37. Розыгрыши проходят через переносимые маршруты распределений и математики, поэтому native и wasm32 дают одни и те же байты. |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Только внутренняя согласованность; никакой внешний оракул НЕ заявляется, и для реализации погоды его не существует. Проверки сравнивают одну выборку со статистическим выходом той же модели, поэтому успешный результат говорит, что генератор выбирает значения из заданных распределений (доступность выборки и доля облачности лежат в пределах предварительно зарегистрированных допусков относительно заданных величин), а не что какая-либо реальная площадка ведёт себя так. Ряд — это одна реализация, а не климат: его доступность отличается от заданной на ошибку выборки, а сцинтилляции на разных шагах независимы, что является заявленным упрощением процесса, который декоррелирует за миллисекунды. Входные данные о погоде остаются допущениями сценария. | optical_timeseries (site_series, SiteModel, SeriesSpec, Series); optical_atmosphere_scenario (TimeseriesSpec) | tests/optical_atmosphere_timeseries.rs (пороги T1-T6 из xval/optical-atmosphere/PREREGISTRATION-timeseries.md, зафиксированные до первого прогона: то же начальное значение — те же байты, другое начальное значение — другие байты; нет ключа без таблицы; за 8760 ч с шагом 600 с, начальные значения 37 и 38, реализованная доступность каждой из трёх площадок по умолчанию в пределах 6 пунктов от заданной (наибольшее 3,3), а реализованная доля облачности в пределах 5 пунктов от заданной вероятности (наибольшее 2,1); запас равен бюджету минус два замирания, а «вверх» равно запасу не отрицательному на каждом шаге; в модуле нет непереносимых математических вызовов; слишком длинные прогоны и неверные шаги отклоняются) |
| Читатель файлов орбитальных данных TRK-2-18 и модель марсианского 2-стороннего Доплера с рампами | Читатель файлов орбитальных данных DSN (TRK-2-18): группы записей по 36 байт (метка файла, идентификатор, орбитальные данные, рампы по станциям, смещения часов, сводка, конец файла), а в каждой записи орбитальных данных — метка времени от 1950, задержки нисходящей и восходящей линии, наблюдаемая, станции, тип данных, диапазоны, достоверность, канал, космический аппарат, 46-битная опорная частота и время сжатия; время начала и конца рамп, скорости и начальные частоты. Поверх него — модель 2-стороннего Доплера X-диапазона с рампами (интегрированные восходящие рампы, круговое время распространения света с Шапиро и тропосферой, станции DSN через цепочку CIO по IAU 2006/2000A и EOP IERS, время станции) и пакетное определение орбиты марсианского орбитального аппарата (поле GMM-3, третьи тела, SRP, сопротивление). | ExternalDataset | подтверждена внешней проверкой одна из частных гипотез, но возможность в целом составлена из смоделированных частей, поэтому она остаётся Modelled — Метка PDS3, которую процесс подготовки навигационных данных DSN выдал вместе с файлом (узел геонаук NASA PDS, MRO-M-RSS-1-MAGR-V1.0), проверена по порогам, предварительно зарегистрированным в xval/mro-odf/PREREGISTRATION.md до появления считывателя. MODELLED, потому что один зарегистрированный порог (строки таблицы в конце файла: 121 в файле против 120 в метке) не выполнен; метка здесь внутренне противоречива. Этап 2 (xval/mro-od/PREREGISTRATION.md, поправки A1 и A2 до оцениваемого результата): доплеровский сдвиг, предсказанный по реконструкции навигационной группы MRO (mro_psp5, NAIF), совпадает с наблюдаемым доплеровским сдвигом 2-way с изменяющейся частотой с точностью 12,5 мГц на проходах, не использованных при разработке, порог выполнен (met); зарегистрированное определение орбиты на оцениваемой дуге не удалось (нормальная матрица не положительно определена) и орбиты не дало, поэтому пороги по орбите не выполнены. Прогон 2 (xval/mro-od/PREREGISTRATION-RUN2.md, демпфированный оценщик, та же дуга и те же пороги, поправка к оценке R2-A1 раскрыта в docs/revisions) сошёлся: оценённая орбита находится в пределах 0,36 км СКО (0,53 км максимум) от реконструкции, пороги выполнены, но СКО доплеровского сдвига после подгонки равно 48,6 мГц при пороге 30 мГц, не выполнен, поэтому строка остаётся MODELLED. ЧЕГО НЕТ: ни одна оценённая орбита не выполнила все зарегистрированные пороги; ионосфера, солнечная плазма и большая часть смещения антенны (радиальное смещение 1,5 м подгоняется на проходе разработки) не моделируются. | odf (parse_odf, Odf, OdfObservation, OdfRamp, seconds_1950); mars_od (DopplerModel, RampTable, compress_two_way, MarsDynamics, fit, fit_damped); naif_kernel (SPK type 1); gravity_pds (SphericalHarmonicField::from_shadr) | tests/mro_odf_reader_label_oracle.rs (реальный ODF MRO, 2007-304/305, относительно своей метки PDS: число записей, позиции групп, станции, время начала и окончания и типы данных совпадают; число строк таблицы в конце файла расходится на одну, несогласованность метки, зафиксировано как результат); odf::tests (круговой обмен построенной вручную записи, эпоха 1950); tests/mro_odf_short_arc_od_oracle.rs (зависит от данных, SHA-256 входных данных зафиксирован, ежемесячный CI с обязательными реальными данными: доплеровский сдвиг, предсказанный по навигационной реконструкции MRO mro_psp5, на оцениваемых проходах DSS 63 и DSS 14, 12,5 мГц СКО, порог 30 мГц, выполнен; зарегистрированное определение орбиты орбиты не дало, зафиксировано как результат; прогон 2 с демпфированным оценщиком, зарегистрированный отдельно: орбита 0,36 км СКО и 0,53 км максимум относительно mro_psp5, выполнено, доплеровский сдвиг после подгонки 48,6 мГц при 30 мГц, не выполнено, зафиксировано как результат; считыватель SPK типа 1 относительно CSPICE, 5e-7 м); mars_od::tests |
| Оценка ориентации мультипликативным EKF по гироскопу и звёздному датчику | Мультипликативный EKF Леффертса — Маркли — Шустера: состояния ошибки ориентации в связанной системе координат и смещения гироскопа, распространение по угловой скорости гироскопа за вычетом оценки смещения и дискретному шуму процесса Фаренкопфа (случайное блуждание угла и скорости), обновления по звёздному датчику с невязкой 2 vec(q^-1 q_st) в форме Джозефа и мультипликативный сброс; дискретный имитатор гироскопа и звёздного датчика по Фаренкопфу. Вид aocs может замкнуть контур управления по этой оценке. |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: нормированный квадрат ошибки оценивания фильтра относительно истины, смоделированной по тем же моделям датчиков на начальных значениях Монте-Карло, и сходимость оценок ориентации и смещения. ЧЕГО НЕТ: ни внешний оценщик, ни лётные данные не сопоставлены (в Basilisk 2.9.1 нет модуля MEKF); модели датчиков — учебные, без неточности установки, масштабного коэффициента и эффектов поля зрения звёздного датчика. | aocs_mekf (Mekf, GyroSim, attitude_error, spd_solve6); aocs_kind (estimator) | aocs_mekf::tests::mekf_is_consistent_over_monte_carlo_seeds (40 начальных значений, среднее шестистепенное NEES за вторую половину в пределах от 4,5 до 7,5); aocs_mekf::tests::star_tracker_updates_bound_the_attitude_error; aocs_mekf::tests::attitude_error_is_the_body_frame_small_angle; aocs_kind::tests::estimator_loop_runs_and_reports_consistency |
| Соотношение времени апертуры между навигацией и связью | Один прогон принимает план контактов (список окон aos_s/los_s, в каждом из которых апертуру запрашивают для навигации или связи — тот же словарь окон, который выдаёт passes::predict_passes, преобразованный aperture_duty::windows_from_passes), число апертур и явную политику арбитража, и возвращает долю времени навигации, долю времени связи, долю простоя и простой на каждый сеанс. Политика является входным параметром с документированным значением по умолчанию (navigation-priority; также communications-priority и невытесняющая first-come-first-served), а отчёт содержит применённую политику, её полное определение и определения долей и простоя, потому что приведённая доля времени без правила арбитража невоспроизводима. Расписание строится точным заметанием интервалов по границам окон, поэтому окно, заканчивающееся точно там, где начинается следующее, никогда не конкурирует, а апертуро-секунды навигации, связи и простоя накапливаются независимо в этом одном заметании. Запускается как вид сценария aperture-duty-cycle |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность по трём величинам, вычисленным разными выражениями в одном проходе и затем обязанным сойтись. Апертурные секунды навигации, апертурные секунды связи и простаивающие апертурные секунды накапливаются раздельно — простой из (апертуры − |обслуженные|) на элементарный интервал, никогда как остаток — и их сумма проверяется на равенство апертуры × horizon_s, чему мгновенно мешает неверно заданная граница, дважды посчитанный или пропущенный интервал; кроме того, отдельно требуется, чтобы времена обслуживания по сеансам складывались обратно в два итога по услугам. Структурные свойства планировщика измеряются, а не предполагаются: проверяется, что обслуженное время не убывает с числом апертур на 200 псевдослучайных планах для всех трёх политик (неочевидно для политики без вытеснения, где лишняя апертура меняет, кто что занимает на каждой последующей границе), а арифметика границ зафиксирована на паре «касание / перекрытие на одну секунду», где ошибка на единицу иначе осталась бы скрытой. Мост с предсказателем проходов проверен по выходным данным passes::predict_passes: при одной апертуре и отсутствии конкурирующей услуги апертурные секунды навигации равны сумме длительностей проходов самого предсказателя. Никакой внешний оракул не заявляется, и его не существует: возможность заменяет расчёт вручную, а не проверяется по нему, встроенный план контактов иллюстративен, а не лётный, и ни один эксплуатационный планировщик не публикует пару «план + ответ» с указанным правилом арбитража — нагрузка, вычисленная при неуказанной политике, несопоставима с вычисленной при указанной, а зависимость от политики измерена (навигационные нагрузки 100/150 против 50/150 на идентичном плане). Время разворота и переключения, объём данных, состояние буфера, энергия и замыкание линии исключены в метке отчёта, а не моделируются молча |
aperture_duty | aperture_duty::tests (окно, которое заканчивается ровно тогда, когда начинается следующее, не конкурирует, а сдвиг его на секунду раньше стоит ровно одной секунды — защита от ошибки на единицу; перекрывающиеся окна сверх числа апертур переводят сеанс с меньшим рангом в простой, интервал конкуренции зафиксирован; политика арбитража определяет, какая услуга занимает апертуру, числа всех трёх политик зафиксированы на одном плане; политика «первым пришёл — первым обслужен» не вытесняет сеанс, уже занявший апертуру; сеанс, проигравший арбитраж в начале, получает апертуру, когда она освобождается; три нагрузки учитывают каждую доступную апертурную секунду для 3 политик × 4 чисел апертур; добавление апертуры никогда не увеличивает простой ни одного сеанса, измерено на 200 псевдослучайных планах × 3 политиках × каждом числе апертур; достаточное число апертур для каждого сеанса не оставляет простоя вообще; горизонт отчёта обрезает план и задаёт знаменатель нагрузки; список предсказанных проходов становится планом контактов без второго типа окна; числа нагрузки встроенного плана — это выходные данные движка для одной и двух апертур; отчёт указывает политику, давшую числа; каждая приведённая величина несёт единицу и класс происхождения; сценарий воспроизводим и объявляет себя MODELLED; сценарий отклоняет план, который не может спланировать); api::tests::aperture_duty_cycle_kind_round_trips_through_the_dispatch |
| РЧ-подавление лунной поверхностной навигации (J/S по каждому спутнику) | Лунное отношение мощности помехи к мощности сигнала, эффективное C/N₀ и срыв слежения для пользователя на селенографической поверхности при подавлении с лунной поверхности (или с возвышения) для иллюстративной орбитальной группировки класса Moonlight/LCNS по открытым источникам. Объединяет открытую цепочку подавления (j_over_s_db, effective_cn0_dbhz, rx_antenna_gain_db, lock_status, q_factor, nominal_cn0_dbhz, free_space_path_loss_db) с открытой геометрией лунного неба (lunar_service::LunarConstellation + topocentric, lunar::selenographic_to_mcmf); геометрия и радиометрия заново не выводятся. В отличие от земного вида jamming, сигнальное звено не является фиксированной принимаемой мощностью: изотропная принимаемая мощность каждого спутника равна его собственной EIRP по бюджету линии минус FSPL(наклонная дальность), поэтому J/S меняется от спутника к спутнику с лунной дальностью и углом места. Выдаёт ОДНУ СТРОКУ НА КАЖДУЮ ВИДИМУЮ ЛИНИЮ (эпоха, спутник) в JSON и в артефакте *.table.csv, причём обе принимаемые мощности, разностью которых является J/S, напечатаны рядом; агрегированные показатели качества приводятся рядом с этой таблицей, но не вместо неё. Запускается как вид сценария lunar-jamming |
ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого блока, но не являющейся внешним авторитетным источником — Перекрёстная проверка композиции по независимому пути кода в репозитории: каждое J/S по линии заново выводится как разность двух бюджетов линии, вычисленных через linkbudget::received_signal_power_dbw, у которой потери в свободном пространстве задаются одним выражением 20·log10(4πRf/c), а не трёхчленной суммой, которую использует jamming::free_space_path_loss_db — обе согласуются с точностью < 1e-9 дБ на каждой строке (измеренный наихудший случай 7.11e-14 дБ, то есть округление чисел с плавающей запятой). Лежащая в основе цепочка помех, которую она компонует, отдельно привязана к внешнему источнику в tests/gnss_denied_jamming_resilience_reference.rs (независимое пересчитывание J/S и эффективного C/N₀ в numpy/scipy, привязанное к Kaplan & Hegarty §9,4, плюс измеренное C/N₀ JammerTest 2024, Zenodo 10.5281/zenodo.15910563); лунная геометрия, которую она компонует, — это геометрия lunar_service/lunar со своими оракулами. Здесь проверяются замкнутые тождества: вдвое меньшая дистанция постановщика помех добавляет ровно 20·log10(2) дБ к каждой строке; J/S строго инвариантно к усилению антенны пользователя по оси, тогда как C/N₀ смещается ровно на это усиление; маска возвышения не меняет ни одной оставшейся строки бит в бит. Сама строка остаётся ReferenceImpl/Modelled: измеренной кампании по лунным помехам, с которой можно было бы сверяться для валидации, не существует, а орбитальная группировка — иллюстративная геометрия класса Moonlight/LCNS по общедоступным источникам, а не лётные эфемериды | lunar_jamming (composing jamming, lunar_service, lunar) | lunar_jamming::tests (17 тестов библиотеки: j_over_s_equals_the_difference_of_two_independent_link_budget_runs; the_report_prints_both_link_budget_legs_so_the_difference_is_checkable_from_it; the_scenario_reports_one_j_over_s_row_per_visible_satellite_and_never_a_median; a_single_median_j_over_s_would_misreport_the_outcome_that_the_table_reports; a_closer_jammer_raises_j_over_s_by_exactly_the_free_space_loss_difference; a_more_distant_satellite_is_the_weaker_signal_so_it_carries_the_higher_j_over_s; j_over_s_is_invariant_to_the_user_antenna_boresight_gain; a_narrowband_jammer_leaves_no_higher_effective_cn0_than_broadband_at_equal_js; a_selenographic_jammer_gets_its_range_from_the_shared_lunar_geometry; a_strong_enough_jammer_takes_every_lunar_link_below_the_tracking_threshold; no_jammer_is_a_clean_sky_lunar_baseline_with_an_undefined_j_over_s; raising_the_elevation_mask_can_only_remove_rows_never_change_the_ones_that_remain; every_emitted_numeric_field_has_a_unit_and_a_provenance_class; the_csv_table_carries_every_row_of_the_json_table; the_run_is_deterministic_and_the_dispatch_surface_is_populated; bad_inputs_are_rejected_rather_than_producing_a_number); api::tests::lunar_jamming_kind_round_trips_through_the_dispatch_with_a_per_satellite_table |
| Лунный контур отказа в обслуживании с полосой неопределённости по измеренному разбросу C/N₀ | Отчёт lunar-jamming больше не опирает контур отказа в обслуживании на одно скалярное значение. Он выдаёт полное измеренное распределение C/N₀ полезного сигнала по таблице по спутникам — n, min, p05, p25, медиана, p75, p95, max, среднее, выборочное стандартное отклонение и собственная асимметрия выборки (p95 − медиана) − (медиана − p05) — рядом со строками по линиям, которые не изменились. Затем контур приводится для каждой из этих порядковых статистик по ОБОИМ критериям отказа в обслуживании, которые распознаёт движок, и ни один не подменяет другой: действующему критерию отношения мощностей (J/S = 30 дБ, тот же порог, что используют attack_surface и tracking_loop, и критерий столбца denial выпущенной таблицы лунного подавления линий связи) и критерию срыва слежения (эффективное C/N₀ падает до tracking_threshold_dbhz), по которому оценивается столбец links[].status самого отчёта. Каждая точка контура задана по обеим осям плоскости отказа — EIRP источника подавления, требуемая при удалении сценария, и удаление, достаточное для отказа при EIRP сценария, — так что полоса является интервалом на тех же осях, на которых строится график контура. Границы полосы — это contour(p05) и contour(p95): то же замкнутое отображение, применённое к собственным квантилям выборки, а не сигма, подогнанная под выборку, и не медиана ± k·stdev, и отчёт говорит об этом в строке band_definition рядом с числами. stdev выдаётся для преемственности и ничем не используется. У квантиля, у которого C/N₀ уже не выше порога слежения, нет конечного подавляющего J/S; эти столбцы выдаются как null со счётной причиной, а не как бесконечность или ограниченный радиус |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность относительно собственных прямых функций движка, и это всё, что эта возможность может честно заявить. Каждая точка контура — это замкнутое обращение, и каждое обращение проверяется прогоном его ответа обратно через ПРЯМУЮ функцию, по которой оценивались собственные строки отчёта: столбец J/S — через jamming::effective_cn0_dbhz (она должна вернуть tracking_threshold_dbhz с точностью < 1e-9 дБ-Гц), столбец дистанции — через jamming::free_space_path_loss_db и jamming::j_over_s_db (то же J/S с точностью < 1e-9 дБ), столбец EIRP — через jamming::j_over_s_db при собственной дистанции сценария. Контур дополнительно проверяется на то, что он является ГРАНИЦЕЙ множества подавления, а не точкой внутри него: lock_status теряет захват по строгому неравенству, поэтому измерено, что вердикт переключается с DEGRADED на LOST при 1e-4 дБ J/S по обе стороны от контура, чего контур со сдвигом на эпсилон не выдержал бы. Самая сильная проверка выполняется по каждой линии, а не по квантилям: применение той же функции к собственному C/N₀ каждой строки в точности воспроизводит столбец статуса отчёта — 0 расхождений на 38 из 38 строк в документированной рабочей точке (kind = lunar-jamming, все входные данные по умолчанию, кроме jammer.range_m = 25 000 м), где 26 строк LOST и 12 нет. Монотонность измерена, а не предполагается: 20 001 отсчётов на [tracking_threshold + 1e-3, 80] дБ-Гц, 0 нарушений строго убывающей дистанции и строго возрастающей требуемой мощности, так что порядок квантилей полосы продемонстрирован, а не заявлен. ExternalDataset отклонён, а вместе с ним и Validated: не существует измеренной кампании по лунным помехам, с которой можно было бы сравнить радиус подавления, орбитальная группировка — иллюстративная геометрия класса Moonlight/LCNS по общедоступным источникам, а не лётные эфемериды, а входные данные контура (EIRP, мощность постановщика помех, усиления антенн, шумовая температура) — репрезентативные порядки величин. ReferenceImpl тоже рассматривался и был отклонён: обращение и прямое выражение — это ОДНА И ТА ЖЕ алгебра, прочитанная в двух направлениях, поэтому круговая проверка выявляет ошибки переписывания и знака, но не является независимой реализацией; назвать её перекрёстной проверкой означало бы заимствованную независимость, которую инварианты матрицы существуют, чтобы предотвращать. Что даёт полоса, измерено и приведено, а не заявлено: в этой рабочей точке контур по одному скаляру равен 27,402916 км и относит 25 км к стороне подавления для всех 38 строк, тогда как полоса 21,256108 .. 29,921360 км содержит рабочую точку и поэтому сообщает разделение, которое на самом деле показывает таблица. Два критерия, как измерено, также расходятся — полоса по отношению мощностей (38,186527 .. 53,691675 км) вообще не содержит 25 км — поэтому печатаются оба | lunar_jamming (denial_js_db, range_for_free_space_path_loss_m, Cn0Distribution, DenialContourPoint, ContourBand, DenialContour; inverting jamming::effective_cn0_dbhz, jamming::j_over_s_db and jamming::free_space_path_loss_db) | lunar_jamming::tests (10 тестов библиотеки: the_contour_is_the_exact_inverse_of_the_functions_the_rows_were_scored_with; the_band_is_the_measured_quantiles_pushed_through_the_contour_not_a_sigma; the_asymmetry_the_band_carries_is_the_samples_own_shape_bent_by_the_criterion; the_contour_is_monotone_in_cn0_measured_over_a_dense_sweep_not_assumed; the_band_recovers_the_split_verdict_the_single_scalar_contour_lost; the_distribution_is_the_tables_own_order_statistics_and_keeps_the_rows; a_link_already_below_the_threshold_gets_a_null_contour_point_not_a_number; a_clean_sky_run_has_no_contour_at_all_rather_than_an_empty_one; the_denial_threshold_is_the_same_thirty_decibels_the_rest_of_the_engine_uses; the_units_block_describes_the_contour_and_names_nothing_the_report_omits) |
| Мощность обнаружения межмодального монитора целостности | Отчёт hybrid-optical-rf показывает, что межмодальный монитор хи-квадрат действительно способен ОБНАРУЖИТЬ, а не только то, что он проходит случай без неисправностей: минимальное обнаруживаемое смещение по каждой отслеживаемой оси (восток, север, вертикаль, часы) при заявленных в сценарии вероятностях ложной тревоги и пропуска обнаружения, кривую мощности обнаружения по обе стороны от него, кратность смещения без шума, при которой реализованная статистика впервые пересекает порог, и время до обнаружения для линейно нарастающего смещения с заданной скоростью. Неисправности также вносятся через настоящий монитор, и возвращаемая им статистика приводится рядом с аналитическим предсказанием | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Два внутренних оракула, внешнего набора данных нет. (1) Замкнутый круговой расчёт: минимальное обнаруживаемое смещение получается обращением хвоста нецентрального хи-квадрат по параметру нецентральности (raim::pbias) и проверяется подачей полученной нецентральности обратно через raim::noncentral_chi2_cdf при собственном пороге монитора, что должно вернуть P_md. (2) Внесение против анализа: смещение записывается в РЧ-оценку одной оси, и cross_raim::run_cross_raim запускается заново, так что статистика, сравниваемая с аналитической нецентральностью, — это та, что вычислил монитор, а не повторный вывод. Монте-Карло самой статистики с начальным значением включено в тесты как третья проверка; в отчёт оно намеренно НЕ включено, поскольку выборочная оценка была бы медленнее и не воспроизводилась бы бит в бит. ExternalDataset отклонён: рассматриваемая величина — мощность обнаружения ЭТОГО монитора при распределении сигм ЭТОГО сценария, а величины сигм, на которые масштабируется MDB, — репрезентативные входные данные Modelled, а не измерения. ReferenceImpl тоже рассматривался и был отклонён: Монте-Карло выбирает ту же статистику, которую описывает анализ, поэтому оно выявляет ошибки переписывания и коэффициентов, но не является независимой реализацией монитора. 0,30 раунд 2 (предварительная регистрация 0135a9e4), заблокировано (остаётся MODELLED): chi2/ncx2/brentq из SciPy 1.18.1 воспроизводят порог отчёта (в пределах 5.4e-12), MDB по осям, кривую мощности, кратность пересечения и время обнаружения нарастающего смещения (в пределах 5.3e-10) для пяти конфигураций; у статистик внесённых отказов нет независимого оракула, а величины сигм — входные данные Modelled, поэтому определение области ожидает решения владельца | hybrid_integrity | hybrid_integrity::tests (кривая мощности обнаружения идёт от частоты ложных тревог при нулевом отказе до 1 − P_md при минимальном обнаруживаемом смещении; минимальное обнаруживаемое смещение, поданное обратно через noncentral_chi2_cdf при пороге, применённом самим монитором, возвращает P_md с точностью 1e-9 на каждой оси и через публичный помощник; смещение, реально внесённое в РЧ-оценку, сдвигает собственную статистику монитора ровно на вычисленное вручную b²/(σ_rf² + σ_opt²); смещение без шума обнаруживается выше √(T/λ*)×MDB и пропускается ниже него, а ряд внесённых значений охватывает это пересечение; мощность обнаружения монотонна по величине отказа и одинакова на всех четырёх осях в кратных MDB; Монте-Карло статистики монитора с начальным значением на 200,000 выборок воспроизводит аналитическую мощность в пределах 4σ в четырёх точках кривой; MDB по времени зафиксировано выше предела тревоги по времени, и это измеренная слабость, а не свойство; измерено, что квантиль Вильсона–Хилферти расходится с точным порогом монитора примерно на ~4%, что фиксирует, почему он не использовался; величина нарастания равна ровно MDB/скорость и масштабируется обратно скорости, а неположительная скорость даёт null, а не ноль); tests/hybrid_fault_power_scipy_oracle.rs (report_detection_power_matches_scipy_chi2_and_ncx2; report_detection_power_matches_scipy_with_comparable_sigmas) |
| Повторный рост ковариации после передачи относительно предела тревоги | Отчёт hybrid-optical-rf раскрывает модель шума процесса фильтра и указывает, сколько времени решение после передачи остаётся в пределах предела тревоги: для обоих направлений передачи он берёт ковариацию по осям, оставшуюся после передачи, распространяет её вперёд при заданном шуме процесса типа случайного блуждания и сообщает момент, когда 1σ, масштабированная по коэффициенту охвата, достигает горизонтального, вертикального и временного пределов тревоги, какой из пределов срабатывает первым, постоянную времени удвоения дисперсии и выборочный профиль выбега, охватывающий пересечение. Спектральные плотности шума процесса, коэффициент охвата и пределы тревоги — всё это входные параметры с документированными значениями по умолчанию | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего оракула нет. Пересечение — это замкнутое решение для роста дисперсии при случайном блуждании, и тесты пересчитывают его независимо по значениям, которые публикует сам отчёт, а не по внутренним данным эмиттера. Начальная ковариация побитово привязана к следу, который уже сообщал существующий блок передачи управления, поэтому движение по инерции не может распространять ковариацию, которой никто другой не видел. СПМ шума процесса — репрезентативные входные данные MODELLED, и времена пересечения прямо масштабируются вместе с ними, что тест масштабирования формулирует как измеренное свойство, а не как утверждение. ExternalDataset намеренно отклонён: время движения по инерции — прямая функция двух СПМ Modelled и пределов тревоги, которые сами репрезентативны, а измеренного лунного оптического/РЧ-переходного движения по инерции для сравнения не существует. Внешний оракул здесь потребовал бы опубликованной кривой роста ковариации после передачи управления или точности holdover для сопоставимого приёмника с указанной моделью шума процесса, проверенной с заданным допуском | hybrid_integrity | hybrid_integrity::tests (движение по инерции начинается ровно со следа ковариации, который сообщает блок передачи управления, для обоих направлений, так что воспроизведённая диагональ не может отклониться от сообщённой передачи; сообщённое время пересечения пересчитывается по собственной сигме передачи управления, СПМ шума процесса и коэффициенту покрытия отчёта, а граница лежит внутри предела тревоги непосредственно перед ним и вне его сразу после; время движения по инерции масштабируется строго обратно СПМ шума процесса и сокращается при ужесточении предела тревоги; движение по инерции с нулевой СПМ сообщает null, а не нулевое время, потому что «никогда» — это не «немедленно»; выданный профиль пересекает предел ровно один раз и охватывает сообщённое пересечение; время удвоения дисперсии и время пересечения предела тревоги зафиксированы раздельно: они различаются на восемь порядков после жёсткой оптической ступени и в пределах одного порядка после мягкой РЧ-ступени; выход из оптической модальности даёт больше времени движения по инерции, чем выход из РЧ, ровно на разность ковариаций, делённую на скорость роста по горизонтали; а random_walk_time_to_limit различает случаи «уже вне предела», «пересекает в момент t» и «никогда не пересекает») |
| Диаграмма антенны вне оси в экспорте лунной геометрии | Экспорт геометрии по каждому спутнику содержит для каждой пары (эпоха, спутник) угол вне оси НА СПУТНИКЕ и коэффициент усиления передачи в направлении площадки по реальной диаграмме равномерно освещённой круглой апертуры (Эйри) и сообщает число спутников в луче по этой диаграмме РЯДОМ с числом спутников в луче по симметричному приближению «усиление — ширина луча» (θ_3dB[град] = √(31000/G_lin)); разность выдаётся как явная поправка по линиям, в спутниках на эпоху и как худшая отдельная эпоха. Оба подразумеваемых коэффициента использования апертуры для приближения выдаются (0,641 для правила 70·λ/D градусов, с которым оно приводится, 0,920 для равномерной круглой апертуры), чтобы эффективность, которую оно молча предполагает, была указана, а не выводилась. По умолчанию отключено: блок появляется только тогда, когда заданы и площадка экспорта, и апертура | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Смешанная, и разделённая, а не объединённая. Лежащая в основе ДИАГРАММА внешне проверена и сохраняет собственную строку (эталон scipy.special.j1 с точностью < 0,05 дБ в tests/validate_p1_orbital_footprint.rs, а здесь ещё опубликованная абсцисса Эйри по половинной мощности x = 1,61634, найденная бисекцией, а не принятая). ГЕОМЕТРИЯ проверена по замкнутой тригонометрии треугольника, записанной иным выражением, чем проверяемое скалярное произведение. ВКЛЮЧЕНИЕ реального луча в приближённый конус — выведенная алгебра (28.019/√η против 29,479 градуса на λ/D), так что поправка может быть неположительной только при η ≤ 0,9035. Но сами ЧИСЛА внутри луча не имеют внешнего оракула: ни одна опубликованная таблица не указывает, сколько спутников оболочки класса Moonlight/LCNS удерживают южно-полярную площадку внутри луча по половинной мощности антенны заданного диаметра, а орбитальная группировка — иллюстративное приближение по общедоступным источникам, а не лётные эфемериды. Измеренное расхождение в документированной рабочей точке — 0 линий внутри луча по реальной диаграмме против 28 по приближению, −2,33 спутника на эпоху, наихудшая эпоха 3, на 76 оценённых линиях — поэтому является результатом MODELLED о приближении, зафиксированным как литерал регрессии (ближайшая строка отстоит на 0,069° от любой границы луча, что на четыре порядка выше любого расхождения в последней цифре), а не внешне проверенным числом покрытия. Пометить строку ExternalDataset на основании собственной внешней привязки диаграммы означало бы заимствованную валидацию, которую инварианты матрицы существуют, чтобы предотвращать. 0,30 раунд 2 (предварительная регистрация d9755d28), заблокировано (остаётся MODELLED): геометрия SPICE и функции Бесселя SciPy воспроизводят угол от оси (наихудшее 3.0e-5 град), усиление Эйри и признаки нахождения внутри луча на 6 336 строках состояний летавших орбитальных аппаратов и документированной рабочей точки; но на лётной геометрии признаки расходятся по идентичности спутника (ближайшая линия — 1,66 град от границы луча), видимость при 5 град проверяется как признак, а не как числовое возвышение, признак симметричного приближения применяет эмпирическое правило 31000/G к проверенному углу, не проверяя само правило, а подразумеваемые КПД не имеют оракула; определение области ожидает решения владельца | lunar_service, antenna | antenna::tests и lunar_service::tests (точка половинной мощности, найденная бисекцией по диаграмме, совпадает с опубликованным x Эйри = 1,61634 и даёт точную ширину 1,02899·λ/D, фиксируя, что общепринятый коэффициент 1,02 приходится на −2,955 дБ, а не на −3,010 дБ; диаграмма строго убывает на 400 точках от оси до первого нуля; алгебра подразумеваемого КПД проходит круговой расчёт с точностью 1e-12 и воспроизводит 0,641 / 0,920; угол от оси совпадает с tan θ = R·sin γ/(r − R·cos γ) в 20 точках и оба предела с точностью 1e-12; приближённый конус содержит реальный луч построчно; итоговые числа равны построчным признакам, которые они обобщают, а поправка равна их разности; вердикт по каждой строке можно пересчитать по одному выданному отчёту; каждое выданное числовое и логическое поле имеет единицу и класс происхождения; невозможная апертура не выдаёт блока; при ненастроенной антенне экспорт сохраняет ровно свои шесть прежних ключей, 0 изменённых листьев и 0 удалённых); tests/validate_lunar_export_offboresight_spice.rs (flown_orbiter_export_matches_spice_geometry_and_scipy_pattern; documented_working_point_matches_anise_propagation_and_scipy_pattern) |
| Срыв слежения и затягивание спуфингом в контуре слежения при помехах | Срыв слежения, вычисленный по динамике контуров, а не по отношению мощностей: тепловое дрожание 1σ несущей (Костас) и кода (некогерентный опережающий/запаздывающий) в зависимости от C/N₀ с потерями на возведение в квадрат, относительно заданных правил 3σ_PLL + θ_e ≤ 45° и 3σ_DLL + запаздывание по скорости ≤ d/2 чипа; пороги C/N₀ срыва и повторного захвата с указанием определяющего контура и гистерезисом, ВЫВЕДЕННЫМ из более широкой полосы затягивания, а не заявленным; заявленное время до срыва слежения по двухпороговому детектору захвата с подтверждающими задержками, приводимое отдельно от физического времени ухода фазы (среднее время Витерби между проскальзываниями циклов, в log₁₀ с, так как оно охватывает сотни порядков); наибольшая скорость смещения кода и скорость изменения доплеровской частоты несущей, которые контуры жертвы способны отслеживать; и РАДИУС ОТКАЗА, следующий из динамики контуров, приводимый рядом с существующим радиусом по отношению мощностей, причём их разность со знаком является отдельным именованным полем. Запускается как вид сценария tracking-loop |
ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого блока, но не являющейся внешним авторитетным источником — Собственный коррелятор sdr движка (sdr::correlate / synth_if / CaCode), пошагово прогнанный на синтетической ПЧ с начальным значением при калиброванном C/N₀ — отдельный путь кода, приходящий к тем же числам численной корреляцией выбранных IQ, а не алгебраическим выражением дрожания, то есть другой маршрут, а не пересказ, — плюс стандартные табличные значения модифицированной функции Бесселя I₀ для члена проскальзывания цикла. Теория петель по Kaplan & Hegarty, гл. 8 и Viterbi/Gardner для времени проскальзывания. Строка остаётся ReferenceImpl/MODELLED: перекрёстная проверка находится в этой же кодовой базе, а проверка bessel_i0 подтверждает одну специальную функцию, а не модель слежения, поэтому повышение строки на этом основании было бы самообманной маркировкой. ExternalDataset потребовал бы записанного набора сырых ПЧ с эталонным C/N₀ и размеченным моментом потери захвата (класс TEXBAT/OAKBAT); в этом дереве такого нет, и даже с IQ эти наборы не публикуют эталона состояния петли по эпохам, так что заявленное время потери захвата можно было бы проверить только по детектору захвата другого приёмника, а это смоделированный выбор, а не оракул. Полосы петель, время интегрирования, разнос коррелятора, коэффициент вхождения в синхронизм, времена выдержки, мощность постановщика помех и усиления антенн — репрезентативные значения диапазона, а не паспортные данные. 0,30 раунд 2, GNSS-SDR 0.0.19 (GPL-3.0, запущен как программа) на независимо сгенерированной ПЧ (предварительная регистрация 6ef7698c, изменения метода измерения раскрыты), результат (остаётся MODELLED): дрожание ФАПЧ и DLL в замкнутой петле согласуется в пределах 8 % при 35–45 дБ-Гц, динамическое напряжение 10 Гц/с в пределах 1 %, а запаздывание линейного нарастания кода первого порядка в пределах 2 %; при 30 дБ-Гц дрожание ФАПЧ на 21 % выше, а дрожание DLL на 32 % ниже, измеренные пороги по правилу 15 градусов лежат на 1,5 дБ выше движка, а петля второго порядка проскальзывает на 0,5–2 десятичных порядка чаще, чем граница времени проскальзывания первого порядка. Правка 0,30: время проскальзывания Костаса теперь использует ОСШ петли rho/4 (проскальзывания на полцикла); log10_mean_time_to_cycle_slip_s в jitter_table по умолчанию падает с 11,58 до 2,10 на пороге 25,47 дБ-Гц | tracking_loop (composing sdr, jamming) | tracking_loop::tests (джиттер дискриминатора Костаса в разомкнутой петле относительно sdr::correlate, пошагово прогнанного на синтетической ПЧ с начальным значением, 3 объединённых реализации шума × 900 эпох, согласуется до 0,63% на 35-45 дБ-Гц, причём член потерь на возведении в квадрат должен подходить как минимум в 3 раза лучше формы без потерь на возведении в квадрат везде, где это разрешимо; насыщение арктангенсного дискриминатора около 32 дБ-Гц проверяется утверждением, а не просто заявляется, так что предел применимости зафиксирован; σ в замкнутой петле относительно шагового цикла Костаса sdr на 4000 эпох до 3,7%; запаздывание DLL первого порядка на линейном нарастании относительно шагового sdr DLL до 0,17%; bessel_i0 относительно табличных I₀ до 7.4e-8; ширина гистерезиса должна попадать в [5·log₁₀ r, 10·log₁₀ r] по 4 отношениям × 2 временам интегрирования × 3 полосам); api::tests::tracking_loop_kind_round_trips_through_the_dispatch; tests/tracking_loop_gnss_sdr_oracle.rs::finding_is_pinned |
| Ковариация координат точки лунной поверхности по расписанию задержек РСДБ, отдельная от ковариации земных станций | Третий вариант выбора датума, all-stations-fixed, который фиксирует каждую земную станцию и оценивает только связанные с Луной координаты МАЯКА, — конфигурация, для которой на самом деле приводится неопределённость точки лунной поверхности, так как координаты земных станций являются входными данными модели задержки, а не её неизвестными. Он существует потому, что ковариация на уровне станции и ковариация точки поверхности — РАЗНЫЕ ВЕЛИЧИНЫ, разделённые плечом ρ/B, и ничто раньше не мешало приводить одну вместо другой. Выдаваемый блок beacon_link содержит ρ, наибольшую базу, плечо, форму равного распределения для точки поверхности c·σ_τ·(ρ/B)·√(g/N), вычисленную сигму маяка по каждой координате и их отношение — отношение равно null, а не вводит в заблуждение, когда маяк не оценивается или матрица имеет дефицит ранга. B принимается равной НАИБОЛЬШЕЙ имеющейся базе, самой благоприятной, поэтому отношение может только занижать. Запускается как datum = "all-stations-fixed" с estimate_beacon = true, что отклоняется с сообщением, называющим недостающий вход, если маяк не оценивается |
ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого блока, но не являющейся внешним авторитетным источником — Замкнутые тождества, внешний оракул не заявляется и недоступен. Плечо рычага проверено по ρ/B, а две формы равнораспределения — друг по другу с точностью 1e-15 — это алгебраические тождества, поэтому они ловят ошибку подключения и ничего больше, и обозначены как таковые. Существенный результат MEASURED, а не заявлен: задержка по фиксированной базе ограничивает НАПРАВЛЕНИЕ на маяк, поэтому составляющая вдоль линии визирования попадает в информационную матрицу только через член дальности ближнего поля, и тест считывает получающуюся анизотропию с выданного спектра, а не выводит её. AM-HM делает √(p/trace(M)) жёстким нижним пределом, так что линия с изотропным равнораспределением может только ЗАНИЖАТЬ, а отношение вычисленного к равнораспределению — это в точности отброшенная ею анизотропия. MEASURED на паре типа Goldstone / типа Canberra, хорда которой равна 10726,748 км: за 112 выбранных суток 36 вообще не допускают ни одной эпохи взаимной видимости при маске 10°, наибольшее число взаимно видимых — 17 из расписания на 49 отсчётов, а в 73 пригодные сутки отношение по трём составляющим идёт от 113,9× до четырёх порядков больше, медиана 1513×, тогда как ограничение двумя поперечными направлениями, которые линия визирования не обделяет, даёт от 3,94× до 25,8×, медиана 7,8×. ЧТО ЭТА СТРОКА НЕ ЗАЯВЛЯЕТ: ни одну из этих величин как свойство реальной кампании. Она устанавливает, что величина для точки на поверхности теперь ВЫЧИСЛЯЕТСЯ, а не предполагается, и что её нельзя незаметно подменить величиной уровня станции. Остаётся ReferenceImpl/MODELLED: опубликованной ковариации точки на поверхности Луны по VLBI, с которой можно было бы сверяться, не существует, станции и площадка маяка иллюстративны, а не обследованы, а эфемериды, часы, тропосфера и параметры ориентации Земли ЗАФИКСИРОВАНЫ, поэтому это граница Крамера–Рао для сокращённого набора параметров, оптимистичная сама по себе. Та же величина на пути с ядрами (маяк на Луне DE440) проверена на собственной строке «…, kernel path»; на этом аналитическом пути наименьшая сигма маяка на 3,9 % ниже оракула SPICE той строки, поэтому эта строка остаётся MODELLED | lunar_vlbi_fim (composing lunar_vlbi, fim, cio, lunar_frame, frames) | lunar_vlbi_fim::tests (7 тестов библиотеки: каждое написание датума проходит круговой обмен через parse/as_str, а неизвестное отклоняется; удержание каждой станции без маяка отклоняется с ошибкой, называющей estimate_beacon; плечо рычага проверяется на РАВЕНСТВО ρ/B, а равнораспределение маяка на РАВЕНСТВО равнораспределению станции, умноженному на него, оба с точностью 1e-15, с дополнительной проверкой, что плечо рычага превышает 10, так что два бюджета на этой геометрии нельзя перепутать; опубликованная база образца зафиксирована на 10726,748 км, а его расписание на 49 отсчётов, как проверено, даёт строго меньше 49 взаимно видимых наблюдений; спектр маяка на одной базе, как измерено, охватывает не менее пяти десятичных порядков, а получающееся отношение, как проверено, выше 1 по AM-HM и выше 100 на деле; раскладка «станция плюс маяк», как проверено, имеет дефицит ранга при том, что ОБА вычисленных поля равны null, а смоделированное сравниваемое по-прежнему сообщается. Плюс защита самого образца: ключ верхнего уровня, вставленный после массива таблиц, вместо этого становится данными станции, поэтому точка вставки проверяется, а разобранный сценарий проверяется на наличие ключа — режим отказа здесь состоит в прогоне, который молча использует другую конфигурацию, чем названа в тесте) |
| Лунный дифференциальный PNT — бюджет остаточных ошибок линии поправок | Три члена, которые дифференциальная поправка приобретает между эпохой вычисления и эпохой использования, каждый из которых прежде оставался нерасчитанным запасом: ошибка привязки опорной станции (коррелирована по спутникам, не зависит от базы, передача положения ~1:1 и доказуемо не усиливается DOP), старение поправки (замороженный вектор ошибки орбиты, заново спроецированный на линию визирования, на которую собственный распространитель движка помещает спутник на одну задержку позже, плюс дрейф часов c·σ_y(τ)·τ по откалиброванному степенному закону) и равномерное квантование линии связи по точной полной шкале ±(orbit_err + clock_err) с дисперсией step²/12. Приводится в областях дальности и положения, рядом с существующими остаточной ошибкой и уровнем защиты, но не вместо них, с кривой по задержке рядом с единичным значением | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые тождества и самосогласованность: дисперсия равномерного квантователя step²/12, точное распространение ковариации (GᵀG)⁻¹GᵀRG(GᵀG)⁻¹, сводящееся к σ·PDOP при равных σ, перенос члена привязки 1:1 как следствие û_user ≈ û_ref и замыкание квадратуры при отключении. Перекрёстная проверка PDOP по orbit::dop использует ту же нормальную матрицу [−û, 1], поэтому это проверка согласованности и обозначена как таковая, а не как независимый оракул. ExternalDataset недоступен и не заявляется: ни у одной лунной наземной станции нет опубликованной обследованной точности, ни у одной лунной линии дифференциальных поправок нет опубликованной задержки или формата сообщения, а результат квантования — замкнутая форма, а не измерение. RTKLIB — уже внешний оракул по коду для ядра одиночных разностей и взвешенных наименьших квадратов — можно было бы запустить с намеренно неверно обследованной базой, чтобы подтвердить перенос привязки 1:1, но это независимый код поверх той же алгебры линий визирования первого порядка. ВЕЛИЧИНЫ — MODELLED: значение привязки по умолчанию — это собственное распределение реализации лунной системы координат этого крейта, а не измеренная станция, задержка и число бит — ILLUSTRATIVE входные данные, а рост самого ВЕКТОРА ошибки передаваемых эфемерид не моделируется вообще — это указано в выдаваемой строке закона старения, потому что именно этот член с наибольшей вероятностью доминировал бы на реальной линии | lunar_dpnt | lunar_dpnt::tests (чисто аддитивная защита, разница набора ключей которой — ровно {correction_link, units}, а каждое прежнее значение побитово идентично литералам, снятым до изменения; ошибка привязки НЕ декоррелирует с базой, тогда как орбитальный член декоррелирует, и она сохраняется при нулевой базе, где орбитальный член строго равен нулю — структурная проверка, ловящая подключение члена не в то место; ошибка станции в 1 м переносится 1:1 и, как доказано, не усиливается DOP; нулевая задержка воспроизводит невозрастной остаток бит в бит, а остаток монотонен по задержке, причём выданная кривая равна прямым прогонам; шаг квантования уменьшается ровно вдвое на бит, а σ² = step²/12, и полная шкала следует вводимым величинам; каждый член, отключённый по очереди, восстанавливает два других в квадратуре; равные σ по спутникам распространяются точно в σ·PDOP, и этот PDOP согласуется с orbit::dop; каждое выданное поле несёт единицу и класс происхождения, проверено в обоих направлениях) |
| Карта охвата и точности лунной опорной станции | Развёртка Монте-Карло лунной дифференциальной модели PNT по южнополярной сетке пользователей и суткам эпох (вид lunar-station-coverage): для дифференциальной опорной станции на известной южнополярной площадке — по каждой точке и по региону — процентильная скорректированная и нескорректированная ошибка положения (3-D, горизонтальная, вертикальная), доступность с причиной для каждой недоступной эпохи (user_lt4, station_missing_sat), охват относительно порога, заданного до прогона, уровни защиты DO-229E, радиус охвата по азимутальным секторам и бюджет линии поправок на станции и в худшей точке. Это не заявление о характеристиках какой-либо реальной системы; не связано с каким-либо ведомством и не одобрено им |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Арифметика, пересчитанная независимым скриптом numpy на экспортированных случаях (scripts/gen_lunar_station_ref.py, numpy 2.5.4; предварительно зарегистрировано в tests/fixtures/lunar_station/PREREGISTRATION.md, закоммичено отдельно в 9caedf97 до первого прогона): на 20 случаях при включённых всех членах ошибок видимые множества и статус идентичны, сырые ошибки дальности согласуются до 1.4e-14 м, векторы и модули ошибки положения до 1.4e-9 м при пороге 1e-6 м, а p95 каждой точки равен numpy.percentile бит в бит; поправки станции НЕ ВЫПОЛНИЛИ порог 1e-9 м (наихудшее 3.73e-9 м, 15 из 20 случаев), а с ними и скорректированные ошибки дальности: при проверке в арифметике с 60 цифрами обе стороны лежат в пределах округления двойной точности от точного значения, поскольку член привязки есть разность двух дальностей порядка 1e7 м, единица последнего разряда которых равна 1.86e-9 м; зафиксировано, а не подогнано. Вид точно сводится к виду lunar-differential-pnt при одной точке, одной эпохе и одном испытании. Модель ошибок, модель декорреляции и каждый порог — собственные для этого проекта или ILLUSTRATIVE; ничто здесь не является утверждением о какой-либо реальной системе | lunar_station (over lunar_dpnt, lunar_service) | tests/lunar_station_coverage_reference.rs (one_point_one_epoch_one_trial_reduces_to_lunar_differential_pnt: до 1e-12 м с шумом приёмника и без него; zero_baseline_floor_is_zero_in_every_trial: 0 до 1e-9 м; survey_floor_matches_the_survey_transfer_prediction: p95 в пределах полосы 5 %, заявленной до прогона; coverage_is_non_decreasing_in_the_threshold; corrected_error_grows_with_distance_along_an_azimuth; three_satellites_are_unavailable_with_a_reason_and_no_error; a_satellite_the_station_does_not_see_is_reported; deterministic_for_a_seed_and_moved_by_another; the_work_guard_refuses_an_oversized_grid; the_bundled_scenario_states_a_source_for_every_input; the_result_is_labelled_modelled_with_the_honesty_statement); tests/lunar_station_numpy_oracle.rs (предварительно зарегистрированный пересчёт numpy, записанный вместе с его промахом); lunar_service::tests::south_polar_ring_grid_is_the_published_comparison_grid; tests/lunar_differential_pnt_reference.rs, а также реестр и кросс-платформенные эталонные значения без изменений (аддитивность); tests/field_units_global.rs (каждое выданное поле описано, без исключений) |
| Маски горизонта лунного рельефа по заданному профилю или полярной ЦМР | Зависящие от азимута маски горизонта для каждой площадки для вида lunar-station-coverage (опорная станция и каждая точка пользователя) и сетки moonlight-service-volume с её площадкой экспорта по каждому спутнику (каждая строка экспорта получает clears_terrain) в формате таблицы линии горизонта 0,36 (skyline::Skyline, линейно по азимуту с замыканием на 360 град; заданный профиль и горизонт ЦМР на одной площадке объединяются как их поточечный максимум): заданный [terrain] station_horizon или user_horizon с указанием источника и/или горизонт, найденный трассировкой лучей по южной полярной стереографической ЦМР (сеточная полярная раскладка LRO LOLA, считываемая из дескриптора, фиксирующего её размер и SHA-256, или тайл широты и долготы realdata::lola_dem с [terrain] dem_tile_path, воспроизводимый с его SHA-256) по большим кругам лунной сферы с точной кривизной, с заданной высоты мачты, с заданным шагом по азимуту и дальностью. Спутник учитывается на площадке, когда он выше плоской маски mask_deg и горизонта на своём азимуте (lunar_service::topocentric); эпоха, в которой горизонт оставляет менее четырёх спутников в точке, где плоская маска даёт четыре, учитывается как причина недоступности terrain_masked. Включённая в поставку ЦМР — фрагмент продукта LOLA LDEM_75S_240M, находящегося в общественном достоянии, с передискретизацией блочным средним 5 x 5 до 1200 м (data/lunar-dem/NOTICE.md). При отсутствии каждая площадка сохраняет плоскую маску, а каждый документ побайтово идентичен | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые поверхности (InternalConsistency): понижение горизонта на голой сфере, кратер в плато на сфере с наблюдателем в его центре и вне него и аналитический конус относительно собственной растеризации. На реальном фрагменте независимая трассировка лучей на numpy (scripts/gen_lunar_terrain_ref.py, numpy 2.5.3; предварительно зарегистрировано в tests/fixtures/lunar_terrain/PREREGISTRATION.md, закоммичено отдельно в edbb9b02 до появления скрипта) согласуется на пяти площадках: высоты площадок до 1.0e-11 м и все 1800 возвышений горизонта до 5.5e-10 град при порогах 1e-6, число усечённых лучей точное; это проверяет арифметику, а не рельеф. Ни одна опубликованная величина полярного горизонта или освещённости не воспроизведена: включённый в поставку фрагмент в 1200 м сглаживает рельеф с масштабом менее километра, который разрешают опубликованные исследования освещённости, поэтому горизонты по ЦМР — это линия визирования MODELLED по пересэмплированной реальной ЦМР, а не проверенный горизонт. Площадка станции и орбитальная группировка остаются ILLUSTRATIVE; ничто здесь не является утверждением о какой-либо реальной системе | lunar_terrain (over skyline, lunar_service::topocentric_basis); lunar_station; lunar_service (coverage_masked, masked_visible) | lunar_terrain::tests (bare_sphere_horizon_is_the_dip: трассировка луча воспроизводит -acos(R / (R + a)) до 1e-3 град при каждом азимуте; a_cone_on_a_lat_lon_tile_matches_the_analytic_cone: тот же конус, снятый на плитку широта/долгота в 0,005 град, согласуется с аналитическим конусом до 0,25 град; a_lat_lon_tile_is_none_outside_and_wraps_longitude; crater_in_plateau_matches_the_closed_form: кратер с плоским дном на сфере, наблюдатель в центре и в 4 км и 7 км от него, относительно замкнутой формы возвышения кромки atan2((R + H) cos s - (R + a), (R + H) sin s), где s из сферического уравнения пересечения кромки, до 0,01 град при каждом азимуте; rasterised_cone_matches_the_analytic_cone: конус, растеризованный на полярную стереографическую сетку 200 м и считанный через сэмплер сетки, согласуется с аналитическим конусом до 0,25 град; projection_round_trips_through_the_rasteriser_layout; bilinear_reproduces_a_plane_exactly; stated_horizon_goes_through_the_skyline_rules; an_empty_skyline_is_exactly_the_flat_test); tests/lunar_station_terrain.rs (without_terrain_the_document_has_no_terrain_keys; a_zero_horizon_under_a_positive_mask_is_the_flat_run, для обоих видов; a_horizon_only_removes_satellites_and_a_wall_removes_everything: user_lt4 сохраняет своё плоское число, а эпохи, которые стоит горизонт, — это terrain_masked (сама доступность может вырасти, потому что горизонт может скрыть спутник, которого станция не видит), а горизонт 89 град на станции не оставляет ничего доступного; bad_terrain_sections_are_refused; the_vendored_crop_loads_and_is_oriented_as_the_source: днища кратеров Шеклтон и Хауорт низкие, массив Малаперт высокий, зеркальное отражение — нет; the_station_site_horizon_from_the_crop; service_volume_dem_points_outside_the_crop_keep_the_flat_mask; a_lat_lon_dem_tile_gives_the_station_the_crop_horizon: плитка, пересэмплированная из включённого фрагмента, даёт станции горизонт фрагмента до 0,22 град (граница 0,5 град, заданная до прогона), с эхом плитки и единицами, а dem_path вместе с dem_tile_path отклоняется; the_export_site_is_masked_by_the_terrain: каждая строка экспорта проходит рельеф ровно тогда, когда она видна и находится на уровне горизонта площадки по своему азимуту или выше, геометрия не смещается, а CSV получает столбец только с рельефом; the_horizon_matches_the_preregistered_numpy_ray_cast); tests/prediction_frozen.rs, а также реестр и кросс-платформенные эталонные значения без изменений (аддитивность) |
| Многолучевость и аппаратные члены приёмника лунной опорной станции | Необязательный раздел [receiver] вида lunar-station-coverage (LRS-02): зависящая от угла места сигма многолучевости sigma(el) = a + b exp(-el / el0) у пользователя и на станции (функциональная форма RTCA DO-229 для воздушных судов, её a = 0,13 м, b = 0,53 м, el0 = 10 град по умолчанию; на Луне любое значение ILLUSTRATIVE), белая у пользователя и марковская первого порядка Гаусса по эпохам на станции (rho = exp(-dt / tau)); тепловой шум кода DLL по разности опережающего и запаздывающего sigma = L_c sqrt(B_L d / (2 C/N0) (1 + 2 / ((2 - d) T C/N0))); межканальные смещения по каналам, постоянные в течение испытания, у пользователя и на станции. Члены станции входят в её поправки, члены пользователя — в необработанные и скорректированные измерения, каждый на собственном потоке с начальным значением. При отсутствии каждый документ не меняется | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые формы и статистики собственных выборок модели (InternalConsistency): формула DLL относительно ручного расчёта, форма DO-229, нулевая разность двух приёмников на нулевой базе, корреляция лага 1 по Гауссу–Маркову. Никаких измерений лунной многолучевости или приёмника для сравнения не существует; значения ILLUSTRATIVE, и ничто здесь не является утверждением о каком-либо реальном приёмнике | lunar_receiver; lunar_station | lunar_receiver::tests (multipath_is_the_do229_form; dll_noise_matches_a_hand_computation: 0,825279 м при 45 дБ-Гц, 0,5 Гц, d = 1, 20 мс; bad_sections_are_refused); tests/lunar_station_ext.rs (receiver_absent_or_silent_is_the_plain_run; zero_baseline_multipath_is_the_difference_of_two_receivers: выборочная сигма sqrt(2) a в пределах 6 %; station_multipath_is_gauss_markov: корреляция лага 1 exp(-dt / tau) в пределах 0,01, единичная дисперсия в пределах 2 %; inter_channel_biases_are_constant_over_a_trial); tests/prediction_frozen.rs и эталонные значения без изменений (аддитивность) |
| Рост ошибки эфемерид лунной опорной станции за время задержки поправки | Необязательный вход orbit_err_growth_m_per_s вида lunar-station-coverage (LRS-03): поправка, применённая через latency_s после вычисления, упускает рост g latency_s ошибки вещательной орбиты, где g изотропно с 3-D среднеквадратичной скоростью, выбирается для каждого спутника и испытания на собственном потоке с начальным значением (1-сигма скорость по дальности tau / sqrt(3)), сверх повторной проекции замороженной ошибки на линию визирования. При отсутствии каждый документ не меняется. Дополнение K5 к сравнению с опубликованными утверждениями, предварительно зарегистрированное отдельно, запускает K5 при 0,001, 0,01 и 0,1 м/с (ILLUSTRATIVE) | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутая сигма члена роста и проверка распространения первого порядка (InternalConsistency). Дополнение K5 (tests/fixtures/lunar_station_published/ADDENDUM-LRS03.md, предварительно зарегистрировано отдельно в 59d88248): K5 не выполняется при каждой скорости, скорректированное p95 в 3-D 369,8 м, 2315 м и 22797 м при пороге 1,5 м (292,96 м записано без роста), как заявлено до прогона. Ни один общедоступный источник не даёт скорости роста для Луны: ILLUSTRATIVE | lunar_station (orbit_growth_range_sigma_m) | tests/lunar_station_ext.rs (growth_absent_or_zero_is_the_frozen_error_run; the_growth_term_has_the_closed_form_sigma: разность ошибки линии с ростом и без роста имеет выборочную сигму rate tau / sqrt(3) в пределах 6 % по 1600 выборкам; linear_growth_is_the_first_order_propagated_error: ошибка скорости dv, распространённая внутренним двухтельным интегратором от орбиты сценария, смещает положение на dv tau в пределах 1 % при 60 с и 600 с); tests/lunar_station_published_oracle.rs::k5_growth_addendum_run (игнорируется, записанное дополнение) |
| Режимы решения лунной опорной станции: ограничение по высоте, три спутника, окно для неподвижного пользователя | Необязательный раздел [solution] вида lunar-station-coverage (LRS-06): строка псевдоизмерения высоты up . dx = e_h с заданной 1-сигмой, взвешенная относительно строк дальности, минимум в три спутника, допускаемый только вместе с ней, и решение взвешенным методом наименьших квадратов по последним window_epochs эпохам с общим неподвижным положением и одними часами на эпоху (ответ фильтра для неподвижного положения без шума процесса по тем же данным; ошибки эпох считаются независимыми). При отсутствии мгновенное решение и каждый документ не меняются. Дополнение к сравнению с опубликованными утверждениями в стиле решения источников, предварительно зарегистрированное отдельно | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Снимочная редукция и замкнутые случаи решателя (InternalConsistency). Дополнение (tests/fixtures/lunar_station_published/ADDENDUM-LRS06.md, предварительно зарегистрировано отдельно в 001ca100) с ограничением по высоте 1 м, тремя спутниками и окном в 6 эпох (ILLUSTRATIVE настройки; источники указывают фильтр, ограничение по высоте и три спутника, но не их настройки): K1–K5 не выполняются, а K6 выполняется, 1 из 6 как в записанном прогоне; скорректированная ошибка p95 в 3-D для R300 падает с 280,6 м до 2,11 м (по горизонтали 0,90 м, не оценивалось), а покрытие остаётся 0. Допущение о независимости окна ему благоприятствует. Не является утверждением о какой-либо реальной системе | lunar_solution; lunar_station (solution_figures) | lunar_solution::tests (one_epoch_without_height_is_the_snapshot_solve: равно lunar_dpnt::position_error_vector_from_range_errors до 1e-8 м, слабая строка высоты ничего не меняет, жёсткая фиксирует ошибку по высоте; three_satellites_need_the_height_row; a_window_shares_the_position; bad_sections_are_refused); tests/lunar_station_ext.rs (the_default_solution_mode_is_the_snapshot_solve: каждая величина до 1e-6 относительно; height_aiding_and_a_window_do_what_they_say); tests/lunar_station_published_oracle.rs::solution_style_addendum_run (игнорируется, записанное дополнение) |
| Точность и охват лунной опорной станции по сравнению с опубликованными утверждениями | Вид lunar-station-coverage, запущенный при открытых предположениях опубликованных материалов о лунной дифференциальной опорной станции (четыре навигационных спутника на замороженных эллиптических орбитах с периодом 24 ч, SISE 10 м 95 %, шум кода 0,30 м, задержка поправки 1 с и 600 с, привязка станции с субдециметровой точностью, опубликованная примерная площадка станции, южнополярные окружности 300 км и 600 км) и оценённый по числовым утверждениям источников по шести односторонним порогам, предварительно зарегистрированным до прогона: охват всего южного полюса при субметровом p95 (K1, K2), субметровое и дециметровое скорректированное p95 (K3, K4), субметровое значение, сохраняемое при задержке 600 с (K5), и точность, сохраняемая при базе от 10 км до 500 км (K6) | ExternalDataset | подтверждена внешней проверкой одна из частных гипотез, но возможность в целом составлена из смоделированных частей, поэтому она остаётся Modelled — Источник: числовые утверждения пяти общедоступных источников, зарегистрированные с URL, датой получения, SHA-256 и лицензией в tests/fixtures/lunar_station/SOURCES.md (arXiv:2602.08432v3; слайды IOAG Cislunar PNT Workshop 2025 и 2026; UNOOSA ICG WG-B Lunar PNT, июнь 2024), перенесённые со ссылками на страницы в tests/fixtures/lunar_station_published/CLAIMS.md. Пороги, случаи и входные данные были предварительно зарегистрированы в tests/fixtures/lunar_station_published/PREREGISTRATION.md (редакция 2, 05bf9a19, закоммичено отдельно до прогона). 0,36 первый прогон, результат (остаётся MODELLED): проходит 1 из 6 порогов. Покрытие составляет 0,00 на обоих кругах при >= 0,95, а скорректированная ошибка p95 в 3-D равна 280,6 м (300 км) и 293,0 м при задержке 600 с против <= 1,5 м. Дециметровый порог (K4) не мог быть выполнен при шуме кода 0,30 м, заданном в источниках, что отражает противоречие между самими источниками, а не результат модели. K6 выполняется (отношение 1,39 при <= 1,5), но как отношение двух величин, определяемых геометрией, оно не свидетельствует о декорреляции ни в ту, ни в другую сторону. Причина: элементы орбит спутников не опубликованы, и на ILLUSTRATIVE элементах из дерева пользователь и станция делят четыре спутника выше 5 град лишь в 8,2 % (300 км) и 6,3 % (600 км) эпох, при почти сингулярной геометрии (нескорректированное p95 3,8 км при < 10 м в источниках). Моделирование в источниках использовало фильтр, ограничение по высоте и три спутника в общей видимости, чего снимочный вид не моделирует. Поэтому сравнение не подтверждает и не опровергает опубликованное «субметровая точность на всём южном полюсе». Оно показывает, что результат этой модели зависит от орбит, которые не опубликованы. Не является утверждением о какой-либо реальной системе; не связано с каким-либо ведомством и не одобрено им | lunar_station (over lunar_dpnt, lunar_service) | tests/lunar_station_published_oracle.rs::recorded_finding_one_of_six_bars_passes (записанные величины относительно зарегистрированных порогов); tests/lunar_station_published_oracle.rs::published_claims_comparison_run (игнорируется, около 7 с в режиме release: повторно запускает шесть зарегистрированных случаев и проверяет записанные величины) |
| ARAIM с одновременными гипотезами неисправности нескольких спутников | araim_reference::add_v42_subset_plan: правило определения подмножеств ADD v4.2 (P_THRES, FC_THRES, контролируемые подмножества с наименьшим числом исключённых — первыми), обобщённое с пар на одновременные сочетания до max_order событий спутников и орбитальных группировок, с точным априорным значением P_no fault prod q_e; add_v42_protection_levels_to_order запускает на нём путь уровней защиты ADD v4.2 (порядок 2 — в точности существующий путь). raim::araim_subset_raim (по желанию): расширенный RAIM по этому набору гипотез, каждое контролируемое подмножество — один режим (p_fault, T, b, sigma) в сумме риска целостности, ненаблюдаемые подмножества переносятся в неконтролируемый риск, бюджет масштабируется по распределению ADD неконтролируемого риска, а при обнаружении неисправности сообщается подмножество с наибольшим нормированным разделением. Априорные значения, требующие более глубоких подмножеств, чем max_order, отклоняются, а не усекаются | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность (InternalConsistency): редукция порядка 2 к проверенному по MAAST пути ADD v4.2, независимый повторный вывод априорных вероятностей и сконструированный отказ двух спутников. Прогонов MAAST или RTKLIB сверх пар не выполнялось, поэтому более глубокие наборы гипотез и уровни защиты RAIM по подмножествам не проверены внешне. araim_subset_raim разделяет упрощения araim_dual_raim (одна сигма для целостности и точности, одни часы, обычный нормальный хвост): он не соответствует ADD | araim_reference (add_v42_subset_plan, add_v42_protection_levels_to_order); raim (araim_subset_raim, SubsetRule) | tests/raim_multi_sv_subsets.rs (deeper_orders_change_nothing_when_pairs_suffice; triples_are_refused_at_order_two_and_planned_deeper: N_fault,max >= 3, неконтролируемый риск в пределах P_THRES, подмножество, исключающее три или более спутника, контролируется, а более десяти контролируемых априорных вероятностей независимо выведены заново как P_no fault q^k с точностью 1e-12; a_two_satellite_fault_is_found_as_a_pair: без тревоги при отсутствии отказа, а смещение 30 м на двух спутниках обнаруживается с парой как подмножеством наибольшего нормированного разделения); tests/araim_reference_vectors.rs и tests/integrity_araim_stanford_oracle.rs без изменений (путь порядка 2 — это проверенный по MAAST) |
| RAIM рядом с показателями качества holdover часов | Необязательный раздел [integrity] вида clock (clock_integrity::run): по заданной площадке и предустановкам орбитальных группировок (geometry::sky_geometry), на каждой эпохе целостности, пока временная шкала GNSS не подавлена, мгновенный RAIM (raim::snapshot_raim: проверка по хи-квадрат для чётности, уровни защиты по наклону) по спутникам выше маски с гауссовыми невязками с начальным значением и заданной сигмой и необязательным заданным смещением; отдельный блок integrity_fom с вердиктами по эпохам, уровнями защиты и доступностью. Эпохи с подавлением сообщаются как недоступные, а не экстраполируются; показатели качества holdover не меняются, а без раздела выход побайтово идентичен | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность (InternalConsistency): уровни защиты — это уровни snapshot_raim, который проверен по RTKLIB в собственной строке, пересчитанные на той же геометрии; поведение без отказа и с внесённым отказом. Небо — репрезентативная заданная геометрия (не датированный альманах), невязки синтетические, а сигма, пределы тревоги и вероятности — заданные входные данные; ничто здесь не является утверждением о доступности какого-либо реального приёмника | clock_integrity (run, sky_at, IntegrityCfg); scenario (Scenario::integrity); report (RunResult::integrity_fom); api (clock dispatch) | tests/clock_integrity.rs (the_block_is_separate_and_absent_by_default: величины holdover не меняются, 111 эпох отказа недоступны без уровня защиты, отклонено при runs > 1; protection_levels_are_the_snapshot_raims_on_the_same_sky: HPL и VPL каждой выбранной эпохи в точности равны snapshot_raim с нулевой невязкой на том же заданном небе, а прогон без отказа не вызывает тревоги; a_stated_bias_is_detected_while_it_lasts: смещение 60 м вызывает тревогу ровно на 10 эпохах, которые оно охватывает; every_integrity_field_has_a_unit); clock_integrity::tests; эталонные значения часов без изменений |
| Пространственная, зашумлённая наблюдаемость длины дуги для нескольких семейств в цислунном пространстве | Порог наблюдаемости по длине дуги в цислунном пространстве в ПРОСТРАНСТВЕННОЙ шестисостоятельной CR3BP, а не в плоской четырёхсостоятельной, для семейств DRO, гало L2 и почти прямолинейных гало L2, с шумом измерений, входящим в грамиан, и с приведением ДВУХ критериев, так как единственного честного нет: опубликованного критерия ранга, который доказуемо инвариантен к гомоскедастической сигме измерений (отбеливание умножает матрицу наблюдаемости на скаляр, оставляя относительный спектр сингулярных чисел, а значит ранг, дефект и обусловленность неизменными), и критерия оцениваемости — первой дуги, на которой формальная неопределённость положения 1σ начального состояния ведущего аппарата падает ниже заданной границы, — единственного, который действительно меняется с шумом. Каждый порог сопровождается скобкой сетки эпох, в которой он лежит; недостигнутый критерий равен null с указанием причины. Плоский режим остаётся режимом по умолчанию, а семейства вне плоскости в нём отклоняются, а не сплющиваются в состояние, которое не может их представить | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Независимый ранг по ступенчатой форме строк, полученный методом Гаусса с частичным выбором ведущего элемента, подтверждает каждый вердикт по рангу шести состояний — это другой алгоритм, не имеющий общего кода с проверяемым путём собственных значений/SVD. Матрица перехода состояния CR3BP размерности 6×6, которую она компонует, несёт собственный оракул ReferenceImpl относительно вариационного интегрирования в SciPy, а начальные условия для гало/NRHO берутся из корректора, воспроизводящего опубликованную южную орбиту L2 Gateway 9:2. Существующая ветвь фильтра квадратного корня информации явно НЕ засчитывается как подтверждение: она потребляет те же якобианы и сводится к той же нормальной матрице, поэтому это проверка согласованности между двумя численными механизмами, о чём и говорит выдаваемая метка расширения. НЕ привязана к внешнему источнику, и поэтому ExternalDataset отклонён, а не заимствован у строки STM: сами пороговые длины дуги зависят от конструкции орбитальной группировки MODELLED, сетки эпох и — измеримо, до 40× — от допуска по сингулярным числам. Опубликованные для плоского случая 2,09 ч воспроизводятся точно при rel_tol = 1e-6 и сами зависят от допуска (10,25 ч при 1e-4, 0,42 ч при 1e-8), что является свойством критерия, а не орбиты. Ни один общедоступный набор данных не публикует порога наблюдаемости по длине дуги для выбранной цислунной группировки. MEASURED РЕЗУЛЬТАТ: пространственный порог для шести состояний равен 22,17 ч для NRHO у L2 и 40,42 ч для гало у L2 и НЕ СУЩЕСТВУЕТ для семейства плоских DRO, на котором выведено опубликованное утверждение, — ранг 4 из 6 с дефектом датума 2 и двумя строго нулевыми собственными значениями, структурным дефектом, который не устраняет никакая длина дуги | cislunar_observability, observability_gramian, intersat_range, cislunar_srif | cislunar_observability::tests и observability_gramian::tests (документ по умолчанию зафиксирован бит в бит через FNV-1a его JSON, сводки и SVG, причём значения по умолчанию, заданные явно, как проверено, ничего не меняют, а восемь ключей расширения, как проверено, ОТСУТСТВУЮТ, чтобы снимок нельзя было заново сгенерировать в сравнение с самим собой; аддитивный блок units исключён из заморозки тем, что он вырезается, а остаток заново хешируется относительно константы, зафиксированной до его появления, что доказывает, а не предполагает, что ничего выпущенного не сдвинулось; инвариантность ранга при гомоскедастической сигме проверена при σ = 0, 0,1, 1, 10, 100 м; σ_pos, как проверено, масштабируется строго линейно с σ до 1e-6 относительно; нулевое пространство DRO, как проверено, — это в точности координатные оси z и ż с разделением двух причин — строка дальности между компланарными космическими аппаратами имеет û_z = 0, а внеплоскостной блок CR3BP точно развязывается при z = 0; пространственные якобианы относительно центральных конечных разностей и относительно независимой 3-D наблюдаемой скорости изменения дальности крейта; внеплоскостные семейства отклоняются в плоском режиме) |
| Ошибка прогноза ориентации Земли в операционном стиле, измеренная как «прогноз против окончательных значений» | Подгонка методом наименьших квадратов смещения и скорости по замыкающему окну плюс основные периодические члены — годовой, полугодовой и два основных зональных прилива для UT1; Чандлеровский, годовой и полугодовой для полюса — с экстраполяцией и переносом вперёд последней невязки в окне: класс, который использует Bulletin A IERS, вместо предсказателя постоянства, на котором основывался опубликованный горизонт. Оценка единственным честным способом: прогноз на T+h, построенный по оперативным строкам Bulletin A на момент T или ранее, измеряется относительно окончательного значения Bulletin B, ОПУБЛИКОВАННОГО ПОЗЖЕ, на T+h, а рядом оценивается постоянство на том же наборе эпох относительно тех же окончательных значений. Целевая эпоха без опубликованного окончательного значения отбрасывается, а не переоценивается по оперативному столбцу; периодический член, который окно не может ограничить, сообщается как отвергнутый с указанием циклов, которые окно реально охватывает; неполное окно отклоняется, а не молча сокращается | ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого блока, но не являющейся внешним авторитетным источником — Три независимых пути, ни один из которых не является опубликованной величиной точности прогноза. (1) Аналитический сигнал с известными коэффициентами — единственный способ задействовать периодический механизм, поскольку ни один зафиксированный ряд не достаточно длинен для годового члена. (2) Учебное замкнутое решение методом наименьших квадратов, иная алгебра, чем у проверяемого матричного решения, на реальных строках. (3) Подлинные архивные строки прогноза Bulletin A, которые публикует реальный продукт 2026 года, сравниваемые по каждому времени упреждения как статистика СОГЛАСИЯ и явно не как ошибка: 0,256 мс при 1 сутках, 0,695 мс при 2 сутках, 1,252 мс при 3 сутках, дрейфуя до 3,885 мс при 9 сутках. Так что это КЛАСС Bulletin A, близкий при коротком упреждении, а не сам Bulletin A. Невязки «прогноз против итогового значения» — реальные измеренные величины по реальным строкам IERS, но их размер проверяется только по НАПРАВЛЕНИЮ сравнения, а не по опубликованной IERS цифре точности — чтение реального продукта есть происхождение данных, а не оракул. MEASURED: на 1-е сутки эксплуатационный предсказатель даёт ошибку в системе отсчёта Луны 3,78 м против 11,39 м у персистентности (3,01×), на 2-е сутки 10,23 м против 21,72 м (2,12×), на 3-и сутки 20,33 м против 30,57 м (1,50×) — и он ХУЖЕ при упреждении свыше трёх суток (0,87× при 5 сутках, 0,43× при 10), и отчёт выдаёт это, а не показывает только горизонты, которые ему льстят. НЕ воспроизведены: авторегрессионный фильтр невязок и табличная редукция зональных приливов, 365-суточное эксплуатационное окно недостижимо при зафиксированных данных, а в этом репозитории НЕТ архивной более ранней редакции ряда — поэтому таблица архивной редакции не сообщает строк, а не оценивает синтезированную. 0,30 внешнее сравнение, результат (остаётся MODELLED): при оценке по тем же итоговым значениям на 178 архивных выпусках Bulletin A с окном крейта по умолчанию в 15 суток MAE по UT1 у предсказателя составляет от 2.4x до 12.6x от Bulletin A при 1–10 сутках (порог 1.5x) и 5,32 мс при 10 сутках, за пределами диапазона от 0,36 до 3,13 мс 2nd EOP PCC; по полюсу — от 1.5x до 1.85x от Bulletin A (в пределах 1.5x лишь при 6 и 7 сутках); 19 из 21 предварительно зарегистрированных условий не выполнены. Поправка к пути (3): строки продукта 2026 года, с которыми он сравнивался, несут флаг IERS I (измерено), а не P, поэтому те величины согласия относятся к измеренным быстрым значениям, а не к прогнозам Bulletin A. 0,30 раунд 2, предсказатель на наименьших квадратах плюс авторегрессия с аналитически удалёнными зональными приливами против 178 архивных выпусков Bulletin A при пороге раунда 1 (предварительная регистрация c93605b4), результат (остаётся MODELLED): выполняются 12 из 21 условий; MAE по UT1 составляет от 1,73 до 2.11x от Bulletin A при 2–10 сутках (порог 1.5x), тогда как по полюсу в пределах 1.27x при каждом упреждении. Правка 0,30: теперь, когда автономный вход классифицируется по флагу IERS, величины согласия по пути (3) относятся к реальным прогнозам Bulletin A (0.256/0.695/1.252/3.885 мс при 1/2/3/9 суток против быстрых строк -> 0.133/0.421/0.839/2.786 мс) | frame_eop, realtime_frame_eop | frame_eop::tests, realtime_frame_eop::tests и tests/operational_eop_predictor_reference.rs (восстановление коэффициентов аналитического сигнала до 1e-9 при 365-суточном окне; подгонка смещения плюс скорости, равная замкнутому наклону и сдвигу обычных наименьших квадратов до 1e-12 на реальных строках; ДВА детектора заглядывания вперёд, которые портят быстрые столбцы UT1 и полюса каждой строки после эпохи выпуска — оставляя итоговые значения Bulletin B нетронутыми — и требуют побитово идентичного выхода, проверено мутацией: 10 тестов становятся красными при ослаблении барьера подгонки ровно на одни сутки; независимо перестроенный список эпох; блок Bulletin B цели обнуляется, и показано, что эпоха покидает таблицу; допуск членов проверен при окнах 6, 15, 150 и 365 суток; монотонные счётчики строк; и замороженный снимок отчёта по умолчанию до изменения, проверяемый поле в поле без допуска, который дополнительно проверяет, что снимок не содержит новых ключей, чтобы его нельзя было молча заново сгенерировать в сравнение с самим собой); tests/operational_eop_predictor_bulletin_a_oracle.rs::predictor_mae_against_bulletin_a_and_the_pcc_range_finding; tests/operational_eop_ls_ar_bulletin_a_oracle.rs::ls_ar_predictor_against_bulletin_a_finding; tests/eop_prediction_beyond_table.rs (необязательное расширение EopSeries::with_ls_ar_prediction за последней строкой: ответы внутри таблицы побитово идентичны, строки прогноза равны ls_ar_predict, аргументы системы отсчёта за таблицей следуют прогнозу, а не обрезаются; внутренняя согласованность) |
| Лунный датум системы координат по кампании наблюдений | Семипараметрический датум Гельмерта, полученный по СМОДЕЛИРОВАННОЙ КАМПАНИИ НАБЛЮДЕНИЙ, а не восстановленный по внесённому преобразованию. Земные станции наблюдают каталог маяков на лунной поверхности с указанными источниками по явному расписанию; частные производные задержки лунного РСДБ накапливаются в информационную матрицу Фишера координат маяков и преобразуются через схему Гельмерта A = [I₃ | [p]ₓ | p] в H = AᵀM_bA, так что сообщаемая точность датума является функцией программы наблюдений — строго линейной по сигме задержки и монотонной по дуге через либрацию, которую измеряет отчёт. Дефект датума является предметом, а не сноской: ранг, дефект, число обусловленности, спектр, ненаблюдаемые направления в семипараметрическом базисе, самое слабое направление даже при полном ранге и доля каждого параметра в нём выдаются при каждом прогоне, а любой параметр, не ограниченный кампанией, публикуется как NULL со статусом. Корреляция ошибок маяков MEASURED, а не предполагается — строго нулевая при зафиксированных станциях и печатается с её ценой, когда они оцениваются. Запускается как вид сценария lunar-frame-campaign |
ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого блока, но не являющейся внешним авторитетным источником — Замкнутые тождества и независимый путь внутри репозитория, внешний оракул не заявляется. Конструкция Гельмерта — единственная новая производная в модуле — повторно выведена центральной конечной разностью от lunar_frame_realise::apply_helmert, пути, не имеющего общих выражений с аналитической формой. Накопление, которое она компонует, принадлежит lunar-vlbi-fim, чей якобиан там продифференцирован конечными разностями относительно lunar_vlbi::vlbi_delay_s и чьё ядро линейной алгебры отдельно внешне привязано к numpy в tests/fim_observability_reference.rs — эта строка не заимствует ни один из этих статусов. Физический оракул структурный, а не числовой: частная производная задержки маяка — это разность ближнего поля двух почти параллельных единичных векторов, поэтому хуже всего определяемое направление сдвига ДОЛЖНО быть направлением на Землю в системе, связанной с телом, и тест сверяет вычисленный ответ с отдельно измеренным направлением. MEASURED: сигма сдвига, полученная из кампании, 6,3975 м против ошибки восстановления сценария с внесённым преобразованием 0,3125 м (в 20,5× жёстче), тогда как вращение и масштаб идут В ДРУГУЮ сторону — в 2,32× и 13,5× свободнее: путь с внесением предполагает одну изотропную сигму и потому распределяет ошибку равномерно по семи параметрам, чего наблюдаемая задержки не делает. Ранг 7/7, но обусловленность 3.8e5, при этом одно направление на 99,57 % представляет собой чистый сдвиг в сторону Земли и в сорок раз хуже любого другого. ЧЕГО ЭТА СТРОКА НЕ ЗАЯВЛЯЕТ: что величина из кампании верна в абсолютном выражении. Она устанавливает, что величина теперь ВЫВОДИТСЯ из расписания, геометрии и модели ошибок, а не из подставленного ответа. Остаётся ReferenceImpl/MODELLED: не существует опубликованной пары «кампания по лунному VLBI + ковариация датума», сеть станций и сигма задержки — ILLUSTRATIVE входные данные (каталог маяков имеет источник, кампания — нет), наблюдения рассматриваются как независимые, тогда как тропосфера и часы реального сеанса коррелированы между близкими сканами, а эфемериды, часы, тропосфера и параметры ориентации Земли ЗАФИКСИРОВАНЫ. 0,30 внешнее сравнение, результат (остаётся MODELLED): когда каждая строка якобиана маяка перестроена по временам света из NAIF SPICE (DE440, ITRF93, MOON_ME; предварительная регистрация 50863551), расписание, ранг Гельмерта, сигмы датума (в пределах 4.7e-3), обусловленность, самое слабое направление (0,07 град), перебор по либрации и порядок дуг согласуются на шести сценариях в пределах предварительно зарегистрированных 1 % / 0,2 / 0,05 град. NumPy на зафиксированном якобиане движка согласуется до 3e-14 там, где станции зафиксированы. При оцениваемых станциях расхождение составляет 6.8e-6 при предварительно зарегистрированных 1e-9, и предпосылка об обусловленности оказалась неверной (обусловленность Гельмерта 2.1e8; независимые пути NumPy расходятся на 3e-6; вклад отката движка к псевдообратной с 1e-9 не исключён), поэтому строка по этой предварительной регистрации не повышается. 0,36 повторная регистрация с порогом, масштабированным по обусловленности (предварительная регистрация b887eb05; t = max(1e-12, 10 kappa 2^-53) по обусловленности совместной информации и её редукции Гельмерта), результат (остаётся MODELLED, NOT MET): шаг 0 ИСКЛЮЧАЕТ откат к псевдообратной как причину расхождения 6.8e-6 (ни одна матрица до матрицы Гельмерта не откатывается на шести исходных сценариях, наименьший запас — коэффициент 2,6), ветвь SPICE по-прежнему выполняется на всех шести, а NumPy согласуется в пределах порога на шести из восьми сценариев (по умолчанию, обе дуги, сигма задержки 3x, коллинеарный дефект и новый прогон с зафиксированными станциями на 2026-12-01; наихудшее 0,13 от его порога). Он не выполняется на stations_estimated (сигмы датума до 6.8e-6, обусловленность 9.1e-6, норма с отброшенной независимостью 3.5e-6 против t = 5.9e-7), а на новой дате у южно-полярного маяка нет наблюдений, поэтому информация по маяку имеет дефицит ранга (откат к псевдообратной до матрицы Гельмерта в обоих новых сценариях), а неизменный оракул NumPy не может оценить stations_estimated_fresh (вырожденная матрица). Результаты: docs/design/evidence/mr05-lunar-datum-cond/RESULTS.md | lunar_frame_campaign (composing lunar_vlbi, lunar_vlbi_fim, fim, lunar, lunar_frame_realise, frames, cio, lunar_frame) | lunar_frame_campaign::tests (21 тест библиотеки: конструкция Гельмерта относительно центральной конечной разности от lunar_frame_realise::apply_helmert — модуля, ДЛЯ КОТОРОГО предназначен датум, который не вычисляет производной и поэтому фиксирует соглашение о знаке [p]ₓ — все 84 элемента конструкции согласуются до < 1e-6; чистый сдвиг сети, считанный обратно как чистый сдвиг с утечкой < 1e-6 в остальные шесть параметров; сигма датума строго линейна по сигме задержки до 1e-8 при 3-кратном изменении по всем семи параметрам; дуга 16 ч, как измерено, хуже, а дуга 48 ч, как измерено, лучше, чем 24 ч, причём выданный перебор по либрации упорядочен так же; наихудшая ось сдвига, как проверено, ЯВЛЯЕТСЯ доминирующей осью отдельно измеренного направления на Землю в системе, связанной с телом, и хуже остальных более чем в 5×, физический оракул, о котором ничего не сообщалось решателю; три коллинеарных маяка дают дефект, при котором каждая сигма датума равна NULL, а нулевые направления выдаются в базисе из семи параметров; offblock_fraction и межмаячная корреляция в точности 0,0 при зафиксированных станциях и обе > 0 при оцениваемых; величины с внесённым преобразованием в блоке сравнения показаны равными независимому прогону этого сценария до 1e-14 относительно, а не перенесёнными; защита от появления внесённого/восстановленного датума где-либо в документе; выдача реализации лунной системы координат зафиксирована побайтово FNV-1a-64 по json‖summary‖svg для трёх форм входных данных, отпечаток снят до начала работы); tests/lunar_vlbi_campaign_spice_oracle.rs::lunar_frame_campaign_finding_stations_estimated_p2_precision (с условием; строгий lunar_frame_campaign_matches_spice_geometry_and_numpy по-прежнему игнорируется); tests/lunar_frame_campaign_mpmath_oracle.rs::lunar_frame_campaign_datum_matches_mpmath_extended_precision (результат; решение основателя 2026-10-02, вариант A: эта строка остаётся MODELLED и не заимствует статус отдельной строки; относительно 50-значного оракула mpmath, предварительная регистрация 804662d5, сигмы датума движка при оцениваемых станциях находятся в пределах их априорной границы обратной ошибки, расхождение 9.7e-6 на 2024-01-01, а порог 1e-9 был ниже того, чего достигает любой путь двойной точности: лучший, проекция QR в NumPy, расходится на 5.5e-9; свидетельство подкрепляет отдельную строку «Lunar frame datum covariance with the stations estimated, against 50-digit extended precision»); tests/lunar_frame_campaign_pinv_fallback.rs::finding_step0_fresh_beacon_information_falls_back (зафиксирован); tests/lunar_frame_campaign_cond_bar_oracle.rs::finding_p2_condition_scaled_bar_not_met_on_the_estimated_scenarios (зафиксирован) |
| Подтверждение порога по длине дуги в цислунном пространстве независимым оценивателем | Пакетный оцениватель наименьших квадратов, который ВОССТАНАВЛИВАЕТ начальное состояние ведущего аппарата по смоделированным межспутниковым измерениям на растущих префиксах той же сетки эпох, которую использует таблица «ранг против дуги», с частными производными измерений, взятыми как центральные конечные разности составной прямой модели. Он не использует ничего из механизма, которым измерялся порог, — ни строки аналитического якобиана, ни вариационной матрицы перехода состояния, ни разложения по сингулярным числам или собственным значениям, ни допуска на ранг, ни фильтра информации с квадратным корнем — и разделяет лишь динамику, начальные условия, скалярную наблюдаемую и сетку эпох, каждая из которых названа в выдаваемом документе. Два критерия, оба развёрнуты: восстановление без шума (аналог ранга) и оцениваемость по Монте-Карло (аналог оцениваемости, измеренный относительно известной истины, а не предсказанный по ковариации). Запускается как вид сценария cislunar-arc-recovery |
ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого блока, но не являющейся внешним авторитетным источником — Отдельный оценщик в этой кодовой базе на другом алгоритме и непересекающемся пути кода: нелинейный взвешенный метод Гаусса–Ньютона с частными производными по конечным разностям, вердикт которого считывается как измеренная ошибка восстановления состояния в км и мм/с. Он не имеет общих выражений с путём грамиана по рангу и ковариации, а разделение ОБЕСПЕЧИВАЕТСЯ защитой по исходному тексту, а не просто заявляется. MEASURED на опубликованной сетке плоских DRO: критерий ОЦЕНИВАЕМОСТИ ПОДТВЕРЖДЁН (CORROBORATED) — измеренная граница Монте-Карло равна 5,739130 ч против формальных 5,739130 ч (отношение 1,0000), а измеренное СКО воспроизводит формальное 1σ на 21 длинах дуги с геометрическим средним отношением 0,9804. Критерий РАНГА НЕ подтверждён как граница восстановимости: оценщик восстанавливает с 0,782609 ч против 2,086957 ч у грамиана, отношение 0,375, и при 1,826087 ч — последнем префиксе, который чтение ранга оценивает в 3 из 4 — восстанавливает до 1.96e-5 априорного смещения. Граница восстановления не сдвигается на трёх десятичных порядках собственной границы, тогда как порог по рангу охватывает от «никогда» до 0,782609 ч на четырёх порядках rel_tol, и они совпадают точно при rel_tol = 1e-8. Этот диапазон сначала был записан как достигающий 0,260870 ч; эта величина была АРТЕФАКТОМ, порождённым чтением ранга, которое насчитало 4 направления по 2 строкам измерений ниже порога шума f64, и здесь она исправлена, а не оставлена. Чтение ранга теперь ограничено неравенством Сильвестра с выдачей причины, а исправленный диапазон насыщается точно на дуге, где независимый оценщик восстанавливает, что усиливает перекрёстную проверку этой строки, а не ослабляет её: опубликованное 1e-6 — консервативное СОГЛАШЕНИЕ о сингулярных числах, а не утверждение о восстановимости. Та же картина в пространстве: NRHO 9,290323 ч против 21,677419 ч, гало 22,978723 ч против 39,829787 ч, причём оцениваемость согласуется точно в обоих случаях. Плоское шестисостоящее DRO не восстанавливается ни на какой дуге, независимо воспроизводя структурный дефект датума этого семейства от оценщика, которому о нём ничего не сообщалось. НЕ привязано к внешнему источнику — динамика и начальные условия общие с проверяемым анализом, а ни один общедоступный набор данных не публикует такого порога, — поэтому ExternalDataset отклонён | cislunar_arc_recovery, batch_ls | cislunar_arc_recovery::tests и tests/cislunar_arc_recovery_reference.rs (обе границы и их отношения зафиксированы на опубликованной сетке; измеренная кривая ошибки сравнивается с формальной ковариацией построчно с границей в два раза по каждой строке и границей по геометрическому среднему; ОТРИЦАТЕЛЬНЫЙ КОНТРОЛЬ — плоское DRO с шестью состояниями — проверяет, что критерий МОЖЕТ не выполниться и что нерегуляризованный оценщик расходится за 1e6 км, а не возвращает правдоподобную малую ошибку; инвариантность к параметризации проверена на каждом префиксе до 1e-3 относительно; защита по исходному тексту, которая вырезает комментарии, строковые литералы и тестовый модуль и затем падает при любом упоминании якобиана, STM, ранга SVD или механизма SRIF, проверена мутацией внесением запрещённого вызова; проверка только в тестах, что конечные разности равны аналитическим строкам, так что линеаризация заведомо хороша, а аналитический путь в оценщике по-прежнему отсутствует; детерминированность проверена побайтово; выпущенный документ cislunar-observability зафиксирован по набору ключей, каноническому отпечатку и строке сводки) |
| Лунный объём обслуживания по реальной, полученной геометрии орбитальной группировки | Принимает табличную эфемериду состояний с центром в Луне (результат вычисления по ядру SPK/BSP) или опубликованное определение орбитальной группировки через ephemeris_path, выполняет по ней тот же перебор охвата / DOP / уровня защиты и выдаёт подразумеваемое им требование к точности дальности σ_URE РЯДОМ с неизменными иллюстративными кеплеровскими и возмущёнными результатами, а их разность — как отдельную именованную величину. Каждая цифра несёт класс происхождения, который отличает полученное из ядра от полученного из опубликованных элементов и от смоделированного, так что в последующем цитировании их нельзя спутать |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — ГЕОМЕТРИЯ внешняя и хеширована: три образца, числа которых берутся только из документов, полученных с URL, датой получения и SHA-256, и воспроизводимых зафиксированными генераторами, которые проверяют хеш источника и ПРЕРЫВАЮТСЯ, а не выдают число, — эталонная орбитальная группировка демонстрации совместимости LANS (NASA NTRS 20250009447, SHA-256 d1b916be…), примеры LNCSS (NAVIGATION 70(4) navi.613, CC BY, SHA-256 4e294687…) и подлинные эфемериды летавших аппаратов LRO, Danuri, Chandrayaan-2 и CAPSTONE, вычисленные по собственным реконструированным ядрам JPL через Horizons. Общедоступного ядра цислунной навигационной орбитальной группировки НЕ существует — Moonlight/LCNS, LCRNS и LNSS не летают, и NAIF для них ничего не публикует — и ни одно не было выдумано. ВЫВЕДЕННОЕ требование к σ_URE НЕ имеет внешнего оракула (никто не публикует точность измерения дальности, которой требует лунный HPL в 50 м на этом объёме обслуживания), поэтому оно проверено по собственному алгебраическому тождеству и, независимо, повторным прогоном всего перебора при вычисленном требовании с подтверждением того, что доступность переключается именно там. MEASURED: опубликованная конструкция из 8 спутников требует σ_URE 2,9044 м при покрытии 100 % против 0,3591 м при 37,85 % у иллюстративной орбитальной группировки — пересмотр опубликованного числа в 8,09× согласно правилу программы R4. Качественный вывод сохраняется (класс LNIS в 30 м по-прежнему не замыкает южно-полярный HPL в 50 м), но дефицит был завышен в восемь раз. Демонстрация LANS с 5 спутниками даёт НУЛЕВОЕ число выборок уровня защиты — пять спутников не могут дать шесть в зоне видимости, которые нужны набору гипотез об одном отказе, — а поле требования ОТСУТСТВУЕТ, а не подделывается; то же для четырёх реальных аппаратов при покрытии 0 %. InternalConsistency — честный вид: ВХОДНЫЕ данные внешние и хешированы, но величина, о которой эта строка, проверена только по самой себе. 0,30 внешнее сравнение, результат (остаётся MODELLED): относительно статистик примеров LNCSS из navi.613 на 346 узлах сетки 4 из 12 статистик доступности выходят за предварительно зарегистрированные 2 процентных пункта (случай A: -4.0, +22,5 и -3.6 п.п.; случай B: -12.1 п.п.). Вероятные причины: элементы прочитаны в неверной системе отсчёта, двухтельная кеплерова модель на 15 суток против не указанной в статье модели сил и сетка, не воспроизводимая по тексту. Половина по PDOP не могла быть оценена (LANS не печатает числовой статистики); сравнительный тест закоммичен как игнорируемый. 0,30 раунд 2, результат (остаётся MODELLED): относительно оракула Orekit 12,2 / Hipparchus 3,1, вычисляющего весь отчёт (распространение Orekit, видимость и DOP через DOPComputer, уровни защиты MHSS, составленные в Hipparchus, требование, решаемое для каждой выборки; предварительная регистрация d3ce97b2), на всех пяти полученных геометриях и двух сетках 155 из 160 значений согласуются в пределах предварительно зарегистрированных порогов (2 п.п., 5 %, 1 %), включая требование к sigma_URE для LNCSS A и C (3,879072208 м с обеих сторон для случая A) и отсутствующее требование для LANS и орбитальных аппаратов. LNCSS B на плотной сетке не выполняется по статистикам наихудшей выборки (sigma_required 0,000923 против 0,001511 м, hpl_max 1.63e6 против 0.99e6 м), где почти сингулярные геометрии (PDOP около 1e6) усиливают согласие положения на метровом уровне; его требование по p95 согласуется (1,6343 против 1,6357 м). Требование по наихудшей выборке некорректно на вырожденной геометрии. Относительно navi.613: 4 из 12 по-прежнему за пределами 2 п.п. (зафиксировано) | lunar_ephemeris, lunar_service | lunar_ephemeris::tests (разбор формата и системы отсчёта; интерполяция Лагранжа точна в узлах и на линейном треке вне узла; элементы ICRF проходят редукцию IAU 2015 и побайтово равны явному применению icrf_to_iau_moon; круговой обмен истинной↔средней аномалии относительно прямого решения Кеплера; искажённые файлы отклоняются с названной причиной). lunar_service::tests (при незаданном ephemeris_path набор ключей отчёта и SHA-256 зафиксированы; кеплерова строка равна самостоятельному кеплерову прогону поле в поле; тождество σ_required · HPL_max / σ_URE = AL, затем СКВОЗНОЙ повторный прогон при вычисленном требовании, достигающий 100 % доступности уровня защиты, и повторный прогон на 1 % выше него, не достигающий её; каждое выданное числовое поле обоих новых блоков пройдено по выданному JSON на предмет единицы и класса происхождения; зафиксированные образцы сопоставлены с таблицами источников спутник в спутник; горизонт за концом таблицы отклоняется); tests/lunar_service_requirement_orekit_oracle.rs::lncss_b_dense_finding_is_unchanged; tests/lunar_service_volume_orekit_oracle.rs::service_volume_matches_orekit_on_identical_ephemeris_and_grid |
| Единица измерения и происхождение объявлены для каждой сообщаемой величины | Машиночитаемая схема, задающая единицу измерения, класс происхождения и определение для каждого числового поля каждого отчёта сценария, плюс единый глобальный контроль, который запускает каждый зарегистрированный вид сценария и завершается неудачей, если у выданного числового поля нет того или другого. Словарь происхождения закрыт, и каждый класс несёт уровень доказательств, причём два класса намеренно отображены на inherits-scenario-label и depends-on-input, а не получают уровень, которого класс не определяет |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Сам выдаваемый документ: каждый числовой лист должен соответствовать записи в собственном блоке единиц этого документа. Внешнего реестра единиц, по которому можно было бы проверить ЗАДАННУЮ единицу, нет, поэтому заданная единица — это рассмотренное утверждение, а не проверенное: проверка подтверждает ПОЛНОТУ и КОРРЕКТНОСТЬ ФОРМЫ, а не истинность, и статус Validated был бы неверным, поскольку ничто внешнее не подтверждает, что m — правильная единица для поля с именем _m. Независимая перекрёстная проверка по суффиксам имён была выполнена для 1 434 полей, описанных В ТОТ МОМЕНТ: из 691 полей с суффиксом, указывающим на единицу, 40 расходятся с заданной единицей, и все 40 объяснены (суффиксы «в секунду», минимумы, секунды апертуры, ньютон-метры при суффиксе, похожем на нанометр), так что неверная единица не выявлена. С тех пор эта перекрёстная проверка не перезапускалась, а охват вырос сверх неё — показатель оставлен таким, каким он был фактически измерен, и не пересчитан на текущее общее число. На момент этого изменения (0.27.0) охват вырос с 7 из 56 видов до 60 из 61 и с 389 из 1354 полей до 1 742 из 1 744 (docs/field-units-schema.json, актуальность которого поддерживается проверкой на устаревание). НИ ОДИН вид не остаётся непокрытым (потолок 0, FUT-28, 0,36): последним был sweep-nd, у которого два столбца задаются вызывающей стороной, так что их единицы — это данные; теперь они описаны как mixed - see note, а единица каждой позиции читается из таблицы единиц самого перебираемого пакета в key_units и metric_units (или берётся из заявленной unit оси, которая должна совпадать с единицей пакета, если обе существуют; null, если нет ни одной, — это указано явно, а не угадано). cislunar-observability был предпоследним и сошёл со списка, когда его выпущенный документ получил блок единиц: закрепление аддитивности, называвшее units запрещённым ключом, теперь ДОКАЗЫВАЕТ, что добавление аддитивно, — если убрать блок обратно, документ по-прежнему даёт хеш, равный двум константам, зафиксированным до его появления, так что выпущенное значение, сдвинувшееся под добавлением, по-прежнему не пройдёт проверку. В ходе работы также выявлено двенадцать дефектов единиц или документации в существующем коде, о которых сообщено, но не исправлено в рамках R1 |
field_schema | tests/field_units_global.rs (запускаются все 61 зарегистрированных видов, по одной форме документа на каждый: каждый числовой лист должен соответствовать записи в собственном блоке единиц этого документа; некорректная запись считается отсутствующей для КАЖДОГО вида, исключённого или нет, поэтому заглушка не даёт покрытия; список исключений не может превышать закреплённый потолок, перечисленный вид, оказавшийся полностью покрытым, ЗАВАЛИВАЕТ проверку, чтобы список нельзя было раздувать, а зарегистрированный вид, отсутствующий в таблице запуска, тоже её заваливает, чтобы новый пакет не мог проскользнуть неисследованным — что и произошло, поймав оба вида, добавленных после начала этой работы; односторонний храповик на накопленный список описанного, но неопределённого; и проверка актуальности закоммиченного документа схемы); field_schema::tests |
| Геодезия лунной опорной станции: добавленные уголковый отражатель и маяк РСДБ относительно датума по пяти решёткам | Необязательные входы extra_reflectors и extra_beacons сценария lunar-llr-datum добавляют блок station_geodesy: информацию Гельмерта по пяти решёткам из архивного среза лазерной локации Луны плюс информацию, которую вносят в семипараметрический датум добавленный уголковый отражатель (дальность измеряется в архивные эпохи нормальных точек, когда станция локации выше своего горизонта, каждая с архивным весом этой нормальной точки) и добавленный маяк РСДБ (наблюдаемый сетью и расписанием lunar-frame-campaign при зафиксированных земных станциях, через частные производные задержки lunar-vlbi-fim) на заданных площадках; решение пересчитывается, с 1-сигмой каждого параметра Гельмерта до и после, их отношением, нормами до и после и экстремальными собственными значениями разности Фишера. При отсутствии или пустом значении отчёт не меняется | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Только внутренняя согласованность: каждый добавленный пункт — отдельная точка, а лазерная дальность или задержка VLBI на стационарной станции затрагивает одну точку, поэтому её информация A_p^T M_p A_p положительно полуопределена и складывается; тест проверяет разность матриц Фишера и каждую дисперсию на этом основании. Результат для пяти массивов — это существующая строка с реальными данными, и он не изменился. Добавленный отражатель использует эпохи, запланированные для пяти существующих массивов, — ILLUSTRATIVE расписание, а сеть, расписание и сигма задержки добавленного маяка — ILLUSTRATIVE входные данные кампании лунной системы отсчёта; пункт — ILLUSTRATIVE южно-полярная позиция. С южно-полярного пункта Земля видна низко над горизонтом или не видна вовсе, что выражают существующие тесты углов наблюдения; ни один из пунктов не наблюдается непрерывно. Приведённые значения — границы Крамера–Рао для сокращённого набора параметров, а не решённая датумная привязка и не утверждение о какой-либо реальной станции | lunar_llr (над lunar_frame_campaign::beacon_information, schedule_for и solve_datum_information, lunar_vlbi_fim) | tests/lunar_station_geodesy.rs (empty_or_absent_extra_lists_are_bit_identical: пустые списки и базовый пример дают отчёт и сводку по умолчанию байт в байт; an_added_site_never_increases_any_variance: наименьшее собственное значение H_after - H_before неотрицательно с точностью до 1e-9 от наибольшего, каждое отношение сигм после/до не превышает единицы, и оба добавленных пункта наблюдаются; the_rest_of_the_report_is_the_five_array_result; every_station_geodesy_field_has_a_unit; a_beacon_list_inside_the_campaign_block_is_refused); scenarios/lunar-station-geodesy-baseline.toml и scenarios/lunar-station-geodesy-with-station.toml (то же архивное расписание и тот же блок кампании VLBI) |
| Целостность контроля — зелёный результат, означающий то, что он говорит | Три структурные проверки самого процесса верификации, каждая из которых закрывает класс дефектов, доходивших до канонического контроля как перемежающийся или ложный красный результат. (1) Каждый построенный путь ко временному файлу в исходных текстах Rust должен содержать компонент, уникальный для каждого вызова; идентификатор процесса отвергается, потому что cargo запускает тесты библиотеки как параллельные потоки ОДНОГО процесса, а идентификатор процесса у всех них общий. (2) Каждое побайтовое или хеш-закрепление должно заявлять рядом с собой или в заголовке своего модуля, что оно охватывает и что намеренно исключает, — чтобы сквозное изменение позволяло с первого взгляда увидеть, какие закрепления затронуты, а какие незаметно превратились в детекторы изменений на уровне всего репозитория. (3) Зелёный результат можно заявлять только по ПОЛНОМУ набору тестов: scripts/gate.sh запускает cargo test --all, фиксирует настоящий код выхода без конвейера на пути и записывает квитанцию с названием коммита, числом интеграционных бинарных файлов, числом тестов и длительностью; проверка перед отправкой отклоняет отправку коммита, который не назван ни в одной действительной квитанции, на чистом дереве. Повторяемость отдельно выборочно проверяется scripts/check-repeatability.sh, который запускает набор тестов библиотеки N раз и завершается неудачей, если набор проходящих тестов различается. |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутая форма: каждый сторож запускается на фиксированном заведомо плохом фрагменте, на котором он обязан сработать, и на фиксированном заведомо хорошем, на котором он обязан молчать; оба — буквальные константы, на которые детектор повлиять не может. Два заведомо плохих фрагмента — дефекты F22 и F25 в их исходном виде. Это ВНУТРЕННИЙ оракул, и строка соответственно имеет уровень MODELLED: она доказывает, что сторожа отличают дефект от его исправления, а не то, что описываемые ими классы исчерпывающи. Их заявленные слепые зоны — общее состояние, не являющееся путём, закрепление, заданное в короткой именованной константе, редкая гонка, которую три прогона не выявляют, и квитанция, которую может подделать любой, кто способен записать файл, — описаны в документации модуля tests/source_guards.rs и в заголовке каждого скрипта, а не оставлены на самостоятельное обнаружение. | scripts/gate.sh, scripts/check-gate-receipt.sh, scripts/check-repeatability.sh, scripts/install-gate-hook.sh | tests/source_guards.rs (9 тестов: оба сторожа по всему дереву исходников, а также мутационные образцы, оценивающие каждого сторожа в обоих направлениях — шаблон F22, обнаруженный на обоих сталкивающихся путях, принятое поставляемое исправление с атомарной последовательностью, неполное исправление, обнаруженное ровно на том пути, где потерян уникальный компонент, принятые дескриптор временного файла и унаследованный уникальный каталог, отвергнутые настенные часы; необъявленное закрепление отмечено, объявленное принято, область без исключения отвергнута, объявление в документирующем комментарии объемлющего теста принято и показано, что оно не переходит на следующий тест; и каждая форма записи закрепления — шестнадцатеричная, десятичная, строка дайджеста, длина в байтах, именованное число байт, эталонный файл — распознаётся, тогда как константы алгоритмов, начальные значения ГПСЧ и проверки малой мощности — нет) |
| Составной временной PL — прохождение holdover с начальным значением P0 | PL(τ)=max(TPL_handover,HPL(τ)); полунепрерывность снизу PL(0+)≥PL(0−); бегущий максимум K(IR/2); показатели фазы τ/τ³/τ⁵ | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Тесты свойств (монотонность, отсутствие падения при передаче обслуживания) + линт показателей степени относительно holdover::coast_phase_variance | src/integrity/composed_pl.rs | integrity::composed_pl::tests (монотонность, нижняя граница P0, K(IR/2), показатели степени, полунепрерывность снизу) |
| Составной временной PL — огибающая LIL п. н. (невозможность + согласованность) | Конечного худшего случая holdover нет (супремум броуновского движения расходится); HPL с распределением по IR согласуется с огибающей Хартмана — Винтнера при IR→0 | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутое тождество огибающей п.н. √(2Dt·lnln t) + проверка доминирования над HPL; шов невозможности Baweja arXiv:2606,24210 | src/integrity/lil_envelope.rs | integrity::lil_envelope::tests (расходимость, порог, доминирование при ужесточении по IR) |
| Мажоранта целостности смещения прослеживаемости разнородных UTC(k) | Мажоранта смещения по источнику b = (U/k_cov)·Phi^-1(1-tail/2) + старение, раздувающая опубликованную расширенную неопределённость типа B до распределённого хвоста целостности; связана с tpl_scalar как bias_s | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Независимое воспроизведение замкнутой формы мажоранты средствами numpy и stdlib-statistics (InternalConsistency). Ряд BIPM Circular-T [UTC-UTC(USNO)] — лишь ЦИТИРУЕМЫЙ входной ряд: это тот же ряд, который уже имеет статус Validated для строки покрытия holdover R4, и он здесь НЕ проверяется заново; воспроизведение его значений ничего не доказывает для R2. Глубокий хвост целостности имеет статус Modelled. Внешнее сравнение 0,30, результат (остаётся MODELLED): по файлам BIPM UTC-UTC(k) для отдельных лабораторий (102 лабораторий, 105 024 строк с опубликованными неопределённостями) мажоранта b = 2,576 u на хвосте 1e-2 превышается в 50,8 % строк (Клоппер–Пирсон 95 %: от 50,4 до 51,1 %) и более чем в 1 % случаев в 101 из 102 лабораторий. Опубликованная u — это неопределённость определения BIPM для UTC-UTC(k), а не граница смещения, которое регулярно достигает многих u; мажоранта в заданном виде не ограничивает смещение прослеживаемости реального UTC(k). 0,30, раунд 2: мажоранта реализованных смещений UTC-UTC(k), обученная на данных BIPM Circular T за 2015-2022 годы и проверенная на данных за 2023-2026 годы (предварительно зарегистрировано ca0921a4, суммарное превышение не более 1e-2), результат (остаётся MODELLED): суммарное превышение составляет 0,0333 (694 из 20 826 строк по 82 лабораториям; 0,0127 без 430 строк, для которых по правилу нет границы). D9, раунд 3: объединённая иерархическая граница старения (utck_bound), предварительно зарегистрированная fb475550 и оцениваемая проспективно по выпускам Circular T начиная с 465: ещё не выполнено (выпуск 465 опубликован 2026-10-12 примерно с 285 тестовыми значениями; предварительно зарегистрированное правило 1000 значений требует выпусков примерно до 468, а прогон требует архивных файлов по лабораториям от 2026-09-30, поскольку BIPM с тех пор переписал 87 из 113) | src/integrity/hetero_budget.rs | integrity::hetero_budget::tests + tests/hetero_budget_reference.rs; tests/hetero_budget_utc_k_oracle.rs::overbound_exceedance_on_real_utc_k_finding (зависит от данных: при отсутствии ряда BIPM пропускается с сообщением); tests/hetero_budget_utc_k_realised_overbound_oracle.rs::realised_offset_overbound_finding; tests/utck_bound_prospective_oracle.rs (D9, раунд 3, проспективный, ещё не выполнен: Circular T 465 вышел 2026-10-12, а предварительно зарегистрированное правило 1000 значений требует выпусков примерно до 468) |
| Коррелированная кросс-ковариация смещений прослеживаемости (распределение, небезопасное при общем режиме) | Кросс-ковариация смещений N×N с внедиагональными элементами rho·b_i·b_j для источников, разделяющих реализатор UTC(k); ДОКАЗАНО correlated_fused_bias >= independent_fused_bias (наивное независимое распределение занижает объединённое смещение -> оптимистично -> небезопасно) | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Независимое воспроизведение средствами numpy кросс-ковариации и неравенства смещений для коррелированного и независимого слияния (InternalConsistency). Репрезентативный набор источников; сценарий Modelled. | src/integrity/hetero_budget.rs | integrity::hetero_budget::tests (correlated_fused_bias_dominates_independent_when_correlated, rho_one_single_realizer_recovers_linear_sum) + tests/hetero_budget_reference.rs |
| Статистика согласованности общего режима (отказ общего опорного источника, невидимый для разделения решений) | Статистика счёта (1^T Omega^-1 r)^2/(1^T Omega^-1 1) ~ chi^2_1 для сдвига общего режима, который разделение решений (контрасты, ортогональные 1) увидеть не может; сдвиг общего режима увеличивает её, тогда как попарные разделения остаются плоскими | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Независимое воспроизведение статистики средствами numpy + тест свойства, что синфазное возмущение её увеличивает (InternalConsistency). Сценарий Modelled. Раунд 0,30 номер 2 (предварительно зарегистрирован f9aa360d), заблокирован (остаётся MODELLED): numpy 2.3.5 LAPACK gesv воспроизводит значение статистики на 261 закоммиченных случаях (в пределах 3.5e-15 для хорошо обусловленных, 1.2e-9 при числе обусловленности до 6.1e7); нулевой закон хи-квадрат(1) — цитируемая теорема, а плоские попарные разделения — тождество, для которого нет выхода движка, с которым можно было бы сравнивать, поэтому определение области ожидает решения владельца | src/integrity/gls_commonmode.rs | integrity::gls_commonmode::tests (common_mode_shift_inflates_statistic_but_not_contrasts, post_fit_common_mode_statistic_is_zero) + tests/gls_reference.rs; tests/gls_common_mode_statistic_numpy_oracle.rs::common_mode_statistic_matches_numpy_lapack |
| Классификация нуль-пространства лунного датума (аддитивность рангов LLR + снятие дефекта либрацией) | Классификация проблемы датума при внутренних измерениях дальности: одно наблюдение дальности даёт ранг 1 (6-мерное нуль-пространство); пара «начало координат по X — масштаб» почти вырождена, а физическая либрация DE440 снижает дефект до нуля, при этом пара остаётся почти вырожденной | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Воспроизведённая движком геометрическая структура плюс замкнутое тождество Шура 2x2; согласуется по СТРУКТУРЕ с Sosnica et al. 2025 (arXiv:2510,15484), чьи приведённые величины здесь НЕ воспроизводятся. Классификация структурная; величины корреляции и CRLB при реальной геометрии имеют статус MODELLED (координаты и ориентация отражателей зафиксированы). Внешнее сравнение 0,30, результат (остаётся MODELLED): по сравнению с Sosnica et al. 2025 корреляция начала координат и масштаба по информации Фишера для дальностей (-0.993 / -0.988) находится в пределах 0,05 от опубликованного -0.97, но на собственной геометрии из пяти отражателей, взятой из статьи, корреляция 7-параметрического преобразования Гельмерта с равными весами равна -0.78 (опубликованное значение опирается на ошибки отдельных отражателей, которых в статье нет), а CRLB начала координат (от 0,6 до 1,2 мм при шуме дальности 3 мм) на 96–98 % ниже 3,07 см из статьи при допуске 20 %. Величины не воспроизведены | lunar_identifiability, lunar_datum | tests/lunar_datum_identifiability_reference.rs (single_internal_range_row_has_six_dim_datum_null_space; extending_the_librating_arc_lifts_the_origin_scale_degeneracy); tests/lunar_datum_sosnica_oracle.rs::origin_scale_correlation_and_crlb_disagree_with_the_published_geometry |
| Информация о лунном датуме по нескольким методам (LLR + лунный VLBI + дальность до орбитального аппарата) | Строки якобиана датума для дальности LLR до отражателей на Земле, дифференциальной задержки лунного VLBI по двум станциям и дальности «орбитальный аппарат — маяк» по 7-параметрическому датуму, объединённые в единую согласованно предобусловленную информацию Фишера; показывает, что нерадиальное (орбитальное или разнесённое по глубине) слежение устраняет вырожденность «начало координат по X — масштаб», тогда как поперечный VLBI помогает лишь косвенно | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Перекрёстные проверки аналитических производных каждой техники конечными разностями (внутренние); НАПРАВЛЕНИЕ улучшения — геометрический факт. Положения маяков, расписания и шум имеют статус MODELLED / репрезентативны (см. tests/fixtures/llr_geometry/NOTICE.md). | lunar_datum, lunar_identifiability | lunar_datum::tests (аналитические производные LLR/VLBI/орбитального аппарата в сравнении с конечными разностями); lunar_identifiability::tests (adding_an_offradial_technique_collapses_the_origin_scale_degeneracy; transverse-vs-radial через crlb_diag) |
| Геометрическая основа лунного датума LLR (отражатели в системе главных осей, наземные станции, аналитические частные производные дальности) | Пять ближних к Земле решёток уголковых отражателей в метрах в связанной системе главных осей PA и наземные станции LLR в геодезических координатах; размещение отражателей из связанной системы в инерциальную через ориентацию PA по DE440; аналитические частные производные дальности «Земля — отражатель» по 4-параметрическому датуму; и информационная матрица Фишера только по LLR, показывающая вырожденность «луноцентр X — масштаб», которая и обосновывает 7-параметрический анализ | ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся Modelled — Вычисление проверено внутренне: каждая аналитическая производная — по конечной разности, а случай нулевого датума — по номинальной дальности. КАТАЛОГ проверен внешне и независимо — координаты DE440 в главных осях (Park et al. 2021, tests/fixtures/llr_geometry/de440_retroreflectors_pa.csv) сопоставлены с таблицей 6 меморандума DE430 о координатах поверхности (tests/fixtures/lunar_llr/de430_retroreflectors_pa.csv, машинно извлечённой из PDF с проверенным SHA-256 скриптом tests/fixtures/lunar_llr/generate_de430_retroreflectors_pa.py) и согласуются до 1,12 м, тогда как реализация тех же пяти массивов по средней Земле отличается на 672–871 м. СТРУКТУРА ВЫРОЖДЕНИЯ проверена по опубликованному результату: Sosnica et al. 2025, 'Definition and Realization of the International Lunar Reference Frame', arXiv:2510,15484, где для лунной системы главных осей сообщается коэффициент корреляции между X селеноцентра и масштабом r = -0.97 и что LLR из-за этой корреляции не достигает фактического центра масс Луны с точностью лучше 12 см. Этот модуль восстанавливает ту же структуру (|corr(t_x, scale)| между 0,9 и 0,9999, дефект датума <= 1) по плану Фишера только для LLR. Подтверждение идёт между эфемеридами, а не по круговому пути: в статье объединены INPOP21a, DE430 и EPM2021, тогда как этот модуль управляется либрацией DE440. НЕ воспроизведена величина — корреляция здесь около -0.988 против их -0.97, а 4-параметрическая CRLB составляет доли миллиметра против достигнутого у них предела 12 см, потому что ориентация и координаты отражателей здесь зафиксированы, а там оцениваются. Только геометрия и структура вырождения; утверждения о точности решённого датума нет. Внешнее сравнение 0,30: части этого модуля, касающиеся измеренной дальности (reflectors(), stations_itrf(), размещение DE440 PA и барицентрическое время распространения света llr_bcrs_one_way_m), проверены в своей строке, модель измеренной дальности LLR, по 192 нормальным точкам ILRS (СКО 2,81 м при пороге 10 м). Эта строка остаётся MODELLED, потому что измеренное сравнение не затрагивает остальную часть её утверждения. Каталог геодезических станций stations() округляет APOLLO до 0,001 град; с геоцентрическим временем распространения света он даёт 22,7 м на тех же точках (тест reflector_ranges_against_ilrs_normal_points; 96 м при прежней поэлементной интерполяции ориентации). Аналитические производные дальности и Фишер только для LLR вычисляются через llr_range_m и reflector_inertial с аналитическим рядом Луны (ephem::moon_position, около 0,3 град от GCRS) и без времени распространения света | lunar_llr_geometry | lunar_llr_geometry::tests (reflector_and_station_catalogs_are_well_formed, analytic_partials_match_finite_difference, llr_one_way_range_is_earth_moon_scale, zero_datum_reproduces_nominal_range, llr_only_fisher_shows_strong_com_x_scale_degeneracy); tests/lunar_pa_frame_realisation_guard.rs; tests/llr_datum_degeneracy_reference.rs; tests/lunar_llr_geometry_range_oracle.rs::reflector_ranges_against_ilrs_normal_points |
| Вырожденность «дальность — смещение часов» при односторонних лунных измерениях дальности и закон проектирования по геометрическому разнообразию | Вырожденность «радиальная дальность на узел — смещение часов приёмника» точна: 1 м соответствует 3,336 нс (единица, делённая на c). Маргинал {масштаб, смещение} по дополнению Шура (coupled_marginal_fisher) показывает, что в геометрически разнообразной сети двусторонние измерения дальности поднимают маргинал примерно в той же степени, что и равное число дополнительных односторонних данных, тогда как в идеализированном режиме одного узла двусторонний выигрыш больше на порядки. Из этого следует закон проектирования: именно геометрическое разнообразие, а не двусторонние измерения дальности как таковые, разделяет масштаб лунной системы отсчёта и смещение шкалы времени при односторонних измерениях; двусторонняя или внешняя привязка времени требуется только при низком разнообразии или в режиме одного пользователя. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Маргинальная информация Фишера через дополнение Шура связанной информационной матрицы, в замкнутой линейной алгебре, проверенная по двум предельным режимам, которые она предсказывает. Эквивалентность 1 м и 3,336 нс — это определение метра через c, а не эмпирический результат. Сети наблюдений — репрезентативная геометрия Modelled, поэтому закон проектирования — это утверждение о предъявленной ему геометрии и не содержит утверждений о какой-либо действующей лунной сети. | lunar_gauge | lunar_gauge::tests (coupled_marginal_well_posed_network_is_psd, coupled_marginal_twoway_equals_more_oneway_in_diverse_network, coupled_marginal_twoway_lift_three_orders, oneway_range_row_has_correct_temporal_entries, twoway_range_row_has_zero_at_offset_and_rate, time_tie_row_equals_pure_offset_vector, rate_tie_row_has_correct_structure) |
| Представительное меню многометодных измерений и правило аддитивного объединения информации Фишера | MeasurementBlock хранит одну кандидатную кампанию измерений как вклад в информацию Фишера 7x7 плюс скалярную относительную стоимость; block_from_rows строит его из необработанных строк якобиана датума, так что каждый блок предобусловливается одинаково через lunar_identifiability::assemble_multi_info; combine суммирует информацию выбранного подмножества, и это верное правило, потому что информация Фишера аддитивна для независимых измерений; representative_lunar_menu поставляет детерминированное меню из четырёх блоков (LLR, поперечный VLBI-маяк на лимбе, орбитальный аппарат на видимой стороне и орбитальный аппарат на обратной стороне). Оптимизатор плана с ограничением по бюджету, использующий это меню, не входит в этот крейт. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Аддитивность информации Фишера по независимым измерениям — свойство замкнутой формы; здесь она проверена по независимо написанной поэлементной сумме, а также по инвариантности к порядку и монотонности, которые из неё следуют. ЗАМЕЧАНИЕ О ДОКАЗАТЕЛЬСТВАХ: у комбинатора ранее не было ни одного теста, а единственный тест в модуле суммировал две информационные матрицы прямо в тесте, не вызывая его, так что сломанный комбинатор оставил бы модуль зелёным; теперь тест проходит через combine и падает при его мутации. Все положения маяков, геометрия орбитального аппарата, точности отдельных техник и относительные затраты — репрезентативный выбор, а не значения миссии (см. tests/fixtures/llr_geometry/NOTICE.md), поэтому каждая метрика вырождения и каждое значение CRLB, получаемые через это меню, наследуют статус Modelled от lunar_identifiability::decompose. | lunar_techniques | lunar_techniques::tests (combine_is_additive_order_independent_and_empty_is_zero — пустой выбор даёт нулевую матрицу, одиночный выбор — единичное преобразование, пара равна независимо написанной поэлементной сумме, а результат инвариантен к порядку выбора; adding_a_block_never_reduces_the_degeneracy_metric — монотонность при добавлении информации; radial_diversity_beats_transverse_for_breaking_the_degeneracy — блок орбитального аппарата на обратной стороне повышает метрику вырождения сильнее, чем поперечный блок VLBI) |
| Допуск межпоставщиковой согласованности для пользователя со смешанными поставщиками | consistency_tolerance: обращает бюджет положения пользователя в требование к согласию по Гельмерту между поставщиками для каждого параметра (начало координат/масштаб/вращение) при опорном плече, при необходимости увеличенное за счёт CRLB реализации одного поставщика уровня P1 | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Оценка наихудшего случая по неравенству треугольника для действия точечного якобиана Гельмерта (замкнутая форма) | lunar_interop_budget | lunar_interop_budget::tests (монотонность по бюджету; сокращение бюджета RSS при CRLB на поставщика; рабочий допуск по вращению на лунном плече; определяющий член = вращение) |
| Бюджет ошибок межпоставщиковой совместимости лунной системы отсчёта и закон проектирования «система отсчёта против эфемерид» | interop_budget: разделение на сокращаемую (общая привязка системы отсчёта) и неустранимую (динамика) части при соглашениях PerProvider / CommonFrameTie / CommonEphemeris, с метрикой закона проектирования — неустранимой долей (~0,69 на реальных DE440/INPOP/EPM: один общий тег системы отсчёта оставляет доминирующий нижний предел) | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Среднеквадратическая агрегация попарных разбиений со статусом Validated при каждой конвенции (замкнутая форма) | lunar_interop_budget | lunar_interop_budget::tests (CommonEphemeris обнуляет бюджет; CommonFrameTie < PerProvider; irreducible_fraction > 0,5 на реальных разбиениях; порядок конвенций) |
| Граница блочной византийской искры для обнаружения и идентификации в автономной лунной сети по узлам (T3) | byzantine_bound конкретизирует границу кодирования для безопасного оценивания состояния и разреженной наблюдаемости на геометрии сети по узлам: византийский пир вносит произвольную линейную комбинацию измерений, в которых он участвует, а сеть ОБНАРУЖИВАЕТ любую коалицию из ≤ f = block_spark − 1 пиров и однозначно ИДЕНТИФИЦИРУЕТ любую коалицию из ≤ ⌊(block_spark − 1)/2⌋, где block_spark — наименьшая коалиция пиров, составные эффективные сигнатуры P⊥·B_T которой имеют неполный ранг столбцов. Обнаруживаемость пира — это ПОЛНЫЙ РАНГ СТОЛБЦОВ P⊥·B_j (ненулевой, но не полного ранга блок — это ненулевая атака, которая попадает в range(G) и не оставляет невязки), а не просто P⊥·B_j ≠ 0 | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Геометрическая реализация блочной оценки spark / безопасного оценивания состояния (Fawzi–Tabuada–Diggavi 2014; Shoukry–Tabuada 2016; блочный spark Donoho–Elad 2003; Candès–Tao 2005) — НЕ порог консенсуса Lamport–Shostak–Pease 3f+1 («византийский» обозначает лишь МОДЕЛЬ произвольных / сговорившихся отказов). Конкретное число допустимых отказов — свойство Modelled репрезентативной геометрии сети, проверенное на самосогласованность вручную построенными аналитическими случаями и формулами подсчёта | lunar_faultobs | lunar_faultobs::tests — byzantine_c3_rank_deficient_but_nonzero_is_undetectable (ненулевой, но с дефицитом ранга блок ⇒ block_spark 1, f_detect 0; независимые столбцы ⇒ block_spark 2, f_detect 1), byzantine_real_network_uniform_bias_is_clock_offset (партнёр, которому принадлежат все измерения узла = ошибка смещения часов ∈ range(G), необнаружима, с чётким спектральным разрывом Грама), byzantine_redundant_net_identifies_at_least_one (шесть независимых партнёров с одним измерением ⇒ block_spark 7, f_identify 3), byzantine_analytic_spark_identity_projector + byzantine_detect_identify_relations (ручные случаи P⊥ = I фиксируют f_detect = block_spark − 1, f_identify = ⌊(block_spark − 1)/2⌋) |
| Нижний предел временной калибровки при автономном holdover для самореферентной лунной орбитальной группировки (T4) | holdover_floor устанавливает, что в ансамбле автономных узлов, связанных только межузловыми измерениями, общий ход часов (δα_j += 1 ∀j) является свободным параметром шкалы времени ансамбля, лежащим в N(GᵀWG): никакое количество дополнительных межузловых измерений дальности не может его наблюдать (rate_in_gauge = true, temporal_gauge_dim = 2 вместе с общим смещением). Это подлинный нижний предел holdover — временной аналог позиционной калибровки жёсткой системы отсчёта. Добавление одной внешней привязки абсолютного хода (прямая связь с эталоном вне сети) выводит общий ход из нуль-пространства (rate_in_gauge = false, temporal_gauge_dim = 1), что доказывает: предел — реальная калибровка, а не артефакт модели генератора | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Аргумент о свободных параметрах ансамблевого времени (Percival 1978; Lewandowski & Thomas 1991), реализованный на репрезентативной сети по узлам с реальными DE440: нулевой тест относительной невязки аналитического генератора общей скорости относительно GᵀWG, где контраст с разорванной привязкой отличает подлинную калибровку от артефакта модели генератора. Репрезентативная геометрия Modelled, а не сертифицированный бюджет синхронизации времени | lunar_faultobs | lunar_faultobs::tests — holdover_floor_self_ref_and_anchored (самореферентная сеть: общая скорость лежит в N(GᵀWG), temporal_gauge_dim 2; после одной внешней строки привязки скорости: скорость вытеснена из калибровки, temporal_gauge_dim 1, общее смещение сохраняется) |
| Разделение на общую и дифференциальную составляющие по поставщикам, унификация через единичный дефект ранга и наклон разрыва защиты (T5 / §0 / g7) | Три грани единого разложения ℝ^{state_dim} = N(GᵀWG) ⊕ range(GᵀWG), где 8-мерная калибровка «датум ⊕ шкала времени» — это N(G), а state_dim − 8 = 32 наблюдаемых направлений — range(G): (T5) provider_mismatch_split классифицирует общее смещение нескольких поставщиков (∈ range(G)) как НЕОБНАРУЖИВАЕМОЕ — требующее внешней привязки — а дифференциальное смещение (∉ range(G)) как самоконтролируемое / ОБНАРУЖИВАЕМОЕ; (§0) унификация состоит в том, что ТО ЖЕ слепое подпространство range(G) определяет класс необнаруживаемых отказов, так что калибровка датума N(G) и слепое к отказам подпространство range(G) — это одна геометрия, а не две; (g7) slope возвращает наклон разрыва защиты по Brown ‖Π_obs Δx̂‖ / ‖P⊥b‖_W → ∞ для отказа b ∈ range(G) (оценка искажена при нулевой чётности) и конечный наклон для обнаруживаемого отказа | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутая алгебра проектора чётности / псевдообратной матрицы на репрезентативной сети по узлам с реальными DE440: разделение на общую и дифференциальную части, объединение N(G) ⊕ range(G) и наклон зазора защиты Brown (1992) — всё следует из аннулирования дальности P⊥·G = 0. Репрезентативная геометрия Modelled, а не сертифицированный уровень защиты | lunar_faultobs | lunar_faultobs::tests — provider_mismatch_split_common_undetectable_differential_detectable (общее смещение необнаружимо, дифференциальное обнаружимо), slope_infinity_in_range_finite_detectable (g7: наклон ∞ для b ∈ range(G), конечный для b ∉ range(G)), pernode_rank_is_state_dim_minus_eight (§0: rank(GᵀWG) = state_dim − 8, 8-мерная калибровка — всё нулевое пространство со спектральным разрывом >1e6) |
| Маски телекоммуникационной синхронизации ITU-T с PASS/FAIL и запасом | Переписанные пределы ITU-T G.8272 (07/2025) PRTC-A/B, G.8272.1 (2024) Amd. 1 (07/2025) ePRTC в режиме привязки и ePRTC-A при holdover (включая огибающую ошибки времени из таблицы 3), G.8273.2 (2023) Amd. 2 (11/2025) T-BC/T-TSC классов A–D и G.8271.1 (2022) Amd. 3 (05/2025) опорной точки C, каждый открытый или закрытый интервал — как его указывает таблица, с пропуском всех записей «для дальнейшего изучения»; для каждой проверки — вердикт и запас в определяющей точке, а также время превышения каждого бюджета. Запускается как тип сценария telecom-timing |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Переписанные именованные Рекомендации (свободно загружаемые с itu.int), каждый предел с указанием своей таблицы или пункта, перечисленный вместе с каждым неподтверждённым или нереализованным пунктом в docs/TELECOM-TIMING.md; тождества непрерывности в точках излома, вытекающие из таблиц, проверены в тестах. Переписывание стандарта с проверками внутренней согласованности, не тест на соответствие и не внешняя проверка. Раунд 0,30 номер 2 (предварительно зарегистрирован 970003ee), заблокирован (остаётся MODELLED): десять значений масок и тринадцать значений удержания ePRTC-A, которые Рекомендации приводят как рабочие числа (G.8272, рис. 1-2, G.8272.1 Amd.1 п. 8.2.1 и рис. V.1-V.3, G.8271.1 Amd.3, рис. 7-2 — 7-4), воспроизводятся с точностью до половины печатной единицы, большинство из них — константы таблиц или точки излома; на рис. 7-2 G.8271.1 отмечено 200 нс при 1,3 с, что расходится с собственной таблицей 7-1 (197,5 нс). Для пределов классов A-D по G.8273.2 печатных рабочих значений нет, а метки точек излома блокированного режима ePRTC по G.8272.1 (на сплошных вспомогательных линиях) были исключены предварительно зарегистрированным правилом отбора, поэтому они остаются переписанными | telecom_timing (MASKS, eprtc_a_holdover_limit_ns, check_curve, check_mask) | telecom_timing::tests (mask_boundaries_follow_the_tables_exactly — открытые и закрытые концы, разрыв τ = 400 с в таблице 7-3 G.8271.1, непрерывность в каждой точке излома, которую подразумевают таблицы; a_curve_exactly_on_the_limit_passes_and_just_above_fails; eprtc_a_holdover_envelope_follows_table_3; a_coarse_record_is_not_evaluated_against_a_filtered_mask); tests/telecom_timing_reference.rs (telecom_timing_kind_round_trips_through_the_dispatch); tests/telecom_masks_itu_printed_values.rs (mask_values_match_the_numbers_the_recommendations_print; figure_7_2_label_at_1_3_s_is_not_its_own_table_value) |
| Маски блуждания при генерации для синхронизации частоты ITU-T (G.811, G.812, G.8262, G.8262.1) | Семь масок блуждания при генерации MTIE и TDEV при постоянной температуре для типа telecom-timing: G.811 (09/1997) PRC (автономный), G.812 (06/2004) типы I, II и III, G.8262 (10/2024) EEC варианты 1 и 2 и G.8262.1 (11/2025) eEEC (режим привязки), включая степенные участки, которые записаны в таблицах (8 τ^0.5 и подобные), каждый интервал открыт или закрыт как напечатано, измеренные через фильтр 10 Гц, который указывают пункты (принят применяемым до дискретизации); опорный сценарий scenarios/telecom-synce-eec.toml сопоставляет свободно работающий OCXO с тремя масками EEC. Не реализованы: допуски при переменной температуре, holdover, переходные процессы, джиттер и точность частоты по G.811 |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Переписанные именованные Рекомендации (загружены с itu.int 2026-10-13), каждая строка перечитана по тексту, а непрерывность в точках излома, вытекающая из печатных коэффициентов, ограничена в тестах (например, 40 · 10^0,4 = 100,48 нс против плато 100 нс в таблице 4 G.812). Переписывание стандарта с проверками внутренней согласованности, не тест на соответствие и не внешняя проверка. G.812 (06/2004) числится заменённым предварительно опубликованной редакцией 08/2026, а у G.811 есть Amd. 1 (04/2016); ни то, ни другое прочитать не удалось, поэтому ни то, ни другое не проверено. Сценарий со свободно идущим OCXO завышает вклад генератора на интервалах наблюдения, длинных по сравнению с постоянной времени контура; он ничего не говорит о часах какого-либо оборудования | telecom_timing (MASKS, Segment::tau_exponent, MeasurementFilter::LowPass10HzAtSource, MaskCondition::Autonomous) | telecom_timing::tests (g811_prc_masks_follow_clause_6_1; g812_masks_follow_tables_3_4_6_and_7; g8262_masks_follow_tables_1_3_4_and_5; g8262_1_eeec_masks_follow_tables_1_and_3; a_linear_piece_is_evaluated_without_powf; wander_masks_pass_a_quiet_white_fm_flicker_series; wander_masks_fail_the_same_series_scaled_up) |
| Форматы журналов часов (RINEX clock, TimeLab ASCII, TAPR TICC), считываемые в нормализованный ряд фазы | clock_log::read_input: один уровень разбора, который превращает файл RINEX clock (записи AS/AR одних именованных часов, версии 2 и от 3,00 до 3,04), ASCII-журнал фазы или частоты в стиле TimeLab либо журнал меток времени или интервалов TAPR TICC в единую фазовую сетку, с tau0, заданным явно, взятым из заголовка или равным медианному шагу, с подсчётом каждого пропуска, отсчёта вне сетки и дубликата и с политикой пропусков: отказ, самый длинный непрерывный участок или линейное заполнение; подключён по желанию к ряду telecom-timing ([series.clock_log], с добавлением блока clock_log) и к типу clock ([clock_log], с добавлением блока measured с ADEV, TDEV и MTIE, SHA-256 таблицы и SHA-256 фазы; runs = 1). Без таблицы оба типа побайтово идентичны |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Предварительно зарегистрировано в tests/fixtures/clock_log/PREREGISTRATION.md (закоммичено отдельно, 159334f2, до появления образца); записано в RESULTS.md. Три синтетических журнала с начальным значением (seed), по одному на каждый формат (пропуск в три эпохи у TICC, вторые часы RINEX, подлежащие игнорированию), прочитаны независимым считывателем, написанным по docs/CLOCK-LOG-FORMATS.md тем же автором: сетка, число пропусков и заполнений совпадают, а наибольшая разность фаз равна 0 с (порог 1e-13 с). allantools 2024,6 oadev, tdev и mtie по этой фазе согласуются в пределах относительной величины 2.5e-14 (порог 1e-10) при каждом коэффициенте усреднения, который он вычисляет; MTIE по всей записи, о которой сообщает движок, он не вычисляет, поэтому эта одна точка на журнал не имеет значения для оракула, и порог в заявленной формулировке там не выполнен. MODELLED: журналы синтетические, а оракул-считыватель разделяет автора с проверяемым; реальные файлы часов TimeLab, TICC и RINEX с приборов не сравнивались | clock_log (read_input, MeasuredPhaseReport, MEASURED_UNITS, TELECOM_LOG_UNITS); telecom_timing (SeriesInput::clock_log); api (вид clock [clock_log]) | clock_log::tests (журналы, написанные вручную, по каждому формату: заголовки, разделители, единицы, интегрирование частоты, каналы и режимы TICC, пропуски и политики, отказы); tests/clock_log_allantools.rs (предварительно зарегистрированное сравнение: b1_each_log_reads_to_the_reference_phase; b2_adev_tdev_and_mtie_agree_with_allantools; b3_a_telecom_series_read_from_a_log_equals_the_same_samples; b3_the_clock_kind_measured_block_is_opt_in) |
| Форматы журналов часов linuxptp (ptp4l, phc2sys, ts2phc) и chrony (tracking, statistics), считываемые в нормализованный ряд фазы | clock_log::read_input с форматами ptp4l, phc2sys, ts2phc, chrony-tracking и chrony-statistics: записанное смещение строки сервопривода linuxptp (нс, собственная метка времени строки в квадратных скобках, показания до первого сообщения сервопривода о s2 отбрасываются и подсчитываются) либо журнала chrony tracking или statistics (с, по позиции столбца, дата и время UTC) превращается в единую фазовую сетку по тем же политикам пропусков, что и у других форматов; селектор источника (clock) указывает один из нескольких интерфейсов, часов или адресов; журналы питают ряд telecom-timing, тип clock и тип holdover-test |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Образцы, написанные для Kshana по публичным построчным форматам демонов, с выдуманными значениями (NOTICE.md в папке образцов); ни один журнал реальной установки не читался, и ни один оракул не сравнивает разбор с другим считывателем, поэтому формат, различающийся между версиями демонов, всё же может быть отвергнут или прочитан неверно. Оценщики, получающие ряд фазы, — те же, что проверены по allantools в строках выше | clock_log (parse_linuxptp, parse_chrony, grid_timed_offsets) | clock_log::tests (ptp4l_reads_the_locked_offsets_in_ns; linuxptp_reads_only_the_named_program; ts2phc_gap_is_refused_or_filled; linuxptp_reads_syslog_prefixed_lines_and_picks_an_interface; linuxptp_refuses_a_servo_that_never_locks_and_backwards_stamps; chrony_tracking_reads_the_local_offset_in_seconds; chrony_statistics_needs_a_source_when_there_are_two; chrony_columns_of_the_other_log_are_not_read; clock_selector_is_refused_for_timelab_and_ticc_only) на образцах в tests/fixtures/clock_log/linuxptp_chrony/ |
| Испытание holdover, оцениваемое по записи ошибки времени, предоставленной оператором | Тип holdover-test: запись ошибки времени (журнал часов linuxptp, chrony, TICC, TimeLab или RINEX либо пары time_s,time_error_ns) разделяется в два момента, указанных оператором для отключения и возврата GNSS, на этап базового уровня, этап holdover и этап восстановления; базовый уровень измеряется относительно масок ITU-T, написанных для часов в режиме привязки, а holdover — относительно масок для holdover или автономных часов, огибающей holdover ePRTC-A и бюджетов ошибки времени; для holdover сообщается смещение частоты по методу наименьших квадратов, которое удерживала система, а для восстановления — вошла ли |TE| в заданную полосу и когда, и оставалась ли в ней в течение заданного времени, а также пик и наибольший скачок. Каждый предел — тот, который переписывает тип telecom-timing; два момента — заявление оператора и не проверяются |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Ручной расчёт на записях, построенных по формулам, у которых наклон, ступенька, экстремум и время восстановления известны до прогона (тесты их указывают), а также маски, огибающая и бюджеты из строк по синхронизации телекоммуникаций выше. Ни одно лабораторное измерение реального holdover не оценивалось и ни один внешний оракул не сравнивался, поэтому этот вид не делает утверждений ни о каких часах и ни о какой системе; прежде чем какой-либо показатель по классу часов можно будет повысить в статусе, нужен партнёр — лаборатория времени | holdover_test (HoldoverTestScenario, recovery, linear_fit); telecom_timing (check_mask, check_envelope, budget_results) | holdover_test::tests (the_record_is_split_at_the_stated_times; holdover_figures_match_a_hand_computation; recovery_is_timed_from_the_restoration; masks_are_measured_on_the_step_their_condition_names; a_record_with_no_baseline_says_so; bad_inputs_are_refused_with_the_reason; the_report_carries_the_label_the_units_and_no_conformance_word; a_ptp4l_log_is_scored_end_to_end) |
| Доступность сигналов GNSS в Космическом сервисном объёме и за его пределами в сравнении с буклетом ICG SSV | Развёртки доступности типа gnss-ssv: по орбитальным группировкам (GPS, GLONASS, Galileo, BDS, QZSS, NavIC) и совместно — доля пар (пользователь, эпоха) как минимум с одним и как минимум с четырьмя сигналами и самый длинный перерыв, для пользователя на сфере (глобальная оболочка буклета из 2,562 точек, 14 суток с шагом 1 минута) или на траектории (GEO, HEO, лунный перелёт), по кеплеровым орбитам из приложения C буклета, постоянной минимальной излучаемой мощности внутри опорного внеосевого угла, затенению Землёй, заданному сферой плюс 50 км, и порогу C/N0; антенны пользователя — из таблицы B10 буклета |
ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся смоделированной — Брошюра ICG Space Service Volume (UN OOSA ST/SPACE/75, 2018), сама являющаяся симуляцией, сопоставлена в рамках предварительной регистрации, закоммиченной до прогона (xval/gnss-ssv/PREREGISTRATION.md; результаты в xval/gnss-ssv/RESULTS.md, закреплены tests/ssv_booklet_results.rs, включая промахи). Прогон 1 по предварительно зарегистрированному прочтению: константы минимальной излучаемой мощности и лунный порог согласуются (S0, S6 выполнены); пороги верхнего и нижнего SSV, RF-порога, GEO и HEO — NOT MET, почти все из-за GLONASS, для которой брошюра даёт 20 и 28 градусов в таблицах B2 и B6 и 26 и 34 градусов в таблице 4,2. Диагностический вариант с углами из таблицы 4,2 согласуется в каждой ячейке верхнего SSV, нижнего SSV и шести миссий GEO (он не заменяет прогон 1; ячейки RF, HEO и лунные по-прежнему расходятся). Измеренные диаграммы панели GPS L1 параметрической заменой не воспроизводятся (СКО от 6 до 9 дБ при пороге 3 дБ). Согласие показывает, что заявленный метод брошюры воспроизведён, а не что сигналы ГНСС ведут себя именно так | ssv (constellations, geom, sweep, pattern, check) | ssv::geom::tests (the_grid_has_the_booklets_2562_points_on_the_unit_sphere; the_interval_form_equals_the_general_predicate; a_user_behind_the_earth_is_blocked_and_one_beside_the_limb_is_not); ssv::sweep::tests (a_small_shell_run_is_internally_consistent; pdop_of_a_regular_tetrahedron_like_set_is_finite_and_a_flat_set_is_not); ssv::pattern::tests (table_b10_antenna_reads_as_gain_against_angle_from_the_boresight) |
Эффекты ионосферы, плазмосферы и атмосферы на скользящих лучах вдоль лимба для сигналов GNSS и конструкция приёмника слабых сигналов в типе gnss-ssv |
Ионосфера Чепмена, плазмосфера типа Gallagher и нейтральная атмосфера (изгиб из-за рефракции, поглощение кислородом, дефокусировка), проинтегрированные вдоль прямого луча между передатчиком и пользователем: наклонное полное электронное содержание, его плазмосферная часть, избыточная задержка, высота касания и потери на скользящих линиях связи; а также конструкция приёмника слабых сигналов (когерентное и некогерентное накопление, предел по биту данных, помощь, поиск по Доплеру), которая задаёт порог C/N0 по моделям захвата и контуров слежения | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые формы и опубликованные величины в тестах (максимум слоя Чепмена и изгиб лучей у поверхностного лимба, несколько TECU плазмосферы на луче от GPS до GEO); конструкция приёмника повторно использует модели захвата и петель слежения и их тесты. Ни измеренные данные зондирования по лимбу, ни данные приёма слабых сигналов с ней не сравнивались | ssv (limb, weak) | ssv::limb::tests (the_chapman_layer_peaks_at_its_height_with_its_density; the_surface_limb_bends_about_one_and_a_third_degrees; plasmaspheric_tec_is_a_few_tecu_for_an_equatorial_gps_to_geo_ray); ssv::weak::tests (longer_integration_lowers_the_acquisition_threshold; aiding_narrows_the_search_and_the_loop; a_conventional_receiver_is_far_above_the_ssv_signal_levels); ssv::scenario::tests (the_limb_medium_adds_statistics_and_can_cost_signals; a_weak_signal_receiver_replaces_the_fixed_threshold) |
| Бортовой навигационный фильтр GNSS для космических аппаратов на высоких орбитах и при лунном перелёте | Режим [navigation] типа gnss-ssv: девятисостоятельный расширенный фильтр Калмана (положение, скорость, смещение и дрейф часов приёмника, масштаб светового давления Солнца) по псевдодальностям, чьи доступность, шум и C/N0 берутся из той же геометрии линий связи, что и в развёртках; истина интегрируется с учётом J2, возмущений третьими телами — Солнцем и Луной — и светового давления с тенью, фильтр моделирует J2 и третьи тела и оценивает световое давление; сообщаются ошибки положения и скорости внутри орбит GNSS и выше них, самый длинный пропуск измерений и среднее NEES |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Смоделированная истина против собственной оценки фильтра (средний нормированный квадрат ошибки оценки у согласованного фильтра составляет около 3 для положения) и детерминированность при фиксированном начальном значении (seed). Ни лётные, ни записанные данные ГНСС на высоких орбитах не сравнивались; Солнце и Луна — круговые заменители низкой точности | ssv::nav (run_nav, Ekf) | ssv::nav::tests (the_filter_converges_where_signals_are_plentiful_and_is_deterministic; the_covariance_is_consistent_with_the_error; without_signals_the_filter_coasts_and_the_gap_is_reported); ssv::scenario::tests (navigation_and_formation_run_and_report) |
| Относительная навигация построения из нескольких космических аппаратов на сильно эллиптической орбите по GNSS | Режим [formation] типа gnss-ssv: ведущий и ведомые аппараты запускают каждый абсолютный фильтр; положение ведомого относительно ведущего оценивается вычитанием абсолютных оценок и относительным фильтром по однократно разностным псевдодальностям сигналов, которые отслеживают оба аппарата, при этом относительная динамика есть разность двух нелинейных траекторий |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Та же смоделированная истина, что и для абсолютного фильтра: ошибка относительного фильтра относительно истинного относительного состояния и проверка того, что он работает не хуже, чем вычитание двух независимых абсолютных определений. Лётные данные формации не сравнивались | ssv::formation (run_formation, RelEkf) | ssv::formation::tests (differencing_beats_subtracting_absolute_estimates_and_is_deterministic); ssv::scenario::tests (navigation_and_formation_run_and_report; formation_needs_navigation_and_one_mode_only) |
Бюджет ошибок навигации и синхронизации времени цепочки фаз миссии от запуска до входа в атмосферу (mission-thread) |
Вид mission-thread: документ из фаз, каждая из которых относится к одному из восьми зарегистрированных видов; фазы выполняются по порядку, а ковариация 6x6, часы и система координат передаются по заданному правилу (carry; inflate, белый шум ускорения на заданном интервале по прямолинейной модели; reacquire, счисление пути, затем нижний предел источника, никогда не ниже него, никогда не сброс); преобразования систем координат GCRF, MCI и MCMF и преобразования шкал времени через TT, каждое отдельной строкой бюджета, с состоянием Луны из необязательного среза ядра DE440 и аналитическим рядом как заявленным запасным вариантом; запас относительно заданного требования, самое слабое звено, события и график хронологии. Каждое число является заданным входом или моделью такого входа |
InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Ручные расчёты в тестах (рост ковариации при прямолинейном движении, среднее звёздное вращение, вековой ход лунных часов) и, только для состояния Луны, зафиксированные фрагменты ядра DE440 против закреплённых значений JPL Horizons (наихудшие 2,6 m и 7e-6 m/s). Данные какой-либо миссии с цепочкой не сравниваются; её фазы — отдельные строки. Документ — заданная цепочка с ILLUSTRATIVE входными данными, только открытыми источниками и без одобрения какого-либо агентства | mission_thread (scenario, handover, conversions, budget, phase) | mission_thread::scenario::tests::a_thread_runs_hands_over_converts_and_names_the_weakest_link; mission_thread::scenario::tests::bad_documents_fail_with_the_reason; mission_thread::handover::tests::inflate_never_shrinks_a_sigma_and_matches_the_hand_calculation; mission_thread::handover::tests::reacquire_sets_an_axis_to_the_floor_only_where_the_floor_is_smaller; mission_thread::conversions::tests::mci_mcmf_round_trip_returns_the_state_and_the_covariance; mission_thread::conversions::tests::tt_to_ltc_shifts_bias_and_drift_by_the_secular_rate_and_back; mission_thread::conversions::tests::the_committed_kernel_cuts_agree_with_pinned_horizons_values; tests/field_units_global.rs (the report's units block) |
Запуск и выведение на опорную орбиту с захватом и пропаданием ГНСС (launch-ascent) |
Фаза launch-ascent: ковариация положения и скорости при постоянной скорости с белым шумом ускорения (класс счисления пути), определение места по ГНСС заданной точности, применяемое после времени захвата и вне заданных пропаданий, часы со смещением и дрейфом, дисциплинируемые теми же определениями, и состояние вывода на опорную орбиту |
InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Установившееся решение Риккати и ручной расчёт предсказания в тестах. Здесь не моделируется ни ракета-носитель, ни приёмник; каждое число — заданный входной параметр | mission_thread::earth::launch (LaunchAscent) | mission_thread::earth::launch::tests::with_gnss_the_sigma_settles_near_the_fix_and_an_outage_lets_it_grow; mission_thread::earth::launch::tests::before_acquisition_the_sigma_only_grows_and_a_longer_acquisition_is_worse; mission_thread::earth::launch::tests::a_phase_that_does_not_list_gnss_never_uses_it; mission_thread::earth::launch::tests::bad_models_and_entries_are_refused; mission_thread::earth::filter::tests::repeated_updates_reach_the_riccati_steady_state |
Относительная навигация до границ стыковки на низкой околоземной орбите по участкам датчиков (leo-rendezvous) |
Фаза leo-rendezvous: относительное состояние в осях LVLH цели с переходом Клохесси–Уилтшира в замкнутом виде, ковариация фильтра Калмана 6x6 с белым шумом ускорения и обновления положения, дисперсия которых равна дисперсии датчика на текущей дальности, на участках заданного датчика (ILLUSTRATIVE оптическая камера, лидар и радиодальномерные формы); окно стыковки — это время, начиная с которого относительная сигма остаётся внутри границы захвата, до конца фазы. Абсолютная ковариация активного аппарата передаётся дальше без изменений, и строка об этом говорит |
InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Одноосный ручной расчёт предсказания и обновления в тесте; переход Клохесси — Уилтшира — тот, который cw_dynamics проверяет по независимому численному интегрированию. Датчики ILLUSTRATIVE, и никакое реальное сближение не сравнивается | mission_thread::earth::rendezvous (LeoRendezvous); cw_dynamics; mission_thread::sensors | mission_thread::earth::rendezvous::tests::the_relative_sigma_falls_through_the_legs_and_opens_a_docking_window; mission_thread::earth::rendezvous::tests::without_relative_sensing_the_sigma_only_grows_and_no_window_opens; mission_thread::earth::rendezvous::tests::the_covariance_recursion_matches_a_one_axis_hand_calculation; mission_thread::earth::rendezvous::tests::bad_models_and_a_duration_mismatch_are_refused; mission_thread::sensors::tests::the_cross_range_error_grows_with_range_and_the_floor_dominates_up_close |
Транслунарная инжекция и цислунный перелёт: распространённые среднее состояние и ковариация с обновлениями по слежению (tli-and-cruise) |
Фаза tli-and-cruise: среднее состояние по пропагатору Коуэлла движка (точечная масса Земли и J2, Солнце и Луна как третьи тела, Луна из ядра DE440 нити там, где оно покрывает сегмент, а Солнце из аналитического ряда); ковариация по матрице перехода состояния, полученной конечными разностями этого распространения (номинальный прогон и шесть возмущённых прогонов на сегмент), с белым шумом ускорения; размер и ошибка направления импульса TLI; определения gnss-ssv, доступность и PDOP которых берутся из расчёта по зоне обслуживания в космосе вдоль оскулирующей орбиты, замещающей дугу; слежение по дальности и скорости изменения дальности вдоль геоцентрического направления, масштабируемое скважностью наземной сети, с обновлением в форме Джозефа |
InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Теорема Лиувилля (определитель матрицы перехода состояния консервативной части равен единице) и более мелкая разность в тестах; среднее состояние сравнивается с общедоступной траекторией в строке ниже, и она его не выдерживает. Ошибка импульса, обновления и ковариация ни с чем не сравниваются | mission_thread::earth::tli_cruise (TliCruise); propagator; ssv::sweep | mission_thread::earth::tli_cruise::tests::the_stm_is_symplectic_for_the_conservative_part_and_matches_a_finer_difference; mission_thread::earth::tli_cruise::tests::with_no_tracking_the_covariance_is_the_stm_propagation_of_the_entry_and_the_burn; mission_thread::earth::tli_cruise::tests::range_tracking_shrinks_the_line_of_sight_and_leaves_the_plane_of_the_sky; mission_thread::earth::tli_cruise::tests::the_thread_kernel_serves_the_moon_inside_its_window_and_the_series_outside; mission_thread::earth::tli_cruise::tests::gnss_ssv_fixes_are_applied_where_the_sweep_finds_four_signals; mission_thread::earth::tli_cruise::tests::a_phase_that_lists_a_source_the_model_lacks_is_refused_and_unknown_keys_too |
Ковариация на границе входа, вероятность коридора, пиковое замедление и пятно посадки (entry) |
Фаза entry: возвратный участок tli-and-cruise без импульса, заканчивающийся на границе входа; угол наклона траектории и его сигма по полной ковариации через градиент конечными разностями; вероятность того, что угол лежит внутри заданного коридора; пиковое замедление при номинальном угле и на обеих границах коридора по плоскому баллистическому входу материальной точки движка (с обнаружением рикошета) наряду с замкнутой формулой Аллена–Эггерса; пятно посадки по заданной чувствительности по дальности и ковариации на границе входа поперёк плоскости орбиты. Подъёмная сила, наведение и нагрев не моделируются |
InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Ручные расчёты в тестах (сигма угла — это сигма перпендикулярной скорости, делённая на скорость; гауссова масса в коридоре). Плоский вход — собственный для движка, а форма Аллена — Эггерса — сравнение в замкнутой форме; никакой совершённый вход в атмосферу не сравнивается | mission_thread::earth::entry (Entry); reentry | mission_thread::earth::entry::tests::the_flight_path_angle_and_its_sigma_follow_the_velocity_error_over_the_speed; mission_thread::earth::entry::tests::the_corridor_probability_is_the_gaussian_mass_inside; mission_thread::earth::entry::tests::the_phase_reports_the_interface_the_corridor_the_peaks_and_the_footprint; mission_thread::earth::entry::tests::the_steep_edge_peaks_higher_and_a_limit_below_it_is_flagged; mission_thread::earth::entry::tests::bad_corridors_unknown_keys_and_burn_keys_are_refused |
Покрытие наземной сети и скважность слежения для фазы нити ([ground_network] из mission-thread) |
Наложение наземной сети: станции с минимальным углом места, видимость аппарата при заданной геометрии (состояние входа, пролетаемое в двух телах с J2, положение Луны для перелёта или заданная скважность), передачи между станциями, каждая из которых теряет заданное время, и получающаяся скважность, передаваемая в частоту обновлений наземного слежения фазы; самый длинный интервал без станции в зоне видимости является строкой бюджета | InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Проверки геометрии для зенита и антипода и ожидаемая видимость далёкой цели в тестах. Никакая реальная сеть, антенна или расписание не моделируются | mission_thread::earth::ground_network | mission_thread::earth::ground_network::tests::a_vehicle_over_a_station_is_seen_and_one_on_the_other_side_of_the_earth_is_not; mission_thread::earth::ground_network::tests::the_moon_is_in_view_of_three_well_spread_stations_most_of_the_time; mission_thread::earth::ground_network::tests::handover_losses_reduce_the_duty_and_never_below_zero; mission_thread::earth::ground_network::tests::a_stated_duty_is_passed_through_and_bad_documents_are_refused; mission_thread::scenario::tests::the_overlay_sets_the_tracking_duty_of_a_phase_that_lists_ground_tracking |
Относительная навигация до стыковки на лунной орбите (lunar-orbit-rendezvous) |
Вид и фаза lunar-orbit-rendezvous: совместная пакетная оценка Гаусса–Ньютона по двум аппаратам на дуге (двадцать один параметр: оба состояния и устойчивые смещения положения сигнала в пространстве, общие и независимые), наращиваемая на четверти, половине и всей дуге с делением шага, по одному абсолютному определению для каждого аппарата (граница сопровождения пилотного кода AFS, набор ретрансляторов ILLUSTRATIVE) и дальности межспутниковой линии, при лунной модели сил крейта; средняя нормированная квадратичная ошибка оценки, проверка Клохесси–Уилтшира на круговой орбите и передаваемая ковариация 6x6 |
InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Самосогласованность при предварительной регистрации (xval/mission-thread-lunar/PREREGISTRATION.md, результаты и история оценщика в RESULTS.md): средняя NEES относительного состояния равна от 5,85 до 5,93 при полосе от 5,2 до 6,8 в четырёх конфигурациях, MET на четвёртом варианте оценщика после того, как три варианта последовательного фильтра не достигли порога; истинное движение и оценщик используют одну модель сил, поэтому это ничего не говорит об ошибке модели. Общий для них пропагатор сравнивается с LRO и CAPSTONE в строке ниже | lunar_rendezvous (LunarRendezvousScenario); lunar_phase; mission_thread::lunar | lunar_rendezvous::tests::b1_mean_nees_is_inside_the_registered_band_in_all_four_configurations; lunar_rendezvous::tests::circular_cw_check_is_within_the_pre_registered_bar; lunar_rendezvous::tests::same_seed_gives_identical_documents; lunar_rendezvous::tests::b6_handover_without_a_measurement_only_propagates; mission_thread::lunar::tests::every_phase_runs_and_returns_a_modelled_outcome; tests/mission_thread_lunar_oracles.rs |
Бюджет рассеяния посадки в лунной полярной точке (lunar-descent) |
Вид и фаза lunar-descent: пятисостоянная инерциальная модель ошибок по осям (положение, скорость, смещение акселерометра, наклон, смещение гироскопа) при активном спуске с поддержкой определениями AFS (автономными или дифференциальными, со случаем трёх ретрансляторов с поддержкой часов), определением по рельефу (сопоставитель terrain-nav движка на синтетическом рельефе или граница Крамера–Рао на ЦМР LOLA с правилом проблемы апертуры) и лунным временем, с эллипсом касания по методу Монте-Карло |
InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Дрейф инерциальной навигации в замкнутой форме, собственные результаты повторно используемых видов и калибровка эллипса 3-сигма (доля внутри него согласуется с ожидаемой) в тестах. С какой-либо совершённой или испытанной посадкой сравнения нет | lunar_landing (LunarLandingScenario); lunar_phase; terrain_nav | lunar_landing::tests::b4_with_no_aid_the_landing_error_is_the_closed_form_inertial_drift; lunar_landing::tests::b4_each_aid_reports_exactly_what_the_reused_kind_gives; lunar_landing::tests::b3_ellipse_calibration; lunar_landing::tests::a_plane_gives_no_fix_the_aperture_problem; lunar_landing::tests::a_bowl_matches_the_closed_form_bound; lunar_landing::tests::three_relays_make_the_fix_depend_on_the_clock |
Доступность позиционирования и синхронизации времени на поверхности по точке и сезону на лунных полюсах (lunar-surface) |
Вид и фаза lunar-surface: доступность ретрансляторов и PDOP, видимость Земли и Солнца и дисциплинируемые часы поверхности для каждой точки и сезона, с рельефным горизонтом moonlight-service-volume; прогон для одной точки совпадает с доступностью и PDOP этого вида вплоть до бита |
ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого блока, но не являющейся внешним авторитетным источником — Точное равенство с существующим видом для одной площадки и проверки монотонности в тестах. Набор ретрансляторов ILLUSTRATIVE, и никакие измерения на поверхности не сравниваются | lunar_surface_map (LunarSurfaceMapScenario); lunar_phase | lunar_surface_map::tests::b5_equals_the_service_volume_for_a_single_site; lunar_surface_map::tests::b5_equals_the_service_volume_with_the_real_terrain; lunar_surface_map::tests::terrain_never_adds_availability; lunar_surface_map::tests::timing_is_at_least_either_source_and_the_season_moves_the_earth_and_sun; lunar_surface_map::tests::same_inputs_give_identical_documents |
Активный подъём из лунной полярной точки на орбиту вывода (lunar-ascent) |
Вид и фаза lunar-ascent: пятисостоянная инерциальная модель ошибок по осям на активном подъёме с удельной силой вдоль траектории, с поддержкой определениями AFS и лунным временем; сообщает ковариацию положения и скорости при выводе, переносимую на орбиту, и разброс при отсечке двигателя (сообщается, но не переносится) |
InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Дрейф инерциальной навигации в замкнутой форме и проверки монотонности в тестах. Никакой совершённый взлёт не сравнивается | lunar_ascent (LunarAscentScenario); lunar_phase | lunar_ascent::tests::with_no_aid_the_insertion_error_is_the_closed_form_inertial_drift; lunar_ascent::tests::the_aid_never_hurts_and_the_velocity_is_carried_with_its_correlation; lunar_ascent::tests::a_stale_tt_clock_costs_a_three_relay_fix; lunar_ascent::tests::the_same_inputs_give_identical_documents |
| Распространение по лунной модели сил в сравнении с открытыми восстановленными траекториями лунных орбитальных аппаратов и цислунных аппаратов | Пропагатор, общий для лунных видов (GRAIL GL0660B степени и порядка 150, Земля и Солнце как третьи тела, релятивизм, ориентация Луны по DE440), в сравнении с открытыми траекториями JPL Horizons для LRO (24 ч, отсчёты через 10 минут) и CAPSTONE (один оборот 6,5 суток, отсчёты через час) по порогам, зафиксированным в закоммиченном файле до прогона | ExternalDataset | подвопрос проверен внешне, но возможность в целом составлена из смоделированных частей, поэтому она остаётся Modelled — эфемериды космических аппаратов JPL Horizons для LRO и CAPSTONE против порогов, заранее зарегистрированных в xval/mission-thread-lunar/PREREGISTRATION.md (поправки 1–6). LRO: MET, наибольшая разность 3-D 33 m и радиальная СКО 2,4 m против 500 m и 60 m. CAPSTONE: NOT MET, разность конечного положения 136,8 km против 25 km и разность перицентра 28,4 km против 10 km, причины не выделены. Строка остаётся Modelled, потому что порог CAPSTONE не выполнен, а сравнение проверяет общий пропагатор, а не какой-либо фильтр, сигнал или бюджет | lunar_od (LunarForceModel); precise_od; mission_thread_lunar_oracles (example) | tests/mission_thread_lunar_oracles.rs::the_stored_numbers_meet_or_miss_the_registered_bars_as_recorded; tests/mission_thread_lunar_oracles.rs::the_fixtures_match_their_recorded_hashes |
Распространение среднего состояния по цислунной траектории в сравнении с открытой траекторией Artemis I (tli-and-cruise) |
Распространение среднего состояния фазы tli-and-cruise (Коуэлл, точечная масса Земли и J2, Солнце и Луна как третьи тела, Луна из среза DE440) в сравнении с открытой траекторией Artemis I из JPL Horizons на дуге инерционного участка 72 ч от 2022-11-16 18:00 TDB, в эпохи через 12 часов, по порогам, зафиксированным в закоммиченном файле до прогона |
ExternalDataset | подвопрос проверен внешне, но возможность в целом составлена из смоделированных частей, поэтому она остаётся Modelled — JPL Horizons, объект -1023 (траектория после TLI по данным навигации NASA «как летела»), против порогов, заранее зарегистрированных в xval/mission-thread/PREREGISTRATION.md (поправка 1 меняет только запрашиваемый интервал). NOT MET, и это подтверждено тестом как невыполнение: наибольшая разность положения 45,3 km против 5 km и разность скорости 0,249 m/s при 72 h против 0,05 m/s. Диагностика, написанная после вердикта, относит промах к пяти импульсным шагам скорости от 0,09 до 0,22 m/s в эталоне (заранее зарегистрированное предположение, что в окне не было импульса, оказалось неверным); на остальных 67 ч модель воспроизводит следующее почасовое состояние с медианой 0,38 m. Проверяет только среднее состояние одного участка пассивного полёта: ни ковариацию, ни фильтр, ни обновления, ни другие фазы | mission_thread::earth::tli_cruise; propagator; mission_thread_oracle (example) | tests/mission_thread_oracle.rs::the_stored_numbers_miss_the_registered_bars_as_recorded; tests/mission_thread_oracle.rs::the_diagnostic_places_the_miss_in_five_impulsive_events_not_in_the_force_model; tests/mission_thread_oracle.rs::the_kernel_cut_and_the_recorded_inputs_match_their_hashes |
| Члены ошибки холодно-атомного интерферометра: фазовый шум рамановского лазера, смещение из-за кривизны волнового фронта и разрешение неоднозначности полос | inertial::cai_error_terms (библиотечные функции, пока не доступные из типа сценария): весовая функция рамановской фазы трёхимпульсного интерферометра с прямоугольными импульсами (Cheinet et al. 2008, уравнение 8) с замкнутой формой для белого фазового шума (pi/2)^2 S_phi0/tau_R и численным путём для любого спектра; частотный шум лазера, который задержка при ретроотражении не компенсирует (Le Gouet et al. 2007, уравнения 9–11); смещение волнового фронта из-за чистой расфокусировки sigma_v^2/R для теплового облака и его уменьшение за счёт радиуса детектирования; вероятность неверного индекса полосы erfc(pi/(sqrt(2) s)) при помощи классического акселерометра и для двух времён опроса, и обратная ей величина | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Каждая замкнутая форма сверена в тестах с независимым численным путём (квадратура точной передаточной функции и фильтра задержки в частотной области, Монте-Карло по атомам для смещения волнового фронта, Монте-Карло по выстрелам для индекса полосы) и с её предельными случаями. Одно опубликованное рабочее значение: Cheinet et al. 2008 (arXiv:physics/0510197, разд. IV) указывают, что при tau_R = 20 мкс для 1 мрад на выстрел нужен белый рамановский фазовый шум ниже -111 дБ рад^2/Гц; один белый член даёт 0,99 мрад (в статье уровень выводится по её формуле 17, фликкер плюс белый). Внутренняя согласованность и одно рабочее значение, а не внешняя проверка; аберрации высших порядков и шум какого-либо конкретного лазера не моделируются | inertial::cai_error_terms | inertial::cai_error_terms::tests (raman_transfer_short_pulse_limit_matches_the_acceleration_transfer_function; white_raman_phase_closed_form_matches_quadrature; short_pulse_band_limited_closed_form_matches_quadrature; cheinet_2008_white_phase_noise_requirement_is_reproduced; delay_term_closed_form_matches_exact_filter_quadrature; defocus_phase_is_position_independent_and_tilt_cancels; curvature_bias_monte_carlo_matches_closed_form; curvature_bias_limiting_cases; classical_aided_resolution_monte_carlo_matches_closed_form; multi_t_resolution_monte_carlo_matches_closed_form; ambiguity_limits_and_inverse) |
| Предустановки holdover генераторов по открытым спецификациям | Четыре предустановки — OCXO (Microchip OX-208), рубидиевый (Microchip 8040C), цезиевый (Microchip 5071A, высокопроизводительная трубка) и CSAC (Microchip SA.45s) — каждая несёт максимумы девиации Аллана, старение и границу по температуре из своей спецификации; неотрицательная аппроксимация методом наименьших квадратов частотного шума (белый + фликкер + случайное блуждание), масштабированная так, чтобы огибать каждую точку спецификации, фликкерный пол не ниже значения при наибольшем τ, линейное старение и синусоидальный температурный член, синтезируемые как holdover с начальным значением после потери GNSS | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Четыре названных технических описания Microchip (номера документов и URL — в каждой предустановке и в docs/TELECOM-TIMING.md) для входных значений; замкнутая форма линейного дрейфа старения и свойство огибающей у подгонки — как внутренние проверки. То, как значения превращаются в модель шума — подгонка, правило нижней границы, 30-дневный месяц, линейное прочтение температуры, — это выбор моделирования; ни одна предустановка не является измерением конкретного экземпляра. Раунд 0,30 номер 2, односторонние пороги по измеренным экземплярам (предварительно зарегистрировано a01c491c), результат (остаётся MODELLED): у станции IGS THU2 с Symmetricom 8040C в окончательных часах ESA MGEX девиация Аллана составляет от 0,35 до 0,87 от предустановки рубидия, а ошибка holdover — от 1,07 до 1,60 от неё; запись 5071A выходит за пределы предустановки цезия до 1000 с (белый фазовый шум измерения, 30x при 1 с) и в holdover (от 1,15 до 8,74); худший серийный SA.45s 2011 года в 1.26x превышает предустановку CSAC при 1 с; у OX-208 измеренной записи нет (заблокировано) | telecom_timing (PRESETS, fit_noise, with_flicker_floor, synthesize_holdover); models (ClockModel) | telecom_timing::tests (every_preset_carries_a_named_datasheet_and_figures; the_noise_fit_envelopes_every_datasheet_point; pure_aging_matches_its_closed_form — дискретный дрейф старения в пределах 0,1 % от (1/2)·D·t² за сутки; same_seed_same_series_and_hash_different_seed_different_series); tests/oscillator_presets_measured.rs (caesium_finding_pinned; rubidium_finding_pinned; csac_finding_pinned; ocxo_preset_has_no_measured_record) |
| Секунды до выхода свободно работающих часов за защитный интервал временного слота и частота определений, которая удерживает их внутри | Тип slot-timing: предсказанная ошибка E(t) = k·√(σ₀² + σ_x²(t)) + (|y₀| + |c_T·ΔT|)·t + ½|D|t², обращённая для получения нарушения, оставшегося времени, интервала повторной синхронизации за вычетом задержки определения и числа определений в сутки, причём каждый член расписан отдельно с указанием преобладающего; часы — из шести значений по умолчанию ClockClass (TCXO, OCXO и RAFS добавлены, каждый со ссылкой на одну спецификацию), предустановок telecom-timing, встроенной спецификации или измеренной записи; нарушение за пределами наибольшего времени усреднения источника помечается как экстраполированное |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые формы для каждого члена в отдельности и независимый поиск корня holdover::holdover_seconds; значения из технических описаний — это названные документы (docs/SLOT-TIMING.md). Значение класса по умолчанию опирается на допущенный нижний уровень красного шума, а источник из технического описания — это огибающая максимумов, так что ни то, ни другое не является измерением какого-либо экземпляра | slot_timing (predicted_error_s, breach_after_sync_s, terms_at, slot_budget, ClockNoise::from_datasheet, SlotTimingScenario); clock_state (ClockClass::Tcxo, Ocxo, Rafs, source) | tests/slot_timing_igs_holdout.rs (10 часов спутников GPS Block IIF, 14 суток окончательных часов IGS: 8 в пределах порога 1,5, G25 и G30 оптимистичны до примерно 2x, закреплено); tests/slot_timing_ocxo_holdout.rs (измеренный OCXO: прогноз на отложенной выборке никогда не оптимистичен, от 0,59 до 0,70 от измеренного нарушения; в выборке — в пределах от 0,98 до 1,17; без члена частоты привязки прогноз в выборке оптимистичен при каждом пороге); slot_timing::tests (fix_frequency_uncertainty_alone_is_linear_in_time; reduces_to_the_holdover_inversion — каждый класс против holdover::holdover_seconds с точностью 1e-9; white_fm_with_fix_error_has_its_closed_form; flicker_floor_alone_is_linear_in_time; ageing_alone_is_quadratic_in_time; frequency_offsets_add_in_magnitude; the_error_at_the_breach_is_the_guard; datasheet_fit_envelopes_every_point; datasheet_classes_match_their_presets_at_one_second; a_breach_beyond_the_datasheet_is_flagged_as_extrapolated; the_report_carries_the_result_and_a_unit_for_each_field) |
| Уровень защиты синхронизации времени для приёмника на орбите при спуфинге GNSS | orbital_timing::orbital_timing, доступная как раздел спуфинга типа slot-timing: скорость и период круговой орбиты, наибольшее время, в течение которого наземный спуфер может достичь спутника за один пролёт, нижний предел монитора с поддержкой часов и задержка обнаружения CUSUM, условный уровень защиты (нижний предел плюс инерционный ход за время задержки), уход, который накапливает спуфер с заданной максимальной скоростью нарастания до того, как спутник покинет зону покрытия или будет выполнена независимая проверка, и является ли каждая проверка по наземному контакту или перекрёстной линии связи независимой от одного наземного спуфера |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Сведение к существующему уровню защиты синхронизации времени и к замкнутым формам видимости для круговой орбиты и сферической Земли. При условии обнаружения, один наземный спуфер с заданной скоростью нарастания, пролёт над головой над невращающейся Землёй; не проверено на приёмнике, подвергшемся спуфингу на орбите | orbital_timing (orbital_timing, visibility_half_angle_rad, max_pass_s, crosslink_neighbour_is_outside_footprint) | orbital_timing::tests (reduces_to_the_terrestrial_tpl — ровно tpl::timing_protection_level_ns, когда у часов нет фликкерного члена, члена белой фазы или случайного блуждания; leo_geometry_matches_its_closed_forms; crosslink_independence_follows_the_footprint; an_independent_check_caps_the_ramp_before_the_pass_ends; a_crosslink_inside_the_footprint_does_not_count; a_ramp_below_the_reference_is_never_detected) |
| Водопад спектра L-диапазона с J/S по диапазонам и эффективным C/N0 при заданной по сценарию временной шкале помех | Тип spectrum: сетка «частота по времени» спектральной плотности мощности L-диапазона (тепловой пол k T_sys при T_sys = T_ant + 290 K (F - 1), сигналы при минимальных принимаемых мощностях по спецификации интерфейса, а также помехи: непрерывная волна, узкополосная, чирп и согласованный шум, с моментами включения и выключения), каждая ячейка усреднена по своему интервалу частоты и строке (чирпы — точно по полным и частичным разверткам, помехи — по скважности), эффективный C/N0 по диапазонам = [1/(C/N0) + sum (J/S) kappa]^-1 для каждой строки, J/S по диапазонам, J/S в полосе и водопад в формате SVG со столбцами C/N0. Отчёт содержит перекрёстную проверку относительно цепочки типа jamming на тех же входных данных линии связи |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Сведение к уравнению противодействия подавлению и бюджету линии существующего вида jamming (тот же код, вызываемый на тех же входных данных) и к замкнутой форме уровня шума k T0 F. Лежащие в основе спектры сигналов — в проверенной по внешнему эталону строке выше; мощности источников подавления, временная шкала и полосы входных каскадов — входные данные сценария, спектры непрерывны (линий кода расширения нет), и ни автоматическая регулировка усиления, ни бланкирование, ни диаграмма направленности антенны на источник подавления не действуют. В репозитории нет измеренного спектра с подавлением, по которому можно было бы проверить составную модель. Таблица Q вида jamming (CW и узкополосное 1, широкополосное и с качанием 2 начиная с 0,36: значения из учебника, закреплённые по замкнутым формам navsignal) согласуется со значением этой модели для CW и отличается от того, что она выводит для шума, согласованного с C/A (1,5), и для плоского шума от нуля до нуля без нормировки в полосе (2,2); в отчёте выводятся оба значения |
spectrum (SpectrumScenario, SpectrumModel::bin_psd_w_per_hz, SpectrumModel::band_state, effective_cn0_multi_dbhz, system_temp_k, Jammer::power_fraction_in, Jammer::duty) | spectrum::tests (agrees_with_the_jamming_kind_chain — J/S равно jamming::j_over_s_db, а эффективное C/N0 равно jamming::effective_cn0_dbhz при Q = 1/(R_c kappa) с точностью 1e-9 дБ, а также опорное значение 32,105 дБ из собственного теста вида подавления; noise_floor_is_kt0f; chirp_window_splits_whole_and_partial_sweeps; duty_weights_partial_rows; demo_scenario_runs_and_denies_l1_while_l5_survives; defaults_run_with_no_jammer; bad_inputs_are_refused) |
| Уран и Нептун по таблице 1 Standish, Плутон и скорости планет | Положения Урана и Нептуна по таблице 1 Standish (по умолчанию внутри 1800 н. э. — 2050 н. э.), Плутона по строке таблицы 1 из 1992 года, которую текущая страница JPL больше не приводит, и гелиоцентрическая скорость каждой планеты: производная двух тел со средним движением, которое подразумевают элементы, плюс поворот эллипса скоростями перигелия, наклонения и узла | ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся Modelled — Измерено относительно JPL Horizons DE441 (те же закоммиченные образцы), но не проверено по внешнему эталону: заявленные в таблице 1 значения для Урана и Нептуна превышаются до 2,0 и 5,2 раза относительно гелиоцентрических положений DE441 (Нептун укладывается в них относительно барицентрических положений, что наводит на мысль, что подгонка была негелиоцентрической), на странице нет заявленной ошибки для Плутона, и опубликованной границы для скоростей не существует. Таблицы 2a/2b укладываются в собственные значения для Урана и Нептуна и охвачены проверенной по внешнему эталону строкой | ephem (standish_state, StandishElements::state_at_mean_anomaly, Planet::Pluto); solar_system (position_label) | tests/solar_system_horizons_reference.rs (standish_table1_uranus_and_neptune_exceed_the_nominal_error: закреплено на уровне 2,04 и 5,16 номинальной ошибки долготы, менее шести раз; pluto_from_the_1992_row_is_measured_not_validated: в пределах 39 угл. сек и 1.14e9 м; standish_velocities_track_horizons_to_one_percent: худшее 3.7e-3 от скорости); ephem::tests (standish_velocity_is_the_derivative_of_the_position; pluto_has_no_table2_row_and_no_stated_error) |
| Положения Луны и семи крупных спутников (Фобос, Деймос, галилеевы спутники, Титан) | Геоцентрическая Луна по ряду Montenbruck & Gill (чей член -1.3972 град за столетие уже относит её к равноденствию J2000) и планетоцентрические положения и скорости Фобоса, Деймоса, Ио, Европы, Ганимеда и Каллисто по средним элементам JPL Solar System Dynamics в плоскости Лапласа каждого спутника со скоростью средней долготы, взятой из скорости синхронного вращения IAU (таблица печатает период со слишком малым числом цифр, чтобы удержать фазу), и Титана по модели вращения IAU (спутник на минус связанной с телом оси x на средней дистанции), потому что напечатанная строка плоскости Лапласа для Титана не воспроизводит Horizons даже в собственную эпоху | ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся Modelled — Измерено относительно спутниковых эфемерид JPL Horizons (DE441, MAR099, JUP365, SAT441), закоммиченных в tests/fixtures/solar_system/horizons_satellites_icrf.csv с запросом и датой получения; опубликованной точности для средних элементов или для размещения по модели вращения не существует, поэтому закреплённые пороги ловят регрессии, но не служат проверкой по внешнему эталону. Средние элементы не учитывают резонансные и солнечные возмущения, а вековое ускорение Фобоса не моделируется | ephem (satellite_state, Satellite, SatelliteMethod, moon_icrf, moon_icrf_velocity); ephem_provider (AnalyticSolarSystem) | tests/solar_system_horizons_reference.rs (moons_track_horizons_to_the_measured_angles: наибольшая угловая ошибка при наблюдении с планеты за 2000–2040 годы: Фобос 5,65 град, Деймос 0,38, Ио 0,40, Европа 1,63, Ганимед 0,22, Каллисто 0,27, Титан 3,31; geocentric_moon_tracks_horizons: 0,046 град); ephem::tests (moons_sit_at_their_mean_distance_and_move_at_their_mean_speed); ephem_provider::tests (earth_and_moon_balance_about_their_barycentre) |
| Физические константы каждого тела Солнечной системы и отчёт по всей системе | Тело получает Меркурий, Венеру, Юпитер, Сатурн, Уран, Нептун, Плутон, Фобос, Деймос, Ио, Европу, Ганимед, Каллисто и Титан (гравитационный параметр, опорный радиус, J2, где он опубликован, с радиусом, к которому он отнесён, полюс и нулевой меридиан IAU), поиск по имени и запись BodyFacts (код NAIF, класс, родитель, экваториальный и средний радиус); тип solar-system сообщает их для всех восемнадцати тел вместе с положениями, временем распространения света и треком орбиты за один оборот, причём каждое тело помечено как VALIDATED или MODELLED |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Переписывание опубликованных констант, каждая со ссылкой на место, где она определена: гравитационные параметры из записей тел JPL Horizons и таблицы физических параметров спутников JPL, радиусы из таблиц физических параметров JPL (IAU WGCCRE 2015), полюсы и начальные меридианы из Рабочей группы IAU по картографическим координатам и элементам вращения (средние значения, без скоростей по T и периодических членов), J2 из Smith et al. 2012, Iess et al. 2018 и 2019 и Jacobson 2009 и 2014. Проверено на внутреннюю согласованность (период вращения Юпитера против скорости Системы III, каждая J2 против своего опорного радиуса), а не по внешнему оракулу. Раунд 0,30 номер 2: значения GM приняты из gm_de440, а элементы Фобоса и Деймоса — из pck00011, так что 0 из 84 констант четырнадцати добавленных тел теперь отличаются от NAIF (было 12); это проверка переписывания, и в счёт она не идёт. 0,36: связанная с телом ориентация IAU и GM четырнадцати добавленных тел вынесены в отдельную строку VALIDATED («IAU body orientation and gravitational parameter of the fourteen added solar-system bodies»); в этой строке остаётся то, что осталось. J2 и средний радиус цитируются, а не проверены; положения в отчёте опираются на свои строки; а prime_meridian_deg в отчёте для Земли, Луны и Марса остаётся на условных константах (до 6.6e-3, 2.8e-2 и 9.6e-4 рад от IAU_<BODY>). Правки 0,30: GM Фобоса 7.087e5 -> 7.087546066894452e5, Деймоса 9.62e4 -> 9.615569648120313e4, Урана 5.7939506103e15 -> 5.793951256527211e15, Нептуна 6.83509997e15 -> 6.835103145462294e15, Плутона 8.69326e11 -> 8.696138177608748e11 м³/с²; экваториальный радиус Фобоса 13,1 -> 13,0 км; prime_meridian_deg теперь включает квадратичные и периодические члены | body (Body::by_name, Body::facts, Body::prime_meridian, SOLAR_SYSTEM, BodyFacts); solar_system (SolarSystemScenario, position_label) | body::tests (every_catalogue_body_resolves_by_name_and_carries_its_record; a_zonal_field_is_referenced_to_its_sources_radius; retrograde_rotators_have_negative_rates_and_periods_match_the_iau_rate); solar_system::tests (defaults_report_all_eighteen_bodies_with_tracks; earth_heliocentric_distance_is_one_au_and_period_one_year; a_planet_track_closes_on_its_orbit_and_starts_at_the_epoch_position; moons_orbit_their_planets_at_their_mean_distance; pluto_outside_its_table_is_an_error_not_a_guess; every_emitted_number_has_a_unit); tests/body_constants_naif_oracle.rs::only_the_conventional_constants_of_other_rows_differ |
| Позиционирование вокруг любого тела Солнечной системы с локальной орбитальной группировкой и линией связи в дальнем космосе с Землёй | Тип body-pnt: орбитальный аппарат или посадочный модуль на поверхности вокруг выбранного по имени тела навигирует по односторонним псевдодальностям от навигационной группировки Walker вокруг тела (двутельные орбиты с вековым дрейфом по J2 тела, неизвестные часы пользователя) и по необязательной двусторонней дальности от Земли, не зависящей от часов, причём направление и расстояние до Земли берутся из аналитических эфемерид в каждую эпоху; линии визирования, заслонённые сферой тела, и маска возвышения на поверхности; для каждой эпохи — GDOP и PDOP только по группировке (orbit::dop), формальная неопределённость положения с строкой Земли и без неё и определения Гаусса — Ньютона с заданным начальным значением (batch_ls::gauss_newton) в обоих вариантах, с временем распространения света и временем полного пути от тела до Земли |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые формы и самосогласованность: третий закон Кеплера для периода ретранслятора, радиус орбиты и радиус поверхности, сохраняющиеся на протяжении прогона, добавление измерения, никогда не увеличивающее формальную неопределённость, и согласие заданных случайных ошибок с ковариацией. Орбиты ретрансляторов не учитывают третьи тела (притяжение Юпитера для ретрансляторов вокруг Европы не моделируется), шум гауссов на заданных уровнях, а модель измерения мгновенна, поэтому проверки по навигационным данным какой-либо миссии нет | body_pnt (BodyPntScenario, formal_sigma, fix_error); orbit (dop); batch_ls (gauss_newton); mars_pnt (chord_clears_sphere); mars_frame (bodyfixed_to_inertial) | body_pnt::tests (relay_period_is_keplers_third_law_for_the_body; an_orbiter_keeps_its_radius_and_a_lander_sits_on_the_surface; the_earth_range_never_worsens_the_formal_uncertainty; seeded_fix_errors_are_consistent_with_the_formal_sigma: среднеквадратическое значение каждой ошибки определения, делённое на её собственную формальную сигму, лежит в [0,6, 1,5]; earth_light_time_is_minutes_at_mars_and_the_run_is_deterministic; defaults_run_around_mars_and_every_number_has_a_unit) |
| Карты покрытия и геометрического фактора DOP для произвольных многоконстелляционных проектов в масштабе вокруг любого центрального тела | Тип constellation-design за пределами двух закреплённых случаев: явные и многооболочечные проекты, несколько группировок в одном прогоне с одними часами приёмника на группировку, Земля, Луна и Марс по константам тел, предустановка BeiDou (смоделированы фаза средней орбиты и пересечение наклонной геосинхронной орбиты на 118 град в. д.), спутники в зоне видимости, GDOP, PDOP, HDOP, VDOP и доступность в каждой ячейке, прореженные трассы и предварительный фильтр видимости по широте подспутниковой точки, который прогоняет проект из 5 000 спутников на сетке 10 град за долю секунды |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: полный перебор углов возвышения, ручные расчёты и сведения к orbit::dop, а также замкнутая геометрия Уокера и геосинхронных орбит. Двухтельные орбиты с необязательным вековым J2, сферическое тело с местной вертикалью вдоль радиуса, только геометрическая видимость (без мощности сигнала, исправности спутников, рельефа и возмущений от третьих тел), а относительная фаза между системами взята от разных опорных эпох, поэтому это не мгновенный снимок на какую-либо дату. Обзор 0,30, результат (остаётся MODELLED): предустановки удовлетворяют опубликованным односторонним нижним границам доступности по DOP (BeiDou OS Performance Standard 3,0, Galileo OS SDD) на 100 %, но и при удвоенном PDOP движка в рабочей копии они всё равно удовлетворяются (худшая точка 99,36 %), так что эти границы не способны обнаружить даже ошибку в 100 % в величине, которую вычисляет эта строка; ужесточение их после прогона было бы допуском, назначенным задним числом. Для повышения статуса нужно двустороннее сравнение значений DOP на идентичной геометрии с заранее заданным допуском. Раунд 0,30 номер 2 (tests/coverage_dop_full_oracle.rs, предварительно зарегистрировано add671d6), результат (остаётся MODELLED): положения, угол возвышения, азимут и трассы по Orekit 12,2 вместе с GDOP/PDOP/HDOP/VDOP из gnss_lib_py 1.0.4 (общие часы) и обратной матрицей numpy (по одним часам на орбитальную группировку) согласуются по каждому порогу на Galileo, GPS, BeiDou, Galileo+GPS (по одним часам) и на проекте Земли из 1584 спутников (DOP в пределах 2e-14 относительной величины, идентичные определения, доступность и числа видимых спутников). В проектах для Луны и Марса элементы, положения, видимость и трассы согласуются, но DOP превышает заранее заданный относительный порог 1e-9 в ячейках, где наибольший PDOP равен 1434 или более (до 8e-6), а 4 ячейки различаются на одну эпоху определения на численно вырожденной геометрии (ведущий элемент движка 1e-10 против ранга numpy), поэтому строка не проверена по внешнему эталону. Правки 0,30: опорные часы TDOP/GDOP теперь принадлежат орбитальной группировке с наименьшим номером из видимых (constellation-multi-gnss-coverage глобальный максимум GDOP 2,2236 -> 2,1205, среднее 1,122 -> 1,131), а числа видимых спутников по орбитальным группировкам суммируются как целые | constellation (coverage, ConstellationDesignScenario, beidou_slots, body_by_name) | constellation::tests (prefilter_matches_brute_force_exactly — каждая карта и счётчик равны перебору с прямой проверкой угла возвышения; five_thousand_satellites_on_a_coarse_grid — 5 000 спутников, выводит время прогона и число сохранённых проверок пар; a_clock_per_constellation_needs_one_more_satellite; beidou_geo_and_igso_geometry; lunar_shell_runs_around_the_moon; presets_are_earth_only_and_errors_are_clear; preset_counts); tests/constellation_availability_published_spec_oracle.rs::presets_meet_the_published_dop_availability (только проверка на регрессии); tests/coverage_dop_full_oracle.rs::finding_is_pinned; tests/coverage_dop_gnss_lib_py_oracle.rs (регрессия) |
| Составная миссия через типы сценариев на одной общей временной шкале | Фазы типа campaign: каждая фаза запускает один или несколько сценариев существующих типов через run_toml, считывает их выходные данные в именованные каналы (ошибка времени часов и защитный интервал, средняя эффективная отношение несущей к плотности шума и нижний предел слежения, вертикальный уровень защиты и предел тревоги, ошибка положения, отслеживаемые спутники, флаги тревоги) по предустановкам для типов или явным путям результатов, помещает их в начало фазы и удерживает на общей сетке, с границами фаз и событиями; состояние передаётся дальше через carry (канал продолжается с конечного значения предыдущей фазы), handoff (номер предыдущей фазы записывается в следующий сценарий) и end_at (фаза заканчивается в момент, вычисленный прогоном, например во время обнаружения монитора спуфинга); хеш кампании и дайджест по каждому результату участника |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Тождества композиции относительно автономных прогонов тех же видов: однофазная кампания воспроизводит автономный результат бит в бит, перенесённое смещение равно собственному последнему отсчёту предыдущего прогона, а фаза, завершённая по end_at, имеет длину, равную ровно времени обнаружения прогона. Аддитивный перенос через границу фаз и удержание нулевого порядка — выбор моделирования, и каждая фаза настолько хороша, насколько хорош вид, который её выполнял; ни одна составная миссия не сверялась с измеренной | campaign (run_campaign_detailed, run_chain, presets, extract, to_svg) | tests/campaign_composition_reference.rs (a_one_phase_clock_campaign_reproduces_the_standalone_run_bit_for_bit, a_one_phase_integrity_campaign_reproduces_the_standalone_run_bit_for_bit, a_one_phase_jamming_campaign_reproduces_the_standalone_run_bit_for_bit — результат участника побайтно идентичен автономному прогону, а каждое выровненное значение равно автономному ряду; the_chained_mission_hands_state_on_and_ends_the_spoofing_phase_on_detection; a_handoff_writes_the_previous_phase_number_into_the_next_scenario; malformed_campaigns_fail_loudly) |
| Перебор параметров и ансамбли Монте-Карло с заданным начальным значением для любого типа сценария | Разделы sweep (от одного до трёх ключей через точку любого типа, на значениях осей универсального перебора, при желании с ансамблем в каждом узле) и monte_carlo типа campaign: реализация k запускается при base_seed + k; для каждой метрики сообщаются среднее, стандартное отклонение, перцентили 5/50/95 по методу ближайшего ранга и доверительный интервал среднего 95% по перцентильному бутстрэпу с фиксированным начальным значением (inertial::metric_stat); единицы метрик берутся из собственного блока units перебираемого типа |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутая форма случайного блуждания фазы при белом частотном шуме, дисперсия q_wf tau (NIST Technical Note 1337), для статистического аппарата, и побайтное равенство с автономными прогонами для задания начальных значений (seed). Проверяется арифметика ансамбля на собственной модели часов движка, а не внешний набор данных | campaign (run_sweep, run_monte_carlo, ensemble); sweep (GenericAxis, coords_of, set_dotted_value); inertial (metric_stat) | tests/campaign_composition_reference.rs (a_fixed_seed_ensemble_is_byte_stable_and_each_realisation_is_the_standalone_run; the_ensemble_mean_and_spread_match_the_white_fm_closed_form — 200 начальных значений (seed) для часов с белым частотным шумом на выбеге tau = 3010 с: истинное среднее 0 внутри сообщённого интервала, полуширина интервала в пределах 25 % от 1,96 sigma/sqrt(n), а выборочная дисперсия внутри двустороннего 99 % интервала хи-квадрат для sigma = sqrt(q_wf tau) = 16,459 нс; калибровочный ансамбль (CAP-10, предварительно зарегистрирован ea451cb5, docs/CALIBRATION-ENSEMBLES.md, tests/calibration_ensembles.rs): по 200 независимым ансамблям интервал накрывает истинное среднее в 192 случаях (внутри 99 % области Binomial(200, 0,95) [181, 197]), а проверка хи-квадрат проходит в 196, тогда как допуск по процентилям для одного начального значения (p05 и p95 в пределах 0,3 сигмы) проходит лишь в 183 из 200, NOT MET относительно предварительно зарегистрированных 190, — проверка, неустойчивая к выбору начального значения, зафиксирована, а не ослаблена; a_one_node_sweep_and_a_one_member_composition_read_the_standalone_number) |
| Несколько сценариев при общих условиях с объединённой сводкой | Раздел compose типа campaign: именованные общие значения (например, мощность и положение одной помехи) записываются в каждый элемент по ключам, к которым они привязаны, каждый элемент запускается, а по каждой метрике сообщаются наименьшее, наибольшее и среднее значения среди элементов с указанием элемента; единицы метрик должны совпадать у всех элементов |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Тождество композиции относительно автономного прогона. Арифметика общих условий — это учёт; физика — та, что у входящих видов, у каждого — в своей строке | campaign (run_compose) | tests/campaign_composition_reference.rs (a_one_node_sweep_and_a_one_member_composition_read_the_standalone_number — композиция из одного участника читает автономное число и дайджест результата) |
| Ограниченная оптимизация одной метрики по параметрам кампании | Раздел optimize типа campaign (CAP-32): от одного до трёх ключей сценария через точку, ограниченных [lo, hi] в линейной или логарифмической шкале, одна метрика, считываемая по пути результата, цель — minimize, maximize или target; метод — сетка (значения осей перебора) или детерминированный симплекс Нелдера — Мида в нормированных координатах с проекцией на коробку и стандартными коэффициентами; отсутствующая или не конечная метрика получает наихудшую оценку и остаётся в трассе; при runs > 1 метрика — среднее по общим начальным значениям; каждое вычисление — реальный прогон названного типа, перечисленный в trace и учтённый в дайджесте воспроизводимости |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Только внутренние проверки: точная замкнутая форма -20 log10(range) для уравнения линии, независимая полная сетка перебора по тому же виду и функция Розенброка. 1-D порог раунда 1 — NOT MET (предварительно зарегистрированный диапазон исключал решение 3 дБ; оптимизатор остановился на границе), это записано в docs/design/evidence/cap32-optimize/RESULTS.md и заново не оценивалось. Оптимум локален для диапазона и начальной точки; утверждения о глобальном оптимуме нет | campaign::optimize (run_optimize, nelder_mead) | tests/campaign_optimize_reference.rs (предварительно зарегистрировано fbe6c8b3 и, после промаха протокола в раунде 1, 441f31bc: p2_prime_interior_target_range_matches_the_closed_form — 1-D решение по цели в пределах 6.1e-15 от r* = r0 10^((m(r0) - 3)/20) за 96 вычислений; p3_prime_contour_target_grid_and_nelder_mead и p3_grid_matches_brute_force_and_nelder_mead_does_at_least_as_well — лучшее значение метода сетки совпадает бит в бит с независимым полным перебором 41 x 41 поверх run_toml, Нелдер–Мид не хуже за 177 и 161 вычислений; p4_nelder_mead_reaches_the_corner_maximum; p5_the_document_is_byte_stable_and_counts_agree; p2_round1_not_met_the_box_excludes_the_closed_form, закрепляющий записанный промах раунда 1); campaign::optimize::tests (nelder_mead_meets_the_preregistered_rosenbrock_bar: f* = 1.7e-20 за 234 вычисления; a_non_finite_score_is_never_the_best; the_grid_mapping_is_the_sweeps) |
| Проекты сигналов позиционирования, навигации и времени на низкой околоземной орбите: слежение за кодом, захват, совместимость с GNSS и компромисс по диапазону для любой системы | Тип leo-signal: параметризованные проекты сигналов (диапазон, ширина полосы передачи, распределение ITU; компоненты захвата, данных и пилотные с BPSK(n), BOC(m,n), MBOC или плоскими спектрами, доли мощности, поднесущие FDMA, длины кодов и скорости данных) из встроенных при компиляции публичных файлов предустановок (Xona Pulsar, Iridium STL, сигнал оказии Starlink, CentiSpace, общий проект C-диапазона и общие проекты UHF/L/S/C/широкого C, у каждого — URL источника, а неопубликованные значения помечены как «REPRESENTATIVE») либо записанные встроенно; для каждого сигнала — спектральная плотность мощности с ограниченной полосой, доли мощности в полосе, ширина полосы по Габору, джиттер кода относительно C/N0 и разноса и точность дальнометрии, пространство поиска при захвате, вероятность обнаружения по квадратичному закону и среднее время последовательного и кодово-параллельного захвата, коэффициент спектрального разделения с GPS L1 C/A, Galileo E1, GPS L5, Galileo E5a, E5b и AltBOC и от них с ухудшением C/N0, а также допуск по J/S для CW, широкополосной и согласованной помехи по цепочке SSC типа spectrum; компромисс по диапазону между ионосферной задержкой, потерями в свободном пространстве, точностью дальнометрии при равном C/N0 и равной EIRP и устойчивостью к помехам; и качественные проверки формы проекта относительно описанного измерения |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Проверенные по внешнему эталону замкнутые формы двух строк выше, тождество ложной тревоги квадратичного детектора P_d(snr = 0) = P_fa и среднее время захвата по Холмсу, а также сведение к собственной цепочке SSC вида спектра (тот же код Jammer::ssc). Сами проекты — входные данные: предустановки с пометкой «REPRESENTATIVE» или «WORKSHOP» не являются опубликованными спецификациями, спектры улучшенной модуляции Feher QPSK, манипуляции сдвигом кода и OFDM аппроксимированы, а проверки формы сравнивают формы, а не калиброванные уровни. | leo_signal (LeoSignalScenario, SignalDesign, Component, Shape, code_jitter_m, gabor_bandwidth_hz, detection_probability, threshold_for_pfa, mean_acquisition_time_s, ssc_leo_into_gnss, ssc_gnss_into_leo, jammer_tolerance, gnss_victim, preset, public_signal) | leo_signal::tests (every_public_preset_parses_and_cites_a_url; detector_reduces_to_pfa_and_grows_with_snr; detection_probability_with_several_looks_matches_the_noncentral_chi_square; mean_time_of_a_perfect_detector_is_half_the_cells; compatibility_ssc_magnitudes_match_independent_quadrature; to_spectrum_band_is_consistent_with_the_design; jammer_tolerance_orders_cw_matched_wideband; e5_centred_signal_hits_e5a_and_e5b_equally; defaults_run_on_the_generic_band_preset; inline_signal_and_bad_inputs); tests/leo_signal_reference.rs (каждый встроенный независимый от системы сценарий запускается без данных семинара, ионосферные отношения при смене диапазона равны (f_ref/f)^2, а разности потерь в свободном пространстве равны 20 log10(f/f_ref), джиттер при опорном C/N0 лежит между своей границей Габора и формой для неограниченной полосы, проверки формы E5 для сценария с параметрами семинара согласованы, когда этот файл присутствует, и ни один исходный файл этот файл не компилирует) |
| Многодиапазонный водопад спектра (UHF, L, S, C) с проектными сигналами и помехами по диапазонам | Тип spectrum, расширенный за пределы L-диапазона: диапазоны, заданные как предустановленный проект сигнала (рисуется со всеми компонентами, с ограничением полосы шириной полосы передачи, C/N0 и J/S относятся к отслеживаемой компоненте) или как произвольные несущая и модуляция; дополнительные панели водопада по любому диапазону частот на той же временной шкале и цветовой шкале; широкополосная (заградительная) помеха наряду с CW, узкополосной, чирпом и согласованным шумом; J/S и эффективный C/N0 по диапазонам по неизменной цепочке коэффициента спектрального разделения |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Сведение к существующей цепочке спектра и уравнению противодействия подавлению вида подавления (однокомпонентная полоса даёт те же числа, что и до расширения) и спектры сигналов проверенных по внешнему эталону строк. Мощности источников подавления, временная шкала, полосы входных каскадов и проектируемые сигналы — входные данные, а проектируемый сигнал усекается на границе своей полосы передачи (внеполосного излучения нет). | spectrum (Band::unit_psd, Band::tracked_power_dbw, BandDesign, BandCfg, PanelCfg, SpectrumScenario, Waveform, multi_band_svg); leo_signal (SignalDesign::to_spectrum_band) | tests/leo_signal_reference.rs (многополосная водопадная диаграмма строится с четырьмя панелями, источники подавления в диапазонах UHF, L5, S и C подавляют каждый только свою полосу, а прогон с обычной полосой расширением не меняется); leo_signal::tests::to_spectrum_band_is_consistent_with_the_design; spectrum::tests (agrees_with_the_jamming_kind_chain) |
| Пролёт LEO-PNT и его бюджет линии связи по диапазонам в сравнении со спутниками MEO GNSS в зоне видимости | Тип leo-pass: спутники из спроектированного пролёта, элементов, TLE через SGP4 или группировки Walker из constellation-design; по диапазонам и эпохам — углы визирования, дальность, скорость изменения дальности и ускорение дальности в замкнутой форме (проверяются при каждом прогоне по центральным разностям и сообщаются), потери в свободном пространстве, EIRP с изофлюксной, гауссовой или плоской диаграммой, патч-антенна, полусферическая или изотропная антенна пользователя, газовое ослабление ITU-R P.676-10, приложение 2, дождь и сцинтилляции P.618, потери при проникновении в здание P.2109, рассогласование поляризации, шумовая температура системы, C/N0, доплеровский сдвиг и скорость его изменения, а также задержка первого порядка по наклонному TEC по Klobuchar или вертикальному TEC, масштабированному долей Чепмена ниже спутника; безионосферные пары с шумом кода в пике пролёта; несущие Galileo или GPS по принимаемым мощностям из их документов интерфейса через тот же приёмник |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые формы и самосогласованность: тождества скорости изменения дальности и ускорения по дальности против численных производных, изопоточное усиление, компенсирующее рост дальности, предельные случаи потерь на поляризацию из учебников, качественное наблюдение LEO против ГНСС (колоколообразный пролёт длительностью в минуты с максимумом на несколько дБ выше плоских несущих ГНСС 44-51 дБ-Гц). EIRP и диаграммы — это опубликованные принимаемые мощности, пересчитанные в EIRP, или репрезентативный выбор, газовая составляющая — заменённый упрощённый метод P.676-10, и ничто не сравнивается с измеренным C/N0 для LEO | leo_pass (LeoPassScenario); leo_link::geometry (design_pass, link_geometry, numerical_check, SatMotion, UserMotion); leo_link::antenna; leo_link::itu (p676_gaseous_attenuation_db); leo_link (system_noise_temperature_k, cn0_dbhz) | leo_pass::tests (the_leo_pass_is_a_bell_above_flat_gnss; closed_form_doppler_agrees_with_the_numerical_derivative: менее 0,01 Гц и 0,01 Гц/с; indoor_uhf_suffers_less_building_loss_than_c_band; rain_attenuates_c_band_more_than_s_band; iono_delay_scales_as_one_over_f_squared_across_bands; a_fully_custom_band_needs_no_preset; a_walker_constellation_and_a_tle_satellite_both_run; defaults_run_with_no_preset_named_and_every_number_has_a_unit); leo_link::geometry::tests (kepler_velocity_is_the_derivative_of_the_position; a_designed_pass_reaches_the_requested_elevation; closed_form_range_rate_and_accel_match_central_differences_for_two_body_motion); leo_link::antenna::tests |
| Названные предустановки систем LEO-PNT с указанными источниками и независимый от системы движок | leo_link::presets: общая многодиапазонная (UHF, L, S, C), общая C-диапазонная, Xona Pulsar X1/X5, Iridium STL, Starlink как сигнал оказии только для Доплера, CentiSpace и необязательная предустановка Celeste IOD, у каждой источник помечен PUBLIC (с URL), REPRESENTATIVE или WORKSHOP, причём рабочая — в необязательном файле предустановки Celeste IOD, компилируемом только при наличии этого файла; каждый диапазон и каждая орбита переопределяются в сценарии, а сценарий может вообще не называть предустановку | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Переписывание цитируемых публичных значений и проверка согласованности: EIRP, заданный по опубликованной минимальной принимаемой мощности, предсказывает опубликованный максимум в пределах 0,5 дБ при плоской диаграмме. Это проверка разброса по дальности, а не проверка антенны какого-либо спутника по внешнему эталону; репрезентативные предустановки не делают утверждений о реальной системе | leo_link::presets (SystemPreset, BandPreset, all, by_id, gnss_meo); leo_pass (resolve_bands) | leo_link::presets::tests (every_preset_is_sourced_and_self_consistent; only_the_celeste_preset_is_sourced_from_the_workshop); leo_link::presets::xona_pulsar::tests (the_eirps_reproduce_the_published_minimum_power_at_ten_degrees; a_flat_pattern_lands_the_zenith_power_near_the_published_maximum: в пределах 0,5 дБ от -139.1 и -136.2 дБВт); leo_link::presets::iridium::tests; leo_pass::tests (a_fully_custom_band_needs_no_preset) |
| Позиционирование с низким энергопотреблением: время до первого определения и энергия на определение в зависимости от скважности | leo_link::energy и раздел [iot] типа leo-pass: когерентное накопление, ограниченное скоростью изменения доплеровского сдвига, некогерентные суммы при квадратичном законе до порога обнаружения, поиск по интервалам Доплера по огибающей орбиты для неподвижного пользователя (холодный) или по вспомогательному окну (горячий), параллельный или последовательный поиск кода, время навигационного сообщения при холодном старте, энергия на определение и срок службы батареи при разных интервалах определений, для каждого диапазона LEO и сигнала GNSS |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность заявленной модели проекта: каждая мощность, порог и выбор поиска — входные данные, а модель игнорирует неоднозначность границ битов, пропуск обнаружения и повторный захват. С измеренным приёмником не сравнивалось | leo_link::energy (fix_budget, duty_curve, IotReceiver, IotSignal); leo_pass (iot_section) | leo_link::energy::tests (stronger_signals_and_smaller_doppler_windows_fix_faster; the_doppler_rate_caps_the_coherent_time; battery_life_grows_with_the_fix_interval_toward_the_sleep_floor); leo_pass::tests (the_run_is_deterministic_and_bad_inputs_are_rejected) |
| Обновление навигационного сообщения LEO в середине пролёта с проверкой непрерывности при переключении | Анализ midpass-update типа leo-navmsg: самый высокий пролёт над пользователем в пределах интервала поиска, сообщения по глобальному расписанию с периодами использования, центрированными в окнах подгонки, и при каждом переключении — скачок положения в 3D, скачок часов, скачок псевдодальности пользователя, наибольший скачок по любой видимой линии визирования (замкнутая форма по надирному конусу), ошибка дальности до и после, а также PASS/FAIL относительно порога |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность (тождество скачка и граница конуса против полного перебора выборки). Порог — входные данные; опубликованного требования к непрерывности для LEO не закреплено | leo_navmsg (LeoNavmsgScenario::midpass, worst_case_jump, elevation, geodetic_to_ecef) | leo_navmsg::tests::a_mid_pass_update_is_continuous (скачок дальности при каждом переключении равен изменению ошибки дальности, а скорректированная аппроксимация на 300 с, обновляемая каждые 150 с, проходит порог 5 см); leo_navmsg::tests::a_keplerian_only_update_over_a_long_interval_is_flagged; leo_navmsg::tests::worst_case_jump_bounds_every_line_of_sight (замкнутая форма ограничивает плотную выборку конуса) |
| Документированное двоичное кодирование навигационного сообщения LEO с бюджетом ошибок квантования | leo_navmsg::codec: собственный кадр Kshana (преамбула, версия, модель, длина, полезная нагрузка, CRC-24Q) для четырёх моделей эфемерид, полином часов, SVID, возраст данных, диапазон, исправность, набор Klobuchar, коэффициенты NeQuick-G и параметры UTC, каждое поле с указанными шириной и шагом (field_table), квантование с отказом при выходе за диапазон и бюджет наибольшего изменения положения и часов, которое вызывает изменение каждого поля на полшага в течение окна действительности | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Тождества кругового пути и сам бюджет. Формат — собственный формат Kshana, построенный по опубликованным компонентам сообщения и набору полей Galileo ICD; это не битовая раскладка Celeste или какой-либо другой системы (ни одна не публична), поэтому внешней раскладки для сверки нет | leo_navmsg::codec (encode, decode, write_payload, read_payload, field_table, quantisation_budget) | leo_navmsg::codec::tests (signed_fields_round_trip_through_the_bit_packer; week8_resolves_near_the_reference); leo_navmsg::tests::every_model_round_trips_through_the_binary_frame (каждая модель в пределах 2 мм от точного сообщения после декодирования, повторное кодирование бит в бит, перевёрнутый бит отвергнут по CRC); leo_navmsg::tests::every_field_of_the_budget_stays_under_a_millimetre |
| Экспорт навигационных сообщений LEO в стиле RINEX-4 и в CSV | leo_navmsg::text: блок в стиле RINEX-4 (заголовок записи > EPH, строка спутника и эпохи с тремя членами часов, строки бортовой орбиты D19.12) с буквой системы L и типами записей KP16, KRAC, LU22 и APOL, помеченный в каждом заголовке как расширение Kshana, не являющееся частью RINEX 4,02, и таблица CSV со схемой столбцов по умолчанию и предустановленными схемами, у каждой — импортёр | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Круговые пути и календарная арифметика. RINEX 4,02 не определяет навигационных записей для LEO (IGS RINEX 4,02), поэтому раскладка — документированное расширение со ссылкой на arXiv 2401,17767 как на предшествующий уровень; внешнего считывателя для сверки не существует | leo_navmsg::text (rinex_export, rinex_import, csv_export, csv_import, calendar, from_calendar) | leo_navmsg::text::tests (calendar_round_trips_and_knows_the_gps_origin; d19_is_rinex_shaped); leo_navmsg::tests::rinex_and_csv_round_trips (каждая модель в пределах 0,1 мм после текстового блока, CSV точен) |
| ATOMIC: полином ECEF с нулевыми часами и синтетическое сравнение моделей LEO на пяти высотах | Вариант EcefPoly модели leo_navmsg::elements::EphemerisModel: полином ECEF по каждой оси без членов часов, релятивистский член из -2 r.v/c^2, оценённый относительно подстраиваемых часов. Также анализ сравнения моделей (liu_comparison по LIU2025_TABLE): он подгоняет 22-параметрическую модель на пяти высотах из статьи по 20-минутным дугам орбиты, проинтегрированной в Kshana, и выводит результат рядом с опубликованным SISRE | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — ATOMIC: факты о модели из InsideGNSS (полином 6-го порядка, срок действия около одной минуты, обновление каждые 30 с, часы с коррекцией, ошибка часов 24 см). Это описательные факты, для которых нет опубликованных чисел, с которыми можно сравнивать. Таблица для пяти высот выводит SISRE по Liu et al. 2025 (8,88, 6,21, 2,87, 2,11 и 0,75 см на 320, 475, 786, 966 и 1336 км на дуге в 20 минут) рядом с аппроксимацией Kshana на собственной проинтегрированной орбите (4,25, 2,87, 2,20, 1,25 и 0,51 см; отношения от 0,46 до 0,77), не закреплено, потому что в статье аппроксимировались реальные прецизионные орбиты и истинные значения различаются. Сама 22-параметрическая модель и аппроксимация проверены по реальным орбитам в строке Liu et al. 2025 22-parameter LEO ephemeris model and its fit on real precise orbits. Правка 0,30: значения таблицы изменились вместе с аппроксимацией в соглашении статьи (GRACE-A 5,40 -> 4,25 см, GRACE-C 4,12 -> 2,87, Sentinel-2A 2,95 -> 2,20, HY-2A 2,38 -> 1,25, Sentinel-6A 0,70 -> 0,51) | leo_navmsg::elements (EcefPoly, ephemeris_at); leo_navmsg (liu_comparison, LIU2025_TABLE) | leo_navmsg::tests::liu22_beats_the_16_parameter_set_over_a_20_minute_arc; leo_navmsg::tests::the_ecef_polynomial_fits_a_minute_to_millimetres; leo_navmsg::tests::every_preset_resolves_and_the_atomic_preset_selects_the_zero_clock_polynomial |
| Позиционирование по Доплеру LEO, по одному и по нескольким спутникам, с состояниями дрейфа часов и скорости | Пакетный метод Гаусса — Ньютона для позиционирования по скорости изменения дальности с аналитическими частными производными (d rho_dot / d r = -(I - u u^T)(v_s - v_u)/rho, d/dv = -u, d/d drift = 1), постоянная скорость пользователя как опция, псевдоизмерение высоты для наземного пользователя, демпфированные шаги; формальная ковариация в истинной точке; проекции вдоль трассы, поперёк трассы и по вертикали; точность за один пролёт в зависимости от поперечного смещения пользователя; момент наибольшего сближения. Режим doppler вида leo-pvt добавляет ошибку в зависимости от длины окна и режим сигналов оппортунности только по Доплеру (пресет starlink-sop) |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: восстановление без шума, кинематическое тождество rho_ddot = (|v|^2 - rho_dot^2 + d.a)/rho, продифференцированное численно, нулевой Доплер в точке наибольшего сближения, зеркальное решение одного пролёта и заданные случайные ошибки относительно формальной ковариации. Значение для Starlink из Kozhaya, Saroufim и Kassas (NAVIGATION 72(1), 2025: около 2 м за 20 с с тремя спутниками) — только сравнение: моделируемый приёмник с идеальными эфемеридами и всеми ошибками в сигме Доплера 30 Гц в несколько раз менее точен на том же окне, а приёмник и частота измерений из статьи не воспроизводятся | leo_fusion::doppler (solve, formal_covariance, single_pass_geometry, offset_site, closest_approach); leo_fusion::pvt_kind (run_doppler) | leo_fusion::doppler::tests (range_acceleration_obeys_the_kinematic_identity_and_vanishes_doppler_at_closest_approach; noise_free_multi_satellite_doppler_recovers_the_user: с точностью до 1 мм, а дрейф — до 1e-6 м/с; a_single_pass_has_a_mirror_solution_across_the_ground_track; the_cross_track_error_grows_as_the_pass_goes_overhead; velocity_states_are_recovered_for_a_moving_user); leo_fusion::pvt_kind::tests (doppler_positioning_improves_with_the_window_and_is_deterministic: взвешенное СКО невязок в [0,8, 1,2], а ошибка менее четырёх формальных сигм); tests/leo_fusion_scenarios.rs (leo_doppler_positioning_forms_a_fix_and_the_cross_track_error_explodes_overhead; starlink_doppler_only_mode_runs_without_ranging); tests/starlink_doppler_published_proxy.rs (предварительно зарегистрированная замена, сопоставленная с опубликованными процентилями набора данных 3 из «Unveiling Starlink for PNT», doi:10.33012/navi.685: при 3 спутниках (маска 47 град), без помощи по высоте и при 30 Гц 3-D ошибка p90 составляет 92,2 м за 20 с и 870 м за 8 с против опубликованных 2 м и 10 м, поэтому оба порога в два раза — NOT MET, в большую сторону, и зафиксированы как непройденные; docs/design/evidence/cap11-starlink-doppler-proxy/) |
| Совместное позиционирование по псевдодальностям GNSS и LEO с межсистемными смещениями и моделями ошибок для каждого сигнала | Решения методом взвешенных наименьших квадратов Гаусса — Ньютона по любой комбинации систем, одни часы приёмника на каждую систему (межсистемное смещение оценивается вместе с положением) или известное широковещательное смещение относительно опорной шкалы времени; сигмы отдельных измерений задаёт вызывающая сторона, по умолчанию это тепловой шум петли слежения за задержкой движка (navsignal::dll_code_jitter_chips) при C/N0 для данного угла места в сочетании с ошибкой дальности в сигнале в пространстве; невзвешенный DOP (GDOP, PDOP, HDOP, VDOP, TDOP) в местной геодезической системе, формальные сигмы «восток — север — вверх» и сигмы смещений; совместный режим leo-pvt сравнивает решения только по GNSS, только по LEO и объединённые и строит зависимость DOP от числа добавленных спутников LEO |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Выведенный вручную DOP для четырёх спутников (один спутник в зените и три на горизонте через 120 град, нормальная матрица которых обращается вручную), структурное тождество, что система со своими часами и одним спутником не добавляет геометрии, восстановление положения, часов и смещения без шума и заданные случайные ошибки относительно ковариации. Только внутренние проверки; с выходом приёмника не сравнивалось. Внешнее сравнение 0,30, результат (остаётся MODELLED): за многосистемные сутки IGS (ABMF 2018-05-13, GPS и Galileo C1C, широковещательные эфемериды, Klobuchar) межсистемное смещение согласуется с RTKLIB v2.4.2-p13 rnx2rtkp (медианная разность -0.11 нс после исправления широковещательной групповой задержки 0,30, -0.35 нс до него; порог 1 нс), но лишь 93,6 % из 280 эпох (93,2 % до исправления) находятся в пределах 3 м от координаты ITRF2020 при предварительно зарегистрированных 95 %. Сам RTKLIB на тех же данных достигает 88,2 %, поэтому порог выходит за возможности одночастотного определения по широковещательным данным на этой станции в этот день, а не отражает расхождение решателей; тест сравнения закоммичен как игнорируемый. Раунд 0,30 номер 2, более строгие входные данные при неизменном пороге 3 м / 95 % / 1 нс, результат (остаётся MODELLED): с безионосферной парой Galileo E1/E5a (предварительно зарегистрировано 6927e039) в пределах 3 м находятся 79,9 % эпох (RTKLIB 67,9 %); с прецизионными орбитами, часами, смещениями антенн спутников и кодовыми смещениями CODE MGEX (предварительно зарегистрировано 7d8c3597) — 94,2 % (RTKLIB 94,1 %), а межсистемное смещение отличается от RTKLIB на -1.03 нс, потому что одиночный режим RTKLIB игнорирует смещения антенн спутников (+0,04 нс, когда оба их опускают) | leo_fusion::joint_pvt (solve, dop, code_sigma_dll_m, SystemClock); leo_fusion::system (SystemCfg, System); leo_fusion::pvt_kind (run_joint) | leo_fusion::joint_pvt::tests (dop_matches_the_hand_derived_zenith_plus_three_horizon_case: HDOP = VDOP = sqrt(4/3), TDOP = sqrt(1/3), PDOP = sqrt(8/3), GDOP = sqrt(3) с точностью 1e-9; a_lone_satellite_with_its_own_clock_adds_nothing_and_a_known_offset_does; a_noise_free_fix_recovers_position_clock_and_inter_system_bias; seeded_fixes_agree_with_their_formal_covariance; dll_noise_is_the_textbook_figure_for_gps_l1_ca); leo_fusion::pvt_kind::tests (fusing_leo_never_worsens_the_median_pdop_and_the_isb_is_recovered); tests/leo_fusion_scenarios.rs (meo_leo_fusion_beats_gnss_alone_and_recovers_the_leo_bias); tests/joint_pvt_dual_freq_itrf_rtklib_oracle.rs::dual_frequency_finding_is_pinned; tests/joint_pvt_precise_itrf_rtklib_oracle.rs::precise_product_finding_is_pinned |
| Сходимость точного абсолютного позиционирования (PPP) только по GNSS и с усилением за счёт LEO | Расширенный фильтр Калмана для PPP с вещественными неоднозначностями по безионосферным коду и фазе: статические координаты, белый шум часов приёмника, одно межсистемное смещение на каждую дополнительную систему, зенитная влажная задержка как случайное блуждание, отображаемая через 1/sin(угол места), вещественная неоднозначность на каждую дугу спутника, добавляемая при восходе и удаляемая при заходе, и ошибка точных орбиты и часов, общая для кода и фазы спутника, обрабатываемая как одно коррелированное двухстрочное обновление в стабилизированной форме Джозефа; измерения моделируются по той же модели; время сходимости (ошибки ниже порогов до конца прогона), кривые ошибок и усреднённое по прогону NEES положения для варианта только с GNSS и для каждого случая с LEO, запускается видом leo-ppp |
ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся Modelled — Проверка NEES по хи-квадрат — внутренняя проверка согласованности (истина и фильтр используют одну модель). Тенденция сопоставлена с Li et al., LEO constellation-augmented multi-GNSS for rapid PPP convergence, J. Geod. 93:749-764 (2019), doi 10.1007/s00190-018-1195-2: мультиГНСС 9,6 мин сокращается до 7,0, 3,2, 2,1 и 1,3 мин при 60, 96, 192 и 288 спутниках LEO. Встроенный сценарий даёт 7,4, 4,8, 3,2, 2,7 и 2,3 мин на собственных репрезентативных оболочках 1000 км, 60 град, с собственным шумом и станциями; орбитальные группировки, шум и определение сходимости из статьи не воспроизводятся, поэтому это согласованность тенденции со статусом MODELLED (монотонное сокращение, наибольшая группировка — менее трети времени только по ГНСС), а не проверка по внешнему эталону | leo_fusion::ppp (run, PppScenario, LI_2019) | leo_fusion::ppp::tests (the_filter_is_consistent_over_monte_carlo_seeds: 24 начальных значений (seed), среднее NEES, усреднённое по прогонам, в [2,4, 3,6] и не менее 75 % эпох внутри двусторонней 95 % полосы хи-квадрат; измерено на 150 начальных значениях, среднее 2,84 только по ГНСС и 2,87 с LEO; leo_augmentation_shortens_convergence; same_seed_same_answer_and_every_number_has_a_unit); tests/leo_fusion_scenarios.rs (ppp_convergence_of_the_bundled_scenario_shortens_monotonically) |
| Передача времени в UTC с помощью LEO в зависимости от C/N0 и генератора приёмника | Измерения часов по каждому спутнику LEO в зоне видимости в известном положении, объединённые по обратной дисперсии из модели шума псевдодальности, отфильтрованные двухсостоянным (фаза, частота) фильтром Калмана, чей шум процесса — это белый шум частоты и шум случайного блуждания частоты класса генератора (slot_timing::ClockNoise, clock_state::ClockClass; дисперсия выбега holdover::coast_phase_variance), истинные часы с начальным значением (seed) из тех же уровней и выражение системного времени в UTC из IS-GPS-200, раздел 20.3.3.5.2.4, с неопределённостью широковещательного смещения, добавленной как смещение для каждого прогона; режим timing вида leo-pvt перебирает генераторы и смещения C/N0 |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность: опубликованное выражение для смещения, вычисленное вручную, нормированная ошибка по 40 начальным значениям (seed) и нижняя граница, задаваемая неопределённостью смещения. Значение NIST для приёмников синхронизации времени Iridium с миниатюрными атомными часами (менее 40 нс от UTC(NIST) за 40 суток) — только сравнение; встроенный сценарий Iridium даёт 10–11 нс СКО при номинальной мощности с репрезентативной ошибкой дальности 5 м. Фликкерный частотный шум и ионосферная задержка не моделируются | leo_fusion::timing (simulate, utc_offset_s, system_to_utc_s); leo_fusion::pvt_kind (run_timing) | leo_fusion::timing::tests (the_utc_offset_follows_the_is_gps_200_expression; continuous_tracking_approaches_the_measurement_floor_and_gaps_cost_time; the_filter_is_consistent_over_seeds; the_utc_offset_uncertainty_sets_a_floor); tests/leo_fusion_scenarios.rs (leo_timing_error_grows_as_the_c_n0_falls) |
| Именованные системы LEO PNT как необязательные пресеты данных, каждая со своим источником | Независимые от системы входные данные: каждая система — это оболочки Уокера, явные элементы или пресет GNSS, сигнал (несущая, скорость чипов, ширина полосы, принимаемая мощность или диапазон C/N0), SISRE, сигма Доплера и модель часов; пресеты заполняют только то, что сценарий оставил незаданным, по одному файлу на каждый, с источниками, помеченными как «PUBLIC» (с URL), «WORKSHOP» или «ПРОИЗВОДНЫЙ», а неопубликованные значения указаны как репрезентативные: Xona Pulsar X1/X5, Iridium STL, сигналы оппортунности Starlink, CentiSpace, репрезентативная система в диапазоне C, модель эфемерид ATOMIC с нулевыми часами и один пресет, полученный на семинаре, в необязательном файле пресетов Celeste IOD, исключаемом удалением этого файла и его сценариев | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Переписывание цитируемых публичных значений, проверенное на структуру (у каждого публичного источника есть URL, структуры Уокера делятся нацело, C/N0 из принимаемой мощности по kT при 290 К), а не по внешнему оракулу. Репрезентативные значения названы в каждой предустановке и носят иллюстративный характер | leo_fusion::presets (all, by_id, cn0_range_dbhz, noise_density_dbw_hz); leo_fusion::system (SystemCfg::build) | leo_fusion::presets::tests (every_preset_has_a_source_and_every_public_source_a_url; only_one_preset_uses_workshop_material; noise_density_at_290_k_is_minus_204_dbw_per_hz); tests/workshop_preset_isolation.rs (only_the_listed_files_name_the_workshop_preset; workshop_numbers_live_only_in_the_preset_file_and_its_scenarios: сканирование исходного текста в src, scenarios и tests); leo_fusion::system::tests (a_preset_fills_what_the_scenario_leaves_out; a_system_needs_no_preset; pseudorange_sigma_falls_with_elevation_and_never_below_the_sisre) |
| Одна система LEO-PNT от начала до конца: проектирование сигнала, бюджет линии на пролёт, навигационное сообщение и объединённое позиционирование, выход каждого этапа передаётся следующему | Вид leo-pnt-chain: проект leo-signal (публичный пресет или встроенный) задаёт центр, ширину полосы, скорость чипов и распределение EIRP полосы leo-pass; пролёт даёт C/N0 отслеживаемой компоненты и ограниченный по полосе джиттер кода на каждую эпоху; линия C/N0 по методу наименьших квадратов от sin(угол места), SISRE сообщения leo-navmsg (подогнанный на орбите спутника пролёта плюс указанный член определения орбиты в сумме квадратов) и несущая и скорость чипов проекта передаются каждой системе LEO в совместном решении leo-pvt и, при необходимости, в случаи LEO в leo-ppp; каждая передача выводится со своим значением и единицей |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Самосогласованность передач: каждое переданное значение равно собственному выходу вышестоящего этапа, а изменение входа вышестоящего этапа сдвигает каждый нижестоящий показатель, который от него зависит. Этапы сохраняют собственные метки; цепочка не добавляет ни физики, ни внешнего оракула | leo_pnt_chain (LeoPntChainScenario); leo_pass (BandCfg::signal, design_tracking); leo_navmsg (LeoNavmsgScenario::broadcast_sisre); leo_fusion::pvt_kind; leo_fusion::ppp | leo_pnt_chain::tests (a_sine_line_fit_recovers_its_line); tests/leo_pnt_chain.rs (every_upstream_change_moves_the_downstream_figures: более сильный EIRP, более длинный интервал аппроксимации и больший член определения орбиты — каждое сдвигает переданное значение и объединённое определение; the_handed_on_values_are_the_stage_outputs; a_band_design_splits_the_eirp_and_reports_the_design_jitter; the_pass_export_reproduces_the_engine_range) |
| Обнаружение спуфинга по Доплеру LEO и согласованности геометрии пролёта | Раздел [spoofer] вида leo-pass: спуфер подделывает, согласованно по дальности и скорости изменения дальности, сигналы, наблюдаемые в заявленном положении, которое скачком смещается и/или отодвигается от истинного после момента начала (для каждой полосы LEO и для сигнала GNSS на MEO); приёмник предсказывает каждую скорость изменения дальности по широковещательной орбите и независимому априорному положению и скорости и проверяет измеренные скорости изменения дальности статистикой хи-квадрат обобщённого метода наименьших квадратов на окне эпох (дрейф часов — мешающий параметр или задан априори) по каналам GNSS, каналам LEO и всем каналам, с тепловым шумом петли частотной автоподстройки из C/N0 (Kaplan & Hegarty 2006, раздел 5.6.2); вероятность обнаружения по нецентральному закону хи-квадрат при заданной вероятности ложной тревоги, обнаружение объявляется при заданной вероятности пропуска обнаружения |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутые формы и тождества, а не внешнее измерение: градиент скорости изменения дальности против центральной разности, статистика в информационной форме против плотной ковариационной формы, чистый дрейф часов, дающий ноль, толчок, объясняемый априорным распределением, дающий не более |dx|^2/sigma_p^2, статистика, квадратичная по скачку. Ни одно значение обнаружения не сравнивается с измеренной атакой; спуфер идеализирован (нет признаков по мощности, углу прихода или пику корреляции) | leo_link::spoof (range_rate_position_gradient, line_of_sight, fll_frequency_jitter_hz, doppler_consistency_window, doppler_consistency); leo_pass (SpooferCfg, spoof_section) | leo_link::spoof::tests (the_gradient_is_the_derivative_of_the_range_rate; fll_jitter_matches_the_formula_by_hand; a_common_mode_residual_is_a_clock_drift_and_is_not_detected; with_no_prior_and_equal_noise_the_statistic_is_the_scatter_about_the_mean; a_push_the_prior_explains_is_not_detected; a_velocity_push_is_hidden_by_a_loose_velocity_prior_only; the_information_form_equals_the_covariance_form); tests/leo_resilience_verticals.rs (the_monitors_are_silent_before_the_onset; the_doppler_statistic_is_quadratic_in_the_jump; leo_range_rates_see_a_jump_that_gnss_range_rates_do_not) |
| Обнаружение спуфинга по межполосной согласованности многополосного сигнала LEO | Для каждого спутника LEO и каждой пары дальномерных полос раздел [spoofer] формирует безгеометрическую комбинацию псевдодальностей, убирает ионосферную модель приёмника и проверяет её шаг от эпохи к эпохе относительно кодового шума двух полос и заданной допустимой немоделируемой скорости изменения ионосферы (двусторонний гауссов тест, точная вероятность обнаружения); спуфер, подделывающий одни полосы и не подделывающий другие, или все полосы без ионосферы виден в момент начала; тот, кто подделывает все полосы и имитирует ионосферу, не виден, что и указано в результате |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Тождества: ступенька начала у безионосферного спуфера равна смоделированной разности ионосферных задержек пары, а порог — это двусторонний нормальный квантиль, умноженный на стандартное отклонение ступеньки, плюс граница скорости. Ионосферная модель приёмника — это модель движка, поэтому подлинная невязка по построению равна нулю в среднем; внешнего оракула нет | leo_link::spoof (cross_band_step); leo_pass (spoof_section: pairs, cross_band) | leo_link::spoof::tests (the_cross_band_threshold_and_power); tests/leo_resilience_verticals.rs (a_ground_spoofer_leaves_the_ionospheric_step_and_an_ionosphere_aware_one_does_not; a_one_band_spoofer_is_seen_by_the_cross_band_monitor_at_the_onset; the_monitors_are_silent_before_the_onset) |
| Зондирование ионосферы: наклонное TEC по двухполосной задержке пролёта LEO | Для каждой пары полос спутника leo-pass отчёт даёт наклонное полное электронное содержание, которое безгеометрическая кодовая комбинация восстанавливает в пике пролёта, (P2 - P1) f1^2 f2^2 / (40,3 (f1^2 - f2^2)), и его 1-сигму по тепловому кодовому шуму двух полос, так что любую многополосную конструкцию LEO-PNT можно оценить как ионосферный зонд |
InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Тождество дисперсии первого порядка, точное по построению относительно собственной задержки первого порядка движка (масштабирование которой по 1/f^2 имеет статус VALIDATED по IS-GPS-200 в своей строке); точность определяется только тепловым шумом кода, без многолучевости и межчастотных смещений. Раунд 0,30 номер 2, измерено (предварительно зарегистрировано 5e795f93), результат (остаётся MODELLED): глобальная ионосферная карта CODE CODG1330.18I против кода C1C/C2W станции ABMF со смещениями CODE даёт 33 из 36 средних по дугам в пределах 3 TECU (худшее +6,84 TECU на вечерней дуге; СКО по эпохам 3,95 TECU) при пороге «каждая дуга»; не проверено по внешнему эталону | leo_pass (IonoFreePair::geometry_free_stec_tecu, geometry_free_stec_sigma_tecu); leo_link::iono::geometry_free_stec_tecu | tests/leo_resilience_verticals.rs (the_geometry_free_tec_is_the_pass_slant_tec: равно наклонному TEC пролёта в максимуме с точностью 1e-9, а его сигма равна корню из суммы квадратов шума кода, делённому на 40,3 (1/f1^2 - 1/f2^2)); tests/geometry_free_tec_gim_oracle.rs::geometry_free_finding_is_pinned |
| Морская оценка доверия: агрегирование свидетельств мониторов в оценку от 0 до 100 и её три диапазона | Каждый монитор сводит свои свидетельства к отношению статистики к порогу; оценка равна 100 минус сумма по мониторам произведений веса на ограниченную линейную рампу отношения (0 до 0,5, 1 при 1,5), ограниченная диапазоном от 0 до 100 и округлённая до 0,1, с границами диапазонов 90 и 55; каждая эпоха перечисляет мониторы, снизившие оценку, и их баллы. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Реализация против спецификации, а НЕ внешний оракул: повторная реализация на Python «с чистого листа» (scripts/maritime_score_cleanroom.py), написанная читателем, которому дали только docs/RECEIVER-TRUST.md и docs/MARITIME-TRUST.md, а не исходный код на Rust, согласуется с score_from_ratios на 600 векторах отношений (оценка, полоса, баллы и порядок вычетов, разность 0) после того, как документация была дополнена там, где первый читатель нашёл её молчащей или противоречивой (порядок при равенстве, округление, отношение для монитора «прошёл или не прошёл», два примера, числа которых не совпадали с формулой). Это показывает, что документации достаточно и что код делает то, что в ней сказано. ЧТО НЕ ПРОВЕРЯЕТСЯ, и почему строка остаётся MODELLED: само правило (веса, нарастание, границы полос, удержание доказательств) принадлежит этому проекту, предварительно зарегистрировано, но не имеет внешнего источника, и ничто здесь не показывает, что оценка 80 или 40 означает то, что хотел бы видеть штурман при реальных помехах; значений такого рода не приводится. Пороги мониторов также принадлежат этому проекту (Строка A проверяет лишь их арифметику). | receiver_trust (score, monitors, live) | tests/maritime_trust_reference.rs::t5_score_matches_the_clean_room_reading_of_the_documented_rule; receiver_trust::score::tests (монотонность по каждой статистике, добавление монитора никогда не повышает оценку, исправные статистики остаются на 100) |
| Область источника помех: допустимая область излучателя по сообщениям о положении воздушных и морских судов | Допустимая область, где может находиться источник ухудшения навигационных сообщений, по сообщениям о положении ADS-B (NIC/NACp) или AIS: радиопрямая видимость на радиусе Земли 4/3 по высоте сообщения и диапазону высот антенны излучателя, ограниченная эффективная дальность для неизвестной мощности, затронутые единицы смещают апостериорное распределение к своей зоне досягаемости, а незатронутые единицы с прямой видимостью смещают его в обратную сторону; единицы объединяются в сеансы во времени и пространстве. Результат — области наибольшей плотности на заданных уровнях доверия, апостериорный центроид с эллипсом моментов, начало, конец и длительность сеанса, затронутая площадь и число различных воздушных судов выше минимума для публикации, суточный профиль и часы в сутки. Без учёта рельефа; один источник на сеанс; достоверность зависит от модели. Необязательное объединение с определением TDOA по geolocation. | InternalConsistency | проверено по собственному тождеству в замкнутой или аналитической форме — это выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего пока нет. Только синтетические круговые преобразования прямой и обратной задач от генератора, использующего ту же модель, что и оценщик, поэтому они проверяют код и калибровку заявленных уровней в рамках этой модели и ничего не говорят о реальных излучателях. Внешняя проверка по опубликованным площадкам передатчиков Jammertest 2025 была заранее зарегистрирована (docs/emitter-region/PREREGISTRATION.md, утверждена владельцем до любого оцениваемого прогона) и выполнена один раз (docs/emitter-region/RESULTS.md): ADS-B NOT ASSESSABLE (2 запланированных сеанса, меньше зарегистрированного минимума 4) и AIS NOT ASSESSABLE (опубликованных сеансов нет), поэтому ни один порог не проверялся, и строка остаётся MODELLED | interference_map::emitter (estimate, sessions, build_units, profile, GaussianFix::from_tdoa), interference_map::emitter_out (locate), kshana interference-map locate |
модульные тесты interference_map::emitter (круговое преобразование проекции, фигура горизонта, синтетические круговые преобразования прямой и обратной задач: известный излучатель лежит внутри заявленной области примерно с заявленной частотой, граничные случаи, кластеризация сеансов, профиль, приватность и формулировки); случаи locate в tests/interference_map_cli.rs |
| События SIEM телеметрии доверия: Log Event Extended Format (LEEF) поверх syslog | События смены диапазона (или по каждой эпохе) в виде полезной нагрузки Log Event Extended Format 2,0 в оболочке RFC 5424 поверх UDP или TCP, с документированным отображением полей. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — ЧТО ПРОВЕРЯЕТСЯ: собственные тесты этого крейта на точное совпадение строк для документированного отображения полей LEEF и поля оболочки RFC 5424; поддерживаемого синтаксического анализатора LEEF с открытым исходным кодом не существует (поиск по индексу пакетов Python его не нашёл), поэтому формат проверяется по собственной спецификации, прочитанной тем же автором, а не по внешнему оракулу. ЧТО НЕ ПРОВЕРЯЕТСЯ: принимаются ли полезные нагрузки LEEF анализатором какого-либо поставщика или SIEM; правила экранирования сверх документированных; поведение реального сборщика syslog. | telemetry (syslog: leef, rfc5424, SyslogSink; time) | telemetry::syslog::tests (точные строки LEEF, экранирование, серьёзность, оболочка RFC 5424, тайм-ауты доставки и повторное подключение); tests/telemetry_cli.rs |
| Пороги помех для доверия к приёмнику, откалиброванные на наборе данных JammerTest 2024 | receiver_trust::calibration::run_dataset: предварительно зарегистрированная калибровка мониторов падения C/N0, AGC и индикатора подавления (jamming) на публичном наборе данных JammerTest 2024 (Zenodo 15911589, GPL-3.0-or-later, загружается во время выполнения и в проект не включается): для каждой папки временная шкала с шагом 1 с из mon_rf.csv и rinex.csv, мониторы запускаются один раз, каждая эпоха после калибровки помечается как чистая или с подавлением по attack_log папки (со сдвигом из CEST в UTC, защитный интервал 60 с), каждый порог перебирается по фиксированной сетке, выбирается наименьший порог, при котором объединённая вероятность ложной тревоги на чистых данных не превышает 0,01, и подсчёты на отложенных данных по схеме «исключи одну папку»; перекрёстная проверка читателя UBX. Выбор поставляется только как необязательный профиль [monitors] profile = "jammertest-2024-calibrated" (cn0_drop_db 1,5, agc_k_sigma 3,5, jam_ind_threshold 29); правило по умолчанию и каждый выход без него не изменены | ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся модельной — Опубликованные журналы событий набора данных (окна attack_log) как истина о событиях, в рамках предварительной регистрации xval/jammertest-trust/PREREGISTRATION.md (закоммичена отдельно, 0fa012b, до запуска средств проверки). Первый и единственный прогон (xval/jammertest-trust/RESULTS.md): оценены 14 из 24 папок (7 с подавлением), 3 502 чистых эпох и 9 560 эпох с подавлением. Вероятность ложной тревоги на отложенной чистой выборке: cn0_drop_db 0,0231 (81/3502) против порога 0,02, FAIL; agc_k_sigma 0,0003, пройден; jam_ind_threshold 0,0094, пройден; объединение трёх: ложные тревоги 0,0328, обнаружение 0,807 против 0,05 и 0,50, пройден. По зарегистрированному правилу строка имеет статус MODELLED (один порог не пройден). Узко: один тип приёмника (u-blox ZED-F9P), одно событие, запланированные одноминутные слоты как истина (обнаружение — нижняя оценка; чистое означает вне записанных окон); калибровка выполнена по журналам CSV, а считыватель UBX даёт больше ложных тревог в двух папках. Полосы оценки доверия на море не откалиброваны | receiver_trust::calibration (run_dataset); receiver_trust::monitors (MonitorConfig::profile, JAMMERTEST_2024_CALIBRATED); realdata::jammertest; examples/jammertest_trust_calibration.rs | tests/receiver_trust_jammertest_calibration.rs::the_recorded_calibration_reproduces (игнорируется, зависит от данных через KSHANA_JAMMERTEST_DIR: записанный отбор, счётчики на отложенной выборке, вердикты порогов и вердикт); receiver_trust::calibration::tests (метки времени, сопоставление окон и сдвиг часового пояса, метки, охранные интервалы, исключение, отбор); receiver_trust::monitors::tests::threshold_profile_is_opt_in |
| Оценка Jammertest: журнал приёмника, оцениваемый по каждому запланированному испытанию (задержка обнаружения, пропущенные тревоги, ложные тревоги, время восстановления) относительно опубликованного плана испытаний | jammertest::{plan, score, dataset} (kshana jammertest import|score): каталог испытаний NPRA и план передач (MIT, загружается с зафиксированным SHA-256, в проект не включается) читаются как запланированная истина с сохранением идентификаторов каталога; прогон receiver-trust оценивается по каждому испытанию (первая тревога минус запланированное начало, обнаружено/с опозданием/пропущено относительно допуска, время до первого интервала без тревог, тревоги вне каждого слота и его защитного интервала), с подписанным пакетом доказательств, содержащим итоговую карту оценок. Расписание — это запланированные слоты, а не записанное время работы в эфире | ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся Modelled — Числа слотов плана по областям испытаний (76, 77 и 45 слотов, из которых 61, 63 и 32 передают) были независимо подсчитаны скриптом по тому же JSON; окна attack_log набора данных 2024 как истина о событиях, в рамках xval/jammertest-score/PREREGISTRATION.md (закоммичена отдельно, c2e6d3b, до запуска оценщика). Первый и единственный прогон (xval/jammertest-score/RESULTS.md): зарегистрированное правило минимума данных НЕ ВЫПОЛНЕНО (4 оцениваемых окна подавления из 4 из 12 папок UBX против минимума в 10 окон из 2 папок: 5 папок отброшено базовым правилом, 3 журнала UBX содержат только неделю GPS и время в ней), поэтому пороги B1–B4 нельзя оценить; ничто не ослаблялось и не перезапускалось. v2 (xval/jammertest-score/PREREGISTRATION-v2.md, закоммичена отдельно, только обработка данных: журналы только со временем GPS размещаются по дате, 12 папок только с CSV, сессия подвижной платформы для подвижных роверов; те же пороги и правило минимума данных): оставлено 14 из 24 папок, но лишь 7 оцениваемых окон подавления, правило минимума данных снова не выполнено, ни один порог не оценим (RESULTS-v2.md). Запланированная истина: запланированный слот не является записью излучения в эфире, промах может быть испытанием, которое не проводилось, задержка отсчитывается от запланированного начала, а чистое означает вне запланированных слотов. Обнаружение мониторами в области измерений ничего не говорит о спуфере малой мощности. Один тип приёмника (u-blox ZED-F9P). Набор данных NMEA SimulaMet за 2025 год не используется (лицензия не указана, доступ по подписке) | jammertest::plan (parse_catalog, parse_plan, import, import_attack_log, events_toml); jammertest::score (score_run); jammertest::dataset (run_dataset); jammertest (score_log, score_pack); examples/jammertest_score_2024.rs | tests/jammertest_plan_roundtrip.rs (зависит от данных через KSHANA_JAMMERTEST_PLAN_DIR: числа слотов по областям испытаний плана 2025 года, идентификаторы каталога, круговой путь TOML); tests/jammertest_score.rs (синтетический журнал с известным падением: обнаружено, пропущено, не поддаётся оценке, прогон с ложной тревогой, подписанный пакет с картой оценок); jammertest::plan::tests; tests/jammertest_score_2024.rs (зависит от данных через KSHANA_JAMMERTEST_DIR: записанный прогон) |
| Сопоставление compliance с общедоступными стандартами | compliance (kshana compliance-report): отображение выходных данных Kshana на пункты публичных стандартов только по номеру, заполняемое из заданных прогонов; результат засчитывается для возможности только тогда, когда он несёт свидетельства, названные в отображении, пустой набор ничего не подтверждает, а формулировка — «подкрепляет доказательствами»; отчёт не является выводом о том, что какой-либо стандарт выполнен, и не является оценкой или одобрением со стороны кого бы то ни было. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Ссылки сверены с извлечённым скриптом индексом заголовков цитируемых публичных документов, прочитанных 2026-10-10 (tests/compliance_references.rs). ЧТО ПРОВЕРЯЕТСЯ: 49 цитируемых ссылок на пункты, разделы, абзацы или заголовки существуют в цитируемом документе, а 7 цитируемых URL открылись в записанную дату (2 — вторым путём); негативные контрольные проверки не проходят. ЧТО НЕ ПРОВЕРЯЕТСЯ: верность какого-либо пересказа, сопоставления или пробела; пункты EN 16803 (платный, только текст каталога); более поздние редакции; индекс не является независимой реализацией. | compliance | tests/compliance_report.rs::mapping_is_well_formed; tests/compliance_report.rs::wording_rule_holds_in_mapping_report_and_docs; tests/compliance_report.rs::empty_set_evidences_nothing; tests/compliance_report.rs::statuses_follow_the_runs_present; tests/compliance_references.rs |
| Морские интеграции: плагин Signal K, поток шлюза и панель оценки OpenCPN, референсная сборка | Оценка доверия, диапазон, причины, состояние шлюза и положение, сообщаемое приёмником, публикуются в navigation.gnss.kshana на сервере Signal K с уведомлениями warn, alarm и normal (integrations/signalk); потоком NMEA через шлюз, в котором определение положения помечается недействительным, пока доверие обрушено, и с одним предложением PKSHT за цикл, передаваемым в OpenCPN по TCP самим шлюзом или небольшим ретранслятором, и родной панелью оценки OpenCPN, читающей предложение PKSHT (integrations/opencpn); а также юнитами systemd и контейнером, запускающими шлюз (deploy/reference-build). Там, где они показывают вывод, они несут консультативное заявление: Программное обеспечение консультативного характера, не навигационное оборудование с утверждённым типом (IEC 61108, IEC 61162): ответственность за судовождение остаётся на операторе. | IntegrationRun | проверено на реальном ведущем приложении; интеграционный прогон не является независимым оракулом — ЧТО ПРОВЕРЯЕТСЯ, сформулировано узко: что эти интеграции работают с реальным программным обеспечением, для которого они написаны. ДОКАЗАТЕЛЬСТВА закоммичены в integrations/signalk/evidence/README.md (с его файлами JSON) и integrations/opencpn/evidence/README.md (с его снимками экрана и журналами), в каждом случае со скриптом, который их воспроизводит. (1) Signal K: подключаемый модуль загружен в закреплённый пакет npm signalk-server 2.33.0 в закрытом сетевом пространстве имён только с петлевым интерфейсом, с синтетическими данными на входе. Собственные интерфейсы REST и WebSocket сервера показали опубликованные пути, метаданные оценки и уведомление, которое проходило состояния «отсутствует», warn, alarm, normal (после удержания) и снова warn, когда данные прекратились. При реальном запуске kshana модулем на NMEA, принятом самим сервером, уведомление проходило warn, затем alarm, и опубликованное положение было передано; собственный navigation.position сервера записывался его провайдером NMEA, но никогда не модулем. Повторно проверено по актуальной схеме JSON 1,2. (2) OpenCPN: модуль собран против заголовка API модулей OpenCPN и wxWidgets 3.2.4, загружен в пакет Ubuntu 24,04 программы OpenCPN 5.8.4 под виртуальным дисплеем; OpenCPN загрузил его, выполнил его инициализацию и передал ему предложения PKSHT из потока после шлюза, и панель стала красной в полосе «не заслуживает доверия». В одном чистом прогоне собственное положение судна в OpenCPN перестало обновляться, а индикатор определения погас, когда шлюз пометил определение как недействительное. Второй прогон, питаемый непосредственно слушателем TCP шлюза, показал доставку модулю, но не чистое сравнение «до и после». (3) Тесты ретранслятора воспроизводят записанный фрагмент потока после шлюза через реальный сокет TCP и проверяют, что получает потребитель (байты без изменений, верные контрольные суммы в каждом предложении, включая переписанные, согласованные GGA и RMC, один PKSHT на цикл с полем шлюза там, где определение недействительно), а сквозной скрипт проверяет, что потребитель слушателя шлюза получает ровно те байты, которые тот же шлюз записывает в стандартный вывод. (4) Анализаторы PKSHT (JavaScript и C++) прогоняются по предложениям, записанным из выхода kshana, и отвергают неверную контрольную сумму, версию или оценку вне диапазона от 0 до 100. (5) Модули systemd проверены командой systemd-analyze verify (systemd 255, исполняемые файлы заменены заглушками) и проверками на оболочку в ExecStart, политику перезапуска и ключи песочницы; обработка аргументов точкой входа контейнера проверена с исполняемым файлом-заглушкой. ЧТО НЕ ПРОВЕРЯЕТСЯ: внешнего оракула для значений, которые показывают эти интеграции, нет. Сами значения доверия — это строки выше, а интеграционный прогон показывает лишь, что коммуникации их передают; поэтому эта строка имеет статус MODELLED, а не VALIDATED (docs/VALIDATION.md). Ни реальное судно, ни реальный приёмник, ни длительный прогон, ни другая версия любого из ведущих приложений, ни другая операционная система или рабочий стол не использовались; все данные — синтетический текст, и ничто здесь не является измерением. Звуковая и визуальная обработка уведомления реальным клиентом Signal K, кнопка панели инструментов OpenCPN, настройки и устаревшее состояние, а также упаковка для менеджера модулей OpenCPN не проверялись. Ключи песочницы systemd проверены только на синтаксис, не запускались под действующим systemd, а для сборки образа контейнера и его проверки работоспособности закоммиченных доказательств здесь нет. Значения обнаружения или ложных тревог не заявляются. Программное обеспечение консультативного характера, не навигационное оборудование с утверждённым типом (IEC 61108, IEC 61162): ответственность за судовождение остаётся на операторе. | receiver_trust (live: the gate, its TCP listener, PKSHT); вне крейта: integrations/signalk (JavaScript), integrations/opencpn (ретранслятор на JavaScript, нативный модуль на C++), deploy/reference-build (модули systemd, контейнер) | tests/receiver_trust_live_cli.rs (шлюз и его слушатель TCP, сторона Rust); integrations/signalk/test/adapter.test.js, integrations/signalk/test/model.test.js и integrations/signalk/test/plugin.test.js (24 тестов Node на записанном синтетическом выходе); integrations/opencpn/test/relay.test.mjs (5 тестов Node); integrations/opencpn/test/e2e-live.mjs (реальный исполняемый файл — потребителю TCP, запускается вручную и в CI); integrations/opencpn/plugin/test/pksht_test.cpp и integrations/opencpn/plugin/test/trust_state_test.cpp (проверки на C++ анализатора PKSHT и состояния панели); deploy/reference-build/check-units.sh и deploy/reference-build/test-entrypoint.sh |
| Слежение за BOC(1 1): масштабирование DLL и разрешение неоднозначности «bump-jump» (по выбору) | Поле boc структуры iq::track::LoopConfig (по выбору, по умолчанию None): три дискриминатора DLL, масштабированные так, чтобы показывать ошибку кода в чипах с единичным наклоном на главном пике синусного BOC(1 1), и монитор bump-jump на очень ранних и очень поздних коррелятора на одном полупериоде поднесущей (0,5 чипа), который перескакивает NCO кода к главному пику, когда реверсивный счётчик достигает N (8 по умолчанию). Без этой опции каждый выход остаётся без изменений. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внутренняя согласованность относительно внесённой истины и замкнутых форм, при порогах, предварительно зарегистрированных в 6b68f6cc (docs/design/evidence/boc-bump-jump/). Информационный сигнал BeiDou B1C (PRN 19, 5 МВыб/с), сформированный iq::scene: при выключенной опции старт с бокового пика остаётся ложно захваченным на предсказанных ±(0,5 + d/4) элемента кода (измерено ±0,549); при включённой — один скачок к главному пику на 0,08 с и СКО в позднем окне 0,0008 элемента кода при 45 дБ-Гц и 0,0048 элемента кода при 35 дБ-Гц; скачков с главного пика нет при 35, 40 и 45 дБ-Гц за 4 с; наклон масштабированного EMLP от 0,94 до 0,99 на дискретизированном сигнале (немасштабированного — от 3,6 до 3,8). Один детектор bump-jump, на тройках коррелятора с точной ковариацией шума BOC(1 1), не дал ложных скачков за 100 000 обновлений при 25–45 дБ-Гц и обнаружил 1000 из 1000 стартов с бокового пика при 35 дБ-Гц. NOT MET (результат F1): предварительно зарегистрированная сетка модульных тестов для масштабирования включает смещения вне линейного диапазона дискриминаторов, где масштабированные показания промахиваются мимо смещения до 48 %. ЧТО НЕ ПРОВЕРЯЕТСЯ: полевые IQ, входные каскады с ограниченной полосой, составные копии MBOC/QMBOC и любой внешний приёмник. | iq::track::boc (BocKind, BocTracking, BumpJump, boc11_dll_scale); iq::track::channel (the bump-jump taps and Channel::bump_jumps) | tests/iq_boc_bump_jump.rs (b1_b2_b3_side_peak_and_false_jumps_on_the_iq_chain, b4_scaling_on_the_sampled_signal, b5_false_jump_rate_and_detection_at_correlator_level); модульные тесты iq::track::boc (b4_unit_grid_misses_are_the_recorded_ones: предварительно зарегистрированный порог модульного теста B4 сохранён как написан, его записанные промахи зафиксированы как результат F1) |
| Ионосферный сцинтилляционный канал IQ (модель Cornell) относительно измеренной сцинтилляции GPS L1 на частоте 50 Гц | iq::channel::scint, сцинтилляционная модель Cornell (интенсивность по Райсу, спектр Баттерворта второго порядка, фаза arg z), управляемая измеренными S4 окна и временем декорреляции интенсивности, сравнивается по тому, что она порождает сверх этих двух входных величин; realdata::scint50 читает измеренный журнал, убирает тренд и запускает сравнение. | ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся смоделированной — Измеренные данные при порогах, предварительно зарегистрированных в b6ccb499 (xval/scint-malindi/): запись Zenodo 16941224 (INGV, Малинди, 18 марта 2023 года, GPS PRN 26, интенсивность и фаза несущей с частотой 50 Гц, CC BY 4,0, SHA-256 проверена). 22 подходящих окна по 60 с (N1 выполнен). MET: распределение интенсивности (Колмогоров–Смирнов D 0,0415, порог 0,05) и фазовая сцинтилляция, связанная с S4 (медианное отношение измеренного к модельному sigma-phi 0,779, порог от 2/3 до 3/2). NOT MET (результат F1): доля глубоких замираний в модели в 2,38 раза больше измеренной (порог от 0,5 до 2), а среднее замирание — в 3,51 раза длиннее (порог от 2/3 до 3/2). Результат F2: зарегистрированная обработка читает свёрнутую фазу модели, что выявила самопроверка; B3, повторённый задним числом с развёрнутой фазой, даёт 0,804. ЧТО НЕ ПРОВЕРЯЕТСЯ: другие ночи, станции, широты или сигналы; шум приёмника в модели. Строка остаётся MODELLED. | iq::channel::scint (Scintillation, ScintParams); realdata::scint50 (parse_log, segments, measured_windows, model_windows, compare) | tests/iq_scint_malindi_measured.rs (cornell_model_verdict_is_the_recorded_one, зарегистрированный вердикт зафиксирован как записанный, результат F1; finding_model_fades_are_deeper_and_longer_than_measured; posthoc_b3_with_the_model_phase_unwrapped, только сообщается; зависит от данных, загружается scripts/fetch_scint_malindi.sh); модульные тесты realdata::scint50 (model_data_through_the_harness_shows_the_wrapped_phase_finding, результат F2) |
| Вариант CFAR с усреднением по ячейкам в захвате IQ | iq::acq::ca_cfar и ca_cfar_cells (по выбору): ячейка сетки захвата сравнивается со средним опорных ячеек её строки Доплера (защитные и шаговые задержки, с заворачиванием по периоду) с коэффициентом alpha, заданным из замкнутой формы вероятности ложной тревоги CA-CFAR для M некогерентных блоков (ca_cfar_pfa, ca_cfar_alpha). Детектор по мощности отсчёта остаётся по умолчанию, и каждый существующий выход не изменяется. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Замкнутая форма при порогах, предварительно зарегистрированных в 3724aefa (docs/design/evidence/acq-cfar/). Вероятность ложной тревоги CA-CFAR для ячеек Gamma(M) против Монте-Карло точной модели: 18 из 18 случаев в пределах 3 биномиальных сигм. На каждой ячейке поисков iq::acq (GPS L1 C/A, 2,5 МВыб/с, по 210 000 ячеек) при расчётных 1 %: 0,977 % и 0,969 % на гауссовом шуме и 1,006 % и 0,999 % на 2-битном квантованном шуме (M = 1 и 4; порог плюс-минус 20 %); решения не меняются при масштабировании входа. NOT MET (результат F1): на безшумном 2-битном сигнале обнаружение и его ячейка верны, но 1,28 % внепиковых ячеек строки пика (порог 1 %) превышают порог — на детерминированных боковых лепестках корреляции кода. ЧТО НЕ ПРОВЕРЯЕТСЯ: другие варианты CFAR, двумерные окна, входные каскады с ограниченной полосой, полевые данные. | iq::acq (CfarConfig, ca_cfar, ca_cfar_cells, ca_cfar_pfa, ca_cfar_alpha) | tests/iq_acq_cfar.rs (c1_closed_form_matches_monte_carlo_of_the_exact_model, c2_false_alarm_rate_on_gaussian_noise, c3_false_alarm_rate_on_two_bit_noise, c5_decisions_do_not_depend_on_the_input_scale; c4_noise_free_two_bit_signal_verdict_is_the_recorded_one, зарегистрированный вердикт зафиксирован как записанный, результат F1, закреплён finding_noise_free_sidelobes_exceed_the_cfar_rate); модульный тест iq::acq ca_cfar_closed_form_reduces_to_the_textbook_case_and_inverts |
| Модель спектра: диапазоны GLONASS, BeiDou и Galileo E6 (по выбору) | spectrum::default_band определяет, только по имени (MORE_BAND_NAMES), GLONASS L1OF и L2OF на каждом канале FDMA K = -7 … 6 (BPSK, 0,511 Мчип/с), BeiDou B1I (BPSK(2)), B1C (MBOC(6,1,1/11)), B2a и B3I (BPSK(10)) и Galileo E6 (BPSK(5)), с несущими и минимальными принимаемыми мощностями из их документов управления интерфейсом; набор диапазонов по умолчанию и каждый существующий выход не изменяются. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Опубликованные документы управления интерфейсом и замкнутые формы при порогах, предварительно зарегистрированных в 5806f28b (docs/design/evidence/spectrum-bands/): GLONASS ICD, редакция 5,1, BDS-SIS-ICD B1I 3,0, B1C 1,0, B2a 1,0 и B3I 1,0, Galileo OS SIS ICD, выпуск 2,1. MET: каждая несущая, скорость элементов кода и принимаемая мощность в переписанном виде (28 каналов GLONASS), первые нули BPSK на скорости элементов кода, составной B1C, равный MBOC(6,1,1/11), как даёт таблица мощностей его ICD, тождество пути C/N0 и побайтно идентичные сценарии спектра. NOT MET: порог единичной площади, недостижимый в написанном виде (результат F1; площади равны замкнутой доле в полосе), и согласие по ячейкам спектра у сигналов B1I и B1C слоя IQ с огибающей модели (1,26 и 1,56 дБ против 0,5 дБ, результат F2; GLONASS 0,07 дБ), потому что коды Голда и Вейля имеют неравномерные линейчатые спектры; при усреднении по полосе главные лепестки согласуются в пределах 0,25 дБ. ЧТО НЕ ПРОВЕРЯЕТСЯ: записанные IQ, другие сигналы, внутрисистемные помехи. | spectrum (default_band, MORE_BAND_NAMES, GLONASS_CHANNELS) | tests/spectrum_more_bands.rs (s1_new_bands_carry_their_icd_values, s2_nulls_and_b1c_parts, s4_cn0_paths_agree_on_the_new_bands; s2_closed_form_densities_verdict_is_the_recorded_one, результат F1, закреплён finding_s2_areas_are_the_closed_form_in_band_fraction; s3_iq_layer_verdict_is_the_recorded_one, результат F2, закреплён finding_s3_per_bin_errors_follow_the_code_line_spectrum; posthoc_s3_band_averaged_shape, только сообщается) |
| Третичные коды LunaNet AFS и слой сообщений (SB1 BCH, CRC-24Q, перемежитель) относительно LSIS-AFS V1.0 | iq::signals::lunanet::afs_q_tertiary_bits, afs_q_tiered; iq::lunanet_afs: синхронизирующая последовательность, кодер SB1 BCH(51 8) и декодер на 256 гипотез, CRC-24Q, блочный перемежитель 60 x 98, проверка потока символов (kshana lunanet-afs-check) и генератор тестового потока с подкадрами-заглушками. Кодирование LDPC со скоростью 1/2 для подкадров от 2 до 4 не реализовано (его матрицы находятся в отдельном приложении). | ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся Modelled — LSIS-AFS V1.0 (как выше): последовательность Лежандра длины 1499 (таблица E-1, идентична) и первые и последние 24 элемента кода третичного кода (таблицы E-2–E-6: 419 из 420 столбцов идентичны; документ печатает одни и те же последние 24 элемента, A14850, для PRN 147 и PRN 151, а генератор воспроизводит элементы PRN 151, так что запись для PRN 147, скорее всего, опечатка; порог 420 из 420 — NOT MET, и промах закреплён); рабочий пример рис. 8 для кода SB1 (один пример: 0x045 кодируется в 0x229F61DBB84A0); CRC-24Q против контрольного значения каталога 0xCDE703 для ASCII 123456789; собственная арифметика кадров документа. Пороги предварительно зарегистрированы в b3ba5d5. Один зафиксированный промах и один рабочий пример для слоя сообщений, поэтому строка остаётся MODELLED. ЧТО НЕ ПРОВЕРЯЕТСЯ: LDPC и слова CRC внутри подкадров 2–4, содержимое сообщений и любой записанный поток | iq::lunanet_afs; iq::signals::lunanet (afs_q_tertiary_bits, afs_q_overlay_bits, afs_q_tiered); surface (lunanet_afs_check_spec, lunanet_afs_check_symbols, lunanet_afs_generate) | tests/lunanet_afs_codes.rs (b4_legendre_1499_matches_and_tertiary_codes_match_except_one_printed_column, the_spec_check_reports_every_bar_and_pins_the_b4_miss); iq::lunanet_afs::tests (sb1_round_trips_every_field_and_corrects_flipped_symbols, generated_streams_pass_and_damage_is_found); tests/lunanet_afs_cli.rs |
| Пакеты стандартов: сценарии, оцениваемые по порогам, заданным до прогона | standards_pack (kshana standards-pack): тестовые профили рамочной программы DHS Resilient PNT для уровней от 1 до 4, уровни точности и оценка целостности по IMO MSC.1/Circ.1575 и пакеты ICAO Doc 9849, приложение F: «контролировать, оценивать и смягчать»: каждый тест запускает встроенный вид сценария и сравнивает поля результата с порогами, заданными в пакете, а тесты, которым нужен журнал приёмника, перечисляются как NEEDS INPUT и не оцениваются. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего нет для результатов сценариев: каждый тест пакета запускает сценарий вида MODELLED. Пороги — заявленный профиль автора пакета (в рамке DHS значений не указано; пределы точности IMO — таблица C-1 из MSC.1/Circ.1575, прочитанная полностью; пакет ICAO следует презентации ICAO собственного Плана смягчения RFI, потому что Doc 9849 — платная публикация и не читался), закоммиченные до любого оцениваемого прогона в файлах PREREGISTRATION.md в стиле xval в standards/. Порог MET говорит, что смоделированный сценарий выполнил заявленный порог, и ничего не говорит об изделии | standards_pack; compliance (standards-pack facts in compliance-report) | tests/standards_packs.rs (pinned_outcomes: статус каждого теста, включая промахи L4-T1 и четыре теста точности IMO); standards_pack::tests |
| Лабораторный пакет доказательств полного цикла (сценарий, условия испытания, журнал приёмника, оценка) | evidence::roundtrip (kshana evidence round-trip) и экспорт журнала приёмника kshana.test-conditions/1 из kshana bench-export: подписанный пакет, фиксирующий хеш сценария, хеш заданных условий, хеш журнала и оценку относительно заданных событий и отвергающий условия, не совпадающие с событиями оценки, или журнал, хеш которого не совпадает с заданным. Никакой сигнал не записывается, не воспроизводится и не планируется. | InternalConsistency | проверено по собственному замкнутому / аналитическому тождеству — выявляет ошибки переписывания и коэффициентов, но не является внешним оракулом — Внешнего нет: пакет связывает хеши и оценку журнала приёмника со статусом MODELLED, проверенную на синтетических данных (экспортированный NMEA встроенного сценария, принятый за журнал приёмника). Лабораторный прогон не заявляется | evidence::roundtrip, evidence::assemble, interop::testbench (write_conditions_json), iq::campaign::conditions | tests/round_trip_pack.rs (pack_links_scenario_conditions_log_and_score_and_verifies, conditions_that_disagree_with_the_scoring_events_are_refused, a_stated_log_hash_that_does_not_match_is_refused, published_schema_names_every_field_the_engine_writes) |
| Движок слежения IQ относительно GNSS-SDR 0.0.19 на независимых записях | Полный движок слежения слоя IQ (iq::track через kshana iq track: передача от захвата, корреляторы, NCO, ФАПЧ Костаса второго порядка 15 Гц, ССЗ DLL с огибающей EML первого порядка 2 Гц с поддержкой по несущей, индикатор захвата и оценщики C/N0) на GPS L1 C/A при 30—45 дБ-Гц. | ExternalDataset | частное утверждение проверено внешне, но возможность в целом составлена из модельных частей, поэтому возможность остаётся Modelled — GNSS-SDR 0.0.19 (GPL-3.0-or-later, пакет Ubuntu 24,04, запускается как отдельная программа; закоммичены только производные числа), отслеживающий те же записи numpy (независимые от движка), оба измерены относительно аналитической истины. Пороги предварительно зарегистрированы в 48edd4a5, исправлены до любой тестовой записи в 1e4288c4 (контур FLL на 10 Гц только при втягивании у обоих приёмников после того, как зарегистрированная калибровка не прошла из-за неверной передачи управления в GNSS-SDR, результат F3). MET при 30, 35, 40 и 45 дБ-Гц: джиттер несущей в пределах 4,3 %, джиттер кода в пределах 4,6 %, а среднее и разброс Доплера — в пределах значений GNSS-SDR. NOT MET: C/N0 по NWPR у движка на 2,3–7,1 дБ ниже SNV у GNSS-SDR (результат F4, известный предел NWPR; его M2M4 в пределах 0,06 дБ от истины); индикаторы захвата фазы различаются по определению (F5); при 30 дБ-Гц GNSS-SDR дважды сорвал слежение, а движок нет (F6). Собственная передача управления в GNSS-SDR захватывала неверную частоту в 3 из 30 калибровочных прогонов. ЧТО НЕ ПРОВЕРЯЕТСЯ: другие сигналы, снятие бит данных, повторный захват, полевые записи. Строка остаётся MODELLED. | iq::track (Channel, LoopCore, design); iq::cli::track | tests/iq_track_gnss_sdr_oracle.rs (calibration_passes_for_both_receivers, registered_bars_give_the_recorded_verdict, recorded_numbers_are_pinned), на числах, полученных tests/fixtures/iq_track_gnss_sdr_oracle/make_fixture.py |
| Коэффициенты усиления антенны CRPA в виде jamming относительно независимого пересчёта на numpy | Необязательный раздел [crpa] вида jamming: диаграмма для каждого канала на каждый спутник (подавление с нулём в направлении источника помех или MVDR по sigma^2 I + P_j a_j a_j^H), масштабирующая шум каждой линии на ||w||^2 и помеху на |w^H a_j|^2 перед существующим уравнением C/N0 при защите от подавления. | ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого блока, но не являющейся внешним авторитетом — Независимый пересчёт на numpy (xval/crpa-jamming/oracle.py, без общего кода: векторы наведения numpy, numpy.linalg.solve и inv) каждого звена геометрии демонстрации подавления с 4-элементной квадратной решёткой при обоих взвешиваниях. Пороги предварительно зарегистрированы в 08d83b4d. MET: A1 (все 150 результатов сценариев побайтно идентичны без раздела, после исправления: первая сборка добавляла единицы crpa в таблицу единиц каждого прогона подавления), A2 (один элемент равен отсутствию решётки с точностью 1e-12 дБ), A3 по шумовому усилению решётки и эффективному C/N0 (912 взвешиваний линий в пределах 1e-9 дБ, худшее 2.1e-14 дБ) и по нулю в направлении источника подавления при нулевом наведении (ниже -200 дБ с обеих сторон), A4 (MVDR в пределах 0,1 дБ от нулевого наведения при JNR 80 дБ). NOT MET: A3 по усилению MVDR в направлении источника подавления, 194 из 456 линий выше 1e-9 дБ на переносимой математике 0,36 (202 на математике хоста; docs/revisions/STUDIO15-batch4-rebaseline.md) (худшее 1.7e-6 дБ) на остатках от -100 до -188 дБ, где сокращение разрядов float64 ограничивает обе реализации (inv и solve из numpy расходятся друг с другом на 169 линиях, худшее 7.9e-7 дБ); эффективное C/N0, которое от них зависит, не затронуто. ЧТО НЕ ПРОВЕРЯЕТСЯ: взаимная связь, рассогласование элементов, широкополосная обработка, несколько источников подавления, любое антенное оборудование. Пересчёт тех же уравнений, а не внешний оракул; строка остаётся MODELLED. | jamming (CrpaCfg, crpa_weights, run_jamming); crpa (null_steering_weights, mvdr_weights, covariance) | tests/jamming_crpa.rs (a1_crpa_units_only_with_the_section, a2_one_element_is_no_array, a3_verdict_is_the_recorded_one, a4_mvdr_tends_to_the_null_at_high_jnr), against xval/crpa-jamming/expected.json from xval/crpa-jamming/oracle.py |
| Экранирование источника помех рельефом в виде jamming против независимого пересчёта на numpy на реальном тайле SRTM | Необязательная секция [terrain] вида jamming: профиль рельефа по дуге большого круга между источником помех и приёмником на тайле SRTM .hgt с k-фактором выпуклости Земли, доминирующая острая кромка (наибольшее значение ню Френеля–Кирхгофа) и потеря на одиночной острой кромке по ITU-R P.526-15, раздел 4,1, вычитаемая из мощности источника помех на входе приёмника. | ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Независимый пересчёт на numpy (xval/jamming-terrain/oracle.py, без общего кода: собственное чтение .hgt, билинейная интерполяция, круговое преобразование WGS 84, профиль, выпуклость, nu и J(nu)) десяти положений источника подавления вокруг приёмника в бассейне Бэдуотер на зафиксированном реальном тайле SRTM tests/fixtures/terrain/N36W117_sub6.hgt. Пороги и положения предварительно зарегистрированы в 92cd2bfd. Все MET: аддитивность (все 150 результатов сценариев побайтно идентичны без этого раздела); точки профиля и препятствие каждого положения совпадают, а nu и потери укладываются в 1.6e-10 (порог 1e-9); потери не растут при подъёме источника подавления от 2 до 4902 м; потери снижают каждое J/S ровно на свою величину и ни на что больше; J(nu) укладывается в 1e-12 дБ от значения оракула. Результаты: положения за горами Блэк и Фьюнерал теряют от 44 до 48 дБ; два положения на дне долины теряют 8 и 15 дБ только из-за кривизны Земли при высотах антенн 2 м — это предельный случай модели с единственной кромкой-ножом. ЧТО НЕ ПРОВЕРЯЕТСЯ: любое измеренное распространение, дифракция на нескольких кромках, отражение от земли, местные предметы, собственная ошибка цифровой модели рельефа. Это пересчёт той же модели, а не внешний оракул; строка остаётся MODELLED. | jamming_terrain (TerrainCfg, jammer_terrain, knife_edge_loss_db); jamming (run_jamming_sky) | tests/jamming_terrain.rs (b1_terrain_units_only_with_the_section, b2_every_placement_matches_the_independent_numpy_recomputation, b3_the_loss_never_rises_as_the_jammer_rises, b4_the_loss_reaches_every_js_and_nothing_else, b5_the_knife_edge_function_matches_the_reference_expression), against xval/jamming-terrain/expected.json from xval/jamming-terrain/oracle.py |
| Гистерезис захвата и квантователь во входном тракте в виде jamming против независимых пересчётов | Необязательные секции вида jamming: [acquisition] (спутник захватывается при значении не ниже порога захвата после задержки повторного захвата и удерживается, пока значение не ниже порога сопровождения) и [front_end] (показание АРУ 10 log10(1 + J/N) и потеря гауссовского квантователя АЦП, вычитаемые из каждого канала связи, с пометкой, что для негауссовских источников помех они недействительны). | ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — Независимый пересчёт на Python каждого флага захвата (xval/jamming-acq-agc/hysteresis.py) по эффективному C/N0 движка для каждой эпохи, независимый расчёт методом Монте-Карло на numpy потерь квантователя (xval/jamming-acq-agc/quantiser_mc.py, собственный поиск оптимального шага, 2^22 выборок) и контур АРУ уровня IQ. Пороги предварительно зарегистрированы в 70c72fcc, с дополнительной серией прогонов с начальным значением 37793290. MET: аддитивность (все 150 результатов сценариев побайтно идентичны без этих разделов); каждый флаг совпадает на дополнительных прогонах (1824 линии связи, у 732 из них проявляется гистерезис); монотонность по порогу; потери квантователя в пределах 0,0007 дБ от результата Монте-Карло при 1–4 битах (порог 0,02 дБ); показание АРУ в пределах 0,012 дБ от контура АРУ (порог 0,05 дБ). NOT MET: зарегистрированные прогоны с гистерезисом (jamming-demo при 10–30 дБВт) оказались неинформативными, так как все линии связи были потеряны, и их проверки H2 и H4 выполнены лишь формально. Результат: при непрерывной помехе-несущей 1-битный АЦП теряет примерно на 5 дБ больше, чем гауссовская величина, которую применяет движок, и помечается как недействительный. ЧТО НЕ ПРОВЕРЯЕТСЯ: сам поиск захвата, динамика АРУ во времени, любое оборудование приёмника. Это пересчёты той же модели, а не внешний оракул; строка остаётся MODELLED. | jamming_rx (AcquisitionCfg, AcqState, FrontEndCfg, front_end); jamming (run_jamming_sky); iq::frontend::quant (optimum_step_sigma) | tests/jamming_acq_agc.rs (h1_g1_units_only_with_their_section, h2_no_hysteresis_is_no_hysteresis, h2s_no_hysteresis_is_no_hysteresis_on_the_supplementary_runs, h3_flags_match_the_independent_recomputation, h3s_flags_match_the_independent_recomputation_on_the_supplementary_runs, h4_monotone_in_the_acquisition_threshold, h4s_monotone_in_the_acquisition_threshold_on_the_supplementary_runs, g2_quantiser_loss_matches_the_independent_monte_carlo, g3_agc_reading_matches_the_iq_layer_agc_loop), against xval/jamming-acq-agc/expected_hysteresis.json, expected_hysteresis_s1.json and expected_quantiser.json |
| Ограниченный по времени втягивающий режим ФАП-ЧС ниже порога передачи управления от FLL к PLL в проекте по умолчанию (по выбору) | Необязательный параметр iq::track carrier.fll_pull_in_max_s (поле fll_pull_in_max_s структуры iq::track::LoopConfig): при fll_assist = pull-in FLL передаёт управление PLL через фиксированное время втягивания независимо от PLI, с соответствующим интервалом возврата, пока PLI впервые не достигнет fll_off_pli. | InternalConsistency | проверено по собственному замкнутому аналитическому тождеству — выявляет ошибки переноса и коэффициентов, но не является внешним оракулом — Внутренняя согласованность относительно внесённой истины: синтетический источник GPS L1 C/A без данных (PRN 13, 1500 Гц, 4,1 МГц, 8 с, десять начальных значений шума), у которого фаза несущей известна, при порогах, предварительно зарегистрированных в 58789af0 (docs/design/evidence/fll-handover-floor/). MET: контроль (умолчание без ограничения не передаёт управление в 9 из 10 прогонов при 33 дБ-Гц); аддитивность (хеш по умолчанию и существующие тесты слежения не изменились); втягивание при передаче управления с отстройкой 100 Гц при 45 дБ-Гц. NOT MET: при ограничении 1,0 с передача управления и удержание в каждом прогоне (16 из 20 при 33 дБ-Гц, 8 из 20 при 31 дБ-Гц; остальные чередуют принудительные передачи управления и возврат ФАПЧ по частоте) и фазовое дрожание в пределах 25 % от одной ФАПЧ (10,8 против 6,1 градуса при 33 дБ-Гц). ЧТО НЕ ПРОВЕРЯЕТСЯ: биты данных, другие сигналы и частоты дискретизации, полевые записи. Значение по умолчанию не изменено; строка остаётся MODELLED. | iq::track (LoopConfig, FllGate, design); iq::track::channel (the FLL gate) | tests/iq_fll_handover_floor.rs (registered_bars_give_the_recorded_verdict, d1_the_key_is_part_of_the_hash_only_when_set, d4_the_capped_design_pulls_in_a_100_hz_handoff_error), on tests/fixtures/fll_handover_floor/results.csv |
| Читатель файлов решений RTKLIB .pos для receiver-trust | Читает файл решений RTKLIB (время в календарном виде или как неделя GPS/TOW, положение в широте и долготе или в ECEF, число используемых спутников) в временну́ю шкалу receiver-trust (receiver_trust::machines::rtklib). | InternalConsistency | проверено по собственному замкнутому аналитическому тождеству — выявляет ошибки переноса и коэффициентов, но не является внешним оракулом — Внешних проверок нет: ни один файл, созданный RTKLIB, не читался, а раскладка столбцов взята из руководства RTKLIB. Проверено только на самостоятельно написанных файлах; преобразование ECEF использует frames::ecef_to_geodetic, у которого есть собственные строки | receiver_trust::machines::rtklib (read_rtklib_pos); receiver_trust::LogFormat::RtklibPos | receiver_trust::machines::rtklib::tests (lat/lon epochs, week/TOW and ECEF, dms refused, hostile input); tests/receiver_trust_machines.rs::rtklib_pos_runs_as_a_receiver_log; integrations/gnss_lib_py/test_bridge.py |
| Журналы NovAtel OEM7 в ASCII и двоичном виде (BESTPOS, RANGE, RXSTATUS) для receiver-trust | Читает BESTPOS (положение), RANGE (C/No по сигналам) и RXSTATUS (флаг подавления приёмника как собственное сообщение приёмника об эпохе) из журналов OEM7 в ASCII и двоичном виде, с проверкой CRC, только для чтения (receiver_trust::machines::novatel). | InternalConsistency | проверено по собственному замкнутому аналитическому тождеству — выявляет ошибки переноса и коэффициентов, но не является внешним оракулом — Внешних проверок как порога нет. Раскладка полей и CRC следуют публичной документации OEM7 (docs.novatel.com); процедура CRC один раз проверена по значению CRC, которое документация приводит для собственного примера BESTPOSA (процитировано, не воспроизведено дословно). Образцы написаны самостоятельно; ни один журнал реального приёмника не читался | receiver_trust::machines::novatel (read_novatel, novatel_crc32); receiver_trust::LogFormat::Novatel | receiver_trust::machines::novatel::tests (pinned CRC, ASCII and binary records, bad CRC skipped, hostile input); tests/receiver_trust_machines.rs::novatel_jammer_flag_reaches_the_receiver_self_report |
| Читатель отношения несущая/шум RTCM 3 MSM4 и MSM7 для receiver-trust | Читает C/N0 каждой сигнальной ячейки сообщений RTCM 3 MSM4 и MSM7 (GPS, ГЛОНАСС, Galileo, SBAS, QZSS, BeiDou, NavIC) из потока кадров, с проверкой CRC-24Q (receiver_trust::machines::rtcm3). Структуры взяты из таблиц pyrtcm под лицензией BSD, а не из текста стандарта RTCM. | ReferenceImpl | проверено по отдельной реализации в этой же кодовой базе — независимой от проверяемого модуля, но не являющейся внешним авторитетным источником — ReferenceImpl в разовой проверке, а не в тесте из набора: декодер pyrtcm 1.2.0 читает те же самостоятельно написанные кадры и получает тот же C/N0 и то же время эпохи. Он использует тот же источник таблиц, что и этот модуль чтения, поэтому проверяет обработку битов, а не раскладку. Ни одна запись реального приёмника или базовой станции не читалась | receiver_trust::machines::rtcm3 (read_rtcm3, crc24q); receiver_trust::LogFormat::Rtcm3 | receiver_trust::machines::rtcm3::tests (CRC-24Q catalogue check value, MSM4/MSM7 C/N0 and epoch merging, GLONASS time and SBAS id mapping, bad CRC and other messages) |
| Адаптер монитора GNSS-SDR для receiver-trust | Читает сообщения GNSS-SDR Monitor (Gnss_Synchro) и PVT-monitor, переданные в виде строк JSON с именами полей proto, в C/N0 по каналам, решение, число используемых спутников, HDOP и обзор неба (receiver_trust::machines::gnss_sdr; integrations/gnss-sdr/relay.py). | InternalConsistency | проверено по собственному замкнутому аналитическому тождеству — выявляет ошибки переноса и коэффициентов, но не является внешним оракулом — Внешних проверок нет: названия полей взяты из документации GNSS-SDR; ни модуль чтения, ни relay.py не запускались с работающим GNSS-SDR или реальной записью | receiver_trust::machines::gnss_sdr (read_gnss_sdr_monitor); receiver_trust::LogFormat::GnssSdr | receiver_trust::machines::gnss_sdr::tests; integrations/gnss-sdr/example.jsonl |
| Приём журналов IMU, ввод курса по гироскопу и подбор по Аллану параметров гибридных датчиков | Читает CSV IMU (документированные столбцы или формат EuRoC); интегрирует скорость рыскания в курс, который читает монитор курса и пути ([log.imu]); и подбирает параметры шума акселерометра и гироскопа для гибридных сценариев и сценариев объединения по неподвижному журналу методом перекрывающейся девиации Аллана (imu-fit). | InternalConsistency | проверено по собственному замкнутому аналитическому тождеству — выявляет ошибки переноса и коэффициентов, но не является внешним оракулом — Внешних проверок нет: аппроксимация проверена на синтетических журналах белого шума с известными коэффициентами, курс — на журналах с постоянной угловой скоростью рыскания. Ни один журнал реального IMU не аппроксимировался, а q_aa не аппроксимируется | receiver_trust::machines::imu, imu_fit; surface::imu_fit; scenario [log.imu] | receiver_trust::machines::imu::tests; receiver_trust::machines::imu_fit::tests (known white-noise coefficients recovered within 10 %, refusals, TOML parses as AccelCfg); tests/receiver_trust_machines.rs (heading agreement and disagreement, inline carrier, imu_fit) |
| Обнаружение Home Assistant по MQTT и экспортёр состояния для телеметрии доверия | Документ состояния в JSON и сообщения обнаружения Home Assistant по MQTT для потока доверия: выводятся как текст на каждой поверхности и публикуются по MQTT 3.1.1 QoS 0 из командной строки (telemetry::mqtt; trust-telemetry --mqtt-tcp, --print-mqtt, format mqtt). | InternalConsistency | проверено по собственному замкнутому аналитическому тождеству — выявляет ошибки переноса и коэффициентов, но не является внешним оракулом — Внешних проверок нет: пакеты читал прослушиватель с петлёй на себя, написанный для теста, а не настоящий брокер, и Home Assistant не запускался | telemetry::mqtt (discovery, state_json, connect_packet, publish_packet, MqttSink); surface::TelemetryFormat::Mqtt | telemetry::mqtt::tests (packet bytes, loopback broker, dead broker counted); tests/receiver_trust_machines.rs::trust_telemetry_mqtt_text_has_discovery_then_state |
| Пакет ROS 2 для receiver-trust и мост gnss_lib_py | Мост без ROS, который записывает сообщения о решении и спутниках как NMEA и оценивает их через привязку Python (integrations/ros2/kshana_trust), и мост от NavData gnss_lib_py к receiver-trust через формат rtklib-pos (integrations/gnss_lib_py). | InternalConsistency | проверено по собственному замкнутому аналитическому тождеству — выявляет ошибки переноса и коэффициентов, но не является внешним оракулом — Внешних проверок нет: узел ROS не запускался на работающем графе ROS 2, а названия полей ublox_ubx_msgs не сверялись с работающим драйвером. Для теста моста запускался gnss_lib_py (MIT) | integrations/ros2/kshana_trust (bridge.py, trust_node.py); integrations/gnss_lib_py/kshana_gnss_lib_py.py | tests/receiver_trust_machines.rs (rtklib_pos_runs_as_a_receiver_log: the format the gnss_lib_py bridge writes, run through receiver-trust); the Python tests of the bridges are integrations/ros2/kshana_trust/test/test_bridge.py (bridge with a mock engine), integrations/ros2/kshana_trust/test/test_engine_integration.py (the real wheel scores a steady fix nominal and a 1,1 km jump untrusted) and integrations/gnss_lib_py/test_bridge.py (real gnss_lib_py 1.1.0 and the wheel), run with pytest, not by cargo |
221 возможностей с пометкой MODELLED.