Prev
Unit 5 · Lesson 5-4
Two-Line Elements and SGP4
40m75 XP
Next

Two-Line Elements and SGP4

The public satellite catalogue, the TLE format, mean elements, SGP4 and SDP4, the TEME frame and pass prediction

Kettering, England, 1966
Geoff Perry teaches physics at Kettering Grammar School, in the English Midlands. He and his pupils have a hobby: listening to Soviet satellites. With a modest radio receiver they log when each satellite's signal appears and fades, pass after pass, and from those times they work out its orbit. In 1966 a new Soviet satellite does not fit. Its orbit is tilted at an angle that neither of the two Soviet launch sites known in the West can easily reach. So they do the obvious thing: they run the orbit backwards to the moment of launch, and see where on the turning Earth it starts. The answer is a patch of forest in the far north of Russia, south of Arkhangelsk. There is no launch site there on any public map. There is now. It is Plesetsk, which would become one of the busiest launch sites in the world, and the Soviet Union did not officially admit it existed until 1983. A school physics class had found it first, with a receiver, a clock, and the mathematics of the last three lessons. Today you do not need the receiver. The orbits of tens of thousands of objects are published every day, free, in a format older than most of the people who use it.
Watch first · presented by Shoaib Aziz
The numbers in this film are the labs' own, from the ISS TLE of 20 September 2008 (epoch 12:25:40 UTC): a 91.6-minute period, a semi-major axis of 6,731 km and a mean altitude of 353 km; SGP4 and a two-body Kepler propagator 7.5 km apart at the epoch, 475 km after a day and 1,347 km after three, with the node drifting 5.1° a day; and 13 passes above 10° over Greenwich in three days, only 2 of them visible to the eye.
The US Space Force tracks everything in low Earth orbit larger than about 10 centimetres, and larger objects further out, with a worldwide network of radars and telescopes, and publishes the orbits on Space-Track.org. CelesTrak, run by T. S. Kelso since the 1980s, redistributes them and adds its own. Each object's orbit comes as a two-line element set, or TLE: two lines of 69 characters, a layout that dates from the punched-card era and has barely changed since.
A TLE is not a position. It is a set of orbital elements at one instant, the epoch, written for one specific propagator. Reading it correctly is the first skill; propagating it with the right program is the second.
Loading interactive…
💡Reading the two lines
Line 1 identifies the object and the epoch: catalogue number, international designator (launch year, launch number, piece), the epoch as a two-digit year plus day of year with a fraction, two legacy mean-motion derivatives, and B∗, SGP4's drag term. Line 2 holds the six elements: inclination, right ascension of the ascending node, eccentricity, argument of perigee, mean anomaly, and mean motion in revolutions per day, followed by the revolution count. Three conventions trip up every first parser: Implied decimal points. The eccentricity 0006703 means 0.0006703. The drag term -11606-4 means −0.11606 × 10⁻⁴. Two-digit years. 57 to 99 are 1957 to 1999; 00 to 56 are 2000 to 2056. The format was designed in a century it has now outlived. The checksum. The last character of each line is the sum of all its digits, counting every minus sign as 1, modulo 10. It catches a single mistyped character.
Notice what is missing: the semi-major axis. A TLE gives the mean motion instead, and you recover aa from Kepler's third law, the same law derived in 5-1:
n=2π nrev/day86,400,a=(μn2)1/3n = \frac{2\pi\,n_{\text{rev/day}}}{86{,}400}, \qquad a = \left(\frac{\mu}{n^2}\right)^{1/3}
📐Worked Example: decoding the ISS
Take the set in the figure. Epoch. 08264.51782528 is 2008, day 264.51782528. Day 264 of a leap year is 20 September, and 0.51782528 of a day is 12 h 25 min 40 s. So the elements describe the ISS at 20 September 2008, 12:25:40 UTC. Mean motion. 15.72125391 revolutions per day. The period is 1440/15.72125391=91.601440/15.72125391 = 91.60 minutes, and n=1.14328×10−3n = 1.14328\times10^{-3} rad/s. Semi-major axis. a=(398,600.4/n2)1/3=6,731.0a = (398{,}600.4/n^2)^{1/3} = 6{,}731.0 km, a mean altitude of 352.8 km. (The ISS flew lower in 2008 than it does today; it was raised to around 400 km after 2011.) Shape. e=0.0006703e = 0.0006703, so perigee and apogee altitudes are 348 and 357 km. Nearly circular, which is why the argument of perigee, 130.5°, is a poorly defined number that jumps between consecutive sets. Drag. B∗=−1.1606×10−5B^* = -1.1606\times10^{-5}. Negative: physically meaningless, since drag cannot speed a satellite up. B∗ is fitted to tracking data and absorbs whatever the simple drag model gets wrong, including the ISS's own reboost burns.
⚠TLE elements are not Keplerian elements
The six numbers on line 2 look exactly like the classical elements of Unit 3. They are not. They are mean elements in SGP4's own internal sense: the orbit with the short-period wobbles caused by Earth's bulge averaged out, defined so that SGP4 can add those wobbles back in. Feed them into a two-body Kepler propagator and the answer is wrong from the first instant. The second lab measures it on the ISS: 7.5 km off at the epoch itself, 475 km after one day, and 1,347 km after three, mostly because a two-body orbit has no nodal regression, and the real one turns by about 5° a day. The rule is absolute: a TLE goes into SGP4 and nowhere else.
SGP4 and SDP4. Below a period of 225 minutes, SGP4 models Earth's zonal harmonics (J2J_2, J3J_3, J4J_4) and a simple atmosphere. Above it, the deep-space branch (often called SDP4) adds the Sun and Moon and the resonances that matter for geostationary and 12-hour orbits. Modern libraries, including the sgp4 Python package, which wraps the reference implementation by Vallado and colleagues, choose the branch automatically.
The interface is simple: minutes since epoch in, position and velocity out, in kilometres and kilometres per second. In one particular frame.
💡The output frame is TEME
SGP4's output is in TEME: true equator, mean equinox, of the output time (not of the epoch). It is not J2000, not GCRS, and not Earth-fixed. Unit 4 met it as the frame that exists essentially because SGP4 uses it, and measured the cost of mistaking it for J2000: about 40 km for a low satellite. To point an antenna, rotate TEME by Greenwich sidereal time to a pseudo-Earth-fixed frame, apply polar motion if you need the last few metres, and then compute azimuth and elevation exactly as in Unit 4. Libraries like skyfield do the whole chain; you only have to know that it is happening, and never to hand a TEME vector to anything that expects J2000.
🛰Starlink, February 2022
On 3 February 2022 a Falcon 9 placed 49 Starlink satellites into a deliberately low initial orbit, around 210 km, where a failed satellite would re-enter quickly. The next day a geomagnetic storm heated the upper atmosphere, and SpaceX reported that drag rose by up to 50%. Up to 40 of the 49 could not climb out and re-entered. For anyone predicting those orbits, the lesson is about B∗. It is fitted to how the atmosphere behaved before the epoch. When space weather changes, every low-orbit TLE goes stale at once, and the errors that normally grow by a few kilometres a day grow much faster. Fresh element sets matter most exactly when the Sun is active.
Element age. A TLE is most accurate at its epoch, around a kilometre for a low satellite, and degrades in both directions, typically by kilometres per day in low orbit and faster under heavy drag. Operators therefore always propagate from the freshest set available, and treat anything a week old with suspicion.
Passes. Propagate with SGP4, convert to the station's frame, and look for the intervals when elevation is above the mask: rise, culmination (maximum elevation) and set. That is a radio pass, usable whenever it happens.
Seeing the satellite with your eyes needs two more conditions. The satellite must be in sunlight, and the observer must be in darkness, with the Sun at least about 6° below the horizon. Both are true only for a while after dusk and before dawn, which is why visible ISS passes come in evening and morning runs, and why most radio passes are invisible.
Loading interactive…
🛰The catalogue is running out of numbers
The catalogue number has 5 digits, so the TLE format stops at object 99,999. With large constellations and better tracking adding objects faster than ever, that limit is close. The interim fix, Alpha-5, replaces the first digit with a letter, stretching the range to 339,999. The real replacement is the CCSDS Orbit Mean-Elements Message (OMM): the same SGP4 mean elements, written as named fields in XML, JSON or plain key-value text, with no column counting and no two-digit years. CelesTrak already publishes every object both ways. Any new software should read OMM, and still feed the result to SGP4.
↓But there is a problem
That completes prediction. Kepler's equation for when; universal variables for any conic; numerical integration for the real forces; SGP4 for the public catalogue. Given an orbit, you can say where the object will be, from which ground station it can be seen, and how far to trust the answer. But everything so far has been watching. The satellite does what it does and we predict it. Now we want to change the orbit: raise it, tilt it, catch up with something, leave for another planet. Every one of those changes is a velocity change, and every velocity change is bought with propellant. The price is not linear. A spacecraft that needs twice the Δv does not need twice the propellant; it needs vastly more, because it must also carry the propellant it will burn later. That exponential is the subject of the next unit, and it shapes every design decision from here on.