Hello, I am trying to use SP3 data to compare the performance of different algorithms. Here’s what I did:
- I downloaded SP3 data for 2024-12-07.
- 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.
- 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. - 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}")