Generating accurate TLE for rotator pointing

TL;DR Looking for ways to get accurate pointing TLE despite good observations on SATNOGS.

Hi all, our team has been recently having issues with tracking our satellite, 57487 NuLIoN. Our satellite is currently orbiting at 465-464km at a 5 degree inclination orbit.

We have been getting good observations with minimal doppler shifts, but when it comes to tracking with a rotator, we find that there are azimuth and elevation offsets that cannot be resolved by our current method of generating TLEs.

Here’s our step-by-step flow for generating a TLE:

  1. Queue observations for 24 hours on Satnog stations.
  2. Use Satnogs-Waterfall-Tabulation-Helper to generate DAT files for each of the observations.
  3. Combine all resulting DAT files into a single DAT file.
  4. Run RFFIT on the combined DAT file using the old TLE that was used for the latest observation.
  • First we fit with no parameter selected.
  • Use Mean Motion, Mean Anomaly and Ascending Node to fit.
  • Write interim TLE file to storage
  1. Take interim TLE file and propagate it using sattools/propagate.c to the current UTC time.
  2. Take propagated interim TLE and run RFFIT with it on the same combined DAT file.
  • Same steps as in step 4.
  1. The resulting TLE from step 6 is our final generated TLE for the day.

We repeat this process each day to generate accurate TLE, but from our one year of handling satellite passes, we notice that we will have to apply a time offset (e.g as the TLE gets older, the satellite position has shifted along track rather than off track). For example, given a brand new generated TLE, each 1.5 hour pass will result in an addition of 1 - 2 seconds of time offset per subsequent pass.

In order to accurately determine the time offset required, say on the next day, we use an SGP4 propagator as well as an Orekit DSST propagator side by side to measure the time of peaks. This is equivalent to loading two TLEs into gpredict and comparing their pass timings. Example, if today was Tuesday and I wanted to know what the time offset would be like on Wednesday, I would follow the following steps.

  1. Take the TLE from Monday and propagate it from current time until the end of Wednesday. Create a list of all azimuth and elevation observations during the time period.
  2. Generate a Tuesday TLE by following the step-by-step flow, and propagate it from current time until the end of Wednesday. Create a list of all azimuth and elevation observations during the time period.
  3. Compare the two lists together. The timing difference in Time of Closest Approach is our time offset, while our azimuth and elevation offsets required can be taken for each future pass.
  4. Repeat for Orekit DSST propagator.

This was not a big problem for us and it allowed us to properly determine time offset without much hiccups for a good year until recently in May, when our satellite was possibly affected by something (we had our systems rebooted between passes). We recovered it, but noticed that as time went on, the quality of the tracking was beginning to degrade where instead of just an along-track offset (time offset), we were experience off-track offsets(azimuth elevation offsets). Originally it was a small amount, such as -0.1, or -0.2. But these past few days have seen offsets reach -2 or even -4 for azimuth, while elevation offsets are around 0.5 to 0.6

It is hard to tailor all three offsets during a single given satellite pass, especially when its low altitude makes for fairly short passes. I’m trying to figure out a way to improve this process, and I already had a few suggestions.

  1. Fredy has suggested to also try using rffit to tailor inclination and eccentricity, since they define shape of the orbit that would perhaps help more of the off-track offsets rather than the along-track offsets.
  2. The waterfall-tabulation-helper’s output is not as accurate as an rfplot into rffft method.
  3. Use more stations.

We’re working on suggestion 1 now, but fitting eccentricity gives us a error on the rffit output. For suggestion 2, we’re unsure of where the raw IQ data that the satnogs-client records is stored in order for us to use the rfplot into rffft method. right now we use GQRX for that method, but we would like to integrate into our already scheduled SATNOGS observation rather than doing it manually.

Suggesstion number 3 is a bit more difficult due to the nature of our orbit. Unfortunately Spacetrack has not been providing us with an updated TLE since last year December, so we are heavily reliant on SATNOGS for our tracking (we do not have a GPS on the satellite - an oversight for sure).

We’re hoping anyone else who reads this may have some insight or experience to share if you have dealt with any of the problems I’ve mentioned here. If you have read this all the way through, thank you for taking the time to read this. Please do let me know if there is anything wrong with the steps I have taken here. I can provide a flowgraph for clarity on the process as well if necessary.

TL;DR Looking for ways to get accurate pointing TLE despite good observations on SATNOGS.

Here’s our most recent observation for reference.

https://network.satnogs.org/observations/9876305/

2 Likes

