Home About Data Tonight's Sky Launch Calendar Eclipse Tools Live View

Accuracy & validation

Applies to Orbit Visualizer v1.1 · Updated

The Orbit Visualizer's SGP4/SDP4 propagator is verified against the published Vallado reference and matches it far inside the 0.1 m acceptance tolerance across all 33 verification runs. In real use, SGP4 accuracy is bounded not by that implementation but by TLE age — roughly 1–3 km at a fresh element set's epoch, growing per day.

What “validated” means here

Validation compares the app's propagator against an independent, published truth set — not against itself. For SGP4/SDP4 that truth set is the reference distributed with the canonical paper (Vallado, Crawford, Hujsak & Kelso, “Revisiting Spacetrack Report #3”, AIAA 2006-6753): a fixed collection of TLEs and the exact position/velocity output a correct implementation must reproduce. The expected numbers are stored verbatim from that published output — never computed or typed by hand — and a harness re-runs the app's own module against them. “Matches the reference” means every checked timestep lands within a tiny fixed tolerance of those published values.

▶ Load the ISS and see SGP4 in the app

The two figures that matter

  • Implementation fidelity: across all 33 published verification runs (666 states), the app reproduces the reference far inside the acceptance tolerance of |Δr| ≤ 10−4 km (0.1 m). It is the code, checked; it is not a claim about real satellites.
  • Real-world accuracy: SGP4's practical error is set by TLE age — about 1–3 km at the element set's epoch, growing per day. A fresh TLE is the limiting factor, so refresh elements before time-sensitive work.

The full methodology, the per-case tables, the J2 drift-rate checks, and instructions to reproduce every number live on the validation page.

How each model is described in the app

The app states each propagator's fidelity in its own words, and this documentation mirrors that copy exactly:

  • SGP4/SDP4 — “Operational TLE propagation; accuracy degrades with TLE age (≈1–3 km at epoch, growing per day).”
  • J2 secular — “mean RAAN/ω/M drift only — no drag, no higher-order gravity, no resonance effects.”
  • Two-body — “educational geometry only; real orbits diverge within hours.”

See choosing a propagator for how to pick one, and propagation models for the theory.

What the app does not model

Honest scope matters as much as the passing tests. The Orbit Visualizer deliberately leaves out several higher-order effects, all below SGP4's own kilometre-level physical accuracy:

  • Frame reduction: SGP4 states (native TEME) are rotated to J2000/EME2000 using IAU-76 precession and the IAU-1980 nutation series truncated to its 6 largest terms. That leaves arcsecond-level frame error — a few metres at LEO radius. Polar motion and the full IAU-2006/2000A reductions are out of scope.
  • Time system: UTC is used in place of TT (a ~69-second difference in 2026, about 10−7 rad in the rotation angles) — a documented, standard approximation for TLE work.
  • Earth-fixed products: ground tracks and access use the standard TEME + GMST → ECEF pairing with no polar motion.
  • The simpler models: J2 adds only mean secular drift (no drag, higher-order gravity, or resonance); two-body adds nothing beyond a single central attraction.

Mini-FAQ

If the tests pass to sub-metre, why is real accuracy kilometres?

The two are different things. The tests confirm the code reproduces the reference algorithm exactly; real-world error comes from the input TLE, whose fitted elements are only good to about 1–3 km at epoch and drift further with age. A perfect implementation cannot beat its input.

Can I reproduce the validation numbers myself?

Yes. The validation page lists the exact commands (the verification harness and a full-coverage check), and the same fixture subset runs in your browser via the app's built-in self-test.