Maskinoversettelse, ikke gjennomgått av en morsmålsbruker. Engelsk er referansen.

BanerRediger på GitHubKilde: docs/SGP4-VALIDATION.md

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, modusen improved (ikke afspc) brukes, og WGS-72-gravitasjonskonstanter (WGS: World Geodetic System) brukes slik referansen angir.
  • Testen (tests/sgp4_verification.rs) leser de medfølgende fixturene SGP4-VER.TLE og tcppver.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.