Tłumaczenie maszynowe, niezweryfikowane przez osobę, dla której polski jest językiem ojczystym. Wzorcem jest wersja angielska.

Walidacja i dowodyEdytuj na GitHubieŹródło: docs/VALIDATION.md

Stan walidacji

O tolerancjach. „Sprawdzone względem niezależnego wzorca” poniżej oznacza, że test kalibracyjny stwierdza, iż symulowana statystyka zgadza się z relacją wzorcową w granicach wymuszanej bramki, obecnie błędu względnego 20–25% (uśrednionego po ziarnach) dla relacji Allana i budżetu szumów. Mediana zaobserwowanej zgodności jest często znacznie ciaśniejsza (kilka procent), ale gwarantowaną granicą jest bramka, a nie mediana. Tam, gdzie pojawia się wartość taka jak „~2%”, jest to typowa obserwacja, a nie wymuszana tolerancja. Zob. Twierdzenia a rzeczywistość.

Reguła awansu#

Wiersz sprawdzanej maszynowo macierzy weryfikacji (src/verification.rs) jest VALIDATED tylko wtedy, gdy wyrocznia niezależna od Kshana zgadza się z implementacją w granicach tolerancji podanej przed wykonaniem porównania, w teście uruchamianym w bramce. Ta sekcja jest jedynym miejscem, w którym reguła jest zapisana; macierz, opisy poszczególnych wierszy i uwagi do wydań odsyłają do niej.

Akceptowane rodzaje wyroczni#

Rodzaj Co się liczy Przykłady już obecne w macierzy
Zmierzono Rzeczywiste zmierzone dane wielkości, której dotyczy wiersz: obserwacja świata fizycznego, a nie wynik modelu. Zatrzymane dwie trzecie rzeczywistego zapisu zegara cezowego; zarchiwizowane normalne punkty księżycowego pomiaru laserowego; seria BIPM (Międzynarodowe Biuro Miar) Circular T UTC(k); kafel terenu SRTM (Shuttle Radar Topography Mission).
Biblioteka Niezależna biblioteka lub narzędzie innej firmy obliczające jednoznacznie zdefiniowaną wielkość na tych samych danych wejściowych, gdzie biblioteka sama implementuje obliczenie z danej dziedziny. Zgodność biblioteki z biblioteką jest prawdziwą kontrolą tylko dlatego, że wielkość ma jedną poprawną odpowiedź. allantools, Orekit, ANISE, RTKLIB, gnss_lib_py, lamberthub, pymcdm, scikit-learn, rozkłady statystyczne SciPy.
Źródła Opublikowane wektory wzorcowe, tabele lub przykłady weryfikacyjne: liczby, które norma, agencja lub tekst wzorcowy drukuje po to, aby można było sprawdzić implementacje. Wektory SOFA/ERFA (Standards of Fundamental Astronomy), wektory weryfikacyjne SGP4 AIAA (American Institute of Aeronautics and Astronautics), przykłady walidacyjne ITU-R (International Telecommunication Union, Radiocommunication Sector), przykład rozwiązany ARAIM Grupy Roboczej C, JPL (Jet Propulsion Laboratory) Horizons.

Dwa dalsze standardy rozstrzygają przypadki graniczne. Oba przyjęto dla wydania 0,30.

  • P1, opublikowana wartość rozwiązana. Opublikowana wartość rozwiązana, obliczona z tej samej postaci zamkniętej, którą implementuje wiersz, liczy się jako opublikowany wektor wzorcowy, gdy publikacja jest niezależna od Kshana, a porównanie przypina podaną tolerancję. Wartość musi być wydrukowana w publikacji jako liczba (wartość odczytana z wykresu liczy się tylko wtedy, gdy niepewność odczytu mieści się w podanej tolerancji), a test musi sprawić, by Kshana obliczyła ją z danych wejściowych publikacji; porównanie stałej z dokumentem, z którego ją skopiowano, jest kontrolą transkrypcji, a nie P1.
  • P2, niezależna biblioteka numeryczna. Niezależna biblioteka numeryczna, taka jak numpy lub LAPACK (Linear Algebra PACKage), ponownie obliczająca jednoznacznie zdefiniowaną wielkość algebry liniowej na podanych danych wejściowych, liczy się jako niezależna biblioteka. Biblioteka musi wykonać krok rozkładu, odwrócenia, rozwiązania lub najmniejszych kwadratów własnym algorytmem, na danych wejściowych zatwierdzonych wraz z fikstury; sprawdzonym twierdzeniem jest wtedy algebra liniowa na tych danych, a nie fizyczne wielkości scenariusza reprezentatywnego. Skrypt, który ponownie oblicza skalarną postać zamkniętą za pomocą arytmetyki numpy, jest naszą własną drugą implementacją, a nie P2.

Warunki obowiązujące dla każdego rodzaju: wyrocznia nie jest napisana, uruchamiana ani publikowana przez ten projekt (seria artykułów tego repozytorium nie jest więc od niego niezależna); tolerancja znajduje się w teście i została ustalona przed pierwszym porównaniem; test zależny od danych, który pomija się, gdy brakuje jego danych publicznych, mówi o tym przy pomijaniu.

Co się nie liczy#

  • Nasza własna druga implementacja: druga ścieżka kodu w tym crate (ReferenceImpl) lub skrypt w tym repozytorium, który ponownie oblicza tę samą postać zamkniętą.
  • Zgodność z naszym własnym wcześniejszym wynikiem: wzorce złote, przypięcia regresyjne, migawki lub tabela z własnych artykułów tego projektu.
  • Transkrypcja stałych z cytowanego źródła: sprawdzanie współczynnika, ustawienia wstępnego, wartości z karty katalogowej lub arkusza parametrów względem dokumentu, z którego je skopiowano.
  • Wybór projektowy: alokacja, ważenie, próg, limit alarmowy lub scenariusz reprezentatywny. Dla wyboru nie ma zewnętrznej prawdy.
  • Tożsamość wewnętrzna: całka numeryczna względem własnej postaci analitycznej, obieg w obie strony, odwrócenie, test własności lub monotoniczności.
  • Przebieg integracyjny z rzeczywistym hostem (IntegrationRun): załadowanie wtyczki do rzeczywistego serwera Signal K lub OpenCPN albo podanie wyniku rzeczywistej bramki konsumentowi TCP i sprawdzenie, że host przyjmuje dane wejściowe i pokazuje oczekiwany stan. Pokazuje to, że połączenia działają. Host nie jest wyrocznią dla żadnej wartości, którą niesie integracja, więc nie ma niczego zewnętrznego do porównania, a taki wiersz (wiersz integracji morskich) jest MODELLED, a nie VALIDATED. IntegrationRun jest odrębnym rodzajem wyroczni, dozwolonym tylko w wierszach MODELLED: integration_run_only_on_modelled_rows w src/verification.rs kończy się niepowodzeniem, jeśli wiersz VALIDATED go zawiera, a validated_rows_require_an_external_oracle już wymaga, aby każdy wiersz VALIDATED był ExternalDataset.
  • Wiarygodność na rzeczywistych danych wejściowych: rzeczywiste dane użyte wyłącznie jako dane wejściowe, z asercjami co do skali, a nie porównaniem z wartością zewnętrzną.
  • Tolerancja dobrana po zobaczeniu porównania.

Jak reguła jest egzekwowana#

Każdy wiersz VALIDATED deklaruje w validated_oracle_basis() w src/verification.rs, na jakim rodzaju się opiera (Measured, Library, Reference, P1 lub P2), niezależne źródło (zacytowane z własnego tekstu wyroczni wiersza) oraz jeden test, który niesie porównanie. Testy jednostkowe obok tabeli kończą się niepowodzeniem, gdy wiersz VALIDATED nie jest zadeklarowany lub jest zadeklarowany dwa razy, gdy deklaracja wskazuje wiersz, który nie jest VALIDATED, gdy zadeklarowane źródło nie jest tym, które wskazuje tekst wyroczni wiersza, lub jest samym Kshana, gdy zadeklarowany test nie jest tym, który wiersz cytuje, albo gdy wiersz P2 nie wskazuje żadnej niezależnej biblioteki numerycznej. tests/verification_rows_declare_an_oracle_basis.rs wymaga następnie, aby zadeklarowany test istniał na dysku jako rzeczywisty #[test], który nie jest ignorowany. Maszyna nie może sprawdzić, czy wskazany test porównuje z zadeklarowanym źródłem; pozostaje to odczytem przez człowieka. Liczności według rodzaju nie są tu wpisane: źródłem jest tabela.

Istniejące wiersze VALIDATED ponownie zbadane według reguły#

