Validering av SGP4/SDP4 mot gemenskapens referens
Kshanas banpropagator är validerad mot den kanoniska referensen i gemenskapen för SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4): de verifieringsvektorer som publicerades med Vallado m.fl., "Revisiting Spacetrack Report #3" (AIAA (American Institute of Aeronautics and Astronautics) 2006-6753), distribuerade som SGP4-VER.TLE (test-TLE:erna (tvåradiga elementmängder)) och tcppver.out (det förväntade TEME-tillståndet (true equator, mean equinox) vid varje tidpunkt). Det är samma referens som de publika implementeringarna i C++/Python/MATLAB valideras mot, så samstämmighet här är samstämmighet med den faktiska standarden.
Resultat#
| Storhet | Värde |
|---|---|
| Jämförda referenstillstånd | 666 (alla rader i tcppver.out, fastlåsta i testet) |
| Sämsta positionsfel | 4,12 mm (4.120e-6 km, satellit 23333; < tolerans 2e-5 km) |
| Sämsta hastighetsfel | 1.85e-9 km/s (satellit 23333; < tolerans 1e-6 km/s) |
| Fall som täcks | SGP4 för nära jorden, SDP4 för djuprymd (måne-sol + resonans 12 h/24 h) och de avsiktliga felkodsfallen |
Djuprymds- och resonansfallen spelar särskild roll för det här projektet: GNSS-satelliter (globalt navigationssatellitsystem) ligger i banor på ~12 h som är djuprymd och resonanta, vilket en tvåkroppsmodell + sekulär J2 inte kan återskapa — SGP4/SDP4 kan det.
Metod#
- Implementeringen (
src/sgp4.rs) är en beroendefri Rust-portning av Vallados algoritm i det offentliga området; epokhanteringen är dagar sedan 1950, lägetimproved(inteafspc) används, och gravitationskonstanterna för WGS-72 (WGS: World Geodetic System) tillämpas så som referensen anger. - Testet (
tests/sgp4_verification.rs) tolkar de medföljande fixturernaSGP4-VER.TLEochtcppver.out(tests/fixtures/sgp4/), propagerar varje testsatellit till varje referenstidpunkt och kontrollerar att TEME-position och -hastighet stämmer inom toleranserna ovan. Antalet jämförda rader är fastlåst på exakt 666 så att en regression i fixturer eller i hoppbeteende inte i tysthet kan minska täckningen.
Återskapa det#
cargo test --test sgp4_verification -- --nocapture
Testet skriver ut antalet jämförda rader och de sämsta positions- och hastighetsfelen. Fixturerna är incheckade, så kontrollen är helt offline och deterministisk.
Oberoende korskontroll mot cratet sgp4#
Att stämma med den publicerade referensen visar korrekthet mot en tabell. För att också visa korrekthet mot en oberoende implementering kör tests/sgp4_crate_comparison.rs ett allmänt använt oberoende Rust-bibliotek för SGP4, cratet sgp4 (neuromorphicsystems/sgp4, version 2,4), över samma 666 AIAA-vektorer och jämför de två kodbaserna direkt mot varandra. Båda drivs med gravitationsmodellen WGS72 (World Geodetic System 1972) som vektorerna är definierade i (cratets standard from_elements använder WGS84 (World Geodetic System 1984), som skiljer sig från WGS72-referensen med ~km — ett modellval, ärligt redovisat, inte ett fel).
| Regim | kshana ↔ referens | crate ↔ referens | kshana ↔ crate |
|---|---|---|---|
| nära jorden (LEO/MEO (LEO: låg omloppsbana; MEO: medelhög omloppsbana)) | 7.3e-9 km | 7.3e-9 km | 4.4e-10 km |
| djuprymd (icke-resonant) | 4.1e-6 km | 2.1e-7 km | 4.1e-6 km |
| djuprymdsresonans (½ dygn) | 8.1e-9 km | 7.7e-9 km | 2.2e-9 km |
| djuprymdsresonans (1 dygn) | 8.2e-9 km | 7.8e-9 km | 2.2e-9 km |
Två oberoende implementeringar stämmer överens till under en mikrometer för banor nära jorden och resonanta banor och till 4,12 mm i värsta fall över alla regimer — samma 4,12 mm som är Kshanas egen avvikelse från referensen, det vill säga att oenigheten är det enda djuprymdsfallet, med cratet liggande mellan Kshana och tabellen. Den fullständiga tabellen (med radantal per regim och de fyra patologiska fall som cratet avvisar vid konstruktion) är incheckad i tests/fixtures/sgp4_comparison.md och genereras om via KSHANA_REGEN_FIXTURES=1 cargo test --test sgp4_crate_comparison.
Status för att "publicera" det här resultatet#
Själva korsvalideringen är klar och finns i trädet. Att skicka in resultatet till externa forum (en gemenskapskatalog, en kort not, en DOI-arkiverad (DOI: digital object identifier) post) är en åtgärd för underhållarna som spåras separat i färdplanen; det här dokumentet är den post i repositoriet som dessa inskick skulle peka på.