Hi, and welcome (:

The low inclination is unfortunate, not so many stations available to hear it.

Regarding the IQ dump option:
By the metadata, it seems you are running pre-/post script already? in that case you can just append to that one of my scripts that I made to manage the IQ file.
It is documented in my docker addons, but will work on a regular client as well.
It needs to be executed from the post script.

Jan has a similar script that renames and compresses the file.

1 Like

Hi Hubert,

I think your work flow is good. There are only a few things to consider.

If you use multiple stations, each station will have it own (small) frequency offset. These may need to be solved first. This is best done fitting all parameters of the TLE to one single station at a time and note the frequency. Correct the frequency of the points of this station to the nominal frequency. Do this for all stations. This allows to calibrate all the stations to each other. Next use the calibrated points to generate the final TLE. I hope that this aditional step makes it more robust.

Also try to fit over a longer period then 24 hours, especially if you want to fit inclination or drag value. For inspiration read @cgbsat his posts in this thread: Observation 1037954: Raw data Needed - #8 by cgbsat

Also the tabulation helper is good, but as you are working on a TLE corrected waterfall it is not the most accurate. Try RFFFT directly on your system, or setup a second SDR with an omni antenna, to run RFFFT and RFPLOT.

Hope this helps! best regards,

Eelke.

2 Likes

Hi there @SA2KNG , thanks for the welcome.

For the IQ Dump, we do have a post observation script just added yesterday for pushing iq files to the cloud. However, currently from what I understand, the sample rate for IQ Dump is fixed at 48kbps based on a few other forum threads i’ve seen. I’m not too sure on where to edit other than the configuration parameters for SATNOGS_RX_SAMP_RATE, which i believe it doesn’t affect the sampling rate at which the file is dumped. I’ve looked through https://community.libre.space/t/demodulate-lrpt-from-satnogs-iq-file/6167/29 but i couldn’t seem to figure out exactly which part of the chain i need to edit (the gr-satnogs flowgraph itself? or the python file in /usr/local/bin?)

Thanks for your help again.

Hi Eelke,

Can I confirm that the way to correct the frequency of the points of each station in a combined DAT file is by selecting them in RFFIT and using ‘F’ key? Or do I have to do an individual RFFIT for each station separately?

For fitting over a longer period more than 24 hours, We get approximately 15 passes a day at our station (low inclination orbit) alone. Usually we use more than 30 observations in a single day, and if its longer than that, I might have to spend upwards of two hours each day creating a TLE because of the clicking.

I am wondering whether there is anyway I can potentially automate the RFFFT and RFPLOT process and reduce the workload a little. Currently in our tabulation helper we’ve modified it to have an auto-clicking and marking feature based on our satellite alone, along with room for human intervention. I am not so sure this is possible in RFPLOT.

Thank you again for the suggesstion, and I will read that linked thread carefully. Thank you.

It is based on what mode the observation is, many will just run 48ksps (which is minimum here) and others as high as the baudrate demands. This is calculated inside the flowgraphs and I made a helper script that figures this out based on baudrate {{BAUD}} and what flowgraph {{SCRIPT_NAME}} is running.
My personal preference is to at least have the observation ID and sample rate in the name, the rest can be deducted from the api or observation page.

Now, theoretically, If we’re talking about your station here and you want to automate the extraction of doppler from the observations… The UDP stream that can be enabled contains basically the same as what is recorded in the IQ dump and it can be done live. Either use that or the IQ dump files themselves.
Running a quadrature demod on this and not using a DC block gives you the offset in the resulting samples, I’m not sure what the exact ratio is but it probably depends on the chosen gain, and that is based on the deviation and baudrate.

Here’s a thread on how I measure and observe this for single frames, as you can see there’s a offset in the waveform, this can probably be used to determine the frequency offset.

You need to create some sort of flowgraph or script that processes this and displays it in some useable format.
The FSK flowgraph already contains the basic function in the frequency correction part, at the red arrow in this image:

edit:
I did a quick measurement on a Greencube obs (cut from 250-300s) that I want to extract the offset from.

The flowgraph used:

Changing the averaging to 32k gets more stable values:

1 Like

Hello, I do not have an answer to your question, but I am operator of the BDSAT-2 satellite and I am wondering about your troubles. Looking at your post, you are mentioning some small pointing or timing offsets. How do you know, that you have some 0.5 deg offset in pointing? Are you using antenna with such big gain, that it matters? Looking to your used 1k2 modulation you have very small bandwidth so you should easily receive and decode using omni antenna, or do you have some problems at the sat (antenna, output power)?

1 Like

Hi ok2pnq, thanks for the reply. Here are the answers to your sequence.

  1. We determine the offset by sweeping the sky based on a predetermined path using the previous TLE. It’s a bit similar to tracking a CW signal, but in this case we send ping commands up.

  2. We are using a 13m diameter parabolic dish reflector for pointing and transmission, so the offset matters a lot. A 0.1 degree offset can cause doppler errors.

  3. The modulation used on satnogs observation is AX100 UHF, but for our 13m diameter antenna we are using a different frequency (AX2150 S-Band 2.2 GHz).

A bit of an update regarding the previous post, we recently found out that there was a hardware error at the 13m antenna dish itself, so it was not a TLE generation issue. We are still working on making it more accurate, but the recent passes have been a lot better.

Thank you again for your help!

1 Like

Ah, I see, thanks for the clarification, on S band, it is entirely higher level and with 13m dish the TLE must be exact, that is clear. I am just in the process to operate on S band but just with 3m dish, which would be much easier… For our TLE determination we used 3s cw dots every minute. But of course it is much better to do doppler measurement on highest band available. I did not find the S band transmitter in the Satnogs description and database, so thats why I asked.
Good luck with your sat!