Regułę zastosowano zarówno do istniejących wierszy, jak i do przyszłych awansów.

  • Wiersze P1 wskazane przez badanie walidacyjne 0,30, każdy poparty: Jednokierunkowy bilans łącza (tabela kontroli projektu JPL Pub 82-76 dla pasma X Galileo, złożona ponownie z pozycji składowych do 4.6e-3 dB tłumienia w wolnej przestrzeni); Zamknięte postaci z ograniczonym pasmem dla dowolnego sygnału pomiaru odległości (90,3 procent mocy listka głównego i opublikowany jitter koherentnego detektora early-late); Maksymalny Doppler satelity nawigacyjnego na niskiej orbicie okołoziemskiej (opublikowane wartości Xona Pulsar X1 i Iridium); Maksymalny Doppler widziany przez nieruchomego użytkownika z orbity LEO lub MEO (Tabela 1 z artykułu o Pulsar, 20 wartości); Doppler, który musi obsłużyć odbiornik naziemny z satelity nawigacyjnego LEO (te same opublikowane wartości z orbity rzeczywiście latanej). Każda publikacja jest niezależna od Kshana, drukuje swoje liczby, a test podaje swoją tolerancję.
  • Dalsze wiersze oparte na P1, znalezione w ponownym badaniu, każdy poparty: Kompromis projektowy kodu pomiaru odległości (opublikowana korelacja wzajemna Golda −23,9 dB); Księżycowy czas współrzędnych (Ashby i Patla 2024, których kontrola prędkości Księżyca względem DE440 jest sprawdzeniem Library); Zamknięte postaci widmowych gęstości mocy sygnału w paśmie L (wartości Q Kaplana i Hegarty'ego); Opóźnienie jonosferyczne pierwszego rzędu na pasmo (stosunek opóźnień grupowych z IS-GPS-200); Globalnie uśrednione wagi błędu zasięgu sygnału w przestrzeni (tabela Montenbrucka, Steigenbergera i Hauschilda 2018).
  • Wiersze P2 wskazane przez badanie, każdy poparty: Informacja Fishera i obserwowalność Cramér–Rao (numpy eigh/inv); Identyfikowalność księżycowego datum; Sprzężony wskaźnik układu odniesienia i skali czasu Księżyca; Autonomiczny potok obserwowalności uszkodzeń w sieci swobodnej (numpy/SciPy SVD, rozkład według wartości osobliwych). Każdy ponownie oblicza jednoznacznie zdefiniowaną wielkość algebry liniowej na zatwierdzonych danych wejściowych innym algorytmem niż solver wartości własnych Jacobiego w Kshana.
  • Dalsze wiersze oparte na P2, znalezione w ponownym badaniu, każdy poparty: Wyprowadzenie priorytetów MCDA (multi-criteria decision analysis, wielokryterialna analiza decyzyjna) (wektor własny AHP, analytic hierarchy process, obliczony przez SciPy/LAPACK; tabela Random Index, którą także odtwarza, jest transkrypcją i nie jest liczona); Wariancja dryfu holdover zegara (SciPy expm rozszerzonej macierzy Van Loana); Realizacja księżycowego układu odniesienia (rozwiązanie Umeyamy przez numpy SVD); Kształtowanie wiązki CRPA (controlled reception pattern antenna) (zespolone rozwiązanie LAPACK); Jądro poziomu ochrony księżycowego ARAIM (odwrotność LU z RTKLIB z kwantylami SciPy); Spójność księżycowego układu odniesienia i dynamiki między dostawcami (dopasowanie najmniejszych kwadratów przez numpy SVD trzech opublikowanych efemeryd).
  • Oflagowane w pierwszym przejściu, ponownie oparte w rundzie 2 przebiegu 0,30. Trzy wiersze oflagowano jako niepoparte zapisaną regułą. Każdy opiera się teraz na porównaniu zarejestrowanym z góry przed pobraniem jego fikstury, więc żaden wiersz nie jest oflagowany; test jednostkowy obok validated_oracle_basis() przypina (teraz pustą) listę.
    • Integralność (RAIM/ARAIM/SBAS). Cytowane testy dawniej stwierdzały jedynie wiarygodność na rzeczywistej geometrii IGS (International GNSS Service). Wiersz opiera się teraz na trzech wyroczniach bibliotecznych: wielohipotezowym rozdzieleniu rozwiązań ARAIM z Airborne Design Document v4.2 względem Stanford MAAST dla ARAIM 2 (270 rzeczywistych przypadków, najgorsza różnica VPL 2.2e-3 m wobec 0,05 m); detekcji i wykluczania snapshot RAIM względem RTKLIB raim_fde (2016 z 2016 identycznych decyzji) z poziomem ochrony nachylenia; oraz poziomach ochrony SBAS L1 według DO-229E względem Stanford MAAST na rzeczywistych transmisjach WAAS (2868 par w granicach 1.6e-5 m). Wiersz mówi wprost, że funkcje z jednolitym sigma raim::araim_raim i raim::araim_dual_raim nie są zgodne z ADD, a porównanie dwuczęstotliwościowego SBAS L5 jest ustaleniem.
    • Pozycje planet w całym Układzie Słonecznym z elementów keplerowskich JPL Standish. Ustalony po fakcie próg dwukrotności błędu nominalnego zastąpiono progiem zarejestrowanym z góry: RMS co najwyżej wartość z Tabeli 8.10.1 Explanatory Supplement na planetę i składową, względem JPL Horizons DE441, z uwzględnieniem podziału Ziemi i obrotu ICRF.
    • Czas światła między ciałami Układu Słonecznego. Solver czasu światła jest teraz porównywany z czasami światła z Horizons w granicach 1e-6 s na pozycjach DE441, czyli z progiem zarejestrowanym z góry, który nie dziedziczy progu pozycji.
  • Wiersze MODELLED, które dwie polityki czynią kwalifikującymi się do awansu (wyłącznie przez wiersz po wierszu przebieg 0,30, nigdy przez ten tekst): w ramach P1 granica geolokalizacji emitera TDOA/FDOA (różnica czasu i częstotliwości przybycia), sprzężenie względnościowego tempa zegara z układem odniesienia, maski synchronizacji ITU-T (Telecommunication Standardization Sector) (tylko dla wartości masek, które Zalecenia drukują jako liczby; przepisane punkty załamania sprawdzane względem siebie się nie liczą) oraz granica pozycjonowania 5G w sieciach nieziemskich (tylko jeśli znajdzie się opublikowaną wartość rozwiązaną); w ramach P2 ślepota integralności w trybie wspólnym, skalarny poziom ochrony czasu MHSS (multiple-hypothesis solution separation) i wybielanie GLS (generalised least squares, uogólniona metoda najmniejszych kwadratów). Dwa wiersze wzorcowe integralności czasu (klasyfikator diagramu integralności Stanforda i oceniacz pokrycia integralności) to klasyfikacja oparta na regułach, a nie algebra liniowa, więc P2 ich nie obejmuje; potrzebują niezależnego narzędzia, a jedyne znalezione (gLAB) ma licencję niekomercyjną.
  • Spójność z wcześniejszymi odmowami. Kontrola Vallado dla wiersza okna startowego kwalifikowałaby się teraz w ramach P1, jeśli jej test oblicza drukowany przykład rozwiązany; plan 0,30 awansuje go zamiast tego przez Orekit. Tabela przecięcia czasu księżycowego według klas zegarów pozostaje MODELLED: tabela, którą odtwarza, pochodzi z własnego artykułu tego projektu, który nie jest niezależny.
Składnik szumu Status Dowody
Zgodność estymatorów Allana (ADEV/MDEV/TDEV/OHDEV (ADEV: odchylenie Allana; MDEV: zmodyfikowane odchylenie Allana; OHDEV: nakładające się odchylenie Hadamarda)) validated Dwie kontrole względem źródeł pierwotnych NIST (National Institute of Standards and Technology) SP (Special Publication) 1065 (Riley, Handbook of Frequency Stability Analysis, 2008), obie z tolerancją względną 1e-4. (1) tests/allan_reference.rs: nakładające się ADEV, zmodyfikowane ADEV, odchylenie czasu i nakładające się estymatory Hadamarda odtwarzają odchylenia dla kanonicznego 10-punktowego zbioru danych NBS14 (SP 1065 Tabela 29/30, s. 107) przy tau = 1, 2 — zgodność wynosi w rzeczywistości ~1e-6 (np. nakładające się ADEV (OADEV) przy τ = 2: 85,952868 wobec 85,95287). (2) tests/allan_nist_sp1065_1000point.rs: te same cztery estymatory odtwarzają 1000-punktowy zbiór danych SP 1065 §12,4 (Tabela 31, s. 108) przy współczynnikach uśredniania 1 / 10 / 100, gdzie zbiór danych jest odtwarzany w kodzie z LCG z SP 1065 (równ. 73) — hermetycznie, bez fikstury. Te same dane i liczby z Tabeli 31 są celem regresji w aewallin/allantools (tests/nbs14), odtworzonym tutaj bez kodu stron trzecich. To przypina matematykę estymatora względem wzorca, odrębnie od wierszy kalibracji szumu poniżej.
Zgodność estymatorów Allana na rzeczywistym zmierzonym sprzęcie validated tests/cs5071a_reference.rs: nakładające się estymatory Allana i Hadamarda odtwarzają wzorcowe odchylenia Stable32 dla rzeczywistego pierwotnego wzorca cezowego 5071A zmierzonego względem masera wodorowego (556 990 próbek fazy przy τ₀ = 1 s; 1 PPS (impuls na sekundę) do licznika 53230A, luty 2014; zebrane przez A. Wallina, dystrybuowane z allantools). Sprawdzone na całej dekadowej drabince τ (16 współczynników uśredniania, τ = 1 s … 4×10⁴ s): dobrze próbkowane współczynniki z bramką względną 1e-3 (zaobserwowana zgodność wynosi w rzeczywistości ≤ 3e-5, np. OADEV(1 s) 3.317111e-10 wobec Stable32 3.3171e-10), rzadkie współczynniki długiego τ muszą zmieścić się w drukowanym przez Stable32 paśmie ufności 1‑σ. To uzupełnia syntetyczną zgodność NBS14 powyżej kontrolą na zmierzonym zegarze. Surowy plik fazy to dane stron trzecich bez licencji na redystrybucję, więc jest ignorowany przez git; scripts/fetch_cs5071a.sh go odtwarza, a test wypisuje komunikat o pominięciu (CI (ciągła integracja) pozostaje zielone), gdy go brak. Zatwierdzone są tylko publiczne liczby wzorcowe Stable32 (tests/fixtures/cs5071a/); nie używa się kodu stron trzecich.
Zgodność estymatorów Allana na kanonicznym Stable32 PHASE.DAT validated tests/phasedat_reference.rs: nakładające się estymatory Allana, zmodyfikowany Allana i odchylenia czasu odtwarzają wzorcowe odchylenia Stable32 dla PHASE.DAT — 1001-punktowego szeregu dystrybuowanego ze Stable32, którego niezależne narzędzia (np. allantools) używają jako standardowego celu regresji — na pełnej drabince współczynników uśredniania (139 współczynników) z bramką względną 1e-3 (zaobserwowano ≤ 5e-5). Drugi, niezależny rzeczywisty szereg wzorcowy obok kontroli zmierzonego cezu powyżej. PHASE.DAT jest dostarczany z komercyjnym narzędziem Stable32, więc surowy szereg jest ignorowany przez git; scripts/fetch_phasedat.sh go odtwarza, a test jest pomijany na zielono (CI pozostaje zielone), gdy go brak. Zatwierdzone są tylko publiczne liczby wzorcowe Stable32 (tests/fixtures/phasedat/); nie używa się kodu stron trzecich.
Stabilność zegara optycznego na rzeczywistej zmierzonej krzywej validated tests/optical_clock_adev_reference.rs: inwersja parametrów szumu zegara (quantum_trade::qparams_from_adev_curve) odtwarza opublikowane σ_y(τ) optycznego zegara sieciowego ⁸⁸Sr według Norcia i in., Science 366:93 (2019) (Zenodo 10.5281/zenodo.3382347, CC-BY-4.0 (Creative Commons Attribution 4,0), krzywa dołączona w tests/fixtures/optical_clock_adev/): odzyskany współczynnik szumu białego częstotliwości √q_wf ≈ 4.33e-16 odpowiada krótkoterminowej stabilności z artykułu ≈4.7e-16/√τ (~10% RMS (root mean square) na krzywej), a dopasowanie wykrywa niezerowy zmierzony próg szumów (q_rw > 0). To przypina inwersję zmierzonego ADEV → parametry szumu względem rzeczywistego zegara optycznego; korzyść z holdover do progu zbudowana na tym pozostaje MODELLED.
ROC (receiver operating characteristic) AUC (pole pod krzywą) detekcji anomalii na rzeczywistej telemetrii ESA (European Space Agency) OPS-SAT validated (odtwarza etykiety) tests/opssat_ad_reference.rs: na zbiorze danych OPSSAT-AD (Ruszczak i in. 2025, Zenodo 10.5281/zenodo.12588359, CC BY 4,0) — rzeczywistych segmentach telemetrii pokładowej OPS-SAT z etykietami anomalii zgodnymi z prawdą podstawową — AUC ROC Manna–Whitneya w Kshana (impairment_eval::auc) odtwarza scikit-learn roc_auc_score z dokładnością do < 1e-9 na zatrzymanym podziale testowym (529 segmentów, 113 anomalii), dla dwóch deterministycznych ocen: przejrzystego detektora jednocechowego (liczba pików segmentu, AUC ≈ 0,851) i 8-cechowej diagonalnej oceny Mahalanobisa dopasowanej na normalnych segmentach treningowych (AUC ≈ 0,556); eval_stats::bootstrap_auc_ci obejmuje oszacowanie punktowe przedziałem, którego dolna granica leży powyżej poziomu przypadku. To sprawdza obliczanie AUC na rzeczywistych danych ESA i etykietowane rozdzielenie przejrzystego detektora — nie odtwarza najlepszej opublikowanej metryki z artykułu OPSSAT-AD (nadzorowana FCNN (fully connected neural network, w pełni połączona sieć neuronowa), F1 ≈ 0,95), która wymaga ich wytrenowanego modelu. Dane CC-BY dołączone (tests/fixtures/opssat/, hermetycznie); wyrocznia odtwarzana przez generate_opssat_oracle.py.
Synteza funkcjonałów pola grawitacyjnego (mapa nawigacyjna wspomagana grawitacją / bez GNSS (GNSS: globalny system nawigacji satelitarnej)) validated tests/icgem_gravity_reference.rs: jądro funkcjonału grawitacyjnego w harmonikach sferycznych (gravity_sh::gravity_magnitude / gravity_disturbance_mgal) — „czytnik mapy”, z którym dopasowuje się nawigator wspomagany grawitacją — jest sprawdzone względem standardu grawitacji normalnej GRS80 (Geodetic Reference System 1980) (Moritz 1980, przyjętego przez IAG (International Association of Geodesy)). Zbudowanie normalnego pola GRS80 z jego opublikowanych parzystych harmonik zonalnych J₂…J₈ i synteza grawitacji (grawitacja + siła odśrodkowa) na elipsoidzie odtwarza zamkniętą postać grawitacji normalnej Somigliany oraz opublikowane wartości równikowe/biegunowe γ_e = 9,7803267715 / γ_p = 9,8321863685 m/s² z dokładnością względną 3.5e-12 na wszystkich szerokościach (bramka 1e-9). To samo jądro wczytuje flagowy rzeczywisty model Ziemi ICGEM (International Centre for Global Earth Models) EGM2008 (Earth Gravitational Model 2008) (NGA (National Geospatial-Intelligence Agency), domena publiczna przez ICGEM; czytnik from_gfc jest też wykorzystany na księżycowym polu GRAIL (Gravity Recovery and Interior Laboratory) w tests/agency_lro.rs) i tworzy fizycznie ograniczoną mapę zaburzeń grawitacji (RMS ≈ 26 mGal, maks. ≈ 89 mGal przy d/o 70). Sprawdza poprawność kodu syntezy; dokładność poprawki nawigacyjnej wspomaganej grawitacją pozostaje MODELLED (brak publicznej trajektorii grawimetru na platformie z prawdą podstawową).
Efektywne stopnie swobody (edf) zależne od typu szumu (przedziały ufności) validated src/allan.rs: pasmo ufności χ² na każdym punkcie nakładającego się ADEV używa efektywnych stopni swobody zależnych od typu szumu (zamknięte postaci z Tabeli 5 NIST SP 1065 dla białej i migotliwej modulacji fazy, białej i migotliwej modulacji częstotliwości oraz modulacji częstotliwości błądzeniem losowym (WPM/FPM/WFM/FFM/RWFM) — prosty zestaw Stable32), z typem potęgowym zapisu rozpoznanym z nachylenia log-log jego MDEV. Trzy niezależne kontrole: (a) pięć wzorów odtwarza ręcznie obliczone wartości przy N=64, m=4 z dokładnością 1e-12; (b) zespół Monte Carlo białej FM (FM: modulacja częstotliwości) (4 000 zapisów) mierzy rzeczywiste edf chi-kwadrat estymatora = 2·mean²/Var(σ²) i zgadza się ze wzorem w granicach 20% (i wyraźnie przewyższa zachowawczą liczbę nienakładającą się); (c) tests/allan_nist_sp1065_1000point.rs odtwarza drukowane SP 1065 Tabela 32 (s. 109) edf = 146,177 dla 1000-punktowego zbioru danych przy m=10 (biała FM) z dokładnością 5e-3 oraz 95% granice ufności tabeli (8.223942e-2 / 1.035201e-1) z dokładnością <0,2% (mała reszta to przybliżenie χ² Wilsona–Hilferty'ego względem dokładnego χ² NIST). Eksportowana krzywa ADEV niesie rozpoznany typ szumu, edf i 95% pasmo na każde τ.
Biała FM (krótkoterminowa) validated tests/calibration.rs: symulowane nakładające się ADEV odtwarza opublikowane sigma_y(1 s) — zwykle w granicach kilku procent, wymuszana bramka 20% (CSAC i cel zegara sieci optycznej) — oraz krzywą białej FM sigma_y(tau)=sigma_y(1s)/sqrt(tau) dla tau = 1, 10, 100 s w granicach bramki 25% (zgodnie z kartą katalogową CSAC (chip-scale atomic clock) 3e-10 / 1e-10 / 3e-11).
FM błądzenia losowego (długoterminowa) validated tests/calibration.rs: symulowane ADEV zgadza się z sigma_y^2(tau)=q_rw*tau/3 (Riley NIST SP 1065) z dokładnością ~20% (uśrednione po ziarnach).
Starzenie / dryf liniowy modeled + skompensowane Deterministyczne; estymator holdover usuwa offset i starzenie predyktorem kwadratowym, więc reszta jest granicą stochastyczną. Testowane w src/estimator.rs / src/models.rs.
Estymator Kalmana + granica integralności validated src/kalman.rs: dwustanowy (faza, częstotliwość) filtr, którego dokładny szum procesu van Loana odpowiada modelowi prawdy; dryf bez korekt odtwarza analityczną wariancję holdover q_wf*T + q_rw*T^3/3 z dokładnością 1e-9. Aktualizacja kowariancji ma postać stabilizowaną Josepha P⁺ = (I−KH)P(I−KH)ᵀ + KRKᵀ, która pozostaje dodatnio półokreślona (sprawdzone Choleskim) przez 500 kroków predykcji/aktualizacji przy skrajnym stosunku R=1e-26 / Q≈1e-30 i zgadza się z postacią naiwną z dokładnością 1e-9 tam, gdzie ta jest dobrze uwarunkowana. Warstwa przebiegu podaje Integralność jako ułamek próbek przerwy w granicach 3-sigma granicy ochrony (src/run.rs).
Samospójność filtra (NIS (znormalizowany kwadrat innowacji) / NEES (znormalizowany kwadrat błędu estymacji)) validated (model) src/filter_health.rs: ocena spójności metodą Monte Carlo (Bar-Shalom §5,4). Zbiorcze NIS → 1 i NEES → 2 dopasowanego filtra mieszczą się w ich pasmach χ² 95% (pasmo NIS używa zbiorczej liczby białych innowacji; pasmo NEES używa liczby niezależnych przebiegów, ponieważ błędy estymacji są skorelowane w czasie). Test przeglądu niedopasowania Q/R sprawdza, że monitor zgłasza consistent=true tylko przy strojeniu jednostkowym, a consistent=false przy rozstrojeniu ×0.1/×0.5/×2/×10, przy czym NIS skaluje się jak ≈1/q_factor zgodnie z wyprowadzeniem. Udostępnione jako filter_health w JSON wyniku zegara (JavaScript Object Notation) i karcie w piaskownicy. Pasma χ² używają kwantyla Wilsona–Hilferty'ego (detection::chi2_inv_cdf, sprawdzonego względem tabeli).
Model dwukierunkowego transferu czasu validated (model) src/timetransfer.rs: wzajemne opóźnienie wspólne znosi się dokładnie w estymacie (m_AB - m_BA)/2 (wyprowadzone ręcznie, dokładnie), a dwa pomiary jednokierunkowe uśredniają się do 1/sqrt(2) (uśrednione po ziarnach); niewzajemne opóźnienie różnicowe jest barwnym procesem biała FM + FM błądzenia losowego, którego odchylenie Allana podąża za sigma_y^2(tau) = q_rw*tau/3 (uśrednione po ziarnach, ~20%, przez własne step() łącza). Parametry (sigma_j, q_rw na łącze) to reprezentatywne wartości TWSTFT/optyczne (TWSTFT: dwukierunkowy transfer czasu i częstotliwości przez satelitę), niedopasowane do konkretnego terminala.
Bezpieczeństwo (ocena detekcji spoofingu) validated (model) src/security.rs: próg 1-sigma monitora sqrt(r/m + q_wf*tau + q_rw*tau^3/3) oraz wynikający z niego k-sigma minimalny wykrywalny offset i ocena [0,1] są wyprowadzone ręcznie i testowane jednostkowo. Model (detekcja wspomagana zegarem w stylu innowacji / RAIM (RAIM: autonomiczne monitorowanie integralności przez odbiornik)) jest poprawny; parametry (okno monitorowania tau, mnożnik detekcji k, szum pomiaru r) są reprezentatywne, niedopasowane do konkretnego odbiornika.
Detekcja ataku spoofingowego validated (model) src/spoof.rs: narastający fałszywy spoofing czasu jest flagowany, gdy jego offset przekracza granicę detekcji zegara; czas detekcji zgadza się z ręcznie wyprowadzonym start + bound/rate z dokładnością do jednego kroku siatki, a zegar, którego granica przekracza specyfikację, pozwala spoofingowi osiągnąć próg niewykryty. To samo zastrzeżenie representative-parameters co dla oceny Bezpieczeństwa.
Migotliwa FM (próg szumów) modeled (domyślnie wyłączone) Syntezowane jako suma logarytmicznie rozmieszczonych procesów Ornsteina-Uhlenbecka (OU) skalibrowanych do konfigurowalnego płaskiego progu ADEV; src/models.rs sprawdza, że próg jest płaski względem czasu uśredniania i leży na skonfigurowanym poziomie (uśrednione po ziarnach). Włączane dla każdego zegara przez flicker_floor. Cytowane scenariusze wzorcowe pozostawiają je wyłączone: CSAC jest zdominowany przez białą FM w całym zakresie swojej karty katalogowej (1-1000 s), a systematyczny próg zegara optycznego (~5e-17) jest reprezentowany przez jego wartość dokładności.
Statystyki zespołu Monte Carlo validated (agregacja) src/ensemble.rs: percentyle najbliższej rangi i średnia z runs odtwarzalnych realizacji; pojedynczy przebieg zwija rozrzut, pasmo na krok czasu jest uporządkowane p05 <= p50 <= p95, a ponowne przebiegi są identyczne co do bitu. To agregacja statystyczna na już sprawdzonym pojedynczym przebiegu, a nie nowy model fizyczny.
Zegar sigma_y(1 s) Źródło
csac-sa45s (CSAC) 3.0e-10 Karta katalogowa Microchip SA65 / SA.45s
optical-sr-lattice (sieć Sr) 1.0e-15 optyczny zegar sieciowy ze strontem, cel zorientowany na przestrzeń kosmiczną, arXiv:1503,08457

Status: biała FM i FM błądzenia losowego sprawdzone względem niezależnego wzorca; starzenie obliczone z modelu i skompensowane; migotliwa FM obliczona z modelu i sprawdzona względem niezależnego wzorca (w cytowanych scenariuszach domyślnie wyłączona).

Dojrzałość: wartości zegara optycznego to cel zorientowany na przestrzeń kosmiczną na sprzęcie naziemnym -- żaden optyczny zegar strontowy nie poleciał w kosmos. Laboratoryjne zegary Sr osiągają 4.8e-17 (Oelker i in. 2019, Nature Photonics). Wartości CSAC pochodzą z wdrożonego komercyjnego podzespołu.

Relacje: Riley, NIST SP 1065, równ. 67 -- biała FM sigma_y^2(tau)=h0/(2 tau); FM błądzenia losowego sigma_y^2(tau)=(2 pi^2/3) h_-2 tau, równoważnie q_rw*tau/3 dla procesu Wienera częstotliwości o dyfuzji q_rw.

Pakiet 2 — nawigacja zliczeniowa inercjalna (kwantowa jednostka inercjalna)#

Wielkość Status Dowody
Stały/resztkowy bias -> pozycja validated błąd pozycji = rodzina 0,5bT^2 (Groves AESS (Aerospace and Electronic Systems Society) Tutorial); ręcznie wyprowadzony test dyskretny w src/inertial/mod.rs.
Błądzenie losowe prędkości (biały szum przyspieszenia) validated src/inertial/mod.rs: symulowane odchylenie standardowe (SD) błędu pozycji zgadza się z sigma_x(T)=sqrt(S_a*T^3/3) (Groves równ. 54) z dokładnością ~12% zaobserwowanego (uśrednione po ziarnach; wymuszana bramka 20%).
Fizyka akcelerometru z interferometrem zimnych atomów (CAI) (z pierwszych zasad) validated (model) src/inertial/quantum_imu.rs: trójimpulsowy interferometr zimnych atomów Macha-Zehndera. Ręcznie zweryfikowany względem geometrii podręcznikowej — Rb-87 k_eff = 4pi/lambda ~ 1.611e7 rad/m; Phi = k_eff*a*T^2 ~ 1.580e4 rad przy 1 g, T = 10 ms; szum projekcji sigma_Phi = 1/(C*sqrt(N)) = 2e-3 rad przy C = 0.5, N = 1e6; na strzał sigma_a ~ 1.24e-6 m/s^2; prawa skalowania 1/T^2 i 1/sqrt(N); wykładniczy zanik kontrastu. q_va() wyprowadza białą PSD (power spectral density, widmową gęstość mocy) przyspieszenia, którą pobiera klasyczny AccelModel. Uczciwy zakres: tylko próg szumu projekcji kwantowej (tutaj ~0,09 ug/sqrtHz) — znacznie poniżej rzeczywistych urządzeń ograniczonych wibracjami (1-50 ug/sqrtHz); tensor wibracji, siła Coriolisa i systematyki przesunięcia świetlnego nie są jeszcze modelowane (zob. QUANTUM.md).
Bias żyroskopu + kątowe błądzenie losowe (ARW) -> przechył -> sprzężenie z grawitacją modeled (domyślnie wyłączone) Resztkowy bias żyroskopu i ARW napędzają błąd orientacji; przechył sprzęga grawitację (g*theta) z poziomym błędem siły właściwej. src/inertial/mod.rs sprawdza dokładnie sześcienny wzrost pozycji od samego biasu oraz wzrost orientacji z ARW jako proces Wienera (uśrednione po ziarnach). Włączane dla każdego czujnika przez gyro_bias i q_arw; wyłączone w cytowanych scenariuszach z samym akcelerometrem.
Niestabilność biasu (próg szumu migotania 1/f) modeled (domyślnie wyłączone) src/inertial/mod.rs: proces migotania 1/f (ta sama synteza OU sprawdzona dla zegara), którego płaski próg odchylenia Allana leży na współczynniku niestabilności biasu; zero jest brakiem działania, niezerowy próg zmienia trajektorię, oba przypadki są odtwarzalne. Włączane dla każdego czujnika przez bias_instability.
Błądzenie losowe przyspieszenia (błądzenie losowe tempa) validated src/inertial/mod.rs: bias jest procesem Wienera z Var(bias_rw(T)) = q_aa*T, sprawdzonym po uśrednieniu po ziarnach z dokładnością ~20%. Włączane dla każdego czujnika przez q_aa.
Walidacja krzyżowa NaveGo (współczynniki szumu IMU (jednostka inercjalna)) validated tests/navego_imu_crossval.rs: zewnętrzna kontrola krzyżowa względem NaveGo (R. Gonzalez, otwartoźródłowy zestaw narzędzi INS/GNSS (INS: system nawigacji inercjalnej), github.com/rodralez/NaveGo). Odtwarza syntetyczny obieg w obie strony z navego_example_allan.m NaveGo na jego opublikowanym profilu wzorcowym Microstrain 3DM-GX3-35: zasilenie naszego (sprawdzonego względem NBS14/Stable32) estymatora nakładającego się ADEV białym szumem czujnika na poziomach 1-σ NaveGo odzyskuje współczynniki błądzenia losowego prędkości i kąta (VRW, ARW) (ADEV(1 s) = σ·√dt) z dokładnością < 5% (rzeczywiście ~0,4%), z gałęzią szumu białego na nachyleniu −1/2. Potwierdza, że nasz potok Allana i definicje VRW/ARW w NaveGo są zgodne. Zarejestrowany log STIM300 .mat o rozmiarze 40 MB nie jest wczytywany (ogranicza go format binarny).
Współczynnik skali, drobniejsze człony osi poprzecznych not modeled w tym pakiecie 1-DOF (jeden stopień swobody) Starszy pakiet jednoosiowy nie ma błędu współczynnika skali ani sprzężenia poprzecznego. Trójosiowa biblioteka strapdown i pakiet gnss-ins modelują współczynnik skali, niewspółosiowość, czułość na g, kwantyzację i narastanie prędkości (src/inertial/imu_errors.rs; zob. tabelę twierdzeń poniżej).
Czujnik stabilność biasu pierwiastek z PSD szumu Źródło
cold-atom-quat (kwantowy) 5.88e-7 m/s^2 (60 ng, 24 h) 22 ug/sqrtHz = 2.16e-4 (m/s^2)/sqrtHz Templier i in. 2022, Science Advances (arXiv:2209,13209)
nav-grade-quartz (klasyczny) 1.57e-3 m/s^2 (~160 ug) ~20 ug/sqrtHz = 1.96e-4 (m/s^2)/sqrtHz Honeywell QA-2000 / Groves AESS Tutorial

Uczciwe ujęcie: przewaga zimnych atomów to długoterminowa stabilność biasu (~2600x niższa), która dominuje w długiej przerwie w GNSS przez 0,5bT^2. Szum krótkoterminowy jest porównywalny (kwantowy ~22 wobec klasycznego ~20 ug/sqrtHz) — czujnik kwantowy wygrywa maraton, a nie sprint. Dojrzałość: akcelerometry zimnoatomowe są laboratoryjne/wczesne (JRC122785), kwarcowe klasy nawigacyjnej są wdrożone.

Wielkość Status Dowody
Biały jitter czasu -> precyzja synchronizacji validated src/timetransfer.rs: symulowane RMS synchronizacji odtwarza jitter łącza sigma_j; średnia z próbek uśrednia się jak sigma/sqrt(N) z dokładnością <20% (uśrednione po ziarnach).
Synchronizacja czasu -> pomiar odległości jednokierunkowy validated odległość = c * dt, c=299792458 m/s; 1 ps = 0,299792458 mm (dokładnie, test wyprowadzony ręcznie).
Próg migotania/TDEV, reszta wzajemności dwukierunkowej modelled src/twstft_budget.rs (rodzaj time-transfer-budget): szum fazy migotania (Kasdin–Walter, płaskie TDEV), dobowa niewzajemność i stała reszta wzajemności w szeregu dwukierunkowym; pakiet timetransfer z białym jitterem pozostaje niezmieniony.
Łącze jitter pojedynczej próbki typ źródło
optical-isl 1 ps (1e-12 s) cel wiarygodny na orbicie optyczne łącze międzysatelitarne, cel synchronizacji w pikosekundach; laboratoryjne O-TWTFT (TWTFT: dwukierunkowy transfer czasu i częstotliwości) ~1 fs (Giorgetta 2013 / Deschenes 2016)
twstft-rf 0,5 ns (5e-10 s) zmierzone w jednej sesji BIPM/PTB/NIST (BIPM: Międzynarodowe Biuro Miar; PTB: Physikalisch-Technische Bundesanstalt, niemiecki państwowy instytut metrologii) TWSTFT

Uczciwe ujęcie: wartość optyczna jest celem synchronizacji na orbicie na poziomie pikosekund (niepoleciała w kosmos). Naziemny próg laboratoryjny optyki to ~1 fs (znacznie lepszy); dobrze zaprojektowane łącze mikrofalowe (łącze mikrofalowe ACES (Atomic Clock Ensemble in Space) (MWL), ~0,3 ps) może rywalizować z optycznym, więc punkt odniesienia „RF = 0,5 ns” dotyczy konkretnie zwykłego TWSTFT. Przeliczenie na odległość jest jednokierunkowe (odległość = cdt); dwukierunkowe/w obie strony zmniejsza je o połowę (odległość = cdt/2).

Pakiet 4 — fuzja hybrydowa (zwieńczenie)#

Łączy Pakiet 1 (zegar), Pakiet 2 (inercjalny) i Pakiet 3 (transfer czasu) w jeden zestaw PNT (pozycjonowanie, nawigacja i czas). Zestaw musi utrzymać OBA parametry, czas (< specyfikacja czasu) i pozycję (< specyfikacja pozycji), w granicach; pnt_holdover_s to czas do przekroczenia któregokolwiek z nich. Opcjonalny transfer czasu optycznym łączem międzysatelitarnym (ISL) ponownie synchronizuje zegar podczas przerwy (tylko wspomaganie czasem — pozycja nie jest ponownie synchronizowana, ponieważ transfer czasu daje czas, a nie pozycję).

Aspekt Status Dowody
Łączna ocena PNT (czas ORAZ pozycja) validated src/hybrid.rs ręcznie wyprowadzony test score_hybrid (pnt_holdover = pierwsze z przekroczeń czasu/pozycji).
Integralność + bezpieczeństwo dla pakietu hybrydowego validated src/hybrid.rs: estymator czasu Kalmana dyscyplinowany do prawdy (nominalnie) i ponownie zakotwiczany przy każdej optycznej resynchronizacji; Integralność to zawieranie się w granicy ochrony (granica obejmuje próg jitteru łącza), Bezpieczeństwo to ocena detekcji spoofingu. Testowane dla obu zestawów, w tym dla przypadku wspomaganego łączem.
Wspólny estymator fuzji validated (model) src/fusion/mod.rs: pojedynczy wspólny filtr Kalmana ([faza, częstotliwość] ⊕ [poz., prędk.]) jest nawigatorem, dyscyplinowanym przez GNSS (uczącym się offsetów z niezerowej początkowej kowariancji) i wspomaganym transferem czasu; wspólna kowariancja daje wspólną integralność, która jest testowana jako niezawodna (≥0,9) dla obu zestawów z czujnikami spójnymi co do szumu. Pakiet obserwuje pozycję i czas osobno, dla czego filtr optymalny jest blokowo-diagonalny; estymacja stałego biasu w stanie rozszerzonym i dynamiczne wzajemne wspomaganie to przyszłe prace.
Sprzężony filtr zegara i pozycji (kowariancja międzyblokowa) validated (model) src/fusion/coupled.rs CoupledPntFilter: pojedynczy skumulowany filtr Kalmana [pos, vel, phase, freq] (aktualizacje w postaci Josepha), którego pomiar pseudoodległości ρ = g·pos + c·phase + noise sprzęga bloki pozycji i zegara. Testy: wspólna pseudoodległość czyni P[pos,phase] niezerowym (filtry rozłączne utrzymują dokładnie 0); dwie różne geometrie łącznie rozwiązują wstrzyknięte offsety pozycji i zegara, których pojedyncza odległość nie rozdzieli; poprawka tylko zegara wyostrza pozycję przez kowariancję krzyżową (korzyść, którą daje sprzężenie, a której filtry rozłączne nie dają); oraz NEES metodą Monte Carlo jest spójny z χ²(4) (Bar-Shalom §5,4, pasmo oparte na przebiegach). 1-DOF (wymiarowość pakietu); jeszcze nie podłączony do uruchamialnego pakietu, a rozszerzenie 3-D do 8 stanów to przyszłe prace.
Złożenie podmodeli sprawdzonych względem niezależnego wzorca dziedziczy człony zegara/inercjalne/transferu czasu są sprawdzone względem niezależnego wzorca we własnych pakietach.
Luźno sprzężony GNSS/INS (pakiet gnss-ins) validated (model) src/fusion/{gnss_ins_ekf,closed_loop,pack}.rs: 15-stanowy EKF stanu błędu (δp, δv, ψ, bias akcelerometru/żyroskopu; Groves §14) steruje trójosiowym nawigatorem strapdown ze sprzężeniem zwrotnym. Testy: wstrzyknięty błąd pozycji zeruje się przy wspomaganiu idealną prawdą; rozwiązanie wspomagane pozostaje ograniczone do metrów, podczas gdy swobodnie działający INS rozbiega się powyżej 100 m; a połączone RMS pozycji w trakcie przerwy 60 s pokonuje niewspomaganą nawigację zliczeniową o granicę testu zespołu (~4× przy pomiarze przed 0.27.3; margines jest większy po poprawce poniżej). Sprzężenie biasu żyroskopu jest sprawdzane względem samego strapdown: znany resztkowy bias żyroskopu musi wytworzyć błąd orientacji przewidywany przez filtr (closed_loop::tests::gyro_bias_coupling_predicts_the_strapdown_attitude_error), a szeroki rozkład a priori musi nauczyć się biasu żyroskopu klasy kontrolera lotu, pozostając ograniczonym; oba testy zawodzą na znaku sprzed 0.27.3. Zmienione w 0.27.3: to sprzężenie miało zły znak, więc estymaty biasu żyroskopu popychały w złą stronę i tylko ścisły rozkład a priori utrzymywał stabilność pakietu; opublikowane wartości przerw uległy zmianie (CHANGELOG, Fixed). Uczciwe ograniczenie: bias akcelerometru/przechył w układzie luźno sprzężonym są słabo rozdzielne, więc kalibracja poszczególnych biasów nie jest twierdzona.
Ściśle sprzężony GNSS/INS (pseudoodległość) validated (model) src/fusion/gnss_ins_ekf.rs update_tightly_coupled + closed_loop.rs fuse_tightly_coupled: innowacja jest tworzona w dziedzinie odległości (jakobian linii widzenia na δp). Testy: cztery satelity zerują wstrzyknięty poziomy błąd 8 m/−5 m do < 0,1 m; dwa satelity (poprawka pozycji, prędkości i czasu (PVT) niemożliwa) nadal zmniejszają błąd poziomy o > 5×; pojedynczy satelita w zenicie obserwuje tylko składową wzdłuż linii widzenia (pionową) i pozostawia poziomą nietkniętą; niepoprawne dane wejściowe są odrzucane. Tylko pseudoodległość — faza nośnej i jawny stan zegara odbiornika są w planie.
Wierność wzajemnego wspomagania czujników (pełna fuzja Kalmana/grafu czynników) not modeled w pakiecie hybrid Pakiet hybrydowy to kompozycja na poziomie systemu + wspomaganie czasem, a nie estymator optymalny. Filtry istnieją gdzie indziej: luźno i ściśle sprzężony EKF (extended Kalman filter) z pakietu gnss-ins (wiersze powyżej) oraz 17-stanowy UKF (unscented Kalman filter) rodzaju hybrid-ukf. Nie jest modelowany żaden wygładzacz grafu czynników.

Wynik: zestaw w pełni kwantowy utrzymuje pełne PNT przez przerwę 1,8 h; zestaw w pełni klasyczny jest ograniczony pozycją (jednostka inercjalna klasy nawigacyjnej przekracza granicę jako pierwsza). Optyczny transfer czasu ISL utrzymuje w synchronizacji nawet klasyczny ZEGAR, wskazując czujnik inercjalny jako słabe ogniwo zestawu klasycznego — to rdzeń argumentu za łącznym użyciem kwantowej inercji i optycznej synchronizacji czasu.

Geometria — dostępność GNSS z orbit#

Aspekt Status Dowody
Kołowa propagacja dwóch ciał validated src/orbit.rs: okres T=2 pi sqrt(r^3/mu) (mu = 3.986004418e14), pozycja wraca po jednym okresie, płaskość równikowa/biegunowa — testy wyprowadzone ręcznie.
Propagacja ekscentryczna (keplerowska) validated src/orbit.rs: równanie Keplera M = E - e sin E rozwiązane metodą Newtona (reszta < 1e-12); promienie perygeum/apogeum a(1∓e); przypadek kołowy zgadza się ze ścieżką postaci zamkniętej z dokładnością 1e-9.
Sekularny dryf węzłowy/apsydalny J2 validated src/orbit.rs: Omega_dot = -1.5 n J2 (Re/p)^2 cos i, argp_dot = 0.75 n J2 (Re/p)^2 (5cos^2 i - 1) (Vallado); węzeł cofa się (ruch prosty) / przesuwa się naprzód (ruch wsteczny) / jest nieruchomy (biegunowa), a apsydy zamarzają przy inklinacji krytycznej 63,4 deg — testy znaku/zera wyprowadzone ręcznie. Tylko dwa ciała + człony sekularne, nie osculacyjne.
Widoczność w linii widzenia (zasłonięcie przez Ziemię + maska elewacji) validated Satelita antypodalny zasłonięty, satelita skierowany radialnie na zewnątrz na elewacji 90 deg, satelita styczny na horyzoncie — dokładne testy wyprowadzone ręcznie.
Widoczność -> stan GNSS -> oś czasu validated >=4 widocznych = nominalny, 1-3 zdegradowany, 0 odmowa; generator Walker-delta; test integracyjny napędza przebieg holdover zegara z wyprowadzonej osi czasu.
Optymalizator projektu konstelacji + geometria „streets-of-coverage” validated (model) src/walker.rs: optimize_walker_design przeszukuje siatkę {planes × sats × inclination} i zwraca komórkę, która najlepiej spełnia DesignObjective (min. satelitów dla celu pokrycia / maks. pokrycie / min. najgorsze PDOP (PDOP: współczynnik rozmycia dokładności pozycji)) — test stwierdza, że wybór jest równy niezależnemu przeszukaniu wyczerpującemu tego samego przeglądu, a przykład rozwiązany potwierdza, że projekt GPS (Global Positioning System) Walker 24/6/1 pokrywa co najmniej tak dobrze jak przerzedzony 18-satelitarny. Analityczne zamknięte postaci streets-of-coverage (coverage_half_angle_rad λ = arccos(Re/r·cos ε) − ε; street_half_width_rad cos c = cos λ / cos(π/s), Rider/Beste) są ręcznie zweryfikowane względem geometrii podręcznikowej (GPS przy masce 5°: λ ≈ 71,16°, półszerokość ulicy dla 4 satelitów ≈ 62,83°) i wykrywają lukę niedoboru satelitów (λ < π/s ⇒ None). Pełny solver Ridera minimalnej liczby satelitów dla pokrycia globalnego (liczba płaszczyzn wrażliwa na szew) nie jest jeszcze zaimplementowany.
Rozmycie dokładności (GDOP/PDOP/HDOP/VDOP/TDOP (GDOP: geometryczny współczynnik rozmycia dokładności; HDOP: poziomy współczynnik rozmycia dokładności; VDOP: pionowy współczynnik rozmycia dokładności; TDOP: czasowy współczynnik rozmycia dokładności)) -> dokładność pozycji validated src/orbit.rs: Q=(HᵀH)⁻¹ z macierzy projektowej linii widzenia. Zewnętrzna wyrocznia (tests/dop_reference.rs): pięć współczynników DOP odtwarza te obliczone przez gnss_lib_py 1.0.4 (Stanford NAV Lab — niezależną, recenzowaną bibliotekę GNSS, używaną tu tak, jak ERFA (Essential Routines for Fundamental Astronomy) jest używana dla układów odniesienia) na 8 geometriach od dobrze uwarunkowanych do prawie osobliwych (DOP w setkach), z dokładnością względną 1e-6; pochodzenie i regeneracja w tests/fixtures/dop/. Jako dodatkowa kontrola postaci zamkniętej geometria regularnego czworościanu odtwarza analityczne DOP (PDOP 1,5, TDOP 0,5, GDOP √2,5, HDOP √1,5, VDOP √0,75) z dokładnością 1e-9. Sigma pozycji = PDOP × błąd odległości równoważny użytkownika.
Błąd pozycji = σ_UERE × DOP dla własnego rozwiązania najmniejszych kwadratów silnika modelled src/dop_error_mc.rs, tests/uere_dop_monte_carlo.rs: Monte Carlo z ziarnem (N = 20 000 epok na geometrię, σ = 1,5 m, ziarno ChaCha8 36 + i) dla pvt::solve_spp z wagami jednostkowymi, rozwiązywane od pozycji prawdziwej, na 8 geometriach z tests/fixtures/dop/dop_reference.csv (tych, których DOP jest dopasowany do gnss_lib_py), względem σ²·Q, gdzie Q jest czynnikiem kowariancji samego jądra orbit::dop (orbit::dop_cofactor, ta sama arytmetyka). Tolerancje zarejestrowane z góry (commit e50c88d2, przed pierwszym przebiegiem, według notatki projektowej geometrii 0,36, sekcja 5,2), każda jako liczba błędów standardowych: wariancje wschód, północ, góra i zegar w granicach 5 %; RMS H/V/P w granicach 2,5 %; korelacja wschód–północ w granicach 0,035; średnie w granicach 5 błędów standardowych; ułamek 95 % elipsy poziomej w granicach 0,95 ± 0,0077. Pierwszy przebieg: wszystkie 104 kontrole zaliczone (najgorsza wariancja 3,2 %, RMS 1,6 %, korelacja 0,012, średnia 2,2 błędu standardowego, elipsa 0,0039). Kontrole negatywne zawodzą zgodnie z wymaganiem: podwojone PDOP zawodzi na każdej geometrii; błędy rosnące jak 1/sin(elewacja) względem nieważonego Q zawodzą w kontroli wariancji na każdej geometrii, której najniższy satelita leży poniżej 20°. Jak to się składa z wierszem powyżej: tamten wiersz sprawdza DOP tych geometrii względem gnss_lib_py; ten dodaje krok od tych współczynników do metrów przez solver silnika. Pierwsza, osobna kontrola jest zachowana obok (src/dop_error_ci.rs, tests/position_error_dop_ci.rs, uruchomiona przed wstępną rejestracją i tak zgłoszona): cztery ręcznie dobrane nieba (otwarte, skupione, kanion, pół nieba; σ 1 m) z przedziałami ufności chi-kwadrat na poziomie 1e-6 łącznie na 20 kontroli; stosunki od 0,987 do 1,009 oraz własne kontrole negatywne (błąd DOP 10 %, błędy 1/sin(elewacja)) zawodzą zgodnie z wymaganiem. Dlaczego MODELLED: brak zewnętrznego zbioru danych; nie pokazuje, że błąd rzeczywistego odbiornika podąża za modelem, a σ_UERE jest daną wejściową.
Dostępność wielokonstelacyjna validated src/orbit.rs: dodatkowe [[constellations]] są łączone w jeden zbiór satelitów do widoczności/DOP; test łącznej liczby potwierdza sumę.
Jonosfera z transmisji (Klobuchar, IS-GPS-200 (IS: Interface Specification)) → ukośne opóźnienie L1 validated src/gnss_sim.rs: klobuchar_delay_m, ośmiowspółczynnikowy model jednoczęstotliwościowy z transmisji. Zewnętrzna wyrocznia (tests/klobuchar_reference.rs): ukośne opóźnienie L1 odtwarza ionmodel z RTKLIB (otwartoźródłowej biblioteki pozycjonowania kinematycznego w czasie rzeczywistym) (tomojitakasu/RTKLIB, src/rtkcmn.c — de facto otwarty wzorzec GNSS, skompilowany ze źródeł i uruchomiony niezależnie) na 10 przypadkach obejmujących elewację, azymut, czas lokalny i dwa zestawy współczynników (domyślny kshana + RTKLIB), z dokładnością < 1e-4 m. Czytnik map TEC (TEC: całkowita zawartość elektronów) IONEX (format wymiany map jonosfery) dla plików GIM (globalna mapa jonosfery) już istnieje (src/ionex.rs, parse_ionex z dwuliniową interpolacją przestrzenną i czasową oraz odwzorowaniem ukośnym, testowany jednostkowo w crate); porównanie tej interpolacji z rzeczywistym produktem GIM CODE (Center for Orbit Determination in Europe) jest nadal zadaniem na później. Sam model z transmisji jest sprawdzony względem zewnętrznego wzorca.
Jądro detekcji RAIM/ARAIM (ARAIM: advanced receiver autonomous integrity monitoring) (χ² / niecentralny χ² / normalny) → progi i mnożniki validated src/raim.rs: próg detekcji snapshot / rozdzielenia rozwiązań / ARAIM (chi2_quantile), niecentralność niewykrycia pbias=√λ (noncentral_chi2_cdf) oraz mnożniki K_fa/K_md/K_V (normal_quantile) są wszystkie obliczane z niezależnej od bibliotek zregularyzowanej niepełnej funkcji gamma. Zewnętrzna wyrocznia (tests/raim_reference.rs): 171 przypadków odtwarza SciPy 1.17.0 (scipy.stats.chi2/.ncx2/.norm + optimize.brentq — niezależna implementacja Cephes/Boost, inny algorytm) w zakresach roboczych P_fa / P_md / redundancji, z dokładnością ≤ 1e-6 względnej. Geometria otaczająca jądro (nachylenie/kowariancja z (GᵀG)⁻¹) to jądro DOP sprawdzone względem gnss_lib_py. Zakres: ten wiersz przypina jądro statystyczne. Wartość poziomu ochrony alokacji ARAIM MHSS (multiple-hypothesis solution separation) jest przypięta osobno względem opublikowanego przykładu rozwiązanego Podgrupy Technicznej ARAIM WG-C (Working Group C) (tests/araim_reference_vectors.rs, VPL (pionowy poziom ochrony) 18,2926 m wobec 18,3 m, HPL (poziomy poziom ochrony) 13,4063 m wobec 13,45 m, w granicach własnej tolerancji wzorca 0,05 m; zob. notatkę o standardach poniżej i ARAIM_REFERENCE.md).
Poziom ochrony SBAS (system wspomagania satelitarnego) (DO-229E Dodatek J) → poziomy ochrony: poziomy / pionowy (HPL / VPL) validated src/sbas.rs: sbas_protection_level, ważone LS (LS: najmniejsze kwadraty) D=(GᵀWG)⁻¹ → główna oś poziomej elipsy błędu + pionowe σ, skalowane współczynnikami K z DO-229E. Zewnętrzna wyrocznia (tests/sbas_reference.rs): HPL w kshana odtwarza fork RTKLIB SBAS-PL (zsiki/rtklib_ws waasprotlevels(), implementacja „DO-229D Appendix J” Sikiego i Takácsa 2017), uruchomiony przez rnx2rtkp -ws na rzeczywistych danych EGNOS (European Geostationary Navigation Overlay Service) (komunikaty z transmisji GEO (orbita geostacjonarna) PRN120 + rzeczywisty RINEX (Receiver Independent Exchange Format) BUTE/Budapeszt, 2017-02-19), na 6 epokach z dokładnością < 2e-3 m. Sigma na satelitę to własny pełny budżet SBAS wyroczni (UDRE (user differential range error) + jonosfera GIVE (grid ionospheric vertical error) + tropo + pokładowy). ESA gLAB v6.0.0 (core/filter.c) skompilowano i potwierdzono, że używa identycznej konwencji. Uwaga o K_V: obie wyrocznie zaokrąglają MOPS (minimum operational performance standards) K_V → 5,33; kshana używa dokładnego Φ⁻¹(1−5e-8)=5.3267 (VPL mniejszy o ~0,06 %), więc pion jest sprawdzony jako d_U wolne od współczynnika K (= VPL wyroczni / 5,33). HPL jest dopasowany bezpośrednio (K_H = 6,0 po obu stronach).
Rzeczywista geometria konstelacji z TLE (wiersz 2 / keplerowska) validated (parsowanie) src/tle.rs: parsuje średnie elementy keplerowskie z wiersza 2 (półoś wielka ze średniego ruchu); znany zestaw elementów ISS (International Space Station) w obiegu w obie strony daje poprawne elementy i okres. Dla bloku zawierającego tylko wiersz 2 propagacja to dwa ciała silnika (+ opcjonalnie J2) dla elementów średnich — poprawna dla migawki z wspólnej epoki, z czasem odbiegająca od SGP4 (Simplified General Perturbations 4).
Propagacja SGP4 / SDP4 (Simplified Deep-space Perturbations 4) (pełne TLE) validated src/sgp4.rs: pełne SGP4 bliskiej Ziemi + SDP4 dalekiej przestrzeni (sekularne/okresowe człony księżycowo-słoneczne + rezonans geopotencjału 12 h / 24 h). Sprawdzone w tests/sgp4_verification.rs względem oficjalnych wektorów AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 („Revisiting Spacetrack Report #3”) — wszystkie 666 stanów wzorcowych (przypadki bliskiej Ziemi, dalekiej przestrzeni, rezonansowe i kodów błędów) zgadzają się z najgorszym błędem pozycji ≈ 4,1 mm. Pełny zestaw dwuwierszowy (wiersz 1 + wiersz 2) jest propagowany przez SGP4; sam wiersz 2 pozostaje keplerowski; oba można mieszać. Układ to TEME (true equator, mean equinox), stosowany spójnie dla użytkownika i satelitów (bez redukcji TEME→ECEF (ECEF: układ związany z Ziemią, ze środkiem w Ziemi) — wystarczająca dla geometrii dostępności/DOP).
Nutacja IAU (International Astronomical Union) 2000A / 2000B + redukcja TEME→GCRS (GCRS: Geocentric Celestial Reference System) validated src/nutation.rs: pełny szereg IAU 2000A (678 członów księżycowo-słonecznych + 687 planetarnych, nutation_iau2000a) i 77-członowe obcięcie 2000B (nutation_iau2000b) są sprawdzone co do bitu względem opublikowanych wektorów wzorcowych SOFA/ERFA (SOFA: Standards of Fundamental Astronomy) przy JD_TT 2453736,5 — eraNut00a daje Δψ = −0.9630909107115518e-5, Δε = 0.4063239174001679e-4; eraNut00b daje Δψ = −0.9632552291148363e-5, Δε = 0.4063197106621160e-4 — oba z dokładnością 1e-13 rad. Tabela 2000A jest generowana maszynowo ze źródła ERFA nut00a przez tools/gen_nut00a.py (odtwarza zatwierdzony nutation_iau2000a_data.rs co do bitu). Macierz nutacji (iauNumat), równanie równonocy i pełny łańcuch TEME→TOD→MOD→GCRS (TOD: true of date; MOD: mean of date) (teme_to_gcrs, Vallado AIAA-2006-6980) są testowane pod kątem własności właściwej rotacji/obiegu w obie strony/precesji plus nutacji, macierz nutacji względem ERFA numat element po elemencie z dokładnością 1e-14, a cały łańcuch TEME→GCRS względem opublikowanego przykładu TEME→GCRF Vallado (AIAA 2006-6753, 2004-04-06) z dokładnością 0,11 m (tests/frame_reference_vectors.rs); zanim dodano tę kontrolę od początku do końca, macierz nutacji niosła Δψ ze złym znakiem, obrót o 2·Δψ (około 25″), którego testy własności nie mogły zobaczyć (zob. CHANGELOG, Unreleased, Fixed); 2000A i 2000B zgadzają się do < 1 mas, jak wymagane. Łańcuch opiera się na równonocy/GMST (GMST: Greenwich mean sidereal time); redukcja CIO (X,Y,s) bez równonocy i jej niezależna kontrola numeryczna ANISE/SPICE (ANISE: Attitude, Navigation, Instrument, Spacecraft, Ephemeris — czysto rustowy zestaw narzędzi geometrii planetarnej; SPICE: Spacecraft, Planet, Instrument, C-matrix, Events) (≤ 3,6 m na orbicie GNSS, dobrze w granicach celu < 10 m) znajdują się w wierszu CIO poniżej.
Model głównego pola geomagnetycznego IGRF-14 (IGRF: International Geomagnetic Reference Field) validated src/igrf.rs: pole w harmonikach sferycznych znormalizowane Schmidta według IAGA (International Association of Geomagnetism and Aeronomy) (stopień/rząd 13, 2025,0 + zmienność sekularna; współczynniki wygenerowane maszynowo z oficjalnego igrf14coeffs.txt przez tools/gen_igrf.py, odtwarzające igrf_data.rs co do bitu). Sprawdzone na pięciu niezależnych frontach: (1) dokładne wyrywkowe kontrole współczynników względem pliku IAGA (g₁⁰=−29350,0, g₁¹=−1410,3, h₁¹=4545,5 nT); (2) synteza stopnia 1 odtwarza dokładne pole przechylonego dipola w postaci zamkniętej (B_r,B_θ,B_φ) z dokładnością 1e-6; (3) pełne analityczne pole stopnia 13 równa się −∇V potencjału skalarnego (różnice skończone, z dokładnością 1e-4) — ćwicząc pochodne Legendre'a i człon 1/sinθ od początku do końca; (4) oś dipola odtwarza znany geomagnetyczny biegun północny (~80,7°N, −72,7°E) i siłę dipola (~29,7 µT), a globalne pole mieści się w fizycznym paśmie 22–67 µT z poprawnym znakiem inklinacji na półkulach; oraz (5) zewnętrzna wyrocznia — pełna synteza odtwarza wartości z oficjalnej usługi internetowej British Geological Survey IGRF-14 przy 2025,0 (geodezyjna, wysokość WGS-84 (WGS: World Geodetic System)) z dokładnością < 2 nT dla X/Y/Z/F i < 0.02° dla D/I w czterech punktach, w tym na wysokości 400 km (synthesis_matches_the_official_bgs_igrf14_values_at_2025).
Redukcja GCRS↔ITRS (ITRS: International Terrestrial Reference System) IAU 2006/2000A oparta na CIO validated src/cio.rs: łańcuch niebieski-do-ziemskiego bez równonocy. Współrzędne CIP (Celestial Intermediate Pole) (X, Y) i 66-członowy szereg lokatora CIO s są sprawdzone co do bitu względem opublikowanego wektora SOFA/ERFA eraXys06a przy JD_TT 2453736,5 — X=0.5791308482835292617e-3 (1e-14), Y=0.4020580099454020310e-4 (1e-15), s=-0.1220032294164579896e-7 (1e-18); macierz GCRS→CIRS (CIRS: Celestial Intermediate Reference System) względem eraC2ixys (wszystkie dziewięć elementów z dokładnością 1e-12); kąt obrotu Ziemi (ERA) względem eraEra00(2400000.5, 54388.0) = 0,4022837240028158102 (1e-12). Tabela s jest generowana maszynowo ze wzorca ERFA s06.c przez tools/gen_s06.py (odtwarza cio_s06_data.rs co do bitu). Pełny gcrs_to_itrs_matrix (CIO eraC2tcio = ruch bieguna · ERA · GCRS→CIRS) jest testowany pod kątem właściwej rotacji i obiegu w obie strony oraz wykazano jego spójność ze starszą redukcją TEME równonocy/GMST-1982 w granicach 1 m przy promieniu 7 000 km (konwencje różnią się tam o około 5 cm). Niezależna kontrola krzyżowa strony trzeciej (xval/anise-frames/): ten sam gcrs_to_itrs_matrix jest porównywany z ANISE (czysto rustową reimplementacją NAIF/SPICE (NAIF: Navigation and Ancillary Information Facility)) obracającą GCRF→ITRF93 (GCRF: Geocentric Celestial Reference Frame; ITRF93: International Terrestrial Reference Frame 1993) z earth_latest_high_prec.bpc z JPL (Jet Propulsion Laboratory), przy identycznych parametrach orientacji Ziemi IERS (International Earth Rotation and Reference Systems Service) finals2000A podanych obu stronom, na ośmiu kwartalnych epokach 2020–2023. Obie niezależne realizacje układu zgadzają się z maksymalnym względnym obrotem 0,028″ — ≤ 0,86 m na ziemi, ≤ 0,93 m na LEO (niska orbita okołoziemska), ≤ 3,6 m na orbicie GNSS (średni kąt 0,023″). To jest kontrola krzyżowa układu „< 10 m” z ROADMAP, wykonana; reszta to oczekiwana różnica modelu/datum ITRF93 względem IERS-2010-CIO, a nie defekt (kotwicą co do bitu pozostają wektory SOFA/ERFA powyżej). ANISE to crate na licencji MPL-2.0 (MPL: Mozilla Public License) / edition-2024, więc kontrola mieszka w samodzielnym podcrate wyłączonym z workspace, który nigdy nie dotyka opublikowanego grafu zależności kshana ani żadnej domyślnej bramki CI.
Eksport SP3 (Standard Product 3, format precyzyjnych orbit) w obie strony (konstelacja → SP3-c → ponowne sparsowanie) validated tests/sp3_export_roundtrip.rs: rzeczywista migawka Celestrak gps-ops (30 satelitów GPS) jest propagowana przez SGP4, eksportowana do SP3-c (Sp3File::from_propagators → to_sp3_string), sparsowana ponownie (parse_sp3), a odzyskane pozycje ECEF są porównywane z prawdą SGP4 w każdej epoce przez 24 h — najgorsza reszta < 0,5 m (milimetrowa serializacja zapisującego; tolerancja 10 m klasy TLE (TLE: dwuwierszowy zestaw elementów) z kamienia milowego jest spełniona z dużym zapasem). Ścieżka CLI (interfejs wiersza poleceń) --export-sp3 też jest pokryta: dołączony scenariusz orbity eksportuje ponownie parsowalny 30-satelitarny SP3, a scenariusz nieorbitalny jest odrzucany.
Rzeczywista geometria konstelacji GPS z TLE (SGP4 → ECEF) validated tests/igs_real_data.rs: autentyczna migawka Celestrak gps-ops (2021-07-28, 30 działających satelitów GPS; pochodzenie w tests/fixtures/celestrak/NOTICE) jest parsowana, a każdy satelita propagowany przez sprawdzone jądro SGP4 do wspólnej chwili i obrócony TEME→ECEF. Stwierdza, że cała konstelacja ląduje na powłoce GPS MEO (średnia orbita okołoziemska) w granicach 1% oraz że z otwartego nieba w średniej szerokości geograficznej rzeczywisty zestaw wszystkich widocznych (dziewięć satelitów) daje PDOP 1,64, przy czym rozmycie pionowe przekracza poziome (jak musi dla użytkownika naziemnego). To ćwiczy SGP4 na rzeczywistej konstelacji, obok ścieżek rzeczywistych danych SP3 (precyzyjnych) i RINEX (z transmisji).
Generator Walkera ze średnimi elementami SGP4 validated src/walker.rs: zaprojektowany wzorzec Walker-delta jest emitowany jako średnie elementy SGP4 (średni ruch Kozai dobrany tak, by półoś wielka SGP4 trafiła w docelową powłokę) i propagowany przez sprawdzone jądro. Testy: 24-satelitarny Walker podobny do GPS leży na powłoce MEO w granicach 1%, płaszczyzny są rozmieszczone dokładnie co 90° w RAAN (rektascensja węzła wstępującego) odzyskanym z normalnych orbit, a średni ruch odtwarza okres powłoki GPS ~718 min.
Przegląd PDOP konstelacji + wskaźniki jakości (FoM) pokrycia/powrotu validated (monotoniczność) src/walker.rs: pdop_sweep zestawia w tabeli pokrycie oraz medianę/najgorsze PDOP na siatce {planes × sats × inclination}; coverage_revisit podaje ułamek pokrycia i przerwy między powrotami w punkcie naziemnym. Sprawdzone fizycznymi monotonicznościami, których musi przestrzegać kompromis projektowy: dodawanie satelitów nigdy nie obniża pokrycia i ściśle obniża medianę PDOP (pełny 24-satelitarny projekt pokrywa w sposób ciągły przy PDOP ~1,7), a zagęszczanie przerzedzonej konstelacji ściśle zmniejsza najgorszą przerwę powrotu. Średnia przerwa powrotu nigdy nie przekracza maksimum. To tabele kompromisów geometrycznych, a nie certyfikowany bilans łącza/pokrycia.

Uczciwe ujęcie: to deterministyczna warstwa geometrii (orbity kołowe, kulista Ziemia o średnim promieniu 6371 km, czysta linia widzenia). Ustala dostępność i geometryczną dokładność pozycji (rozmycie dokładności × reprezentatywny budżet błędu odległości) z rzeczywistej geometrii, a nie rozwiązanie nawigacyjne z precyzyjnych efemeryd. Wzorzec orbit-gnss-challenged.toml umieszcza statek kosmiczny wewnątrz powłoki GNSS: utrzymuje on poprawkę tylko przez ~59% doby, zegar kwantowy utrzymuje rozwiązanie czasu 5 ns przez każdą lukę (dostępność 1,0), a zegar w skali układu scalonego utrzymuje ~0,73.

Propagator numeryczny (Cowella) i model sił#

Propagator numeryczny (src/propagator.rs) całkuje hierarchiczny model sił (src/forces.rs) adaptacyjnymi całkowaczami (src/integrator.rs). Każdy poniższy człon jest sprawdzony względem prawdy analitycznej lub ręcznie wyprowadzonej postaci zamkniętej; perturbacje są domyślnie wyłączone, więc wydane wzorce złote pozostają nietknięte. Model złożony jest też sprawdzany krzyżowo innym narzędziem: tests/numerical_cowell_propagator_reference.rs uruchamia 11 przypadków LEO i GTO (geostacjonarna orbita transferowa), 275 epok godzinowych, względem propagatora DormandPrince853 z Orekit 12,2, a zachowawcze poziomy (dwa ciała → J2–J6 → Słońce/Księżyc → kulowe SRP) zgadzają się z najgorszą wartością 0,08 m przez 24 h (VALIDATED w macierzy); poziom oporu jest tylko scharakteryzowany (333 m) i pozostaje MODELLED.

Wielkość Status Dowody
Propagator Cowella względem analitycznej prawdy Keplera validated src/propagator.rs: orbita nieperturbowana (dwa ciała) odtwarza dokładne rozwiązanie Keplera w zmiennych uniwersalnych z dokładnością poniżej metra na orbicie LEO przez 24 h (ciaśniejsza bramka niż „względem odniesienia numerycznego < 10 m”); energia właściwa i moment pędu zachowują się z dokładnością względną ~1e-9; regresja węzła J2 odtwarza zamkniętą postać j2_secular_rates do teorii pierwszego rzędu (w granicach 2 %, reszta O(J2²)). solve_kepler_checked zwraca Err zamiast po cichu błędnej odpowiedzi, gdy Newton nie zbiega (w pobliżu perygeum e = 0,999). Solidny solve_kepler_robust (starter Markleya 1995, src/kepler.rs) zbiega tam i dla 0 ≤ e ≤ 0,999999, w granicach 0,9 ε·|E| od 50-cyfrowych pierwiastków mpmath (tests/kepler_mpmath_oracle.rs).
Adaptacyjne całkowacze (RK4 (Runge–Kutta czwartego rzędu) z podwajaniem kroku + zagnieżdżona para Dormanda–Prince'a RK5(4), DP5(4) poniżej) validated src/integrator.rs: RK4 całkuje y' = y → e do < 1e-9, pokazuje spadek błędu ~16× przy zmniejszeniu kroku o połowę (zbieżność 4. rzędu) i zachowuje oscylator harmoniczny przez okres. Zagnieżdżony estymat błędu DP5(4) jest O(h⁵) (zmniejszenie kroku o połowę obcina go ~32×), całkuje oscylator przez 50 okresów, zachowując energię z dokładnością < 1e-6, i osiąga ten sam punkt końcowy przy tej samej tolerancji w mniejszej liczbie obliczeń funkcji niż podwajanie kroku; propagate_dopri przechodzi tę samą podmetrową bramkę Keplera i zgadza się ze ścieżką RK4 z dokładnością < 1 m na orbicie J2..J6. DOP853 (integrate_dop853): para 8(5 3) Hairera z gęstym wyjściem odtwarza DOP853 z SciPy 1.18.1 krok po kroku (pojedynczy krok w granicach 5.6e-15; identyczne liczby kroków w przebiegach e = 0,7 i Arenstorfa, jedna zmiana akceptacji/odrzucenia na 501 kroków w przebiegu LEO; stany końcowe w granicach 1.6e-12) i dorównuje dokładnemu rozwiązaniu Keplera tak samo dobrze jak SciPy (tests/dop853_scipy_oracle.rs).
Pole harmonik zonalnych J2–J6 validated src/forces.rs: zonal_accel jest sprawdzane na trzy sposoby — redukuje się do j2_accel sprawdzonego 666 wektorami z dokładnością maszynową, gdy ograniczy się je do [J2]; zgadza się z numerycznym gradientem własnego potencjału zonalnego w pełnym polu J2..J6 (złoty standard pola zachowawczego); a nieparzyste J3 wobec parzystych J2/J4..J6 pokazują charakterystyczną (anty)symetrię północ–południe względem z → −z. Propagowana orbita J2..J6 zachowuje całkowitą energię z dokładnością ~1e-8 w ciągu doby.
Grawitacja trzeciego ciała (Słońce i Księżyc) validated src/forces.rs + src/ephem.rs: third_body_accel zgadza się z dokładnym gradientem swojego potencjału zaburzającego, zanika w geocentrum i trafia w podręcznikowe wielkości LEO (~5e-7 m/s² Słońce, ~1.1e-6 m/s² Księżyc). Niskoprecyzyjne efemerydy Słońca Montenbrucka–Gilla trafiają w ręcznie wyprowadzone kotwice J2000 (odległość peryhelium ≈ 1.471e11 m, ~−23° deklinacja przesilenia, ruch ~1°/dobę); efemerydy Księżyca pozostają w obwiedni perygeum/apogeum, odtwarzają średnią odległość ~384 400 km, nigdy nie przekraczają inklinacji 5,3° i wracają w granice 1° po jednym miesiącu syderycznym. Okablowanie prawej strony (RHS) sterowanej epoką jest dokładne co do bitu (człon RHS równa się third_body_accel w próbkowanej pozycji przy t = 0 i t = 1 dobie), a przesunięcie epoki o ćwierć roku daje inną trajektorię.
Ciśnienie promieniowania słonecznego (SRP) + cień stożkowy validated src/forces.rs: srp_accel (kula armatnia ν·P☉·cᵣ·(A/m)·(AU/d)²·d̂) jest identyczne co do bitu z postacią zamkniętą w pełnym słońcu, przypina ciśnienie promieniowania na 1 AU (AU: jednostka astronomiczna) do ≈ 4.5398e-6 N/m², mieści się w paśmie LEO ~1.36e-7 m/s² odpychając od Słońca, spada do ćwierci, gdy odległość od Słońca się podwaja (odwrotność kwadratu), i jest dokładnie zerowe głęboko w umbrze. conical_shadow daje ν = 1 w pełnym słońcu i ν = 0 w całkowitej umbrze (dokładnie), gładką monotoniczną półcień rosnącą 0 → 1 w paśmie [b−a, b+a], które wykracza poza cylinder umbry.
Opór atmosferyczny (pierwszy człon zależny od prędkości) validated src/forces.rs: atmospheric_density (odcinkowo wykładnicza Tabela 8-4 Vallado) kotwiczy na 1,225 kg/m³ na poziomie morza, obcina poniżej powierzchni, maleje monotonicznie przez LEO, mieści się w paśmie ~1e-12 kg/m³ na 400 km z fizycznie odzyskaną wysokością skali ~58 km; drag_accel przeciwstawia się współobracającej się prędkości względnej o wielkości LEO ~2e-6 m/s². Kontrola sygnaturowa: orbita 300 km traci energię właściwą monotonicznie, a jej półoś wielka maleje o ograniczone ~km/dobę, podczas gdy bazowy przypadek próżni zachowuje energię z dokładnością < 1e-9.
Poprawka relatywistyczna postnewtonowska (Schwarzschilda) validated src/forces.rs: relativistic_accel (postać IERS β = γ = 1 a = (μ/c²r³)·{[4μ/r − v²]·r + 4(r·v)·v}) zwija się na orbicie kołowej do postaci zamkniętej 3μ²/(c²r³)·r̂ (radialnie, na zewnątrz, składowe poza osią dokładnie zerowe), pokazuje podręcznikowy stosunek LEO ≈1.9e-9 do dwóch ciał, zgadza się z ręcznie uproszczoną postacią radialno-prędkościową μ(4μ + 3v²r)/(c²r³) z dokładnością < 1e-12 i w propagatorze perturbuje orbitę, utrzymując półoś wielką poniżej metra/dobę — zachowawcze przeciwieństwo zaniku od oporu.

Uczciwy zakres: wydane domyślne ForceModel całkują pole zonalne. Wysokostopniowe pole tesseralne EGM2008 (src/gravity_sh.rs, stopień/rząd 70), pływy stałe/oceaniczne/atmosferyczne (src/tides.rs) oraz człon Lense–Thirringa (wleczenie układu odniesienia) są teraz zaimplementowane i złożone w precyzyjny model sił dopasowywania efemeryd (src/precise_od.rs — zob. niżej). Pole tesseralne jest też opcjonalnym członem ForceModel Cowella (propagator::Geopotential, domyślnie wyłączonym), sprawdzonym względem Orekit 12,2 HolmesFeatherstoneAttractionModel do stopnia/rzędu 70 (6 przypadków przez 24 h, najgorsze |Δr| 0,036 m; tests/cowell_tesseral_orekit_oracle.rs). Istnieją dwa ewaluatory pola: historyczny acceleration (pochodne sferyczne; poprawny do stopnia ~180 z dala od biegunów; wyniki przypięte) i acceleration_hf (zmodyfikowana kolumna w przód Holmesa–Featherstone'a 2002, gradient bez 1/cos φ; poprawny do stopnia 2190 na każdej szerokości). EGM2008 do 2190 jest wczytywany w czasie działania (from_gfc_file, scripts/fetch_egm2008.sh, niedołączony). acceleration_hf zgadza się z Orekit 12,2 z dokładnością 7.3e-17 m/s² w ośmiu punktach do stopnia 2190; pozostaje MODELLED, ponieważ pyshtools nie spełniło zarejestrowanego z góry progu w pobliżu biegunów (kontrola mpmath lokalizuje błąd w pyshtools; xval/high-degree-gravity/). Orbita 24 h 200×200 zgadza się z Orekit z dokładnością 0,13 m, ale jej zarejestrowana z góry kontrola czułości dla stopnia 70 nie została spełniona (0,73 m < 1 m), więc stopnie 71–200 są na orbicie scharakteryzowane, a nie sprawdzone względem niezależnego wzorca (xval/cowell-tesseral-200-orekit/). Gęstość termosferyczna NRLMSISE-00 (NRLMSISE: model atmosfery Naval Research Laboratory z użyciem spektrometru mas i radaru rozpraszania niekoherentnego) jest przeniesiona (src/nrlmsise00.rs: identyczna co do bitu z portem C w domenie publicznej na 720 punktach, w granicach 1.9e-6 względnej od pymsis, 17 opublikowanych przypadków testowych odtworzonych; tests/nrlmsise00_reference.rs) i jest opcjonalnym poziomem gęstości oporu (forces::DensityModel, ForceModel::drag_density; domyślnie pozostaje statyczny model Vallado). To sprawdza port, a nie dokładność modelu względem zmierzonej gęstości. Słońce i Księżyc z DE440 (DE: Development Ephemeris) to opcjonalny poziom efemeryd (ForceModel::with_ephemeris). Cień SRP spłaszczonej Ziemi WGS-84 jest opcjonalny (ForceModel::srp_shadow) i zgadza się ze współczynnikiem oświetlenia Orekit 12,2 w granicach 7.4e-9 na 2400 geometriach (tests/srp_oblate_shadow_orekit_oracle.rs); jego wariant z pociemnieniem brzegowym nie ma zewnętrznej wyroczni (MODELLED). Poziom oporu NRLMSISE-00 zgadza się z własnym oporem NRLMSISE-00 w Orekit 12,2 przez 24 h z dokładnością 0,03 m przy przemieszczeniu od oporu do 142 km (tests/drag_tier_orekit_oracle.rs, VALIDATED przy wspólnych konwencjach). Kontrola krzyżowa z GMAT (General Mission Analysis Tool) pozostaje zadaniem następczym.

Pływy na geopotencjale (src/tides.rs)#

Zależne od czasu poprawki ΔC̄_nm, ΔS̄_nm do współczynników Stokesa (IERS Conventions 2010, Rozdział 6), sprawdzone względem opublikowanych liczb samych konwencji — a nie względem innego narzędzia.

Wkład Status Dowody
Pływ stały Ziemi (IERS równ. 6,6 / 6.8b / 6,14) validated tests/tides_iers.rs: stały (zerowej częstotliwości) pływ ΔC̄₂₀ ląduje w granicach 1 % opublikowanej przez IERS wartości −4,1736×10⁻⁹ (anelastyczne liczby Love'a); przykład rozwiązany Step-2 K1 jest odtworzony co do bitu (amplitudy sin/cos 470,9 / −30,2 ×10⁻¹² z dokładnością 0,1×10⁻¹²); ścieżka znormalizowanych wielomianów Legendre'a jest przypięta zamkniętymi ręcznymi wartościami niezależnymi od rekurencji.
Pływ oceaniczny (IERS równ. 6,15, FES2004 (atlas pływów Finite Element Solution 2004), 8 składowych) validated Dołączony podzbiór FES2004 (tools/gen_fes2004.py → src/fes2004_data.rs, parsowanie Doodson→mnożnik) odtwarza dokładnie współczynniki źródłowe M2 (2 2); faza Doodsona K1 równa się θ_g + π; wielkość sektorialna stopnia 2 jest fizyczna i o rząd mniejsza od pływu stałego.
Atmosferyczny pływ powietrzny S2 (Ray 2001, NASA (National Aeronautics and Space Administration) GSFC (Goddard Space Flight Center)) validated Dołączone harmoniki Raya przeliczane przez relację obciążenia powierzchniowego (równ. 6,21) dają szczytowe ΔC̄₂₂ ≈ 4×10⁻¹¹ (~10 % członu oceanicznego M2). Uczciwe zastrzeżenie: nie istnieje opublikowana wyrocznia współczynników geopotencjału dla pływu powietrznego, więc jest on sprawdzony przez integralność źródła + wielkość, czyli słabszy próg niż pływy stałe/oceaniczne.

Manewry i projektowanie trajektorii (src/maneuver.rs)#

Aspekt Status Dowody
Impulsowe ΔV + propagacja kowariancji validated Nieciągłość prędkości z przenoszoną dalej kowariancją 6×6 (deterministyczny impuls ⇒ tożsamościowa STM (macierz przejścia stanu); kowariancja błędu wykonania obraca się z układu impulsu — ECI (inercjalny związany ze środkiem Ziemi) lub LVLH (lokalna pionowa, lokalna pozioma) — do bloku prędkości).
Całkowanie ze skończonym impulsem względem Ciołkowskiego validated Całkowanie ze stałym ciągiem na łuku impulsu (masa jako stan), którego osiągnięte ΔV zgadza się z zamkniętym równaniem rakiety Ciołkowskiego z dokładnością lepszą niż 0,01 %.
Solver Lamberta (Izzo 2015) w obie strony validated Wynik Lamberta dla jednego obrotu (r1, r2, czas lotu ⇒ v1, v2) jest przepuszczony w obie strony przez dokładny propagator Keplera w zmiennych uniwersalnych — musi wylądować z powrotem w r2.
Przegląd porkchop względem progu Hohmanna validated Minimum siatki C3 startu × przylotu / V∞ przylotu jest sprawdzane względem analitycznego progu C3 transferu Hohmanna dla dwóch współpłaszczyznowych orbit kołowych.
Solver Lamberta względem niezależnej biblioteki validated tests/lambert_reference.rs: 13 transferów jednoobrotowych od LEO przez GEO do heliocentrycznych, ruchem prostym i wstecznym, względem lamberthub 1.0.0 izzo2015; najgorsza różnica prędkości brzegowej 7e-12 m/s.

Uczciwy zakres: brak optymalizatora trajektorii, brak wieloobrotowych gałęzi Lamberta oraz syntetyczny współpłaszczyznowo-kołowy model heliocentryczny (bez planetarnych efemeryd DE, więc kontrola krzyżowa C3 Ziemia–Mars z GMAT nie została wykonana).

Wyznaczanie orbity (OD) (src/orbit_determination.rs, src/batch_ls.rs)#

Aspekt Status Dowody
Wsadowy korektor Gaussa–Newtona validated Ogólny solver gauss_newton osiąga dokładne rozwiązanie ważonych najmniejszych kwadratów dla dopasowania liniowego, odzyskuje prawdziwe parametry w dopasowaniu nieliniowym a·exp(b·t) i rozwiązuje multilaterację odległości 3-D z odległości bezszumowych.
Wsadowe wyznaczanie orbity z odległości validated determine_orbit_batch odzyskuje [r, v] ze śledzenia odległości ze stacji naziemnych (propagowanych modelem sił dwóch ciał + J2) z dokładnością poniżej metra / mm·s⁻¹ z odległości bezszumowych i ~2 m z resztą po dopasowaniu na poziomie szumu 5 m — sygnaturą spójnego dopasowania najmniejszych kwadratów.
Sekwencyjne OD (filtr unscented) validated determine_orbit_sequential rekurencyjnie odzyskuje stan w granicach dziesiątek metrów przy tej samej dynamice i modelu odległości.
Wsadowe i sekwencyjne OD względem niezależnego estymatora validated tests/batch_sequential_orbit_determination_reference.rs: 8 scenariuszy (6 bezszumowych LEO/MEO/ekscentrycznych z 3–4 stacjami, 2 przy σ = 5 m) względem wsadowych estymatorów najmniejszych kwadratów i Kalmana z Orekit 12,2 na dopasowanym modelu sił; najgorszy wsadowy 1e-3 m / 1e-6 m/s, sekwencyjny 0,9 m.

| Wsadowe OD z prędkości zmiany odległości / az-el z maską elewacji | modelled (porównanie zewnętrzne, jeden zarejestrowany z góry próg niespełniony) | tests/od_tracking_measurements_reference.rs: 8 scenariuszy względem wsadowych najmniejszych kwadratów Orekit 12,2 z własnymi chwilowymi pomiarami geometrycznymi; zbiory widoczne identyczne, wartości pomiarów w granicach 5.8e-8 m / 6.3e-10 m/s / 1.4e-13 rad, macierz przejścia stanu w granicach 1.2e-14, stany zaszumione w granicach 1,74 cm, a RMS na typ w granicach 2.7e-4; zarejestrowany z góry próg stanu bezszumowego ≤ 1 cm jest niespełniony w 2 z 4 scenariuszy (1,46 i 1,74 cm; własne oszacowanie Orekit leży tak daleko od jego symulowanej prawdy, a kshana w granicach 1e-8 m). Zob. xval/od-measurements-orekit/RESULTS.md. |

Uczciwy zakres: dydaktyczne OD używa stałych stacji inercjalnych, sferycznego topocentrycznego układu Ziemi i chwilowych pomiarów geometrycznych (bez czasu światła, aberracji, refrakcji ani obrotu Ziemi); macierz przejścia stanu dla ścieżki prędkości zmiany odległości/kątów jest wariacyjna (całkowana RK4 z analitycznymi pochodnymi dwóch ciał + J2), a nie w postaci zamkniętej; nie ma filtra sekwencyjnego dla prędkości zmiany odległości ani kątów. Ścieżka tylko odległości zachowuje swój jakobian różnic skończonych. (Silnik dopasowywania efemeryd z pełnymi siłami poniżej niesie własną wariacyjną macierz przejścia stanu.)

Sprawdzanie modelu sił przez dopasowywanie efemeryd (src/precise_od.rs)#

Precyzyjny estymator wsadowych najmniejszych kwadratów obserwacji pozycji z pełnymi siłami: geopotencjał tesseralny EGM2008 (obliczany w układzie związanym z Ziemią przez redukcję CIO) złożony z trzecim ciałem Słońce/Księżyc, SRP, oporem, GR (ogólna teoria względności) Schwarzschilda/Lense–Thirringa i powyższymi pływami, dopasowany do śladu inercjalnych poprawek pozycji z jakobianem wariacyjnej macierzy przejścia stanu. Sprawdzony na danych syntetycznych, gdzie prawdą jest własny całkowacz Kshana, więc każda reszta jest resztą estymatora, a nie dynamiki.

Aspekt Status Dowody
Precyzyjne złożenie modelu sił validated tests/precise_od_synth.rs: pole stopnia 0 jest dokładną masą punktową w każdej epoce (człon centralny jest niezmienniczy względem obrotu); stopień 8 dodaje spłaszczenie w paśmie J2; trzecie ciało Słońce i człon pływowy są podłączone wiernie co do bitu; stałe radialne przyspieszenie empiryczne jest czysto radialne w RTN (radialny, poprzeczny, normalny).
Wariacyjna macierz przejścia stanu validated Każda kolumna Φ na półorbicie LEO (geopotencjał stopnia 8 + Słońce + Księżyc) zgadza się z niezależną ponowną propagacją centralnych różnic skończonych (FD) na całym łuku z dokładnością < 1×10⁻⁶ względnej zarówno w odpowiedzi pozycji, jak i prędkości — udokumentowana kontrola krzyżowa STM↔FD. Φ(0) = I; propagatory rozszerzony i zwykły zgadzają się z dokładnością poniżej milimetra.
Samoodzyskanie przez batch-LS validated 1-godzinny łuk Kshana (stopień 6 + Słońce + Księżyc) obserwowany bez szumu jest odzyskiwany z przesunięcia 150 m / 0,1 m·s⁻¹ do stanu epoki w granicach 1×10⁻² m z bliską zeru resztą po dopasowaniu; przy białym szumie 5 m 3-D RMS po dopasowaniu ustala się na poziomie szumu ~σ, bez obciążenia. SRP C_R jest odzyskane z 1,0 w granicach 1 % prawdziwej wartości 1,4.
Edycja wartości odstających i raportowanie RTN validated Rażący błąd 500 m jest odrzucany przez edycję po dopasowaniu 5-σ (dokładnie jedna obserwacja), pozostawiając czyste dopasowanie na poziomie milimetrów; reszty są raportowane w rozkładzie na radialną/poprzeczną/normalną, a także 3-D.
Poziom przyspieszeń empirycznych (stałe RTN + 1-CPR (CPR: cykl na obieg)) validated Dziewięć parametrów empirycznych z ograniczeniem a priori pozostaje poniżej 1×10⁻⁸ m·s⁻² na prawdzie wolnej od empirii, bez zaburzania dopasowania; stałe przyspieszenie poprzeczne 3×10⁻⁸ m·s⁻² wstrzyknięte do prawdy jest odzyskiwane w granicach 20 %.

Uczciwy zakres: fala syntetyczna używa nominalnych parametrów orientacji Ziemi (EOP: UT1 (czas uniwersalny 1, czas obrotu Ziemi) ≈ TT (czas ziemski), bez ruchu bieguna) — dokładnych dla samoodzyskania, ponieważ ten sam model generuje i dopasowuje łuk. Walidacje na zbiorach danych agencji nakładają rzeczywiste EOP finals2000A i prawdę SP3/SPK (SPK: jądro efemeryd planetarnych) na ten silnik przez łańcuch układów CIO (src/eop.rs, tests/agency_galileo.rs, tests/agency_swarm.rs, tests/agency_lro.rs).

Rzeczywiste precyzyjne orbity agencji (tests/agency_galileo.rs, tests/agency_swarm.rs, tests/agency_lro.rs)#

Zbiór danych Status Dowody
Galileo MEO — < 5 m GREEN validated Pełny silnik sił Kshana dopasowany do dosłownego wycinka własnej orbity finalnej ESA/ESOC (ESOC: Europejskie Centrum Operacji Kosmicznych) (ESA0MGNFIN, ITRF (International Terrestrial Reference Frame)) dla Galileo E11 przez 8 h, z każdą poprawką ITRF obróconą do GCRS z rzeczywistymi EOP finals2000A: 3-D RMS po dopasowaniu 0,133 m dla czystych sił + C_R (RTN 0.105/0.067/0.047 m, C_R 1,174), 0,070 m z poziomem empirycznym, z surowego nakładania 78,7 km. Pełny łuk 24 h to 0,611 m. Wszystko z dużym zapasem poniżej progu 5 m. Pole zbieżne grawitacyjnie przy d/o-8 (identyczne przy d/o 8/10/12); zadanie workflow_dispatch uruchamia pełne d/o-70. Pochodzenie + SHA-256 (SHA: Secure Hash Algorithm) w tests/fixtures/agency/NOTICE.md; pełny zapis w docs/AGENCY-ORBIT-VALIDATION.md.
Swarm-A LEO — < 5 m GREEN validated Pełny silnik sił (+ opór atmosferyczny) dopasowany do dosłownego wycinka własnej zredukowanodynamicznej precyzyjnej orbity Swarm-A z ESA (SW_OPER_SP3ACOM_2_, L47, ITRF, ~430 km, ~2 cm) przez 3 h przy d/o-70, z rzeczywistymi EOP finals2000A przez łańcuch CIO: poziom dynamiczny (tylko stan, gęstość statyczna, C_R=1) 3-D RMS po dopasowaniu 2,687 m (RTN 0.925/2.522/0.045 m — reszta ≈ czysty opór wzdłuż toru), poziom zredukowanodynamiczny (+ empiryczne przyspieszenia CPR) 0,098 m (RTN 0.026/0.092/0.025 m) — ~10 cm wobec orbity ESA ~2 cm. Pochodzenie + SHA-256 w tests/fixtures/agency/NOTICE.md; pełny zapis w docs/AGENCY-ORBIT-VALIDATION.md.
Księżyc LRO (Lunar Reconnaissance Orbiter) — sprawdzone względem niezależnego wzorca, powyżej 5 m (uczciwie) validated Dopasowanie modelu sił wokół Księżyca (src/lunar_od.rs): pole grawitacyjne GRAIL GRGM660PRIM (d/o 100) w księżycowym układzie głównych osi związanym z ciałem (src/lunar_frame.rs, średni układ Ziemia–Księżyc IAU 2015 + stałe przesunięcie DE421 (Development Ephemeris 421) od średniej Ziemi do osi głównych (ME→PA), stosowane tak, jak definiuje je SPICE od 0,36: dotąd było stosowane w złym kierunku, o około 208″ obok) + trzecie ciało Ziemia/Słońce, dopasowane przez ten sam ogólny estymator Gaussa–Newtona co zbiory danych Ziemi do rzeczywistej zrekonstruowanej orbity JPL Horizons LRO (NAIF −85), 4 h / 241 epok, ~98 km. Uczciwe wartości po dopasowaniu (0,36): dynamiczne 12,05 m (RTN 2.91/10.11/5.88), zredukowanodynamiczne 6,67 m (RTN 3.41/4.58/3.44, empiria 1+2 na obieg), z surowego nakładania 39,9 m (przed poprawką ME→PA: 12,6 m, 6,65 m, 53,8 m) — powyżej progu < 5 m, a nie wina estymatora (identyczne przy d/o 100/150 i atol 1e-6/1e-9). Kontrola krzyżowa klasy DE (xval/anise-lunar-od: księżycowa orientacja osi głównych DE440 (Development Ephemeris 440) + efemerydy DE440 przez ANISE) skorygowała twierdzenie o czynniku ograniczającym — dała 12,0 m dynamicznie i 6,67 m zredukowanodynamicznie, co poprawiony stos analityczny teraz odtwarza na obu poziomach (wcześniejsza luka dynamiczna, 12,6 → 12,0 m, była błędem przesunięcia ME→PA), więc podłoga operacyjna nie jest analityczną orientacją/efemerydami, lecz nieredukowalną na poziomie empirycznym resztą (najbardziej zgodną z niemodelowaną niegrawitacyjną dynamiką LRO na krótkim łuku); szczupły stos analityczny już dorównuje klasie DE dla orbity zredukowanodynamicznej. Pochodzenie + SHA-256 w tests/fixtures/agency/NOTICE.md; pełny zapis w docs/AGENCY-ORBIT-VALIDATION.md. Sprawdzone względem rzeczywistej prawdy agencji: 3 z 3; spełniające < 5 m: 2 z 3.

Nawigacja z mapą grawitacyjną / alt-PNT (src/gravimeter.rs, src/mapmatch.rs, src/particle_filter.rs, src/altpnt/terrain.rs)#

Aspekt Status Dowody
Pole anomalii grawitacyjnych w postaci harmonik sferycznych validated src/gravimeter.rs: pole niskiego stopnia, w pełni znormalizowane, sprawdzone względem funkcji Legendre'a w postaci zamkniętej (P̄₁₁ = √3·cosφ, P̄₂₀ = (√5/2)(3sin²φ−1), P̄₂₂ = (√15/2)cos²φ) oraz wyprowadzonej ręcznie anomalii jednego składnika o wartości 1,897 mGal.
Model pomiaru grawimetru z zimnymi atomami validated (model) Poziom szumu białego wyprowadza się z ASD akcelerometru CAI (σ = ASD/√τ) i wstrzykuje jako deterministyczny ciąg zależny od ziarna (dopasowywanie nigdy nie otrzymuje prawdy bez szumu, a przebieg mimo to jest odtwarzalny co do bitu).
Filtr cząsteczkowy z sekwencyjnym ważeniem i resamplingiem validated src/particle_filter.rs: deterministyczny rdzeń jest ustalony dokładnie: ESS (efektywna liczebność próby) w zakresie 1…N, resampling systematyczny wybierający indeksy proporcjonalnie do wagi, kombinacja wypukła w średniej ważonej, gaussowska funkcja wiarygodności przyciągająca estymatę do pomiaru oraz determinizm kroku predykcji przy danym ziarnie.
Wiarygodność dopasowania do mapy i odzyskiwanie pozycji validated src/mapmatch.rs: field_likelihood osiąga maksimum (= 1) przy idealnym dopasowaniu, a przy jednym sigma spada do e^(−½); filtr cząsteczkowy na wyrazistym fragmencie syntetycznego terenu odzyskuje prawdziwą pozycję z dokładnością do 0,1.
Benchmark 60 minut bez GPS validated run_gps_denied_gravity_nav (scenarios/gps-denied-gravity-nav.toml): utrata sygnału na ~700 km / jedną godzinę, podczas której rozwiązanie inercyjne dryfuje do ≈ 70 km, zostaje odzyskana do ≈ 145 m (< 500 m) przez hierarchiczny algorytm dopasowania od zgrubnego do dokładnego, odtwarzalny co do bitu, stabilny dla różnych realizacji szumu i dowodnie ograniczony rozdzielczością (pojedyncza zgrubna siatka zatrzymuje się na ~2 km).
Wczytywanie plików .hgt z SRTM (Shuttle Radar Topography Mission) jako DEM (cyfrowy model wysokości) i próbkowanie dwuliniowe (WYROCZNIA A) validated src/altpnt/terrain.rs / tests/terrain_nav_validation.rs: ręcznie zbudowany bufor .hgt o rozmiarze 2×2 z narożnikami [100 200;300 400] daje w interpolacji dwuliniowej dokładnie 250,0 w środku komórki (wyrocznia w postaci zamkniętej), 16-bitowy zapis i odczyt big-endian jest dokładny, a odwrócenie wierszy umieszcza najbardziej północny wiersz pliku na najwyższej zapisanej szerokości geograficznej; wszystko to względem specyfikacji sterownika SRTMHGT (format plików wysokości Shuttle Radar Topography Mission) w GDAL (Geospatial Data Abstraction Library) (16-bitowe liczby ze znakiem, big-endian, wierszami, pierwszy wiersz północny, wartość pusta -32768, https://gdal.org/en/stable/drivers/raster/srtmhgt.html). Zatwierdzony do repozytorium wzorzec 11×11 (tools/gen_terrain_fixture.py) sprawdza parser w CI; a zatwierdzony do repozytorium rzeczywisty kafelek SRTM v3 z NASA/USGS (USGS: United States Geological Survey), należący do domeny publicznej (N36W117, Dolina Śmierci, zredukowany do 6 sekund łuku, 722 KB, tests/fixtures/terrain/N36W117_sub6.hgt), jest odczytywany w CI (nieignorowany, real_srtm_committed_badwater_tile_reads_real_relief) i umieszcza Badwater Basin na ≈ −78 m w udokumentowanym przedziale [−95,−70] m (pomiar NGS/NOAA (NGS: National Geodetic Survey; NOAA: National Oceanic and Atmospheric Administration) ≈ −86 m), przy maksimum kafelka ≈ 2161 m; źródłem prawdy jest pomiar geodezyjny, a testowany jest DEM (bez cyklicznej zależności). Większe opublikowane wysokości punktowe (Mount Whitney 4421 m) pozostają w testach pełnych kafelków za bramką #[ignore].
Zbieżność nawigacji odniesionej do terenu (TERCOM/SITAN (TERCOM: terrain contour matching; SITAN: Sandia Inertial Terrain-Aided Navigation)) (WYROCZNIA B) validated run_terrain_nav (scenarios/terrain-nav.toml): wyprowadzony ręcznie wstrzyknięty dryf INS (0,5°N, −0,4°E ≈ 70 km na ~12° szer., obliczony jako dryf° × M_na_stopień × cos szer.) zostaje odzyskany do < 500 m (w granicach dolnego progu rozdzielczości siatki search_step/factor² ≈ 140 m), czyli ponad 100-krotne zmniejszenie względem swobodnej inercji; sprawdzone względem wstrzykniętej wartości, nigdy względem DEM (bez cyklicznej zależności), odtwarzalne co do bitu i stabilne dla różnych ziaren szumu.
Zysk z połączenia grawitacji, magnetyzmu i terenu (WYROCZNIA C) validated run_combined_altpnt (scenarios/combined-altpnt.toml): trzy kanały skalarne (Δg · anomalia skorupowa |B| · wysokość) połączone jako iloczyn funkcji wiarygodności dają ograniczony błąd poniżej 500 m w 60-minutowej utracie sygnału, który po uśrednieniu po ziarnach jest nie gorszy niż najlepszy pojedynczy kanał (addytywność informacji / niższa granica CRLB (dolna granica Craméra–Rao)). Mieści się w opublikowanym zakresie „kilkudziesięciu metrów” CEP (promień błędu kołowego prawdopodobnego) dla TERCOM / nawigacji odniesionej do terenu (TRN) (https://en.wikipedia.org/wiki/TERCOM; PeerJ 2024 ESKF-TERCOM (ESKF: filtr Kalmana stanu błędu), https://peerj.com/articles/cs-3118/).

Uczciwy zakres: pole grawitacyjne to niski stopień plus syntetyczne maskony, a nie pełny zestaw współczynników EGM2008/EIGEN (EIGEN: European Improved Gravity model of the Earth by New techniques); kanał magnetyczny opiera się na gładkim głównym polu IGRF oraz syntetycznych maskonach anomalii skorupowych (rzeczywista mapa skorupy o wysokiej częstotliwości to dalszy krok); pole terenu w CI dla benchmarków poprawki nawigacyjnej to samodzielny syntetyczny DEM, natomiast sam czytnik .hgt jest już walidowany w CI względem zatwierdzonego do repozytorium rzeczywistego kafelka SRTM v3 (powyżej); rzeczywiste kafelki w pełnej rozdzielczości pozostają za bramką #[ignore]. Monte Carlo błędu reprezentacji mapy pozostaje dalszym krokiem. Wszystkie trzy nawigatory są już podłączone do silnika scenariuszy przez kind= (gravity-map, terrain-nav, combined-altpnt).

Model błędów INS / IMU: walidacja względem kart katalogowych (src/inertial/)#

Stochastyczny model błędów IMU jest sprawdzany względem opublikowanych specyfikacji z kart katalogowych producentów i zbiorów danych, nigdy względem wartości wytworzonej przez samą Kshana. Pomostem od specyfikacji w jednostkach polowych do modelu szumu w SI (International System of Units) jest standardowa identyfikacja odchyleniem Allana (Riley, NIST SP 1065 §5; IEEE (Institute of Electrical and Electronics Engineers) Std 952): współczynnik błądzenia losowego N to nakładające się ADEV odczytane przy τ = 1 s na nachyleniu τ⁻¹ᐟ², a współczynnik niestabilności biasu to płaski płaskowyż Allana (tests/imu_allan_spec.rs, hermetycznie, bez pobierania).

Aspekt Status Dowód / wyrocznia
Warstwa przeliczania jednostek (ryzyko cykliczności nr 1) validated Sprawdzone ręcznie: 0,15 deg/√hr = 4.3633e-5 rad/√s; 3,6 µg = 3.5304e-5 m/s²; 2,0 deg/hr = 9.6963e-6 rad/s.
Błądzenie losowe kąta żyroskopu validated ADIS16465 ARW 0,15 deg/√hr (karta katalogowa Analog Devices) odzyskane z ADEV(1 s) z błędem poniżej 5%.
Błądzenie losowe prędkości akcelerometru validated ADIS16465 VRW 0,1 m/s/√hr odzyskane z błędem poniżej 5%.
Nachylenie Allana dla szumu białego validated Nachylenie log-log gałęzi białej ADIS16460 −0,5 ± 0,05.
Płaskowyż niestabilności biasu w trakcie pracy validated Niestabilność biasu (BI) żyroskopu ADIS16465 2,0 deg/hr odzyskana jako płaskie minimum Allana z błędem poniżej 15%.
Drugi profil IMU validated NaveGo ADIS16488 (ARW 0,3 deg/√hr, VRW 0,029 m/s/√hr), oba odzyskane z błędem poniżej 5%.

Uczciwy zakres: sprawdzany jest stochastyczny model błędów względem współczynników Allana z kart katalogowych. Zbiór danych pojazdu i2Nav-WHU (WHU: Wuhan University) KF-GINS służy jako odrębna kontrola uzależniona od danych: słabo sprzężony EKF stanu błędu w zamkniętej pętli, z modelem ramienia dźwigni GNSS, jest wierszem VALIDATED w macierzy weryfikacji (Słabo sprzężony EKF GNSS/INS z ramieniem dźwigni na zbiorze danych KF-GINS), porównanym z referencyjną trajektorią C++ z KF-GINS względem progów zarejestrowanych przed przebiegiem. Działa tylko tam, gdzie dostarczono zbiór danych (KSHANA_KFGINS_DIR); bez niego uruchamiane są testy syntetycznego loadera i ramienia dźwigni. Warianty ściśle sprzężone i z fazą nośnej nie są objęte tym wierszem (wiersz ściśle sprzężonego GNSS/INS z fazą nośnej to MODELLED).

PNT w głębokiej przestrzeni kosmicznej i na Marsie: fundament D0 (src/body.rs, src/mars_frame.rs, src/ephem_provider.rs, src/radiometric.rs, src/timescales.rs)#

Pierwszy kamień milowy silnika nawigacji w głębokiej przestrzeni kosmicznej: uogólnienie rdzenia na stałe związanego z Ziemią do dowolnego ciała centralnego, dodanie dynamiki Marsa, interfejsu dostawcy efemeryd, czasu z dokładnością poniżej mikrosekundy oraz podstawowych funkcji czasu światła i opóźnienia relatywistycznego. Każdy istniejący scenariusz ziemski jest identyczny co do bajtu: wzorce odtwarzalności międzyplatformowej (tests/cross_platform_golden.rs, tests/golden.rs) przechodzą bez zmian, bez ponownego generowania, co jest wymuszane przy każdym commicie.

Wielkość Status Dowody
Abstrakcja ciała centralnego (Ziemia identyczna co do bajtu) validated src/body.rs: Body{mu,re,zonals,gravity,rotation,IAU-pole} z earth()/mars()/moon()/sun(). tests/mars_dynamics.rs potwierdza, że two_body_accel_body(r,&Body::earth()) i zonal_accel_body są równe dawnym funkcjom ziemskim z dokładną równością bitową (assert_eq!), a łuk ziemski z domyślnym ForceModel jest identyczny co do bajtu: wzorce odtwarzalności nie zmieniają się (ten sam SHA, bez ponownego generowania).
Grawitacja Marsa (tesseralna GMM-3 (GMM: Goddard Mars Model), w układzie związanym z ciałem) validated (model) Body::mars_gmm3(nmax): zonalne C̄20/C̄30/C̄40 z J2/J3/J4 MRO110 (rozwiązanie grawitacyjne Mars Reconnaissance Orbiter) (C̄n0=−Jn/√(2n+1), J2 po konwersji w obie strony daje 1.9604e-3) oraz sektorialne/tesseralne MRO110B2 C̄22/S̄22, C̄32/S̄32 (Konopliv i in. 2011; zestawione w Liu, Baoyin & Ma 2012), obliczane w układzie IAU związanym z Marsem. tests/mars_dynamics.rs sprawdza konwersję w obie strony, odchylenie rzędu J2 od masy punktowej oraz to, że pole rzeczywiście jest związane z ciałem (zmiana orientacji o ćwierć doby marsjańskiej zmienia przyspieszenie inercjalne). Wyższy stopień i rząd wczytuje się z dołączonego pliku .gfc przez gravity_sh::from_gfc.
Układ związany z Marsem (biegun IAU) validated src/mars_frame.rs: obrót IAU 3-1-3 R3(W)·R1(90°−δ0)·R3(90°+α0) (konwencja WGCCRE/NAIF (WGCCRE: Working Group on Cartographic Coordinates and Rotational Elements), taka sama jak w lunar_frame.rs). Testy: ortonormalność do 1e-12 przy det +1, tożsamość po konwersji w obie strony, południk zerowy przesuwa się o prime_w_dot na dobę.
Propagacja względem Marsa / Słońca validated (spójność wewnętrzna) tests/mars_propagation.rs: niska orbita marsjańska wraca do punktu startu po jednym okresie keplerowskim (domknięcie); energia właściwa ε=v²/2−μ/r dryfuje o <1e-9 na łuku; wiekowa regresja węzła z powodu J2 Marsa zgadza się z analityczną wartością Vallado (obliczoną niezależnie ≈ −5,15 °/dobę przy nachyleniu 60°) z dokładnością 3%; orbita heliocentryczna odtwarza ~687-dniowy rok marsjański (vis-viva + niezależne odzyskanie okresu z łuku). Bez danych zewnętrznych.
Walidacja krzyżowa z DE440 (Mars heliocentryczny) kernel-gated xval/anise-mars-od/ (wyłączone z workspace; ANISE na licencji MPL-2.0 ograniczone do własnego Cargo.lock; odpowiednik xval/anise-lunar-od): porównuje propagację Marsa względem Słońca w Kshana z JPL DE440 (przez ANISE), z prawdą z Horizons cytowaną dosłownie (pochodzenie + SHA-256). Odtworzony wynik (epoka początkowa JD (data juliańska) 2459580,5 TDB (czas dynamiczny barycentryczny), de440s.bsp SHA-256 c1c7fee…b260a49f2): residuum pozycji 137 m na łuku 1-dobowym (5,97×10⁻¹⁰ heliocentrycznej odległości 2,299×10¹¹ m), rosnące do 3,3 km po 5 d, 87,9 km po 30 d, 1,71 Mm po 90 d; residuum rośnie z długością łuku, ponieważ dwuciałowy model względem Słońca celowo pomija zaburzenia planetarne (głównie Jowisza) oraz wewnętrzny ruch układu Marsa, które zawiera barycentryczna efemeryda DE440, więc ten wzrost jest uczciwą sygnaturą niezamodelowanej dynamiki n ciał, a nie błędu integratora; krótki łuk pozostający drobnym ułamkiem odległości heliocentrycznej potwierdza, że mechanizm względem Słońca jest poprawny. Działa tylko wtedy, gdy jądro DE440 jest dostępne ($KSHANA_ANISE_DE440S, lub pobierane automatycznie ~32 MB): to ręczna kontrola klasy DE / workflow_dispatch, a nie domyślna bramka CI, więc opublikowany crate i każda domyślna bramka pozostają bez zmian co do bajtu.
Czas światła i opóźnienie Shapiro validated src/radiometric.rs: iteracyjne rozwiązanie czasu światła w epoce opóźnionej (zbieżne przy |Δτ|<1e-12 s, z ograniczeniem liczby iteracji) oraz opóźnienie Shapiro Δt=(2μ/c³)·ln[(r1+r2+r12)/(r1+r2−r12)]. Testy: Ziemia–Słońce ≈ 499 s i Ziemia–Księżyc ≈ 1,28 s przez wbudowaną efemerydę; syntetyczny emiter o stałej prędkości odtwarza analityczne rozwiązanie opóźnione z dokładnością <1e-9 s (solver dowodnie niezależny od jakiejkolwiek rzeczywistej efemerydy); Shapiro zgadza się dokładnie z wartością policzoną ręcznie i daje ~100–250 µs dla promienia ocierającego się o koniunkcję górną Ziemia–Mars.
Interfejs dostawcy efemeryd validated src/ephem_provider.rs: trait EphemerisProvider + niewymagające jąder BuiltinEphemeris (Montenbruck–Gill Słońce/Księżyc, geocentrycznie); zwraca None dla ciał, dla których nie ma szeregu (np. Mars), a dla nich drogą jest dostawca ANISE klasy DE: ten sam podział na wbudowany i ANISE co w LunarEnvironment/AniseLunarEnvironment.
Czas dwuczęściowy + TT↔TDB validated src/timescales.rs: TwoPartJd{day,frac} z akumulacją dwusumy Knutha odzyskuje przedziały poniżej mikrosekundy, które pojedyncza data JD w f64 traci w pobliżu J2000 (>1000× lepiej, przetestowane); tt_to_tdb/tdb_to_tt używają dominującego szeregu okresowego Fairheada–Bretagnona (|TDB−TT|≲1,7 ms, sprawdzone ręcznie w J2000). Rozwiązanie addytywne: istniejąca ścieżka czasu w pojedynczym f64 pozostaje bez zmian.

Radiometryczne wielkości obserwowane w głębokiej przestrzeni kosmicznej i CCSDS Tracking Data Message: D1 (src/radiometric.rs, src/ccsds_tdm.rs)#

Drugi kamień milowy silnika nawigacji w głębokiej przestrzeni kosmicznej: model wielkości obserwowanych, który zamienia jądro czasu światła i opóźnienia relatywistycznego z D0 w rzeczywiste wielkości, jakie podaje przelot śledzony przez Deep Space Network (DSN) lub ESTRACK (European Space Tracking network): zasięg, dopplera jedno-, dwu- i trójdrogowego, spójne przetwarzanie transpondera, zasięg regeneracyjny/PN (PN: pseudo-noise), Δ-DOR (DOR: differential one-way ranging) oraz ośrodki propagacji, a także wejście/wyjście CCSDS (Consultative Committee for Space Data Systems) 503.0-B Tracking Data Message (TDM), które wczytuje i zapisuje standardowy plik śledzenia agencji. Uczciwy zakres: są to dokładne modele geometryczne oparte na konwencjach Moyera / CCSDS; szum pomiaru to podawane przez wywołującego sigma dla każdej obserwacji, a nie część modelu. Odtworzenie konkretnego rzeczywistego przelotu wymaga rzeczywistych danych TDM oraz solvera wyznaczania orbity w głębokiej przestrzeni kosmicznej: to jest D2, a nie D1. Wszystko poniżej jest addytywne (wzorce odtwarzalności bez zmian; ten sam SHA, bez ponownego generowania).

Wielkość Status Dowody
Zasięg i doppler 1/2/3-drogowy (rozwiązanie dwóch odcinków wg Moyera) validated (model) src/radiometric.rs: one_way_range/two_way_range składają rozwiązania czasu światła D0 dla odcinka opóźnionego (w dół) i wyprzedzonego (w górę); pełna konwencja drogi tam i z powrotem to ρ₂ = c·(τ_up + τ_down) (m), udokumentowana i spójna. one_way_doppler/two_way_doppler/three_way_doppler tworzą przesunięcie nośnej f_D = −(M·f_ul/c)·(ρ̇_up + ρ̇_down) (Hz) z prędkości zmiany zasięgu wzdłuż linii widzenia, konwencja znaku: zbliżający się statek kosmiczny daje dodatnie (niebieskie) przesunięcie. Testy: zasięg dwudrogowy = suma odcinków z dokładnością <1 mm (~2 AU w obie strony Ziemia–Słońce); zasięg jednodrogowy = c·τ dokładnie; doppler jednodrogowy zgadza się z analitycznym −(f/c)·ρ̇ dla radialnego emitera o stałej prędkości z dokładnością do ppt; trójdrogowy ze stacjami w tym samym miejscu redukuje się co do bajtu do dwudrogowego.
Spójne przetwarzanie transpondera (dokładne współczynniki DSN) validated src/radiometric.rs turnaround_ratio: dokładne wymierne liczby przetwarzania DSN/CCSDS M = f_down/f_up (Moyer §13; DSN 810-005 moduł 201/214): S/S 240/221, S/X 880/221, X/S 240/749, X/X 880/749, X/Ka 3344/749, Ka/Ka 3360/3599. Testowane na dokładną równość; niezdefiniowana para pasm powoduje panikę (głośna awaria, nigdy wymyślanie współczynnika). two_way_doppler_coherent stosuje nośną pasma i współczynnik od początku do końca i jest równe jawnemu two_way_doppler z dokładnością maszynową.
Zasięg regeneracyjny / PN (CCSDS 414; niejednoznaczność) validated src/radiometric.rs: regenerative_range_ambiguity = c/(2·chip_rate) (jednoznaczny zasięg w skali rozdzielczości na chip) oraz pn_range_ambiguity = to razy długość kodu (pełny jednoznaczny zasięg kodu PN c·L/(2·f_chip)), wg CCSDS 414.1-B. Testowane: zegar zasięgu 1 MHz daje ~149,9 m; kod PN CCSDS-414.1 z ważonym głosowaniem (1 009 470 chipów) przy 1 Mchip/s daje projektowy zasięg jednoznaczny ~151 000 km; podwojenie częstotliwości chipów zmniejsza niejednoznaczność na chip o połowę.
Δ-DOR (CCSDS 506, płaszczyzna nieba) validated (model) src/radiometric.rs delta_dor: różnicowe opóźnienie w płaszczyźnie nieba Δτ = −B⃗·(ŝ_sc − ŝ_quasar)/c (s) dla bazy interferometru B⃗ (CCSDS 506.1-B). Testowane: zgodność z dokładnym rzutem analitycznym −B·sin(Δθ)/c dla znanego przesunięcia wyrównanego z bazą z dokładnością 1e-15 s, z wielkością dla małych kątów |Δτ| ≈ B·Δθ/c oraz z zerem (statek kosmiczny współliniowy z kwazarem daje dokładnie zerowe opóźnienie różnicowe).
Kalibracja plazmy 1/f² w dwóch częstotliwościach validated (model) src/radiometric.rs: solar_plasma_delay = K_PLASMA·TEC/(c·f²) (dyspersyjne 1/f² opóźnienie grupowe cząstek naładowanych, K_PLASMA = 40.3 m·Hz²·TECU⁻¹); coronal_tec_from_sep kolumna korony klasy Cassini TEC ∝ 1/sin(SEP) (analityczny zamiennik, nie skalibrowana korona); dual_freq_plasma_calibration odwrócenie dyspersji K_disp = (Δt_X−Δt_Ka)/(1/f_X²−1/f_Ka²), którego DSN używa do usuwania plazmy. Testowane: prawo 1/f² d_X/d_Ka = (f_Ka/f_X)²; korona rośnie w kierunku koniunkcji; a wstrzyknięte TEC zostaje odzyskane z błędem poniżej 1 % (w istocie ≪ 1e-9 bez szumu): dual_frequency_recovers_injected_plasma.
Ośrodki tropo- / jonosferyczne (ponowne użycie modeli GNSS) validated (model) src/radiometric.rs tropo_delay/iono_delay: naziemny segment stacji dla głębokiej przestrzeni kosmicznej przechodzi przez tę samą atmosferę Ziemi, którą pakiet GNSS już modeluje, więc deleguje do gnss_sim::tropo_delay_m (zenit Saastamoinena + odwzorowanie Niella, niedyspersyjne) i gnss_sim::klobuchar_delay_m (jonosfera z transmisji). Testowane: podłączenie i fizyczny znak: troposfera dodatnia i większa przy niskiej elewacji niż w zenicie; jonosfera jako nieujemne opóźnienie ukośne (wierność numeryczna to własne testy pakietu GNSS oparte na kartach katalogowych).
CCSDS-TDM 503 parsowanie / zapis + most radiometryczny validated src/ccsds_tdm.rs: czytnik i zapis CCSDS 503.0-B-2 KVN (notacja klucz-wartość) (nagłówek + segmenty META_START…META_STOP / DATA_START…DATA_STOP; rekordy RANGE/DOPPLER_*/ANGLE_*/*_FREQ). Testy (#[cfg(test)] + tests/fixtures/deepspace/reference.tdm): wzorcowy plik parsuje się do oczekiwanych nazwanych pól; parsowanie→zapis→parsowanie daje równą strukturę (semantyczna konwersja w obie strony); most to_radiometric_obs mapuje jednoznaczne rekordy RANGE/DOPPLER_* na RadiometricObs (liczba dróg z PATH 1,2/1,2,1/1,2,3, pasmo z TRANSMIT_BAND, km→m); plik wielosegmentowy resetuje automat stanów. Uczciwe pomijanie zamiast zgadywania: kąty/częstotliwości, nieznane pasma, epoki w dniach roku i nierozpoznane skale czasu są pomijane, nigdy błędnie mapowane, a sigma pozostaje 0.0, by wywołujący nadał wagę.
Benchmark DSN/ESTRACK (precyzja modelu ≫ opublikowany próg) validated (model) tests/radiometric_benchmark.rs: wielkości obserwowane to dokładne obliczenia geometryczne, więc uczciwy benchmark polega na tym, że własny błąd numeryczny modelu jest znacznie poniżej opublikowanego progu pomiarowego DSN/ESTRACK: to nie model jest wąskim gardłem dokładności, lecz podawane przez wywołującego σ. Każdy test oblicza wielkość obserwowaną na dwa niezależne sposoby (lub odzyskuje wstrzykniętą prawdę) i sprawdza, że residuum jest poniżej progu: zasięg po konwersji w obie strony <1 mm ≪ ~1 m próg zasięgu PN (DSN 810-005 mod. 214 / CCSDS 414.1-B); doppler zgadza się z dokładną postacią zamkniętą opóźnionej prędkości zmiany zasięgu v/(1+v/c) do ~10⁻⁶ m/s, kilkakrotnie poniżej progu ~0,05 mm/s w paśmie X (DSN 810-005 mod. 203 / Moyer); residuum to próg różnicowania zasięgu w f64 przy ~1 AU, cecha numeryczna, a nie błąd modelowania; Δ-DOR odtwarza rzut w postaci zamkniętej do równoważnego kąta w płaszczyźnie nieba ≪ 1 nrad ≪ próg ~1–10 nrad (DSN 810-005 mod. 210 / CCSDS 506.1-B); plazma w dwóch częstotliwościach odzyskuje wstrzyknięte opóźnienie z błędem ≪ 1 %; a opóźnienie Shapiro mieści się w opublikowanym paśmie ~100–250 µs dla koniunkcji Ziemia–Mars. Opublikowane wartości są podane i opisane jako rzędy wielkości specyfikacji DSN, a nie zmyślone dokładne liczby, a dokumentacja modułu wyraźnie stwierdza, że ten benchmark dotyczy PRECYZJI MODELU, a nie odtworzenia rzeczywistego przelotu (to jest D2 + rzeczywiste TDM).

Zredukowanie dynamiczne OD w głębokiej przestrzeni kosmicznej: D2 (src/deepspace_od.rs, src/clock_state.rs, src/mars_atmos.rs)#

Trzeci kamień milowy silnika nawigacji w głębokiej przestrzeni kosmicznej: estymator, który zamienia radiometryczne wielkości obserwowane z D1 w odzyskaną trajektorię: numerycznie odporny pierwiastkowy filtr informacyjny (SRIF, Square-Root Information Filter) z zredukowanymi dynamicznie przyspieszeniami empirycznymi, trójstanowym zegarem pokładowym, modelem oporu Marsa oraz pochodnymi cząstkowymi pomiarów radiometrycznych łączącymi zasięg/dopplera ze stanem filtru, domknięty od początku do końca syntetycznym odzyskaniem orbity w niskiej orbicie marsjańskiej (LMO). Uczciwy zakres: odzyskanie jest syntetyczną pętlą zamkniętą (prawda i filtr używają tego samego propagatora Marsa, a obserwacje to ten sam geometryczny model wielkości obserwowanych, który filtr odwraca, plus wstrzyknięty szum gaussowski): sprawdza mechanizm estymatora, a nie bezwzględną wierność modelu sił Marsa; zewnętrzną kontrolą klasy DE jest crate xval/anise-mars-od uzależniony od jądra (D0.8b). Wszystko poniżej jest addytywne (wzorce odtwarzalności bez zmian; ten sam SHA, bez ponownego generowania).

Wielkość Status Dowody
Rdzeń SRIF (pierwiastkowy filtr informacyjny) validated src/deepspace_od.rs Srif: ręcznie napisany pierwiastkowy filtr informacyjny Biermana: górnotrójkątna R z Λ = RᵀR, wektor informacji b, aktualizacje pomiaru/czasu Householdera, arytmetyka na gołym Vec<f64> (bez nalgebra). Testy: sekwencyjny SRIF zgadza się z rozwiązaniem wsadowym ważonych najmniejszych kwadratów (gauss_newton) zarówno w stanie, jak i w kowariancji do 1e-9 na zaprojektowanym liniowo-gaussowskim zadaniu (srif_matches_batch_on_linear); odzyskana kowariancja P = R⁻¹R⁻ᵀ jest symetryczna (1e-12) i z konstrukcji dodatnio określona po długiej sekwencji aktualizacji pomiaru/czasu (srif_covariance_is_spd, rozkład Choleskiego się udaje); a informacja się kumuluje (ślad P maleje monotonicznie w miarę dodawania pomiarów o identycznej geometrii).
Zredukowane dynamicznie przyspieszenia empiryczne (strojenie między lotem a LMO) validated src/deepspace_od.rs ReducedDynamicOd: dziewięciostanowy filtr [r; v; a_emp] z przyspieszeniami empirycznymi RTN jako stanami procesów Gaussa–Markowa pierwszego rzędu, technika zredukowanej dynamiki JPL/ESOC wystawiona jako pojedyncze pokrętło dynamic_tightness (blisko dynamiki ⇒ wygładza szum na łuku balistycznym; blisko kinematyki ⇒ warstwa empiryczna pochłania niezamodelowany manewr/opór). Testy: filtr bliski kinematyce śledzi skokowy manewr (ciąg silnika) z residuum mniejszym niż <½ residuum filtru bliskiego dynamice, natomiast filtr bliski dynamice lepiej wygładza zaszumiony łuk balistyczny (reduced_dynamic_tracks_maneuver); przesuwanie ścisłości zmienia residuum po dopasowaniu monotonicznie, jako kontinuum, a nie przełącznik (tuning_is_a_continuum).
3-stanowy zegar pokładowy (faza/częstotliwość/dryf, Q van Loana, Allan) validated src/clock_state.rs ClockState3: stan błędu fazy + ułamkowej częstotliwości + dryfu częstotliwości z dokładnym dyskretnym szumem procesu van Loana i aktualizacją stabilizowaną metodą Josepha. Testy: zdyskretyzowane Q zgadza się z ręcznie wyprowadzonym wielomianem van Loana do 1e-12 i redukuje się dokładnie do Q dwustanowego KalmanClock, gdy dryf = 0 (ścisły nadzbiór); wieloetapowy wybieg zwiększa wariancję fazy do analitycznej zależności holdover wg NIST SP 1065 przez składnik błądzenia losowego T⁵; stan dryfu odzyskuje prawdziwą rampę starzenia z błędem poniżej 5 %; odzyskiwany jest profil Allana klasy USO (nakładające się ADEV przy τ=1 s w granicach bramki kalibracyjnej), a estymator pozostaje spójny w sensie NEES (>95 % wewnątrz 3σ) i PSD w trakcie przebiegu z ostrym Q/R. ClockClass zawiera cytowane wartości σ_y(1 s) dla CSAC/USO/DSAC (USO: ultra-stable oscillator; DSAC: Deep Space Atomic Clock) oraz próg dopplera Δv = c·σ_y.
Opór atmosfery Marsa (Mars-GRAM-lite (GRAM: Global Reference Atmospheric Model)) validated (model) src/mars_atmos.rs: kawałkami wykładniczy profil gęstości neutralnej atmosfery Marsa (przy powierzchni ~0,020 kg/m³, wysokość skali przy powierzchni ~11 km, niskopyłowa średnia Mars-GRAM 2010 / MCD (Mars Climate Database)) oraz kwadratowe przyspieszenie oporu liczone względem współobracającej się atmosfery Marsa, a także wariant ..._scaled, który SRIF może mnożyć. Testy: gęstość maleje monotonicznie i ciągle między pasmami, odzyskana wysokość skali przy powierzchni jest fizyczna, ~11 km, opór jest ściśle antyrównoległy do prędkości względnej (iloczyn wektorowy znika do 1e-12) przy rozsądnej wielkości ~3e-4 m/s² na LMO i jest liniowy względem członu balistycznego. Uczciwy zakres: reprezentatywna atmosfera inżynierska, a nie zwalidowana w locie Mars-GRAM/MCD z zależnością od pyłu, pory roku i czasu lokalnego.
Pochodne cząstkowe pomiarów radiometrycznych (zasięg/doppler) dla SRIF validated src/deepspace_od.rs range_observable / range_rate_observable: pochodne cząstkowe zasięgu wzdłuż linii widzenia ρ = |r_sc − r_sta| (∂ρ/∂r = û, ∂ρ/∂v = 0) i prędkości zmiany zasięgu ρ̇ = û·(v_sc − v_sta) (∂ρ̇/∂v = û, ∂ρ̇/∂r = (v_rel − ρ̇·û)/ρ), które łączą wielkości obserwowane D1 ze stanem filtru, oraz pochodna cząstkowa częstotliwości zegara dla dopplera jednodrogowego ∂ρ̇_obs/∂y = c. Testy: obie pochodne zgadzają się z centralną różnicą skończoną wielkości obserwowanej do 1e-6 (range_partial_matches_finite_difference, range_rate_partials_match_finite_difference); pojedyncza aktualizacja zasięgu zmniejsza kowariancję w obserwowanym kierunku (linii widzenia, LOS) ≫1000-krotnie i zachowuje jej dodatnią określoność (PD), a aktualizacja dopplera zmniejsza wariancję prędkości wzdłuż LOS (radiometric_update_reduces_covariance_in_observed_direction, range_rate_update_observes_velocity).
Kompleksowe OD na Marsie (LMO) z danych radiometrycznych validated (synthetic closed-loop) tests/mars_lmo_od.rs: prawdziwy łuk niskiej orbity marsjańskiej propagowany przy grawitacji Body::mars_gmm3(4) generuje zaszumiony dwudrogowy zasięg (σ=1 m) + doppler (σ=0,1 mm/s) względem dwóch stacji śledzących; zredukowany dynamicznie SRIF odzyskuje go ze stanu początkowego zaburzonego o ~2,7 km. Osiągnięto: zbieżne RMS pozycji ≈ 0,2 m (poniżej metra, znacznie poniżej kryterium wykonania rzędu metrów do dziesiątek metrów) na łuku 3 orbit z kadencją 30 s, przy dodatnio określonej rozłożonej kowariancji w każdej epoce (gwarancja SRIF, sprawdzana przez cały czas). Kontinuum strojenia od lotu do LMO jest sprawdzone od początku do końca: przy prawdzie z niezamodelowanym oporem, którego nie ma szablon filtru, pokrętło zredukowanej dynamiki (ścisłość 1) odzyskuje ~14 m wobec ~677 m dla przebiegu bliskiego dynamice (ścisłość 0), czyli 48-krotna poprawa dzięki warstwie empirycznej pochłaniającej opór. Uczciwy zakres: syntetyczna pętla zamknięta (prawda = ten sam propagator, którego używa filtr); zewnętrzną kontrolą klasy DE jest xval/anise-mars-od uzależnione od jądra (D0.8b), tu nigdy nieuruchamiane, bez sieci.

Scenariusz PNT w głębokiej przestrzeni kosmicznej i fuzja jedno- i dwudrogowa: D3 (src/mars_pnt.rs, src/deepspace_od.rs)#

Czwarty kamień milowy silnika nawigacji w głębokiej przestrzeni kosmicznej: uruchamialny produktowy scenariusz Mars-PNT, który wiąże ciało/układ Marsa z D0, radiometryczne wielkości obserwowane z D1 i zredukowane dynamicznie OD z D2 w jeden rodzaj scenariusza mars-pnt. Modeluje małą konstelację przekaźnikową w stylu MARCONI, nadającą jednodrogowy (sprzężony z zegarem) sygnał w przestrzeni oraz przekazującą dwudrogowe (spójne, niezależne od zegara) łącze do stacji w głębokiej przestrzeni kosmicznej, i nawiguje trzech użytkowników odniesienia (transfer na Marsa, orbiter na niskiej orbicie marsjańskiej, stały punkt na powierzchni) przez estymator fuzji łączny jedno- i dwudrogowy D3.1, czyli dwunastostanowy SRIF, który rozszerza zredukowany dynamicznie blok orbity/empiryczny z D2 o trójstanowy zegar pokładowy. Uczciwy zakres: każdy wskaźnik jakości to formalna granica kowariancji estymatora (1σ / 3σ pozycji w każdej epoce) oraz osiągnięte RMS względem syntetycznej prawdy w pętli zamkniętej (prawda i filtr dzielą tę samą dynamikę Marsa i ten sam geometryczny model wielkości obserwowanych, plus wstrzyknięty szum gaussowski): symulowany wskaźnik jakości nawigacji, NIE poziom ochrony certyfikowany dla lotnictwa i NIE twierdzenie o locie (brak certyfikowanego modelu usterek, brak monitora integralności, brak rzeczywistych danych śledzenia). Wszystko poniżej jest addytywne (wzorce odtwarzalności bez zmian; ten sam SHA, bez ponownego generowania).

Wielkość Status Dowody
Łączna fuzja radiometryczna jedno- i dwudrogowa (fuzja jest lepsza niż każde łącze osobno) validated src/deepspace_od.rs FusionOd: zredukowany dynamicznie SRIF z D2.2 rozszerzony o trzy stany zegara pokładowego (ClockState3), przyjmujący mieszany szereg czasowy zasięgu/dopplera dwudrogowego (niezależnego od zegara, wiążącego orbitę: zerowe kolumny zegara w pochodnej cząstkowej) i jednodrogowego (sprzężonego z zegarem: pochodna częstotliwości ∂ρ̇_obs/∂y = c) przez fused_observable. Struktura „skalibruj, potem wybiegaj”: przeloty dwudrogowe wiążą orbitę, a dane jednodrogowe kalibrują zegar i prowadzą orbitę między przelotami z błędem ograniczonym stabilnością Allana zegara. Testowane w src/deepspace_od.rs #[cfg(test)]: rozwiązanie łączne jest lepsze niż każdy typ łącza osobno; błąd wybiegu przebiegu wyłącznie jednodrogowego rośnie wraz z przerwą między przelotami dwudrogowymi, zgodnie z ograniczeniem Allana dla klasy zegara; łączna kowariancja pozostaje SPD (symetryczna dodatnio określona) przez cały czas.
Konstelacja MARCONI (promień areostacjonarny, zakrycie) validated (model) src/mars_pnt.rs MarconiConstellation: zestaw pięciu przekaźników: trzy przekaźniki areostacjonarne na r = (μ/ω²)^{1/3} ≈ 20 428 km (promień synchroniczny Marsa z opublikowanych μ/prędkości obrotu; testowany w przedziale 20 400–20 500 km), rozmieszczone równomiernie co 120° długości z nachyleniem 5°, oraz dwa przekaźniki na wyższej (1,4× areostacjonarnej) kołowej orbicie o nachyleniu 60° dla pokrycia w płaszczyźnie nieba. Stany przekaźników w każdej epoce są całkowane w przód przy grawitacji mars_gmm3; test widoczności przy zakryciu przez Marsa to geometria cięciwy omijającej kulę (chord_clears_sphere, testowane: przekaźnik po przeciwnej stronie jest zakryty, przekaźnik nad głową jest widoczny). Uczciwy zakres: minimalna reprezentatywna geometria nadawania i przekazywania zbudowana z opublikowanych stałych Marsa, a nie projekt konkretnej konstelacji lotniczej.
Scenariusz mars-pnt dostępny przez CLI / Python / WASM (WebAssembly) / MCP (Model Context Protocol) validated src/mars_pnt.rs MarsScenario / run_mars_pnt jest podłączone jako scenariusz kind = "mars-pnt" na wszystkich powierzchniach (D3.3): runner CLI, wiązanie Pythona, kompilacja WASM/playground i dyspozytor serwera MCP kierują do niego (test konwersji w obie strony src/api.rs mars_pnt_kind_round_trips_through_the_dispatch). Dostarczone scenariusze referencyjne: scenarios/mars-pnt-lmo.toml, scenarios/mars-pnt-surface.toml, scenarios/mars-pnt-transfer.toml. Wynik zawiera jawne fom_note opisujące wskaźnik jakości jako granicę kowariancji (a nie certyfikowany PL), a wyjścia summary / to_svg powtarzają etykietę uczciwości.
Odtworzone cele MARCONI / LightShip: orbiter < 100 m, łazik < 15 m validated (synthetic closed-loop, under stated assumptions) tests/mars_pnt_targets.rs: opublikowane cele programu MARCONI / LightShip (orbiter < 100 m, powierzchnia/łazik < 15 m) odtworzone w symulacji. Wspólne założenia: domyślna pięcioprzekaźnikowa konstelacja MARCONI; każdy przekaźnik w zasięgu widzenia daje w każdej epoce jednodrogowy zasięg + doppler; spójny dwudrogowy przelot stacji co 30 min; szum klasy DSN (σ zasięgu = 1 m, σ dopplera = 0,1 mm/s); łączny filtr fuzji zredukowanej dynamicznie orbity i 3-stanowego zegara zainicjowany stanem a priori zaburzonym o ~2,7 km (ścisłość 0,1); wskaźnik jakości = zbieżne RMS pozycji 3-D w drugiej połowie łuku względem syntetycznej prawdy. Orbiter (LMO ~400 km / nachylenie 60°, zegar USO, kadencja 60 s, łuk ~2 h ≈ jedna orbita): osiągnięte zbieżne RMS ≈ 0,40 m ≪ cel 100 m (średnio 3,1 przekaźnika w zasięgu, kowariancja SPD przez cały czas). Łazik (stały punkt na powierzchni przy równiku, zegar USO, kadencja 30 s, łuk ~2 h): osiągnięte zbieżne RMS ≈ 5,1 m < cel 15 m (średnio 3,0 przekaźnika w zasięgu, kowariancja SPD). Oba cele osiągnięte bez rozluźniania jakiejkolwiek asercji: USO jest mniej zdolną z realistycznych klas zegara pokładowego (DSAC mógłby tylko pomóc), a dwudrogowa kadencja 30 min jest zachowawcza dla rutynowego harmonogramu sieci przekaźników, więc założenia są fizycznie uczciwe dla systemu klasy MARCONI, a nie dostrojone tak, by przeszły. Uczciwy zakres: symulowane odtworzenie przy podanych założeniach, a NIE twierdzenie o locie ani certyfikowany poziom ochrony; syntetyczna prawda w pętli zamkniętej dzieli z filtrem dynamikę Marsa i model wielkości obserwowanych.

Księżycowy czas współrzędnych: relatywistyczne tempo zegara Ziemia–Księżyc (src/lunar_time.rs)#

Księżycowa skala czasu współrzędnych (LTC/TCL (TCL: Temps-Coordonnée Lunaire, francuska nazwa księżycowego czasu współrzędnych)) wymaga wiekowego tempa, w jakim zegar na powierzchni Księżyca chodzi względem zegara na geoidzie ziemskiej (TT). src/lunar_time.rs oblicza je z zasad pierwszych: pierwsza tożsamość postnewtonowska sumująca różnicę potencjałów własnych (konwencjonalny potencjał geoidy IAU L_G W0 = L_G·c² ≈ 6.26369e7 m²/s² minus potencjał własny powierzchni Księżyca GM_moon/R_moon ≈ 2.822e6 m²/s²) oraz człon kinetyczny (dopplera drugiego rzędu) −<v²>/2c² z geocentrycznej prędkości Księżyca (różnicowanej skończenie z księżycowego szeregu Montenbrucka–Gilla w src/ephem.rs). Dominujący człon potencjału własnego daje ≈ 57,5 µs/dobę, człon kinetyczny ≈ −0,5 µs/dobę, razem ≈ 57 µs/dobę. Scenariusz lunar-time-offset podaje to tempo, skumulowane przesunięcie LTC−TT w danym horyzoncie i obsługuje minimalny zespół ważony odwrotnością wariancji (księżycowy zegar papierowy); konwersje TT↔LTC zgadzają się w obie strony z dokładnością < 1 ns/dobę.

Możliwość Status Wyrocznia / uczciwy zakres
Relatywistyczne tempo zegara Ziemia–Księżyc (LTC/TCL) modelled src/lunar_time.rs lunar_rate_breakdown, tt_to_ltc/ltc_to_tt, lunar_ensemble, LunarTimeScenario. Wyrocznia: wewnętrzna relatywistyczna tożsamość w postaci zamkniętej (geopotencjał IAU L_G / konwencji IERS oraz potencjał własny GM/r (GM: parametr grawitacyjny, G razy masa)), skontrolowana krzyżowo względem opublikowanego przedziału tempa zegara księżycowego [56, 59] µs/dobę. Testy (lunar_time::tests): człon potencjału własnego ≈ 57,5 µs/dobę, prędkość Księżyca ≈ 1 km/s, człon kinetyczny niewielki i ujemny, suma w przedziale, a wymienione człony sumują się do niej, 1-dobowe przesunięcie LTC−TT ≈ 57 µs oraz konwersja TT↔LTC w obie strony z dokładnością < 1 ns/dobę. Uczciwy zakres: główna wartość µs/dobę zależy od odniesienia: zależy od wybranych powierzchni odniesienia (geoida ziemska W0 a selenoida), od okna uśredniania czasu i od pominiętych poprawek odśrodkowych/J₂ poniżej µs/dobę, dlatego publikowanym wynikiem jest przedział, a nie pojedyncza certyfikowana liczba. To jest kontrola spójności Modelled, NIE walidacja zewnętrzna, NIE bezwzględna dokładność poniżej nanosekundy i NIE certyfikowane do operacyjnego utrzymywania czasu.

Księżycowe geodezyjne VLBI: opóźnienie w polu bliskim dla bazy ziemskiej obserwującej księżycowy radiolatarnię (src/lunar_vlbi.rs)#

Geodezyjna wielkość obserwowana VLBI (interferometria z bardzo długą bazą) dla dwóch stacji naziemnych na Ziemi (baza) obserwujących jednodrogowy sygnał nadajnika klasy NovaMoon na powierzchni Księżyca. Księżyc znajduje się w polu bliskim, a nie jest falą płaską, więc opóźnienie geometryczne to dokładna różnica dwóch odległości tau_geom = (|r2 − r_B| − |r1 − r_B|)/c, a nie rzut na płaszczyznę nieba. Pełna wielkość obserwowana dodaje różnicę przesunięć zegarów stacji i różnicowy człon Shapiro potencjału Ziemi (ponownie użyty z src/radiometric.rs). Stacje są umieszczane we współrzędnych geocentrycznych inercjalnych (GCRS) przez src/frames.rs + src/cio.rs; latarnia przez src/ephem.rs (Księżyc geocentrycznie) + src/lunar.rs (selenograficzne→MCMF (MCMF: związany z Księżycem, ze środkiem w Księżycu)) + src/lunar_frame.rs (związany z ciałem ME IAU-2015→inercjalny). Scenariusz lunar-vlbi próbkuje opóźnienie, jego tempo różnicy skończonej i poprawkę pola bliskiego w trakcie przelotu.

Wyrocznia to płaskofalowa wielkość obserwowana Δ-DOR z tej samej bazy kodu delta_dor w src/radiometric.rs: w granicy pola dalekiego (syntetyczna latarnia w odległości 1e15 m) opóźnienie geometryczne musi sprowadzić się do −(B·ŝ_B)/c = delta_dor(r_B, [0,0,0], B) z dokładnością maszynową; przy rzeczywistej odległości księżycowej poprawka pola bliskiego z krzywizny czoła fali jest niezerowa (dziesiątki do setek µs). Pochodne cząstkowe latarni dtau/dr_B = ((r_B−r2)/|r_B−r2| − (r_B−r1)/|r_B−r1|)/c (i pochodne stacji) są weryfikowane centralną różnicą skończoną (błąd względny < 1e-5).

Możliwość Status Wyrocznia / uczciwy zakres
Opóźnienie księżycowego geodezyjnego VLBI i pochodne cząstkowe modelled src/lunar_vlbi.rs geometric_delay_s, vlbi_delay_s, delay_partials_beacon/_station1/_station2, near_field_correction_s, LunarVlbiScenario. Wyrocznia: ReferenceImpl: płaskofalowe delta_dor z tej samej bazy kodu (src/radiometric.rs) w granicy pola dalekiego, plus pochodne cząstkowe różnic skończonych. Testy (lunar_vlbi::tests): wielkość stacji ≈ promień Ziemi, odległość latarni przy dystansie księżycowym (356–407 Mm), opóźnienie geometryczne w polu dalekim zgadza się z delta_dor z dokładnością < 1e-9 s, niezerowa poprawka pola bliskiego przy dystansie księżycowym, pochodne latarni/stacji metodą różnic skończonych w granicach 1e-5 względnie, dokładny człon zegara oraz skończony przebieg scenariusza wysłany przez run_toml. Uczciwy zakres: Modelled, NIE zwalidowane względem rzeczywistych danych VLBI. Ruch bieguna jest pomijany (xp = yp = 0), więc inercjalne pozycje stacji niosą kilkumetrowy błąd układu; latarnia łączy szereg Księżyca względem średniego równika daty z przesunięciem związanym z ciałem w ICRF (International Celestial Reference Frame) (jd_tdb ≈ jd_tt), co jest niespójnością układów poniżej wierności modelu, ale nie jest rygorystyczne; brak iteracji czasu światła, obrotu Ziemi w czasie światła, członów ośrodka (tropo/jono/plazma) i aberracji poza różnicowym Shapiro. Nie twierdzi się nic o TRL (poziom gotowości technologicznej), dziedzictwie lotniczym ani poparciu agencji. 0,30: względem czasów światła ANISE przez DE440 żadne opóźnienie tej ścieżki analitycznej nie mieści się w 1 ps (największa różnica 24 µs); ustalenie jest przypięte.
Księżycowa geodezyjna VLBI, ścieżka jądrowa validated (0.30) src/lunar_vlbi.rs KernelGeometry (Ziemia i Księżyc z DE440, główne osie księżycowe DE440, orientacja Ziemi ITRF93, każdy czas światła zbieżny w układzie barycentrycznym), uruchamiane przez scenariusz lunar-vlbi, gdy ustawiono trzy ścieżki jąder. Wyrocznia: biblioteka NAIF SPICE Toolkit N0067 (spiceypy 8.2.0) zbieżne czasy światła do DSS-14/43/63, zarejestrowane wstępnie: 75 opóźnień w granicach 1 ps (najgorsze 0,06 ps), pochodne cząstkowe latarni i stacji w granicach 1e-6, w 25 epokach w pobliżu J2000 (poprawka po tym, jak 2024 epok zawiodło z powodu własnej epoki emisji SPICE w podwójnej precyzji, około 6 ps, ujawniona i przypięta). Różnicowy człon Shapiro, tempo opóźnienia i poprawka pola bliskiego w scenariuszu nie są porównywane.

Księżycowe łączne OD wielotechnikowe + zegar: symulowane odzyskanie w pętli zamkniętej (src/lunar_combination.rs)#

Jednoepokowe (migawkowe) dopasowanie wsadowe najmniejszych kwadratów (crate::batch_ls::gauss_newton_qr, krok QR Householdera od 0,30), które łączy techniki geodezyjnego VLBI, radiometrycznego/księżycowego lokalnego pomiaru zasięgu i pomiaru zasięgu między satelitami na SYMULOWANEJ sieci księżycowej, aby odzyskać razem pozycję 3-D księżycowej stacji powierzchniowej, pozycje poszczególnych satelitów małej konstelacji oraz przesunięcie zegara każdego obiektu. Wielkości obserwowane to: (1) opóźnienia geodezyjnego VLBI bazy ziemskiej do stacji księżycowej traktowanej jak latarnia (z ponownym użyciem src/lunar_vlbi.rs, geocentrycznie inercjalnie), główna technika; (2) geocentryczne zasięgi radiometryczne stacja ziemska→satelita (które wielolateracyjnie wyznaczają konstelację z dobrze rozmieszczonych stacji ziemskich) oraz lokalne księżycowe zasięgi stacja↔satelita (euklidesowa odległość MCI (Moon-centred inertial) plus różnicowy człon zegara); (3) zasięgi międzysatelitarne (ta sama postać); plus pojedyncza pseudoobserwacja synchronizacji zegara stacji, która zakotwicza niedostrzegalne inaczej wspólne przesunięcie zegara. Wektor stanu to [station_pos(3), {sat_pos(3)}×N_sat, station_clk, {sat_clk}×N_sat]. Brak propagacji modelu sił wewnątrz solvera: satelity są stałymi, odrębnymi, ilustracyjnymi punktami na reprezentatywnej orbicie księżycowej; to celowo czyste dopasowanie migawkowe. Wewnętrznie pozycje są skalowane, a zegary estymowane w metrach równoważnych zasięgowi, aby macierz normalna pozostała dobrze uwarunkowana w f64; zasięgi VLBI i odległości księżycowe są pozbawione średniej wokół nominalnej geometrii, by jakobian różnic skończonych nie cierpiał na katastrofalne znoszenie. Scenariusz lunar-joint-od-clock uruchamia rozwiązanie z odnogami VLBI i bez nich na tym samym ziarnie/prawdzie i podaje oba rozwiązania oraz współczynnik poprawy obserwowalności stacji.

Główny uczciwy wynik: lokalny księżycowy pomiar zasięgu z biegunowej stacji do garstki satelitów, które leżą po jednej stronie nieba, pozostawia pozycję stacji słabo obserwowaną wzdłuż jednego kierunku, więc rozwiązanie wyłącznie z zasięgów jest źle uwarunkowane, a odzyskany błąd stacji 3-D jest duży (lub rozwiązanie nie jest zbieżne). Dodanie opóźnień VLBI bazy ziemskiej czyni pełną pozycję 3-D stacji obserwowalną, a odzyskany błąd stacji spada do poziomu metra. Test vlbi_restores_station_observability potwierdza, że błąd stacji z VLBI jest wyraźnie (≥5×) mniejszy niż błąd wyłącznie z zasięgów przy identycznej wstrzykniętej prawdzie; sensem tej fazy jest to, że VLBI przywraca inaczej niedostrzegalny kierunek stacji.

Wyrocznia to spójność wewnętrzna: wstrzyknięty stan prawdziwy (stacja ~50 m/oś, satelity ~30 m/oś, zegary ~1e-7 s, z losowym szumem na składową zależnym od ziarna) jest odwzorowywany na syntetyczne wielkości obserwowane przez ten sam model geometrii, który odwraca solver, dodaje się gaussowski szum zależny od ziarna (ilustracyjne wartości domyślne: σ VLBI ≈ 1e-11 s, σ zasięgu ≈ 0,1 m, σ ISL ≈ 0,1 m; wagi 1/σ²), a estymator musi odzyskać wstrzykniętą prawdę w granicach szumu ze startowego przybliżenia zerowego. Średnie NEES Δxᵀ(HᵀWH)Δx metodą Monte Carlo po ziarnach (formal_covariance_nees) mieści się w luźnym przedziale wokół n_params, co jest kontrolą realizmu kowariancji.

Możliwość Status Wyrocznia / uczciwy zakres
Księżycowe wspólne OD wielotechnikowe + zegar validated (0,30, P2: algebra liniowa rozwiązania) src/lunar_combination.rs estimate, formal_covariance_nees, LunarCombinationScenario. Wyrocznia 0,30: P2: numpy 2.4.6 (LAPACK gelsd i inv) ponownie oblicza każdy krok Gaussa–Newtona, zbieżne rozwiązanie ważone, formalne sigmy i błąd stacji na zatwierdzonych jakobianach sześciu sieci (tests/lunar_joint_od_numpy_oracle.rs, kroki w granicach 2.4e-11, sigmy w granicach 1.3e-11); fizyczne modele obserwacji i ich wielkości pozostają MODELLED. Wcześniejsza wyrocznia: InternalConsistency: odzyskanie wstrzykniętej symulowanej prawdy + spójność kowariancji NEES. Testy (lunar_combination::tests): pełna fuzja odzyskuje prawdę (stacja < 5 m, RMS satelitów < 5 m, zegary < 1e-8 s, zbieżność); VLBI przywraca obserwowalność stacji 3-D (błąd stacji ≥5× mniejszy z VLBI niż wyłącznie z zasięgów przy tej samej prawdzie); deterministyczność (to samo ziarno → rozwiązanie identyczne co do bitu, inne ziarno → inne, ale odzyskane); średnie NEES w luźnym przedziale wokół n_params; skończone/zabezpieczone raportowane liczby nawet gdy wyłącznie zasięgi są źle uwarunkowane; scenariusz wysłany przez run_toml. Uczciwy zakres: to jest symulowane odzyskanie w pętli zamkniętej: prawda dzieli model obserwacji, NIE walidacja na rzeczywistych danych; brak propagacji modelu sił wewnątrz solvera; pozycje satelitów oraz geometria stacji ziemskich i księżycowych są ilustracyjne. Nie twierdzi się nic o TRL, dziedzictwie lotniczym ani poparciu agencji.

Realizacja księżycowego układu odniesienia: 7-parametrowe dopasowanie datum Helmerta (src/lunar_frame_realise.rs)#

Podczas gdy src/lunar_frame.rs stosuje orientację księżycowego ciała IAU 2015 WGCCRE (model prosty), ten moduł estymuje (realizuje) księżycowy układ odniesienia z sieci estymowanych współrzędnych punktów powiązanych z datum. Rdzeń estymacji to klasyczne 7-parametrowe przekształcenie podobieństwa (Helmerta): trzy parametry przesunięcia, trzy małego obrotu i jeden skali, odwzorowujące punkty p_i (układ estymowany) na q_i (układ datum) jako q_i = t + (1 + s)·R(θ)·p_i, przy R(θ) = rz(θz)·ry(θy)·rx(θx) zbudowanym z crate::precession::{rx, ry, rz, matmul, mat_vec}. Siedem parametrów [tx, ty, tz, θx, θy, θz, s] jest estymowanych z ≥ 3 niewspółliniowych par punktów metodą ważonych najmniejszych kwadratów przez crate::batch_ls::gauss_newton: model prosty przewiduje każde q_i z jego p_i i spłaszcza wszystkie trzy składowe wszystkich punktów do wektora wielkości obserwowanych, obserwowane współrzędne datum tworzą z, wagi to 1/σ², a rozwiązanie startuje z x0 = zeros. Kąty obrotu są estymowane w µrad, a skala w ppb, aby jakobian różnic skończonych pozostał dobrze skalowany przy wielkości współrzędnych na powierzchni Księżyca (~1.7e6 m). Mała funkcja icrf_orientation_tie składa zrealizowany mały obrót przez orientację ciała IAU→ICRF (transpose(crate::lunar_frame::icrf_to_iau_moon(jd_tdb))) i zwraca resztkowe małokątowe przesunięcie zrealizowanego układu wokół osi ICRF: celowo prosta zmiana układu wyrażenia, a nie niezależna estymata bieguna Księżyca.

Wyrocznia to spójność wewnętrzna: znane przekształcenie Helmerta (przesunięcie ~dziesiątki m, obrót ~µrad, skala ~1e-7) jest wstrzykiwane do dobrze rozmieszczonej syntetycznej sieci punktów (zróżnicowana szerokość/długość selenograficzna → MCMF, część punktów na wysokości), dodawany jest gaussowski szum zależny od ziarna, a dopasowanie musi odzyskać wstrzyknięte parametry. Na danych bez szumu odzyskanie następuje z dokładnością zbliżoną do maszynowej (przesunięcie < 1e-6 m, obrót < 1e-9 rad, skala < 1e-12); przy szumie rzędu metra odzyskane parametry mieszczą się w granicach kilku razy formalnego σ, a RMS residuum po dopasowaniu jest bliskie poziomowi szumu. Scenariusz lunar-frame-realisation podaje odzyskane datum, błąd odzyskania każdego parametru względem wstrzykniętej prawdy, RMS residuum po dopasowaniu oraz powiązanie orientacji ICRF zrealizowanego obrotu.

Możliwość Status Wyrocznia / uczciwy zakres
Realizacja księżycowego układu odniesienia modelled src/lunar_frame_realise.rs helmert_fit, apply_helmert, realise_frame, icrf_orientation_tie, LunarFrameRealiseScenario. Wyrocznia: InternalConsistency: odzyskanie wstrzykniętego 7-parametrowego przekształcenia podobieństwa plus algebraiczna tożsamość konwersji w obie strony apply_helmert. Testy (lunar_frame_realise::tests): odzyskanie wstrzykniętego przekształcenia bez szumu (przesunięcie < 1e-6 m, obrót < 1e-9 rad, skala < 1e-12); odzyskanie z szumem w granicach kilku razy σ, a RMS residuum blisko poziomu szumu; zastosowanie i odwrócenie w obie strony; deterministyczność (to samo ziarno → identyczne co do bitu, inne ziarno → inne, ale odzyskane); powiązanie ICRF przy zerowym obrocie jest zerowe i zachowuje wielkość obrotu; scenariusz wysłany przez run_toml. Uczciwy zakres: to jest kontrola spójności wewnętrznej: odzyskuje wstrzyknięte przekształcenie na syntetycznej sieci, NIE realizację księżycowego układu odniesienia względem rzeczywistych danych śledzenia / VLBI i nie rości sobie bezwzględnej dokładności układu. Powiązanie orientacji ICRF to prosta zmiana wyrażenia, a nie niezależna estymata bieguna. Nie twierdzi się nic o TRL, dziedzictwie lotniczym ani poparciu agencji.

Księżycowy wolumen usługi nawigacyjnej: DOP / pokrycie / dostępność + uogólniony księżycowy poziom ochrony ARAIM (src/lunar_service.rs)#

Ten moduł składa już zbudowane elementy w analizę wolumenu usługi nawigacji księżycowej: przeszukuje siatkę szerokości/długości selenograficznych w horyzoncie czasu względem ilustracyjnej, opartej na źródłach publicznych konstelacji na orbicie księżycowej klasy Moonlight / LCNS (LCNS: Lunar Communications and Navigation Services) i podaje DOP / pokrycie / dostępność oraz uogólnioną obwiednię księżycowego poziomu ochrony ARAIM. Dwa ponowne użycia są nośne i jawne. Geometria DOP to jądro VALIDATED (względem gnss_lib_py) crate::orbit::dop: service_dop to cienki filtr maski elewacji plus to jądro, a test potwierdza tożsamość (service_dop równa się bezpośredniemu orbit::dop na tych samych widocznych pozycjach). Integralność wykorzystuje ponownie mechanizm księżycowego ARAIM LunaNet LNIS (LunaNet Interoperability Specification) crate::lunar::lunar_araim (σ_URE ≈ 30 m, P_sat ≈ 1e-4); lunar_protection_level uogólnia istniejący poziom ochrony dla bieguna południowego na dowolny punkt powierzchni, a test potwierdza, że redukuje się do przypadku bieguna południowego (na biegunie południowym przy tej samej geometrii/budżecie zwraca dokładnie istniejący wynik lunar::lunar_araim z dokładnością < 1e-9).

Parametry konstelacji to ilustracyjne przybliżenie publicznych opisów ESA tej klasy systemu (≈ 4 satelity na eliptycznych zamrożonych orbitach księżycowych sprzyjających pokryciu bieguna południowego: apolun nad półkulą południową; 4 to wartość domyślna biblioteki, a dołączony moonlight-service-volume.toml ustawia 8, ponieważ poziom ochrony wymaga co najmniej 6 widocznych). To nie jest rzeczywista efemeryda Moonlight/LCNS i nie oznacza żadnej przynależności, poparcia, dziedzictwa, certyfikacji ani TRL. Złożenie (pokrycie / dostępność / integralność) jest MODELLED: zestaw przekaźników na orbitach kołowych/eliptycznych keplerowskich (a nie skorygowana różnicowo efemeryda LCNS / NRHO (near-rectilinear halo orbit) 9:2), Księżyc ze średnim obrotem (bez fizycznej libracji i precesji bieguna) oraz opublikowane parametry integralności LunaNet LNIS. Pokazuje metodę wolumenu usługi, a nie operacyjną liczbę dostępności. Deterministyczne (czysta geometria; bez losowości). Scenariusz moonlight-service-volume podaje procent pokrycia, obwiednie liczby widocznych satelitów i PDOP, obwiednię HPL/VPL w wolumenie oraz dostępność poziomu ochrony względem limitu alarmowego.

Możliwość Status Wyrocznia / uczciwy zakres
Objętość usługi nawigacji księżycowej modelled src/lunar_service.rs LunarConstellation, visible_sats, service_dop, coverage, lunar_protection_level, LunarServiceScenario. Geometria DOP sprawdzona przez ponowne użycie jądra crate::orbit::dop sprawdzonego względem gnss_lib_py; integralność wykorzystuje ponownie opublikowany księżycowy ARAIM LunaNet/LNIS (crate::lunar::lunar_araim, σ_URE ≈ 30 m). Testy (lunar_service::tests): service_dop jest tożsamością na sprawdzonym jądrze; lunar_protection_level na biegunie południowym równa się istniejącemu PL lunar::lunar_araim z dokładnością < 1e-9 (redukuje się do przypadku bieguna południowego); pokrycie nie maleje wraz z rozmiarem konstelacji; widoczność respektuje maskę elewacji; scenariusz jest deterministyczny i wysyłany przez run_toml. Uczciwy zakres: konstelacja jest ilustracyjna, oparta na źródłach publicznych, NIE powiązana z ESA: to nie jest rzeczywista efemeryda Moonlight/LCNS; złożenie pokrycia/dostępności/integralności jest MODELLED (przekaźniki na orbitach kołowych/eliptycznych keplerowskich, Księżyc ze średnim obrotem, opublikowane parametry LNIS), NIE operacyjną liczbą dostępności Moonlight. Nie twierdzi się nic o TRL, dziedzictwie lotniczym ani poparciu agencji.

Księżycowy różnicowy PNT: znoszenie składowej wspólnej + residuum rosnące z bazą + poziomy ochrony DGNSS (src/lunar_dpnt.rs)#

Księżycowy analog DGNSS (różnicowa nawigacja satelitarna) / SBAS: stacja referencyjna klasy NovaMoon w znanej lokalizacji selenograficznej oblicza różnicowe poprawki dla każdego satelity z ilustracyjnej, opartej na źródłach publicznych konstelacji klasy Moonlight / LCNS, a użytkownik ruchomy, przesunięty od niej o bazę, stosuje je, tak że znoszą się wspólne błędy efemeryd nadawanych. Każdy satelita i niesie wstrzyknięty wspólny wektor błędu orbity 3-D e_i i wspólny błąd zegara c_i. Residuum pseudoodległości stacji referencyjnej jest poprawką −e_i · û_ref,i + c_i; surowy błąd użytkownika to −e_i · û_user,i + c_i; skorygowany błąd użytkownika to ich różnica −e_i · (û_user,i − û_ref,i). Człon zegara c_i znosi się dokładnie (jest identyczny w obu obserwacjach), a człon orbity sprowadza się do rzutu na różnicę dwóch jednostkowych wektorów linii widzenia, który → 0 przy bazie → 0 (próg dekorelacji przestrzennej) i rośnie ≈ liniowo z bazą. Skorygowane błędy zasięgu poszczególnych satelitów są odwzorowywane przez geometrię użytkownika małym, mało zależnym od bibliotek rozwiązaniem migawkowym ważonych najmniejszych kwadratów (stan [x, y, z, clock] przez crate::orbit::invert4; stały błąd systematyczny zasięgu jest pochłaniany przez niewiadomą zegara, a nie psuje poprawki), co daje błąd pozycji użytkownika. Poziom ochrony użytkownika wykorzystuje ponownie mechanizm poziomu ochrony SBAS wg DO-229E (crate::sbas::sbas_protection_level, współczynniki K podejścia precyzyjnego), przyjmując różnicowe σ residuum jako budżet błędu 1-σ każdego satelity.

NovaMoon jest przywoływany wyłącznie jako klasa systemu (publiczny opis księżycowej stacji referencyjnej); konstelacja wykorzystuje ponownie ilustracyjną, opartą na źródłach publicznych crate::lunar_service::LunarConstellation. Są to ilustracyjne parametry do ćwiczenia metody różnicowej, nie rzeczywista efemeryda, i nie oznaczają żadnej przynależności, poparcia, dziedzictwa, certyfikacji ani TRL. Scenariusz lunar-differential-pnt podaje błąd pozycji użytkownika z poprawkami i bez nich, współczynnik redukcji, krzywą błędu w funkcji bazy i poziom ochrony. W konfiguracji domyślnej skorygowany błąd użytkownika przy bazie 50 km wynosi ≈ 0,008 m wobec ≈ 24 m bez poprawek (redukcja ~3000×), a ≈ 0 przy zerowej bazie.

Wyrocznia to spójność wewnętrzna: znoszenie składowej wspólnej jest dokładną tożsamością algebraiczną (przy noise = 0 skorygowany błąd < 1e-6 m przy zerowej bazie; człon zegara znosi się z dokładnością maszynową przy dowolnej bazie), residuum rośnie monotonicznie z bazą, a poziom ochrony to ten sam algorytm DO-229E, względem którego sprawdzany jest stos SBAS. Residuum dekorelacji przestrzennej to model geometryczny pierwszego rzędu, a nie dopasowany model dekorelacji z rzeczywistego śledzenia księżycowego.

Możliwość Status Wyrocznia / uczciwy zakres
Księżycowy różnicowy PNT modelled src/lunar_dpnt.rs differential_corrections, corrected_user_range_errors, user_position_error_m, lunar_dgnss_protection_level, LunarDpntScenario. Wyrocznia: InternalConsistency: różnicowa tożsamość znoszenia błędów plus ponowne użycie mechanizmu poziomu ochrony SBAS wg DO-229E (crate::sbas). Testy (lunar_dpnt::tests): przy zerowej bazie skorygowany błąd użytkownika i każdy skorygowany błąd zasięgu poszczególnego satelity wynoszą ~0 (< 1e-6 m) i są ≪ błędu nieskorygowanego; człon zegara znosi się dokładnie przy dowolnej bazie (przypadek zerowego błędu orbity); skorygowany błąd rośnie monotonicznie z bazą, pozostając ≪ nieskorygowanego przy umiarkowanych bazach; różnicowy jest wyraźnie lepszy niż samodzielny (> 2×); poziom ochrony równa się bezpośredniemu wywołaniu sbas::sbas_protection_level i skaluje się z σ residuum; geometria niedookreślona zwraca None; scenariusz jest deterministyczny (zależny od ziarna) i wysyłany przez run_toml. Uczciwy zakres: MODELLED: znoszenie składowej wspólnej jest dokładną tożsamością, ale residuum dekorelacji przestrzennej to model geometryczny pierwszego rzędu, NIE dopasowany model dekorelacji z rzeczywistego śledzenia księżycowego, i NIE jest to sprawdzone na rzeczywistych danych. NovaMoon jest przywoływany wyłącznie jako klasa systemu (ilustracyjnie, na źródłach publicznych, bez powiązania z ESA). Nie twierdzi się nic o TRL, dziedzictwie lotniczym ani poparciu agencji.

Księżycowy eksport interoperacyjności: CCSDS OEM + KIF dostosowane do LunaNet/IOAG, z kontrolą pól w obie strony (src/lunar_interop.rs)#

Księżycowy układ odniesienia, księżycowa skala czasu i księżycowa efemeryda są eksportowane w formach wymiany opartych na CCSDS, dostosowanych do LunaNet/IOAG (IOAG: Interagency Operations Advisory Group). Ta faza nie wymyśla formatu przewodowego: wykorzystuje ponownie istniejący emiter i parser CCSDS OEM (Orbit Ephemeris Message) 2,0 w crate (crate::oem::OemFile::to_oem_string / crate::oem::parse_oem) oraz kopertę Kshana Interchange Format (crate::interchange::Envelope), ponownie oznaczone dla kontekstu księżycowego. export_lunar_oem ustawia REF_FRAME w OEM na księżycowy układ ciała IAU 2015 WGCCRE (MOON_ME średni-Ziemia lub MOON_PA osie główne), TIME_SYSTEM na księżycową skalę czasu (LTC / TCL / UTC), a CENTER_NAME na MOON, dla przykładowej ilustracyjnej, opartej na źródłach publicznych efemerydy klasy LCNS (pozycje z crate::lunar_service::LunarSat::position_mci, prędkość centralną różnicą skończoną). export_lunar_time_metadata emituje deskryptor czasu księżycowego dostosowany do LunaNet/IOAG (identyfikator skali, wiekowe tempo µs/dobę z crate::lunar_time::lunar_rate_breakdown, opublikowany przedział 56–59 µs/dobę, powierzchnia odniesienia), który wraca w obie strony przez serde_json. export_kif_lunar opakowuje OEM + deskryptor + etykietę układu w istniejącą kopertę KIF z etykietą uczciwości MODELLED.

Wyrocznia to spójność w obie strony i na poziomie pól. Ponieważ oem.rs udostępnia oba kierunki, OEM jest przepuszczany w obie strony przez crate::oem::parse_oem (z powrotem do równego segmentu, z zachowaniem księżycowego układu/czasu i liczby stanów) oraz niezależnie sprawdzany przez oem_conformance, która weryfikuje, że obecne jest każde wymagane słowo kluczowe nagłówka CCSDS/LunaNet, że REF_FRAME niesie księżycowy token MOON_*, a TIME_SYSTEM nie jest puste, że obowiązuje ramowanie META_START … META_STOP i że linie danych pozycji+prędkości są poprawnie sformułowane; zwraca ustrukturyzowany wynik pozytywny plus listę pól obecnych/brakujących, tak aby zepsuty eksport (np. z utraconym TIME_SYSTEM) został wychwycony i nazwany. Metadane czasu wracają w obie strony przez parse_lunar_time_metadata, a koperta KIF wraca w obie strony przez Envelope::parse do równych artefaktów niosących etykietę MODELLED.

Możliwość Status Wyrocznia / uczciwy zakres
Eksport interoperacyjności księżycowej modelled src/lunar_interop.rs export_lunar_oem, export_lunar_time_metadata, parse_lunar_time_metadata, export_kif_lunar, oem_conformance, LunarInteropScenario. Wyrocznia: InternalConsistency: deterministyczny test w obie strony (CCSDS OEM przez crate::oem::parse_oem; KIF przez crate::interchange::Envelope::parse; metadane czasu przez serde_json) plus kontrola nazw pól względem opublikowaną semantyką pól CCSDS OEM + LunaNet/IOAG. Testy (lunar_interop::tests): wyeksportowany OEM niesie księżycowe tokeny REF_FRAME (MOON_ME/MOON_PA) i TIME_SYSTEM (LTC/TCL), CENTER_NAME = MOON, obiekt i poprawnie sformułowane linie danych; metadane czasu księżycowego wracają w obie strony (tempo/przedział/odniesienie) i odrzucają śmieci; koperta KIF serializuje się i deserializuje do równej wartości z obecną etykietą uczciwości MODELLED; celowo zepsuty OEM (bez TIME_SYSTEM) nie przechodzi oem_conformance i jest zgłaszany jako brakujący; scenariusz jest wysyłany przez run_toml. Uczciwy zakres: nazwy/jednostki pól są wyrównane z publicznymi standardami (CCSDS 502.0-B OEM, księżycowe układy IAU WGCCRE 2015, specyfikacja interoperacyjności LunaNet / architektura księżycowa IOAG); eksport jest MODELLED: wyrocznią jest deterministyczny test w obie strony + kontrola nazw pól, to NIE jest certyfikowany test interoperacyjności, efemeryda jest ilustracyjna, na źródłach publicznych, bez powiązania z ESA, i nie twierdzi się nic o TRL, dziedzictwie lotniczym ani poparciu agencji.

Predykcje zarejestrowane wstępnie#

Predykcja zarejestrowana wstępnie to wynik MODELLED zamrożony, zanim istnieją jakiekolwiek dane do jego oceny, przy jednoczesnym ustaleniu protokołu oceny. Nie jest to walidacja i nie dodaje wiersza do rejestru. Każda znajduje się w docs/predictions/, wraz z zamrożonymi danymi wejściowymi, wynikiem i ich skrótami SHA-256, a tests/prediction_frozen.rs zawodzi, jeśli jakikolwiek zamrożony bajt się zmieni; zmienione założenie jest obsługiwane nową, datowaną predykcją obok starej, nigdy edycją starej.

Predykcja Zamrożono Oceniana względem Status
Pokrycie księżycowej stacji referencyjnej c05dac1d, 2026-10-12 opublikowana dokładność, dostępność, pokrycie i poziomy ochrony księżycowej różnicowej stacji na biegunie południowym, przez dowolną stronę jeszcze nie oceniono (brak opublikowanych wyników)

Rejestr reprezentatywności demonstracji i luk do lotu (src/representativeness.rs)#

Wynik symulacji jest użyteczny jako dowód tylko wtedy, gdy wprost podaje, do czego jest zakotwiczony, co zakłada i co wciąż dzieli go od systemu lotniczego. Rejestr reprezentatywności czyni to pierwszorzędnym, sprawdzanym maszynowo wynikiem: rekord Representativeness zawiera zewnętrzne Anchor demonstracji, jej zamodelowane założenia, jej Gap do lotu (każda z fazą/działaniem, które by ją zamknęło) oraz pasmo TRL, dla którego jest reprezentatywna. Jest to towarzysz każdego wyniku dla macierzy verification na poziomie możliwości.

Wyrocznia to zbiór niezmienników w postaci zamkniętej, wymuszanych przez representativeness::tests: rekord Validated musi wymieniać co najmniej jedną kotwicę ExternalDataset (symulacja nie może być zwalidowana względem samej siebie); rekord Modelled musi wymieniać co najmniej jedną lukę do lotu i nie może deklarować reprezentatywnego pasma TRL powyżej 4 (dojrzewanie powyżej wymaga dowodów sprzętowych/lotniczych, które są luką, a nie wynikiem symulacji); pasmo TRL musi być poprawnie sformułowane; a rekord PartnerOwned nie może niczego twierdzić. Te niezmienniki urzeczywistniają dyscyplinę „reprezentatywność uzasadniona + pozostałe luki do lotu jasno wskazane”.

Możliwość Status Wyrocznia / uczciwy zakres
Rejestr reprezentatywności i luk do lotu modelled src/representativeness.rs Representativeness/Anchor/Gap, check/is_valid/report/to_json. Wyrocznia: InternalConsistency: niezmienniki uczciwości w postaci zamkniętej powiązane z granicą statusu/rodzaju wyroczni w verification. Testy (representativeness::tests): rekord Validated bez zewnętrznej kotwicy nie przechodzi; kotwica wewnętrzna (ReferenceImpl) nie spełnia Validated; rekord Modelled bez luki nie przechodzi; rekord Modelled powyżej TRL 4 nie przechodzi; źle sformułowane pasma TRL są wychwytywane; rekord serializuje się do JSON z oczekiwanymi polami i renderuje czytelny raport. Uczciwy zakres: rejestr sprawdza klasyfikację dowodów wyniku: nie dowodzi, że wymienione kotwice wskazują na działające testy (są one dobierane ręcznie, dokładnie jak macierz verification); twierdzenie „sprawdzane maszynowo” dotyczy wyłącznie niezmienników statusu/kotwicy/luki/TRL.

Ujednolicony dowód kompromisu kwantowe a klasyczne (src/qtrade.rs)#

Każdy obszar zastosowań kwantowego PNT odpowiada na to samo pytanie w ten sam sposób: ustalić jedną ramę porównania (scenariusz + ziarno + wersja silnika), skierować kwantowego kandydata i klasyczny punkt odniesienia przez jedną neutralną ścieżkę kodu, ocenić je według wspólnych wskaźników jakości i zgłosić, z przedziałem ufności i uczciwą etykietą sprawdzone względem wzorca/zamodelowane, gdzie wygrywa technika kwantowa, a gdzie nie. TradeEvidence nadaje tej odpowiedzi jeden kształt, aby pionowe obszary czasu, nawigacji i detekcji anomalii emitowały ten sam odtwarzalny, uczciwie oznaczony obiekt. Nie implementuje ponownie żadnego kompromisu: liczby dla poszczególnych wskaźników pochodzą z istniejących silników (quantum_trade, crossover i modułów pionowych); to jest kontrakt oraz opakowanie odtwarzalności/reprezentatywności, zbudowane na rejestrze reprezentatywności i etykietach weryfikacji.

Wyrocznia to tożsamości korzyści/zwycięzcy w postaci zamkniętej plus wierne opakowanie istniejącego wyniku kompromisu. qtrade::tests: współczynnik korzyści ma poprawną polaryzację (zorientowany tak, że >1 zawsze oznacza lepszą stronę kwantową, zarówno dla wskaźników holdover, w których więcej znaczy lepiej, jak i błędu, w którym mniej znaczy lepiej); obiekt dowodu zbudowany z rzeczywistego quantum_trade::TradeResult odtwarza jego współczynniki korzyści; nieuczciwy dowód jest odrzucany (reprezentatywność Modelled bez luki lub wskaźnik Validated, którego rekord kompromisu nie niesie zewnętrznej kotwicy); JSON jest deterministyczny i niesie pola ramy/ziarna/silnika/wskaźnika/reprezentatywności.

Możliwość Status Wyrocznia / uczciwy zakres
Dowód kompromisu kwantowe a klasyczne modelled src/qtrade.rs TradeEvidence/TradeFom/TradeFrame/Winner. Wyrocznia: InternalConsistency: tożsamości korzyści/zwycięzcy w postaci zamkniętej + wierne opakowanie quantum_trade::TradeResult; uczciwość powiązana z rejestrem reprezentatywności i granicą statusu weryfikacji/rodzaju wyroczni. Testy (qtrade::tests) jak wyżej. Uczciwy zakres: ten zestaw ujednolica, jak kompromis jest raportowany i odtwarzany; fizyka poszczególnych wskaźników jest taka, jaką dostarcza wnoszący silnik, wraz z jego własną etykietą sprawdzone/zamodelowane: TradeEvidence nie podnosi zamodelowanego wskaźnika do rangi sprawdzonego.

Biblioteka modeli błędów urządzeń kwantowych (src/quantum_devices.rs)#

Jedno miejsce udostępniające urządzenia kwantowego PNT, które demonstrator porównuje: zegary optyczne / na uwięzionych jonach / na jonach rtęci, klasyczne zegary referencyjne, interferometr zimnych atomów i łącza transferu czasu, każde jako DeviceCard niosące swoją główną specyfikację i rekord reprezentatywności. Większość fizyki urządzeń jest ponownie użyta (stabilności zegarów z holdover::QuantumClockClass i clock_state::ClockClass; interferometr zimnych atomów z quantum_trade/crossover; klasyczne łącza optyczne/RF z timetransfer_adv). Jedynym naprawdę nowym modelem jest łącze transferu czasu na splątaniu / pojedynczych fotonach, którego precyzja czasowa jest ograniczona szumem śrutowym: σ_t ≈ jitter/√(R·τ) w wykrytej częstości koincydencji R i czasie całkowania τ, pogarszana karą za ciemne zliczenia √(1 + dark/R) i ograniczona od dołu nieusuwalnym błędem systematycznym.

Wyrocznia to ponownie użyte, opublikowane współczynniki zegarów/CAI plus tożsamości szumu śrutowego/strat w postaci zamkniętej. quantum_devices::tests: ponownie użyta kolejność stabilności zegarów jest rozsądna (sieć optyczna < jony rtęci < CSAC w σ_y(1 s)); precyzja splątania poprawia się jak 1/√τ (4× całkowania zmniejsza σ o połowę), gdy dominuje szum śrutowy; wykryta częstość koincydencji spada 10× na każde 10 dB strat łącza; ciemne zliczenia monotonicznie pogarszają precyzję; próg systematyczny ogranicza precyzję od dołu; każda karta urządzenia jest poprawnym rekordem reprezentatywności Modelled.

Możliwość Status Wyrocznia / uczciwy zakres
Biblioteka modeli błędów urządzeń kwantowych modelled src/quantum_devices.rs DeviceCard, quantum_clock_card/classical_clock_card, EntanglementTimeLink. Wyrocznia: InternalConsistency: ponownie użyte opublikowane współczynniki zegarów/CAI + tożsamości szumu śrutowego/strat w postaci zamkniętej dla łącza splątania. Testy (quantum_devices::tests) jak wyżej. Uczciwy zakres: parametry urządzeń zegarów/CAI są ponownie użyte z istniejących modeli silnika opartych na opublikowanych współczynnikach; model łącza splątania jest MODELLED na podstawie opublikowanego zachowania kwantowej synchronizacji zegarów z ilustracyjnymi, opartymi na źródłach publicznych wartościami częstości par/sprawności/strat: nie jest sprawdzony na zmierzonym łączu, a rzeczywisty sprzęt źródła/kanału/detektora jest wprost wskazaną luką do lotu.

Zaufany czas kwantowy: łańcuch od końca do końca, bezpieczna dystrybucja, anomalie + kompromis (src/timetransfer_chain.rs)#

Scenariusz quantum-time-transfer składa łańcuch czasu, jakiego potrzebuje demonstrator kwantowego PNT: budżet czasu użytkownika od końca do końca (błąd wybiegu zegara referencyjnego i precyzja czasowa łącza połączone kwadraturowo) dla łańcucha kwantowego (zegar w sieci optycznej + łącze splątania/pojedynczych fotonów) w porównaniu z łańcuchem klasycznym (CSAC + dwudrogowe łącze RF); poziom ochrony czasu (TPL, ponownie użyty z tpl) ograniczający niewykryty błąd czasu; wskaźnik jakości bezpieczeństwa wobec ataku z opóźnieniem/powtórzeniem 1 − P_md przy podanym współczynniku fałszywych alarmów (ponownie użyty z detection); prawdopodobieństwo detekcji anomalii zegara + opóźnienie detekcji zmian CUSUM (cumulative sum); oraz porównanie kwantowe a klasyczne jako uczciwe qtrade::TradeEvidence niosące rekord reprezentatywności i luk do lotu.

Wyrocznia to budżet kwadraturowy w postaci zamkniętej na ponownie użytych, osobno sprawdzonych jądrach (ADEV względem Stable32/NIST; granica TPL; detection::analytic_pd/analytic_pmd). timetransfer_chain::tests: precyzja kwantowa poprawia się z czasem całkowania; łańcuch kwantowy może wygrać i może przegrać we wskaźniku precyzji (uczciwie: to nie jest uniwersalna wygrana; bardzo stratne łącze odwraca wynik); poziom ochrony jest skończony i dodatni; wskaźnik bezpieczeństwa mieści się w [0 1] i rośnie wraz z opóźnieniem ataku; prawdopodobieństwo detekcji anomalii jest monotoniczne względem wielkości usterki; a dowód kompromisu jest wewnętrznie uczciwy (is_honest()).

Możliwość Status Wyrocznia / uczciwy zakres
Zaufany czas kwantowy (łańcuch + bezpieczna dystrybucja + anomalie + kompromis) modelled src/timetransfer_chain.rs QuantumTimeTransferScenario/Report, to_svg; kind="quantum-time-transfer". Wyrocznia: InternalConsistency: budżet kwadraturowy w postaci zamkniętej na ponownie użytych sprawdzonych jądrach (ADEV/Stable32-NIST, granica TPL, analityczne Pd/Pmd detekcji); uczciwość powiązana z rejestrem reprezentatywności. Testy (timetransfer_chain::tests) jak wyżej. Uczciwy zakres: parametry zegarów i łączy są ilustracyjne, oparte na źródłach publicznych; łącze splątania to model MODELLED ograniczony szumem śrutowym z quantum_devices; modeluje to klasę systemu zaufanego czasu: nie jest sprawdzone na zmierzonym łączu od końca do końca, a rzeczywisty sprzęt zegara/łącza/kanału kosmicznego jest wprost wskazaną luką do lotu; nie twierdzi się nic o TRL, dziedzictwie lotniczym ani certyfikacji.

Nawigacja kwantowa bez GNSS (src/quantum_nav_od.rs)#

Scenariusz quantum-gnss-free-nav porównuje nawigację zliczeniową podczas utraty GNSS z kwantowym budżetem inercyjnym (akcelerometr interferometru zimnych atomów, ponownie użyty z inertial::quantum_imu/quantum_trade, którego próg szumu białego CAI jest sprawdzony w granicach ~2 rzędów wielkości względem Freier i in. 2016) oraz klasycznym INS klasy nawigacyjnej. Podaje wzrost błędu pozycji w czasie wybiegu, czas holdover do progu pozycji oraz kompromis kwantowe a klasyczne jako uczciwe qtrade::TradeEvidence. Obserwowalność jest przedstawiona uczciwie: bez zewnętrznej poprawki podczas utraty sygnału bias akcelerometru jest niedostrzegalny, więc błąd pozycji rośnie bez ograniczenia (≈ ½·bias·t² plus człon błądzenia losowego prędkości); czujnik kwantowy o niższym biasie spowalnia ten wzrost, ale nie zamyka luki: robi to tylko zewnętrzna poprawka.

Wyrocznia to ponownie użyte budżety inercyjne (QuantumNavBudget/ClassicalInsBudget, oba implementujące cechę PositionDrift) plus tożsamości dryfu w postaci zamkniętej. quantum_nav_od::tests: budżet kwantowy jest lepszy od klasycznego przy długiej utracie sygnału (mniejszy błąd, dłuższy holdover); błąd rośnie z czasem trwania utraty sygnału w obu (luka obserwowalności); przewaga zależy od czasu utraty sygnału i nie jest stałym współczynnikiem wygranej (krzywa kwantowa jest zdominowana szumem przy krótkim wybiegu, a biasem przy długim); dowód kompromisu jest wewnętrznie uczciwy.

Możliwość Status Wyrocznia / uczciwy zakres
Nawigacja kwantowa bez GNSS modelled src/quantum_nav_od.rs QuantumNavOdScenario/Report, to_svg; kind="quantum-gnss-free-nav". Wyrocznia: InternalConsistency: ponownie użyte budżety inercyjne (CAI sprawdzone przez ponowne użycie ~2 rzędów względem Freier 2016; klasyczny dryf w postaci zamkniętej); uczciwość powiązana z rejestrem reprezentatywności. Testy (quantum_nav_od::tests) jak wyżej. Uczciwy zakres: statyczne porównanie budżetów nawigacji zliczeniowej, a nie dynamiczny filtr na rzeczywistych trajektoriach; niedostrzegalność biasu bez poprawki jest podana wprost; parametry urządzeń są ilustracyjne, oparte na źródłach publicznych; modeluje klasę kwantowej nawigacji bez GNSS: rzeczywisty sprzęt IMU na zimnych atomach, platforma dynamiczna i środowisko lotu są wprost wskazanymi lukami do lotu; nie twierdzi się nic o TRL, locie ani certyfikacji.

Detekcja usterek / anomalii dla kwantowych systemów PNT (src/quantum_faults.rs)#

Scenariusz quantum-anomaly-detect definiuje oznaczony katalog usterek kwantowego PNT (skok częstotliwości zegara, dryf, utrata synchronizacji; skok biasu czujnika, wypadnięcie), ocenia statystykę detekcji na oknach nominalnych i z usterką oraz podaje zdolność detektora do rozróżniania jako ROC AUC i minimalną wykrywalną usterkę przy ustalonym współczynniku fałszywych alarmów. Aspekt kwantowe a klasyczne: stabilniejszy kwantowy zegar referencyjny obniża szum monitora σ, więc wykrywa mniejsze usterki, co jest emitowane jako uczciwe qtrade::TradeEvidence z rekordem reprezentatywności.

Wyrocznia to AUC w postaci zamkniętej dla gaussowskiej statystyki detekcji (nominalna N(0,σ), usterka N(μ,σ) ⇒ AUC = Φ(μ/(σ√2))), skontrolowane krzyżowo względem zewnętrznie sprawdzonego eval_stats::bootstrap_auc_ci (sprawdzonego względem scikit-learn) i analitycznych progów detection. quantum_faults::tests: analityczne AUC zgadza się ze znanymi wartościami (0,5 przy μ=0, →1 dla dużego μ/σ, monotonicznie); empiryczny przedział ufności bootstrapowego AUC obejmuje postać zamkniętą; monitor kwantowy ma wyższe AUC i mniejszą minimalną wykrywalną usterkę; przewaga zanika dla ogromnych usterek (oba wykrywają idealnie: to nie jest uniwersalny margines); katalog ma pięć oznaczonych klas; kompromis jest wewnętrznie uczciwy.

Możliwość Status Wyrocznia / uczciwy zakres
Detekcja usterek/anomalii dla kwantowego PNT modelled src/quantum_faults.rs FaultKind, QuantumAnomalyScenario/Report, analytic_auc, min_detectable_fault; kind="quantum-anomaly-detect". Wyrocznia: InternalConsistency: gaussowskie AUC w postaci zamkniętej skontrolowane krzyżowo względem zewnętrznie sprawdzonego bootstrapowego AUC eval_stats (względem scikit-learn) i analitycznych progów detection. Testy (quantum_faults::tests) jak wyżej. Uczciwy zakres: statystyka detekcji to model gaussowski, a nie rzeczywista telemetria; katalog usterek jest oznaczony jako syntetyczny; poziomy szumu monitorów kwantowego i klasycznego są ilustracyjne, oparte na źródłach publicznych; modeluje klasę detekcji anomalii kwantowego PNT: rzeczywista telemetria sprzętowa z etykietami prawdy jest wprost wskazaną luką do lotu; nie twierdzi się nic o TRL, locie ani certyfikacji.

Te standardy są sprawdzane przez odtworzenie dosłownych przykładów opracowanych / wartości referencyjnych opublikowanych w samych standardach (lub w niezależnej implementacji referencyjnej), a nie przez własny test w obie strony wykonany przez Kshana. Odtworzenie przykładu z załącznika samego standardu to najsilniejsza dostępna kontrola poprawności parsera formatu wymiany.

Standard Status Wyrocznia zewnętrzna
CCSDS OEM (502.0-B Orbit Data Messages) validated tests/ccsds_reference.rs: parse_oem odtwarza dokładne epoki i wektory stanu X/Y/Z/Ẋ/Ẏ/Ż przykładu OEM w notacji KVN z CCSDS 502.0-B-3, Annex G §G6, Figure G-11 („OEM Example with No Acceleration, No Covariance”, s. G-10): oba segmenty efemerydy, w tym wartości źródłowe z wiodącymi zerami (-063.042). Wzorzec tests/fixtures/ccsds/oem_502_b3_figG11.oem jest odtworzony znak po znaku z oficjalnej Blue Book (redakcyjne znaczniki „< intervening data records omitted here >”, które nie są poprawnymi rekordami OEM, nie są uwzględnione).
CCSDS TDM (503.0-B Tracking Data Message) validated tests/ccsds_reference.rs: TdmFile::parse odtwarza wszystkie 41 rekordy RANGE (pierwszy 3198,03679519614 km, ostatni 3270,46440460551 km) oraz metadane przykładu TDM w notacji KVN z CCSDS 503.0-B-2, Annex E, Figure E-9 („Range Data with TIMETAG_REF=TRANSMIT”, s. E-9). Wzorzec tests/fixtures/ccsds/tdm_503_b2_figE9.tdm jest dosłowny z Blue Book. (To jest wyrocznia z opublikowanej Blue Book obok wcześniejszego, ręcznie napisanego testu w obie strony reference.tdm w src/ccsds_tdm.rs.)
CCSDS 133,0 (Space Packet Protocol) validated src/space_packet.rs primary_header_matches_published_independent_test_vectors: koder odtwarza bajtowe wektory testowe głównego nagłówka niezależnej biblioteki spacepackets (us-irs/spacepackets-py, tests/ccsds/test_space_packet.py), np. 18 02 40 34 00 16 i przypadek wszystkich maksimów 1F FF FF FF FF FF, plus kanoniczny przypadek telemetrii (TM) z samych jedynek, każdy przepuszczony w obie strony przez dekodowanie. Szerokości/kolejność pól bitowych wg CCSDS 133.0-B-2 §4.1.3.
CCSDS 401 / DSN (budżet łącza, DSN 810-005) validated src/linkbudget.rs link_equation_reproduces_descanso_galileo_dct: łańcuch FSPL (strata propagacji w wolnej przestrzeni) i C/N₀ odtwarza opublikowaną tabelę projektowo-kontrolną telemetrii w głębokiej przestrzeni kosmicznej z J. H. Yuen (red.), Deep Space Telecommunications Systems Engineering (DESCANSO/JPL (DESCANSO: Deep Space Communications and Navigation Systems Center of Excellence) Pub. 82-76), Table 1-1: łącze w dół Galileo w paśmie X (8420,43 MHz) przy 6,37 AU: strata w wolnej przestrzeni 290,54 dB (<0,05 dB) i odebrane Pr/N₀ = 54,6 dB-Hz (<0,2 dB). Środki pasm mieszczą się w przydziałach łączy w dół w głębokiej przestrzeni kosmicznej DSN/CCSDS-401 (DSN 810-005 Module 201). Domyślne parametry misji pozostają reprezentatywne (nie jest to skalibrowany transponder); przypięte jest równanie łącza.

Standardy GNSS: status wyroczni zewnętrznej i uczciwe pozostałe luki:

Standard Status i uczciwe zastrzeżenie
RAIM / ARAIM Jądro, geometria i poziom ochrony ARAIM sprawdzone zewnętrznie. Jądro detekcji (próg detekcji usterek χ², niecentralność niewykrytego zdarzenia w niecentralnym χ² oraz mnożniki K prawa normalnego) odtwarza SciPy (tests/raim_reference.rs, 171 przypadków, ≤ 1e-6 względnie), a otaczająca je geometria odtwarza gnss_lib_py (DOP). Wartość poziomu ochrony (PL) ARAIM jest teraz również przypięta: względem „LPV-200 (LPV: localizer performance with vertical guidance) numerical example” z WG-C (WG: Working Group) ARAIM Reference ADD (Algorithm Description Document) v3.1, src/araim_reference.rs / tests/araim_reference_vectors.rs dają VPL 18,2926 m wobec 18,3 m, HPL 13,4063 m wobec 13,45 m i σ_v,acc 1,3694 m wobec 1,3694 m, w granicach własnego TOL_PL = 0,05 m wzorca (rodzaj araim-reference-check). Zakres: tryby usterek do jednego satelity lub jednej konstelacji (N_fault,max = 1); wielozdarzeniowe podzbiory usterek i wykluczanie nie są zaimplementowane, a klasyczny RAIM nadal nie ma kanonicznego opublikowanego wektora testowego wejście→HPL. Zob. ARAIM_REFERENCE.md.
SBAS / DO-229E Algorytm poziomu ochrony jest teraz sprawdzony zewnętrznie. Przy danych dla każdego satelity (el, az, σ) sbas_protection_level w kshana odtwarza fork RTKLIB SBAS-PL (zsiki/rtklib_ws waasprotlevels(), Siki & Takács 2017, „DO-229D Appendix J”): zasilony własnym σ tego narzędzia, obliczonym z rzeczywistych komunikatów EGNOS i rzeczywistego RINEX z BUTE, do < 2e-3 m HPL w 6 epokach (tests/sbas_reference.rs); ESA gLAB v6.0.0 (core/filter.c) potwierdził identyczną konwencję. Współczynniki K (K_H,PA=6.0, K_V=5.33, K_H,NPA≈6.18) zgadzają się z DO-229E Appendix J. Co jest sprawdzone, a co nie: przypina to algorytm PL (σ na wejściu → HPL/VPL na wyjściu); modelowanie σ ze źródłowych komunikatów UDRE/GIVE leży poza zakresem kshana: tam niezależne narzędzia pełnego potoku nadal różnią się o metry na rzeczywistych danych. K_V zgodziło się przy zaokrąglonej wartości wyroczni 5,33 (dokładne Φ⁻¹(1−5e-8)=5.3267 w kshana → VPL mniejszy o ~0,06 %; wertykalna jest sprawdzona bez współczynnika K jako d_U).
IONEX / Klobuchar Model nadawany sprawdzony zewnętrznie. Model Klobuchara L1 odtwarza ionmodel z RTKLIB (tests/klobuchar_reference.rs, < 1e-4 m): parytet implementacji z de facto otwartym wzorcem, ponieważ nie istnieje oficjalny przykład opracowany z zmierzoną prawdą. Czytnik map TEC IONEX już istnieje (src/ionex.rs, testowany jednostkowo); pozostałą luką jest kontrola krzyżowa tego czytnika względem rzeczywistego produktu GIM, a nie model nadawany. Zob. wiersze Klobuchara w Deklaracje a rzeczywistość.
Kod rozpraszający GPS L1 C/A (IS-GPS-200) Generowanie kodu sprawdzone zewnętrznie. src/sdr.rs (ca_first_ten_chips_match_is_gps_200_octal): generator kodu C/A z LFSR (rejestr przesuwny ze sprzężeniem zwrotnym) G1/G2 odtwarza opublikowane przypisania fazy kodu w IS-GPS-200 Table 3-Ia: ósemkowe pierwsze dziesięć chipów dla PRN (pseudo-random noise) 1–9 ({1440, 1620, 1710, 1744, 1133, 1455, 1131, 1454, 1626}) dokładnie. Przypina to ciąg chipów kodu rozpraszającego względem specyfikacji interfejsu GPS; otaczające elementy modulacji, separacji widmowej i śledzenia kodu w DLL (pętla z opóźnieniem) (navsignal) pozostają MODELLED.

Czas dla sieci, widma, Układu Słonecznego, konstelacji, kampanii i LEO-PNT#

Możliwości dodane w linii 0,28 są oceniane wiersz po wierszu w generowanym VERIFICATION-MATRIX.md; ta sekcja podsumowuje, które z nich mają wyrocznię zewnętrzną. Wiersz jest VALIDATED tylko przy niezależnej wyroczni zewnętrznej; wszystko inne jest MODELLED.

Możliwość (rodzaj) Status Wyrocznia zewnętrzna lub powód, dla którego pozostaje zamodelowane
Telekomunikacyjne MTIE (maksymalny błąd przedziału czasu) i TDEV (odchylenie czasu) na szeregu holdover (telecom-timing) validated tests/telecom_timing_reference.rs: 17 współczynników uśredniania MTIE i 12 TDEV na zatwierdzonym do repozytorium szeregu holdover zegara w skali układu o 2 048 próbkach, względem allantools 2024,06, do < 1e-12 / < 1e-9 względnie. Werdykty maski ITU-T (International Telecommunication Union Telecommunication Standardization Sector) PASS/FAIL oraz ustawienia wstępne oscylatorów z kart katalogowych pozostają MODELLED. Zob. TELECOM-TIMING.md.
Predykcja holdover z zmierzonego zapisu zegara (slot-timing) validated tests/slot_timing_cs5071a_holdout.rs: dopasowanie na pierwszej trzeciej części rzeczywistego zapisu cezowego 5071A, predykcja czasu przekroczenia jednego sigma przy sześciu progach, pomiar na zatrzymanych dwóch trzecich; próg czynnik 1,5 w każdą stronę, zaobserwowane stosunki od 0,84 do 1,03. Budżet ochronny szczeliny i kadencja poprawek zbudowane na tym pozostają MODELLED.
Widmowe gęstości mocy w paśmie L w postaci zamkniętej i separacja widmowa (spectrum) validated Postacie zamknięte navsignal względem opublikowanych wartości (wiersz macierzy „Closed-form L-band signal power spectral densities…”). Wodospad z J/S (stosunek zakłócacza do sygnału) dla każdego pasma i efektywnym C/N0 (gęstość nośna do szumu) oraz wejście/wyjście SigMF (Signal Metadata Format) pozostają MODELLED.
Pozycje planet z elementów Standisha JPL (Jet Propulsion Laboratory) i czas światła między ciałami (solar-system) validated 0,30, zarejestrowane wstępnie względem JPL Horizons (DE441): tests/solar_system_standish_preregistered.rs i tests/solar_system_standish_earth_icrf_preregistered.rs, RMS na planetę i składową co najwyżej równe wartości z Explanatory Supplement Table 8.10.1 (najgorsze 0,778), z uwzględnieniem podziału Ziemi i obrotu ICRF; tests/solar_system_light_time_solver_preregistered.rs, solver czasu światła na pozycjach DE441 w granicach 1e-6 s od czasu światła z Horizons (najgorsze 6.7e-9 s). Wcześniejsze porównanie z podwójną wartością nominalną (tests/solar_system_horizons_reference.rs), którego próg ustalono po pierwszym porównaniu, jest zachowane jako niebramkujące porównanie regresyjne. Uran/Neptun z Table 1, Pluton, księżyce, stałe ciał i body-pnt pozostają MODELLED.
Geometria Walkera oraz opublikowane sloty GPS, Galileo i GLONASS (GLObal NAvigation Satellite System); globalny współczynnik rozmycia dokładności GPS (constellation-design) validated constellation::tests: Walker 24/3/1 odtwarza tabelę definicji usługi otwartej Galileo do 1e-9°, wzór slotów z dokumentu kontroli interfejsu GLONASS, równikowe przejścia GPS; mediana HDOP bazowego GPS 0,940 względem 0,94 ze standardu wydajności Standard Positioning Service. Dowolne mapy pokrycia wielokonstelacyjnego wokół dowolnego ciała pozostają MODELLED.
Kampanie: łańcuchy misji, przeglądy parametrów, zespoły Monte Carlo, przebiegi ze wspólnymi warunkami (campaign) modelled tests/campaign_composition_reference.rs (11 testów): kampania jednofazowa odtwarza samodzielny przebieg bajt po bajcie, przegląd jednowęzłowy odczytuje tę samą liczbę, zespół zależny od ziarna jest stabilny co do bajtu. Tożsamości składania, a nie wyrocznia zewnętrzna.
Fizyka łącza LEO (niska orbita okołoziemska): współczynniki deszczu ITU-R (ITU Radiocommunication Sector) P.838, tłumienie deszczu i scyntylacja P.618, strata wnikania do budynku P.2109, jonosfera pierwszego rzędu, maksymalny Doppler validated tests/leo_link_reference.rs, tests/leo_doppler_reference.rs: własne tabele Zaleceń ITU-R i przykłady walidacyjne Study Group 3 (zatwierdzone do repozytorium wraz ze źródłem i datą pobrania), stosunek opóźnień grupowych z IS-GPS-200 dla jonosfery oraz opublikowana tabela maksymalnego dopplera Leclere, Marathe i Reid (ION GNSS+ 2025, arXiv 2509,19551).
Komunikat nawigacyjny LEO: algorytm użytkownika efemerydy nadawanej Galileo ICD (dokument kontroli interfejsu), CRC-24Q (24-bitowa cykliczna kontrola nadmiarowa), globalnie uśrednione wagi SISRE (błąd zasięgu sygnału w przestrzeni) (leo-navmsg) validated tests/leo_navmsg_reference.rs: algorytm użytkownika Galileo odtwarza RTKLIB (otwartoźródłową bibliotekę kinematycznego pozycjonowania w czasie rzeczywistym) z dokładnością 1 mm na czterech rzeczywistych efemerydach nadawanych Galileo; CRC-24Q daje wartość kontrolną z katalogu 0xCDE703 i bajty kontrolne przykładowej ramki RTCM (Radio Technical Commission for Maritime Services) 1005; wagi SISRE odtwarzają opublikowaną tabelę MEO/GEO. Dopasowywacz, aktualizacja w trakcie przelotu, kodowanie binarne, tekst w stylu RINEX-4/CSV (wartości rozdzielane przecinkami) i wybieralne modele efemeryd pozostają MODELLED.
Projekt sygnału LEO, przelot i budżet łącza, Doppler oraz łączne pozycjonowanie GNSS+LEO, zbieżność PPP (precyzyjne pozycjonowanie punktowe), pozycjonowanie 5G NTN (sieć nienaziemna), transfer czasu LEO (leo-signal, leo-pass, leo-pvt, leo-ppp, ntn-positioning) modelled tests/leo_signal_reference.rs, tests/leo_fusion_scenarios.rs: postacie zamknięte, spójność filtru (na przykład uśrednione po przebiegach NEES filtru PPP w jego paśmie 95%) oraz porównania opublikowanych trendów; bez danych terenowych.
Jeden system LEO-PNT od końca do końca (leo-pnt-chain) modelled tests/leo_pnt_chain.rs: każda przekazana wartość równa się własnemu wynikowi etapu wcześniejszego, a zmiana wejścia wcześniejszego przesuwa każdą zależną od niego wartość dalszą.
Odporność LEO i obszary pionowe (spoofing przez Doppler i przez spójność międzypasmową, sondowanie jonosfery) modelled tests/leo_resilience_verticals.rs (10 testów). Scenariusze odporności i pionowe są wymienione w RESILIENCE-CROSSWALK.md.

Wyniki będące renderingami, a nie dowodami, mają testy, ale nie mają wiersza w macierzy: eksporty wymiany (CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, efemeryda STK (Systems Tool Kit), SigMF (Signal Metadata Format)), każdy wczytany z powrotem przez walidator napisany ze specyfikacji formatu (tests/interop_formats.rs, 13 testów; zob. INTEROP.md); animacje (tests/animation.rs: powtórne przebiegi identyczne co do bajtu, dokładne liczby klatek, poprawnie sformułowany SVG (Scalable Vector Graphics), brak zewnętrznego adresu w odtwarzaczu HTML (HyperText Markup Language)); oraz raport z przebiegu (tests/advanced_report.rs, tests/advanced_report_cli.rs: każdy dołączony scenariusz raportuje bez pustej sekcji i wartości zastępczej, etykiety odpowiadają macierzy, a zapisane polecenie odtwarza result.json i raport bajt po bajcie).

Obwiednia działania#

Każdy pakiet jest ćwiczony w całym zadeklarowanym zakresie wejść przez tests/scenario_coverage.rs, który potwierdza, że każde liczbowe wyjście jest skończone (bez NaN/Inf (NaN: nie liczba)) i ograniczone. Tabela podaje przetestowany zakres wejść dla każdego pakietu, oczekiwane zachowanie wyjścia i test pokrywający.

Pakiet Zmieniane wejście Przetestowany zakres Oczekiwane wyjście Test pokrywający
clock threshold_ns (specyfikacja czasu) 1 – 500 ns skończone wskaźniki jakości holdover/czasu/bezpieczeństwa clock_pack_covers_the_spec_threshold_envelope
inertial accel.bias 1e-7 – 1e-2 m/s² (zimne atomy → prymitywny MEMS (mikroukłady elektromechaniczne)) skończone, ograniczone RMS/p95 pozycji inertial_pack_covers_the_accel_bias_envelope
orbit mask_deg (maska elewacji) 5° – 30° skończone DOP/dostępność; ograniczone orbit_pack_covers_the_elevation_mask_envelope
spoof attack.rate_ns_per_s 0,1 – 50 ns/s skończone P_md / bezpieczeństwo, ograniczone spoof_pack_covers_the_attack_rate_envelope
hybrid position_spec_m 10 – 1000 m skończony holdover czasu/pozycji hybrid_pack_covers_the_position_spec_envelope
orbita (rzeczywista) rzeczywiste TLE Celestrak gps-ops migawka 30 satelitów, ścisła kontrola sum kontrolnych wczytuje się tylko z poprawnymi sumami kontrolnymi; ograniczona geometria real_gps_constellation_scenario_loads_with_valid_checksums_and_bounded_output
zegar (flicker) flicker_floor włączone/wyłączone 0 wobec 1e-12 włączenie progu 1/f pogarsza wybieg p95 czasu flicker_fm_floor_degrades_the_clock_holdover_when_enabled
fuzja (realizm) accel.bias 0 wobec 5.88e-7 m/s² zero wobec realistycznej wartości niezerowej filtr nadal jest zbieżny, w granicach 3× błędu przy zerowym biasie fusion_filter_converges_with_a_realistic_non_zero_bias

Wiersze flicker-FM i biasu fuzji zamykają dwie konkretne luki realizmu: człony szumu są domyślnie wyłączone, ale po włączeniu wyraźnie wpływają na wynik, a łączny filtr fuzji nie zależy od tego, że biasy są wyzerowane: jest zbieżny także przy realistycznym resztkowym biasie klasy zimnych atomów.

Znane ograniczenia#

  • Przebiegi kwantowe i klasyczne używają teraz niezależnych ziaren RNG (generator liczb losowych) (ziarno klasyczne = ziarno + 0x9e3779b97f4a7c15), więc ich realizacje szumu są nieskorelowane: poprawione po przeglądzie.
  • holdover_s uwzględnia segmenty: osie czasu utraty sygnału są dzielone na ciągłe segmenty przy ponownym zdobyciu GNSS, a podawana wartość to najgorszy (najkrótszy) wybieg spośród nich. Pozostaje ograniczona rozdzielczością siatki czasu (dolna granica).
  • Ponowna synchronizacja transferu czasu ISL modeluje resztkową niepewność łącza jako świeży jitter o zerowej średniej w każdym kroku pomiaru plus ponowne zakotwiczenie w skonfigurowanym odstępie.

Deklaracje a rzeczywistość: krótkie zestawienie#

Lista kontrolna wrogiego recenzenta. Dla każdego terminu, który można odczytać jako coś więcej, niż jest: co Kshana robi dziś i gdzie na mapie drogowej leży prawdziwa wersja.

Termin, który można zobaczyć Czym naprawdę jest dziś Czym nie jest (jeszcze)
„hybrydowy symulator kwantowego/klasycznego PNT” klasyczny symulator stochastyczny sterowany opublikowanymi współczynnikami Allana/szumu czujników kwantowych fizyka kwantowa z zasad pierwszych (faza Macha–Zehndera, szum projekcji, błędy systematyczne): zob. QUANTUM-MODELS.md
„łączna fuzja Kalmana” / pakiet fusion uruchamialny pakiet fusion obserwuje zegar i pozycję osobno (bezpośrednia poprawka czasu i bezpośrednia poprawka pozycji), dla czego optymalny estymator jest rzeczywiście blokowo-diagonalny: dwa dwustanowe filtry ze wspólnym wskaźnikiem jakości sprzężony filtr dla przypadku pseudoodległości już istnieje jako fusion::coupled::CoupledPntFilter (4-stanowy ułożony [pos,vel,phase,freq], niezerowa kowariancja międzyblokowa, sprawdzony pod kątem NEES), ale nie jest jeszcze podłączony do uruchamialnego pakietu, a pakiet jest 1-DOF (jeden stopień swobody): rozszerzenie 3-D z 8 stanami to praca na przyszłość
Wskaźnik jakości bezpieczeństwa (rodzaj spoof) 1 − P_md stochastycznego detektora fałszowania czasu: dwustronny test χ²₁ / Neymana–Pearsona na statystyce monitora wspomaganego zegarem, z progiem ustawionym z docelowego P_fa, P_md obliczone przy wielkości ze specyfikacji zarówno w postaci zamkniętej, jak i metodą Monte Carlo (zgodne z dokładnością kilku ×1/√N) wielosatelitarny detektor RAIM/ARAIM: zob. INTEGRITY.md; statystyka monitora jest modelem gaussowskim ze σ zegara wyprowadzonym z PSD, a nie korelacją na poziomie sygnału
„detekcja spoofingu wspomagana zegarem” jednozegarowy monitor rozbieżności czasu (statystyka gaussowska, σ z PSD zegara), NIE wielosatelitarny (SV: pojazd kosmiczny, czyli satelita) RAIM RAIM wielosatelitarny w dziedzinie zasięgu z poziomami ochrony
P_md detektora spoofingu (postać zamknięta wobec Monte Carlo) analityczne P_md oparte na Φ i empiryczna estymata z prób mc_runs zgadzają się w granicach błędu próbkowania (≈ 1/√N); sprawdzone w testach src/spoof.rs / src/detection.rs przy wymuszonym odchyleniu (μ/σ = 2) zmierzona ROC detektora na zarejestrowanych danych spoofingu
model pseudoodległości gnss-sim symulacja prosta: ρ = geometric + clocks + Klobuchar iono + Saastamoinen·Niell tropo + noise + multipath. Każdy model atmosfery jest testowany jednostkowo względem wartości policzonych ręcznie (ZHD (zenitowe opóźnienie hydrostatyczne) ≈ 2,3 m, Niell = 1 w zenicie, skośność Klobuchara), a pełny nadawany model Klobuchara jest skontrolowany krzyżowo względem implementacji referencyjnej ionmodel() z RTKLIB z dokładnością poniżej milimetra (klobuchar_agrees_with_rtklib_reference_implementation, 6,1278 m dla przypadku domyślnych współczynników RTKLIB; nie istnieje oficjalny opublikowany wektor testowy Klobuchara, więc to jest parytet implementacji, a nie zmierzona prawda); przebieg bez szumu odtwarza geometrię + poprawki z dokładnością poniżej milimetra (residuum RAIM ≈ 0) rozwiązanie pozycji z rzeczywistych sygnałów (PPP/RTK (PPP: precyzyjne pozycjonowanie punktowe)), dwuczęstotliwościowa kombinacja bez wpływu jonosfery lub rozwiązywanie niejednoznaczności fazy nośnej: niezamodelowane
model jammingu (rodzaj jamming) łańcuch budżetu łącza: J/S ze straty propagacji w wolnej przestrzeni + zysku anteny dla każdego kierunku → efektywne C/N₀ z równania antyzakłóceniowego (zysk rozpraszania × separacja widmowa Q) → utrata synchronizacji przy progu (Kaplan & Hegarty §9,4) wielodrogowość, dynamika AGC (automatyczna regulacja wzmocnienia) w czasie, sam przeszukiwanie akwizycji (opcjonalna histereza [acquisition] to para progów); opcjonalna strata kwantyzatora [front_end] dotyczy wejścia gaussowskiego i nie obowiązuje dla zakłócacza CW; opcjonalna tablica [crpa] jest wąskopasmowa i idealna (bez sprzężeń i niedopasowań), a opcjonalne zacienianie [terrain] to jedna krawędź noża na jednym kafelku SRTM; Q jest reprezentatywną stałą dla danego typu, a nie wyprowadzoną ze zmierzonego PSD zakłócacza
Wskaźnik jakości integralności (pakiety zegara/holdover) samospójność filtru (ułamek próbek utraty sygnału wewnątrz jego własnej granicy k·σ) HPL/VPL, ryzyko integralności / P_HMI, limity alarmowe, DO-229E/316/ED-259A: są raportowane osobno przez rodzaj integrity (RAIM / ARAIM) i funkcje SBAS, nigdy nie włączane do tego wskaźnika
wskaźnik jakości starszego pakietu scenariuszy inertial jednoosiowy (1-DOF) budżet błędów akcelerometru/żyroskopu (VRW/ARW, niestabilność biasu) z resetem do prawdy starszy pakiet jest 1-DOF; ścieżka 3-osiowa jest dostarczana w pakiecie gnss-ins (następny wiersz)
3-osiowa biblioteka strapdown + pakiet gnss-ins (src/inertial/, src/fusion/pack.rs) zweryfikowany nawigator kwaternionowy/NED (NED: północ-wschód-dół) z deterministycznym modelem błędów IMU: modelowane są współczynnik skali, niewspółosiowość, wrażliwość na g, kwantyzacja, narastanie szybkości (IEEE Std 952-1997 §A.2; Groves 2013 §4,3), teraz sterowane przez pakiet scenariuszy gnss-ins i konfigurowalne dla każdego czujnika z TOML (Tom's Obvious Minimal Language, format scenariusza) ([imu_*.error_model]) niezamodelowane: błąd prostowania drgań, dryf od gradientu temperatury. Błąd wybiegu fuzji jest ograniczony od dołu przez błąd orientacji przy przekazaniu (pochylenie/bias akcelerometru słabo rozdzielne), więc kalibracja poszczególnych biasów nie jest deklarowana
„Hybrydowa integracja PNT” (pakiet hybrid) nawigacja zliczeniowa w pętli otwartej ograniczona resetami GNSS do prawdy sprzężone (luźno/ściśle) połączenie GNSS–INS filtrem Kalmana: to osobny pakiet gnss-ins (EKF) i rodzaj hybrid-ukf
„Positioning Performance” (pakiety zegara) RMS czasu fazy zegara w ns (timing_rms_ns) dokładność w dziedzinie pozycji ważona RMS/CEP/SEP/DOP (SEP: sferyczny błąd prawdopodobny)
inercjalny wskaźnik jakości pozycji (pos_rms_m) jednoosiowe RMS/p95 pozycji w metrach, z jednego ziarna, chyba że runs = N żąda zespołu (wtedy średnia, rozrzut i bootstrapowy 95% przedział ufności dla każdej metryki) rozkład CEP / 2DRMS (dwukrotne RMS odległości) zespołu (mapa drogowa: CEP metodą Monte Carlo)
„sprawdzone z dokładnością do ~2%” typowa zaobserwowana zgodność; wymuszana bramka to 20–25% błędu względnego gwarantowana granica dokładności 2%
„odtwarzalne / identyczne co do bitu” powtórny przebieg identyczny co do bitu na tym samym systemie operacyjnym (OS) z przypiętym zestawem narzędzi; między Linuksem, macOS i Windows CI sprawdza zatwierdzony skrót SHA-256 odcisku wejścia i kształtu każdego wyniku (tests/cross_platform_golden.rs) oraz wartości liczbowe z dokładnością do 1e-6 (tests/golden.rs) identyczny co do bajtu pełny wynik na różnych systemach operacyjnych (różnice libm na ostatniej cyfrze)
scenariusz SGP4 dla GPS (orbit-sgp4-gps.toml) autentyczna migawka Celestrak gps-ops (2021-07-28, 30 satelitów, ścisłe sumy kontrolne), w której każdy satelita jest propagowany od własnej epoki TLE aktualna konstelacja — odśwież migawkę poleceniem scripts/fetch_tles.sh (zob. REAL_TLE_GUIDE.md); numery katalogowe NORAD (North American Aerospace Defense Command) są rzeczywiste

Kontrole krzyżowe z artykułami o Lunar-PNT (dowody regresyjne, nie wiersze macierzy)#

Zestaw lunarny/cislunarny (możliwości „Lunar & cislunar” i „Lunar PNT suite” w README) ma twierdzenia z opublikowanych artykułów sprawdzone niezależnie w tests/validate_p*.rs, każde względem wyroczni z innej implementacji:

  • orbitalny ślad nadawania/rejestracji względem scipy.special.j1 (funkcja Bessela J1 z Cephes);
  • geometria DOP dla latarni na powierzchni względem niezależnego rozwiązania (HᵀH)⁻¹ w NumPy;
  • wzrost błędu predykcji persystencji UT1/EOP względem ponownego sparsowania w NumPy tych samych dosłownych wierszy finals2000A z IERS;
  • płaska rodzina orbit wstecznych odległych (DRO) względem bazy danych NASA/JPL Three-Body Periodic Orbit Database;
  • budżet precyzji pomiaru odległości RF względem wzorca wyprowadzonego z podstaw fizycznych.

Fixtures i skrypty generatorów wyroczni znajdują się w tests/fixtures/{p1_footprint,lunar_service,eop_prediction,rf_ranging_precision,dro_family_jpl,p2_independent_dop}/. Wzmacniają one dowody stojące za możliwościami, które w sprawdzanej maszynowo macierzy pozostają MODELLED (src/verification.rs); są to kontrole regresyjne, a nie nowe wiersze VALIDATED macierzy, więc same nie zmieniają liczby wierszy sprawdzanej maszynowo macierzy. Liczby tej nie powtarzamy tutaj, ponieważ ręcznie wpisana kopia się rozjeżdża: aktualny podział to wygenerowany nagłówek VERIFICATION-MATRIX.md, który gen_validation_artifacts zapisuje na podstawie verification_matrix(), a tests/verification_artifacts_doc_sync.rs go przypina.