Maskinoversættelse, ikke gennemgået af en modersmålstalende. Engelsk er referencen.

BanerRedigér på GitHubKilde: docs/SGP4-VALIDATION.md

Validering af SGP4/SDP4 mod fællesskabets reference

Kshanas banepropagator er valideret mod fællesskabets kanoniske reference for SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4): de verifikationsvektorer, der er offentliggjort sammen med Vallado et al., "Revisiting Spacetrack Report #3" (AIAA (American Institute of Aeronautics and Astronautics) 2006-6753), distribueret som SGP4-VER.TLE (test-TLE'erne (two-line element sets)) og tcppver.out (den forventede TEME (true equator, mean equinox)-tilstand ved hvert tidspunkt). Det er den samme reference, som de offentlige C++/Python/MATLAB-implementeringer valideres mod, så når resultaterne stemmer her, stemmer de med de facto-standarden.

Resultat#

Størrelse Værdi
Sammenlignede referencetilstande 666 (alle rækker i tcppver.out, fastlåst i testen)
Største positionsfejl 4,12 mm (4.120e-6 km, satellit 23333; < tolerance på 2e-5 km)
Største hastighedsfejl 1.85e-9 km/s (satellit 23333; < tolerance på 1e-6 km/s)
Dækkede tilfælde SGP4 for nær Jorden, SDP4 for dybt rum (lunisolar + 12 t/24 t resonans) og de bevidste fejlkodetilfælde

Tilfældene for dybt rum og resonans betyder noget specifikt for dette projekt: GNSS (globalt navigationssatellitsystem)-satellitter befinder sig i baner på ~12 t, der er dybt rum og resonante, og som en to-legemers + J2-sekulær model ikke kan gengive — SGP4/SDP4 kan.

Metode#

  • Implementeringen (src/sgp4.rs) er en afhængighedsfri Rust-portering af Vallados algoritme i offentlig eje; epokehåndteringen er dage siden 1950, tilstanden improved (ikke afspc) bruges, og WGS-72 (WGS: World Geodetic System)-tyngdekonstanter anvendes, som referencen foreskriver.
  • Testen (tests/sgp4_verification.rs) parser de medleverede fixtures SGP4-VER.TLE og tcppver.out (tests/fixtures/sgp4/), propagerer hver testsatellit til hvert referencetidspunkt og kontrollerer, at TEME-position og -hastighed stemmer inden for tolerancerne ovenfor. Antallet af sammenlignede rækker er fastlåst til præcis 666, så en regression i en fixture eller i håndteringen af springover ikke stille kan mindske dækningen.

Reproducér det#

cargo test --test sgp4_verification -- --nocapture

Testen udskriver antallet af sammenlignede rækker og de værste fejl i position og hastighed. Fixtures er committet, så kontrollen er fuldt offline og deterministisk.

Uafhængig krydskontrol mod cratet sgp4#

At stemme med den offentliggjorte reference beviser korrekthed mod en tabel. For også at bevise korrekthed mod en uafhængig implementering kører tests/sgp4_crate_comparison.rs et udbredt, uafhængigt Rust-bibliotek til SGP4, cratet sgp4 (neuromorphicsystems/sgp4, version 2,4), over de samme 666 AIAA-vektorer og sammenligner de to kodebaser direkte. Begge køres med tyngdemodellen WGS72 (World Geodetic System 1972), som vektorerne er defineret i (cratets standard from_elements bruger WGS84 (World Geodetic System 1984), som afviger fra WGS72-referencen med ~km — et modelvalg, åbent anført, ikke en fejl).

Område kshana ↔ reference crate ↔ reference kshana ↔ crate
nær Jorden (LEO/MEO (LEO: lav jordbane; MEO: mellemhøj jordbane)) 7.3e-9 km 7.3e-9 km 4.4e-10 km
dybt rum (ikke-resonant) 4.1e-6 km 2.1e-7 km 4.1e-6 km
resonans i dybt rum (½-døgn) 8.1e-9 km 7.7e-9 km 2.2e-9 km
resonans i dybt rum (1-døgn) 8.2e-9 km 7.8e-9 km 2.2e-9 km

To uafhængige implementeringer stemmer til under en mikrometer for baner nær Jorden og resonante baner og til 4,12 mm i værste fald på tværs af alle områder — de samme 4,12 mm, som er Kshanas egen afvigelse fra referencen, altså er uenigheden netop det ene tilfælde i dybt rum, hvor cratet ligger mellem Kshana og tabellen. Den fulde tabel (med antal rækker for hvert område og de fire patologiske tilfælde, som cratet afviser ved konstruktion) er committet i tests/fixtures/sgp4_comparison.md og regenereres via KSHANA_REGEN_FIXTURES=1 cargo test --test sgp4_crate_comparison.

Status for "udgivelse" af dette resultat#

Selve krydsvalideringen er færdig og ligger i træet. At indsende resultatet til eksterne fora (et fællesskabskatalog, en kort note, en post arkiveret med DOI (DOI: digital object identifier)) er en handling for vedligeholderne, som følges separat i køreplanen; dette dokument er den optegnelse i repositoryet, som disse indsendelser ville pege på.