Machinevertaling, niet beoordeeld door een moedertaalspreker. Engels is de referentie.

BanenBewerken op GitHubBron: docs/SGP4-VALIDATION.md

Validatie van SGP4/SDP4 tegen de referentie van de gemeenschap

De baanpropagator van Kshana is getoetst aan de canonieke referentie van de gemeenschap voor SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4): de verificatievectoren die zijn gepubliceerd bij Vallado e.a., "Revisiting Spacetrack Report #3" (AIAA (American Institute of Aeronautics and Astronautics) 2006-6753), verspreid als SGP4-VER.TLE (de test-TLE's (two-line element sets)) en tcppver.out (de verwachte TEME-toestand (true equator, mean equinox) op elk tijdstip). Dit is dezelfde referentie waaraan de openbare C++/Python/MATLAB-implementaties worden getoetst, dus overeenstemming hier is overeenstemming met de feitelijke standaard.

Resultaat#

Grootheid Waarde
Vergeleken referentietoestanden 666 (alle rijen in tcppver.out, vastgelegd in de test)
Grootste positiefout 4,12 mm (4.120e-6 km, satelliet 23333; < 2e-5 km tolerantie)
Grootste snelheidsfout 1.85e-9 km/s (satelliet 23333; < 1e-6 km/s tolerantie)
Gedekte gevallen SGP4 voor nabij de aarde, SDP4 voor de diepe ruimte (maan-zon + 12 u/24 u resonantie), en de opzettelijke foutcodegevallen

De gevallen voor de diepe ruimte en met resonantie zijn voor dit project specifiek van belang: GNSS-satellieten (global navigation satellite system) bevinden zich in banen van ~12 u die zich in de diepe ruimte bevinden en resonant zijn, wat een tweelichamenmodel met J2-seculair niet kan reproduceren; SGP4/SDP4 wel.

Methode#

  • De implementatie (src/sgp4.rs) is een Rust-port zonder afhankelijkheden van het algoritme van Vallado, dat tot het publieke domein behoort; de epochverwerking is dagen sinds 1950, de modus improved (niet afspc) wordt gebruikt, en de zwaartekrachtconstanten van WGS-72 (WGS: World Geodetic System) worden toegepast zoals de referentie voorschrijft.
  • De test (tests/sgp4_verification.rs) parseert de meegeleverde fixtures SGP4-VER.TLE en tcppver.out (tests/fixtures/sgp4/), propageert elke testsatelliet naar elk referentietijdstip en controleert dat de TEME-positie en -snelheid binnen de bovenstaande toleranties overeenkomen. Het aantal vergeleken rijen ligt vast op precies 666, zodat een regressie in een fixture of in het overslaggedrag de dekking niet ongemerkt kan verkleinen.

Reproduceer het#

cargo test --test sgp4_verification -- --nocapture

De test toont het aantal vergeleken rijen en de grootste fouten in positie en snelheid. De fixtures zijn vastgelegd in de repository, dus de controle is volledig offline en deterministisch.

Onafhankelijke kruiscontrole met de crate sgp4#

Overeenstemming met de gepubliceerde referentie bewijst juistheid tegenover een tabel. Om ook juistheid aan te tonen tegenover een onafhankelijke implementatie, laat tests/sgp4_crate_comparison.rs een veelgebruikte, onafhankelijke Rust-SGP4-bibliotheek draaien, de crate sgp4 (neuromorphicsystems/sgp4, versie 2,4), over dezelfde 666 AIAA-vectoren en vergelijkt de twee codebases rechtstreeks. Beide worden aangestuurd met het zwaartekrachtmodel WGS72 (World Geodetic System 1972) waarin de vectoren zijn gedefinieerd (de standaard from_elements van de crate gebruikt WGS84 (World Geodetic System 1984), dat ongeveer een km afwijkt van de WGS72-referentie: een modelleringskeuze, eerlijk vermeld, geen fout).

Regime kshana ↔ referentie crate ↔ referentie kshana ↔ crate
nabij de aarde (LEO/MEO (LEO: low Earth orbit; MEO: medium Earth orbit)) 7.3e-9 km 7.3e-9 km 4.4e-10 km
diepe ruimte (niet-resonant) 4.1e-6 km 2.1e-7 km 4.1e-6 km
resonantie in de diepe ruimte (½ dag) 8.1e-9 km 7.7e-9 km 2.2e-9 km
resonantie in de diepe ruimte (1 dag) 8.2e-9 km 7.8e-9 km 2.2e-9 km

Twee onafhankelijke implementaties komen overeen tot submicron bij banen nabij de aarde en resonante banen, en tot 4,12 mm in het ongunstigste geval over alle regimes: dezelfde 4,12 mm die de eigen afwijking van Kshana van de referentie is, dus het verschil is dat ene geval in de diepe ruimte, waarbij de crate tussen Kshana en de tabel in zit. De volledige tabel (met aantallen rijen per regime en de vier pathologische gevallen die de crate bij constructie weigert) is vastgelegd in tests/fixtures/sgp4_comparison.md en wordt opnieuw gegenereerd via KSHANA_REGEN_FIXTURES=1 cargo test --test sgp4_crate_comparison.

Status van het "publiceren" van dit resultaat#

De kruisvalidatie zelf is voltooid en maakt deel uit van de repository. Het indienen van het resultaat bij externe podia (een gemeenschapscatalogus, een korte notitie, een in een DOI (digital object identifier) gearchiveerd record) is een actie van de maintainers die afzonderlijk op de roadmap wordt bijgehouden; dit document is het record in de repository waarnaar die indieningen zouden verwijzen.