Sp3 data comparison

Hello, I am trying to use SP3 data to compare the performance of different algorithms. Here’s what I did:

  1. I downloaded SP3 data for 2024-12-07.
  2. I selected satellite PR03 and retrieved its NORAD ID from this website: https://cddis.nasa.gov/sp3c_satlist.html. Using the NORAD ID, I downloaded the corresponding TLE data.
  3. I converted the TLE data into a state vector using the TLEPropagator.
    TLE is from 9:43:11 so I propagate it to 9:45 for comparison to SP3.
  4. I transformed the state vector from the ECI frame to the ECEF frame.

However, when I compare the results from the SP3 data and the TLE-derived data, there are significant differences. Where might I be making a mistake?

Any help would be greatly appreciated!

import orekit
from orekit.pyhelpers import setup_orekit_curdir
from org.orekit.frames import FramesFactory
from org.orekit.time import TimeScalesFactory, AbsoluteDate, TimeComponents, DateComponents
from org.orekit.propagation.analytical.tle import TLE, TLEPropagator
from org.orekit.utils import IERSConventions

orekit.initVM()
setup_orekit_curdir()

line1 = "1 26988U 00000A   24342.40498843  .00000000  00000-0  00000-0 0  9991"
line2 = "2 26988  63.7201  77.2672 0004537 226.3404 201.4977  2.13103800    01"


tle = TLE(line1, line2)

tle_propagator = TLEPropagator.selectExtrapolator(tle)

utc = TimeScalesFactory.getUTC()
target_date = AbsoluteDate(DateComponents(2024, 12, 7), TimeComponents(9, 45, 0.0), utc)

state_at_target = tle_propagator.propagate(target_date)

frame_ECI = FramesFactory.getEME2000()  # Earth-Centered Inertial
frame_ECEF = FramesFactory.getITRF(IERSConventions.IERS_2010, True)  # Earth-Centered Earth-Fixed

pv_ECEF = state_at_target.getPVCoordinates(frame_ECEF)
position_ECEF = pv_ECEF.getPosition()
velocity_ECEF = pv_ECEF.getVelocity()

print("Współrzędne w układzie ECEF (porównywalne z SP3):")
print(f"Pozycja (m): X = {position_ECEF.getX():.6f}, Y = {position_ECEF.getY():.6f}, Z = {position_ECEF.getZ():.6f}")
print(f"Prędkość (m/s): VX = {velocity_ECEF.getX():.6f}, VY = {velocity_ECEF.getY():.6f}, VZ = {velocity_ECEF.getZ():.6f}")

position_ECI = state_at_target.getPVCoordinates(frame_ECI).getPosition()
velocity_ECI = state_at_target.getPVCoordinates(frame_ECI).getVelocity()
print("\nWspółrzędne w układzie ECI (opcjonalne):")
print(f"Pozycja (m): X = {position_ECI.getX():.6f}, Y = {position_ECI.getY():.6f}, Z = {position_ECI.getZ():.6f}")
print(f"Prędkość (m/s): VX = {velocity_ECI.getX():.6f}, VY = {velocity_ECI.getY():.6f}, VZ = {velocity_ECI.getZ():.6f}")










Hi @Tomuch

What do you mean by significant differences. Could we have some values?
SP3 accuracy is close to centimeter level while TLE accuracy osccilates between several hundred meters and several kilometers.
TLE accuracy (at TLE epoch) compare to SP3 ephemeris has been adressed in the following reference (Table 2): https://www.researchgate.net/publication/351747114_AN_OPEN-SOURCE_SOLUTION_FOR_TLE_BASED_ORBIT_DETERMINATION

Also, be careful that TLE accuracy considerably reduce with the time. TLE accuracy is usually good at TLE epoch, but decrease significantly with over time.

Best regards,
Bryan

1 Like

Hello @bcazabonne

TLE NORADid 26988:
2024-12-07 09:43:11	63,7201	77,2672	0,0045366	226,3404	201,4977	2,13103755
SP3:
*  2024 11 14  9 45  0.00000000
PR03 -11145.835280 -21134.390548  -8984.716741    111.361415

result of my code:

ECEF:
position(m): X = -1681656.898183, Y = -13898222.788319, Z = 21328065.991626

ECI:
position(m): X = -8115751.808635, Y = 11370987.188148, Z = 21347369.591772

As you can see, the errors are much greater than just a few kilometers :smiley: It looks more like there’s an issue with the reference system, the wrong satellite, or something of that sort ( I think? )

Hi @Tomuch,

Maybe there’s something I missed but SP3 data is from the 14th of November while TLE is from the 7th of December. Could it be the cause?

Cheers,
Maxime

The info you found about the satellite ID must be old. R03 is currently 37867. You can find an up-to-date correspondence in the igs_satellite_metadata.snx file from the IGS.

@MaximeJ You are right, but I just pasted here wrong

@markrutten now works! thank you very much

@markrutten

https://igs.org/mgex/metadata/#metadata

is it what You mention?

I see only this there:

 R744 2011-064A  37867 GLO-M           Launched 2011-11-04; COSMOS 2476

if R744 = R03 how to get that :)?