Orbit Determination from SatNOGS data

Hello everyone, Thank you for your welcoming community :pray:

I am keenly interested in performing Orbit Determination using the SatNOGS data, at scale.
I’m an orbital analyst using Orekit for several years now. The purpose of the orbit determination will be for space domain awareness tasks.

I am aware of several posts and key people that may be able to help me in this forum, I look forward to your help! I am also a member of the Orekit community forum, and have been following all efforts to do OD with SatNOGS data here, here, and here. I am starting off in this forum, since my understanding of SatNOGS’ network capability is limited!

Starting off with:

  1. This forum’s post on Doppler shift calculation, where @cgbsat and @michal.drzal hint towards solutions on how to get the doppler curves.
  2. This forum’s post on performing OD in collaboration with Celestrak, with a lot of knowledgeable people ( @luckyjunknowitz , @jebba and others…).
  3. The fact that the above posts are more than 6 months old
  4. This 4-year old Youtube video from @Noeljanes discussing his efforts using Orekit and how Doppler curves were not readily available back then from any of the SatNOGS antennas, but instead some antennas were handpicked to do the job because their post processing workflow was properly adapted to suit the purpose.
  5. I do not own a SatNOGS station yet, nor do I have access to a cooperating satellite.

I would like to ask:

A. As of April 2024, is it possible to extract Doppler curves directly from the SatNogs network, from any antenna? The goal is to convert the Doppler measurements to range rate measurements. Those, along with the initial TLE of the observation and the ground station coordinates and biases will be the input to OD.

B. If the doppler measurements of each pass are available in the db, where would I be able to find documentation on how to correctly parse it? I see people talking about observation artifacts. What are those? The audio recording? The waterfall image? Any other downloadable resource?

C. I’ve noticed that Noel, in his project, had good knowledge of the collaborating antenna’s offsets, biases, and other information that will help nail down that OD accuracy. He seems to have this information in configuration files. Is there a transparent (i.e. API-exposed) process where all SatNOGS antennas are somehow calibrated with beacon satellites and precision ephemerides to calibrate the SatNOGS antennas? Are the calibration biases available to users? I’m sorry for not being familiar with the system…

D. To the best of your knowledge, would the current state of SatNOGS observables lead to relatively good OD solutions? What would be the missing piece? Antenna calibration maintenance? Is this even possible at scale, and decentralized? Just to start with a simple benchmark, any OD residuals lower than the known SGP4 propagation error growth would be loosely called good.

Any piece of advice will be greatly appreciated :pray: Thank you for all your work!


Regarding following points (specifically for MOVE-II):

A. In the next weeks, we are going to define a format and run some experiments for the MOVE-II satellite and make it possible infer phase shifts for every section where the satellite sends data.

D. With the available public data, we were only able to get accuracy of about 20km. However, with minor changes we should be able to do much better.

1 Like

Thank you @pyBlob! :ok_hand:

In respose:
A. I look forward to your team’s experiments! Any channel we should follow for the news?

D. Just a clarification; which public data do you refer to, data from SATNOGS, waterfall images, audio recordings? I just don’t know where to start to extract Doppler shift. Was it possible for all participating antennas and vetted observations? Or did you test specific stations with extra telemetry/artifacts?

Thank you once again!

Will keep you posted, once we publish something to follow.

We used the audio recordings. For the 20km accuracy, we used the output of the clock recovery that tells the demodulator where the read each bit of the bitstream. We were not able to utilize doppler shift on public audio recordings, because that is erased by the doppler correction block at unknown irregular intervals.


You can extract them manually and approximately from the waterfall files. This is how we perform orbit determination and generate our TLE/Orbital data.

We don’t store currently any measurements online. Observation artifacts is everything that can be generated by an observer during an observation (audio files, waterfall, data, IQ etc). There is a misunderstanding with the “artifact” definition as currently is used for the experimental waterfall data format which will be the successor of the waterfall image when is finished. All the types of artifacts are available through SatNOGS Network and DB API endpoints, freely distributed under the CC BY-SA license. Unfortunately there isn’t a complete documentation as the API is still in an initial phase, the current documentation can be found in https://docs.satnogs.org/.

No currently there isn’t something like that.

I guess the answer depends on the application and the level of accuracy you define for a “good OD”. In what application do you intend to use the OD?

For our, LSF/SatNOGS, current applications, the OD based on the SatNOGS Network data and contributors data is pretty good. There are plenty ideas and plans for improving and automating the process, like make station observations more accurate, adopting the waterfall data artifact type, develop algorithms that will automatically extract doppler measurements, public storage of doppler measurements from SatNOGS Network and 3rd party sources (similar to the satellite data we currently store), optical data etc.


@fredy Fredy Thank you very much for the detailed explanation, that’s an eye opener :pray:

Since measurements are not stored online, I think what I strive to achieve is not yet possible. I keenly look forward to the new waterfall standard. The topic of sensor calibration was a bit far-fetched on my end, I admit. Even in operational sensor tasking, some sensors are just better than others, and calibration is expensive, laborious and time-consuming.

The results of the OD would feed into operational space domain awareness scenarios, which include:

  • Rendevous and Proximity Operations (RPO) between non-cooperative satellites, i.e. evaluate if any satellite slowly creeps up on other satellties and stays in their neighboorhood (or does lane switching on that orbital highway :sweat_smile:).
  • Maneuver detection and recovery of non-cooperative or lost satellites, i.e. the ability to identify if a satellite performed a maneuver, and if it did, towards which direction, and if any own assets are in harm’s way. Orbit Determination can help with this through a process known as parameter estimation.
  • Enhance existing OD workflows with additional data, and assess the quality of residuals with and without the SatNOGS observables.
  • Produce state vectors with covariance instead of TLEs. State vectors are often furnished with the force modeling assumptions that were used to fit the data. TLEs do not contain position/velocity uncertainty information either, but state vectors are usually accompanied with this information. The propagation of uncertainty helps analysts better assess the probability of a threat and whether it warrants further investigation/action. State uncertainty grows over time, as the state vector is propagated away from the fitted solution or as we move away from the collected observation timespan.

Any residuals better (i.e. lower) than TLE error growth would be a good baseline, but it would all depend on the measurement cadence, i.e. how dense the observations are, both temporally and spatially. Considering that TLE states are inacurate between 1-3 kilometers per day of propagation, we would want accuracy within this envelope, to start with, but would definitely want to make improvements to 100 meter level accuracy, if the process would show promise at scale.

I only have one question please: Until the new waterfall data standard update takes effect, where should I look in the source code for the actual process of Orbit Determination that SatNOGS perfoms? You mentioned in response to A that the waterfall data is extracted and used to perform OD. I would like to take a look at that algorithm, if it’s available. Any rough pointer would be enough to get me going!

Thank you once again!

1 Like

@fredy’s post was flagged, the recommendation is to check this thread.

1 Like