Satellite Manoeuvre Detection
Detecting when satellites change orbit, using only public orbital data. Tested on satellites that cannot manoeuvre, with orbit changes of known size injected into their real data.
- Can we tell, from public orbital data alone, when a satellite changed its orbit, how fast, and how often we would be wrong?
- Orbit changes of 100 m or more were detected 98–100% of the time, about a day after they happened; 25 m changes 83%. False alarms: 0.83 per satellite-year in the calibration year, 1.72 the following period.
- Space situational awareness does not need classified inputs to be useful, but every detector needs a measured false-alarm rate, and it drifts: recalibrate it, as with any monitoring system.
Want this measured on your own data? AI feasibility diagnostic, €1,900 · about one week.
Satellites change their orbits to keep their ground track, avoid debris, or raise an orbit that drag has lowered. Knowing when a satellite has manoeuvred matters for collision screening and for understanding what is happening in orbit. This Lab measures how well that can be detected from public orbital element sets alone, and, more importantly, how often such a detector would be wrong.
The data
Space-Track publishes element sets (the orbit description behind “TLEs”) for catalogued objects. This Lab uses about 77,000 of them (after removing duplicates), from January 2024 to October 2026, for 24 civil objects: the ISS, Sentinel and Landsat Earth-observation satellites, Swarm, GRACE-FO, CryoSat-2, Jason-3, Sentinel-6A, and six satellites that cannot manoeuvre: the passive laser-ranging spheres Starlette, Stella, Ajisai, LAGEOS-1 and LAGEOS-2, and Hubble.
The method, and how it was kept honest
A manoeuvre shows up as a lasting step in the orbit’s size (the semi-major axis) that the slow pull of drag does not explain. The detector compares each new element set with a robust trend line through the previous eight, and raises an alarm when the next three agree on a step larger than k times that satellite’s normal scatter.
- Truth without operator logs: the six passive satellites provide known negatives. Copies of their real data with one injected orbit change each (25 m to 2 km, at random times) provide known positives.
- Calibration in time order: k was set on 2024 data to allow at most one false alarm per satellite-year; everything reported below is from January 2025 onward.
- Realistic timing: an alarm is counted at the moment the last element set the test needs becomes available, not earlier.
- One bug found and fixed along the way: Space-Track’s published semi-major axis is rounded to the metre, which made quiet satellites look noiseless. The orbit size is computed from the mean motion instead, which has far more precision.
Results
- 25 m83.3%
- 50 m90.0%
- 100 m98.3%
- 200 m100.0%
- 500 m98.3%
- 1,000 m100.0%
- 2,000 m100.0%
| Detected | Injections | Median time to alarm (h) | |
|---|---|---|---|
| 25 m change in orbit size | 83.3% | 60 | 15 |
| 50 m change in orbit size | 90.0% | 60 | 15 |
| 100 m change in orbit size | 98.3% | 60 | 22 |
| 200 m change in orbit size | 100.0% | 60 | 19 |
| 500 m change in orbit size | 98.3% | 60 | 15 |
| 1,000 m change in orbit size | 100.0% | 60 | 16 |
| 2,000 m change in orbit size | 100.0% | 60 | 24 |
Changes of 100 metres or more were found 98–100% of the time, typically within a day, which is how long it takes for enough new element sets to confirm a step. Changes of 25 metres, close to the noise of the data, were found 83% of the time. The false-alarm rate roughly doubled from the calibration year to the evaluation period, a reminder that a threshold set once will not stay right.
On active satellites
| Detections per year | Median step (m) | Noise (m) | |
|---|---|---|---|
| Sentinel 2B | 65.4 | 10 | 1.0 |
| Sentinel 2A | 56.8 | 10 | 1.0 |
| Sentinel 1A | 35.0 | 17 | 2.4 |
| Sentinel 3A | 21.2 | 25 | 1.0 |
| Sentinel 3B | 20.6 | 25 | 1.7 |
| Landsat 8 | 20.1 | 70 | 1.9 |
| Cryosat 2 | 18.3 | 39 | 1.5 |
| Landsat 9 | 17.8 | 77 | 2.6 |
| ISS | 17.2 | 1,822 | 21.8 |
| Jason 3 | 9.7 | 18 | 1.0 |
| Aqua | 5.7 | 21 | 3.0 |
| Grace-Fo 2 | 5.2 | 57 | 5.8 |
| Swarm A | 4.6 | 71 | 10.8 |
| Grace-Fo 1 | 4.6 | 53 | 5.9 |
| Swarm C | 4.0 | 64 | 10.1 |
| Sentinel-6A | 3.4 | 9 | 1.0 |
| Swarm B | 2.9 | 37 | 6.5 |
| Terra | 2.3 | 15 | 1.8 |
These counts are detections, not confirmed manoeuvres. The ISS stands out with large steps (a median of about 1.8 km), consistent with reboosts. The Sentinel-2 satellites show many small steps of about 10 metres, close to the noise floor. Some of these will be routine orbit maintenance and some will be noise; without the operators’ manoeuvre logs, the Lab does not claim to know which.
Method and environment
- data
Space-Track GP history (public element sets), 77,041 element sets for 24 civil and passive objects, 2024-01 to 2026-10- signal
semi-major axis from mean motion; step = median offset of the next 3 element sets from a robust line through the previous 8- threshold
k = 5.0 × each object's own noise (robust scatter, 1 m floor), chosen on 2024 data of six passive satellites for ≤ 1 false alarm per object-year- evaluation
2025-01 to 2026-10: the passive satellites' real series (false alarms) and copies with one injected step each (25 m to 2 km, 10 per size per object, random time and sign)- timing
alarm time = arrival of the last element set the test needed (what an operator would see)- environment
cpu: i5-13400F · gpu: not used- measured
- 2026-10-08
Limits
Element sets are a coarse, smoothed product; dedicated tracking data would detect smaller and faster changes. Only changes in orbit size are tested, not changes of plane. The injected steps are idealised. False alarms are measured on six passive objects, not on every orbit regime. The code is in labs/orbit-manoeuvres in this site’s repository; the raw Space-Track data is not republished.
Public data only; civil and passive objects only. This Lab covers detection and analysis for space situational awareness.
New Lab results by email
A short email when a new measurement is published, a few times a year. No newsletter fluff, reply to unsubscribe.