Validering av SGP4/SDP4 mot fellesskapets referanse
Kshanas banepropagator er validert mot fellesskapets kanoniske referanse for SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4): verifikasjonsvektorene publisert med Vallado et al., «Revisiting Spacetrack Report #3» (AIAA (American Institute of Aeronautics and Astronautics) 2006-6753), distribuert som SGP4-VER.TLE (test-TLE-ene (two-line element sets)) og tcppver.out (den forventede TEME-tilstanden (true equator, mean equinox) ved hvert tidspunkt). Dette er den samme referansen de offentlige implementasjonene i C++/Python/MATLAB valideres mot, så at tallene stemmer her, betyr at de stemmer med de facto-standarden.
Resultat#
| Størrelse | Verdi |
|---|---|
| Sammenlignede referansetilstander | 666 (alle rader i tcppver.out, festet i testen) |
| Verste posisjonsfeil | 4,12 mm (4.120e-6 km, satellitt 23333; < toleransen 2e-5 km) |
| Verste hastighetsfeil | 1.85e-9 km/s (satellitt 23333; < toleransen 1e-6 km/s) |
| Tilfeller som dekkes | SGP4 nær jorden, SDP4 i dypt rom (måne-sol + resonans på 12 t/24 t), og de bevisste feilkodetilfellene |
Tilfellene i dypt rom og med resonans betyr spesielt mye for dette prosjektet: GNSS-satellitter (globalt satellittnavigasjonssystem) går i baner på ~12 t som er i dypt rom og med resonans, noe en modell med to legemer + sekulær J2 ikke kan gjengi — SGP4/SDP4 kan.
Metode#
- Implementasjonen (
src/sgp4.rs) er en avhengighetsfri Rust-port av den offentlig tilgjengelige Vallado-algoritmen; epokehåndteringen er dager siden 1950, modusenimproved(ikkeafspc) brukes, og WGS-72-gravitasjonskonstanter (WGS: World Geodetic System) brukes slik referansen angir. - Testen (
tests/sgp4_verification.rs) leser de medfølgende fixtureneSGP4-VER.TLEogtcppver.out(tests/fixtures/sgp4/), propagerer hver testsatellitt til hvert referansetidspunkt og kontrollerer at TEME-posisjon og -hastighet stemmer innenfor toleransene ovenfor. Antallet sammenlignede rader er festet til nøyaktig 666 slik at en regresjon i fixtur eller i hoppeoppførsel ikke i det stille kan redusere dekningen.
Reproduser det#
cargo test --test sgp4_verification -- --nocapture
Testen skriver ut antall sammenlignede rader og de verste posisjons- og hastighetsfeilene. Fixturene er sjekket inn, så kontrollen er helt frakoblet og deterministisk.
Uavhengig krysskontroll mot craten sgp4#
Å stemme med den publiserte referansen viser korrekthet mot en tabell. For også å vise korrekthet mot en uavhengig implementasjon kjører tests/sgp4_crate_comparison.rs et mye brukt, uavhengig SGP4-bibliotek i Rust, craten sgp4 (neuromorphicsystems/sgp4, versjon 2,4), over de samme 666 AIAA-vektorene og sammenligner de to kodebasene direkte. Begge kjøres med gravitasjonsmodellen WGS72 (World Geodetic System 1972) som vektorene er definert i (craten bruker som standard WGS84 (World Geodetic System 1984) i from_elements, som avviker fra WGS72-referansen med ~km — et modellvalg, oppgitt ærlig, ikke en feil).
| Regime | kshana ↔ referanse | crate ↔ referanse | kshana ↔ crate |
|---|---|---|---|
| nær jorden (LEO/MEO (LEO: lav jordbane; MEO: middels jordbane)) | 7.3e-9 km | 7.3e-9 km | 4.4e-10 km |
| dypt rom (uten resonans) | 4.1e-6 km | 2.1e-7 km | 4.1e-6 km |
| resonans i dypt rom (½ døgn) | 8.1e-9 km | 7.7e-9 km | 2.2e-9 km |
| resonans i dypt rom (1 døgn) | 8.2e-9 km | 7.8e-9 km | 2.2e-9 km |
To uavhengige implementasjoner stemmer overens til under en mikrometer for baner nær jorden og baner med resonans, og til 4,12 mm i verste fall på tvers av alle regimer — de samme 4,12 mm som er Kshanas eget avvik fra referansen, det vil si at uenigheten er det ene tilfellet i dypt rom, med craten plassert mellom Kshana og tabellen. Den fullstendige tabellen (med radantall per regime og de fire patologiske tilfellene craten avviser ved opprettelse) er sjekket inn på tests/fixtures/sgp4_comparison.md og genereres på nytt med KSHANA_REGEN_FIXTURES=1 cargo test --test sgp4_crate_comparison.
Status for «publisering» av dette resultatet#
Selve krysskontrollen er fullført og ligger i kodetreet. Å sende resultatet til eksterne fora (en fellesskapskatalog, et kort notat, en post arkivert med DOI (DOI: digital objektidentifikator)) er en vedlikeholderhandling som følges opp separat i veikartet; dette dokumentet er posten i depotet som slike innsendinger ville peke til.