OpenGNSSLabSPP

Module 5 - Satellite orbits and ephemerides

SP3 Interpolation

Read precise orbit files and interpolate satellite coordinates to observation time.

Difficulty

Intermediate

Estimated time

26 minutes

Series position

5 of 10

SP3 interpolation, in brief

SP3 files provide sampled precise satellite positions and, when available, clock corrections. Interpolation estimates a state between those samples. File units, time system, interpolation interval and missing-value markers must be respected; interpolating the orbit is only one input to a positioning solution.

Prepared by OpenGNSSLabUpdated Sources, reproducibility and corrections

Learning objectives

  • Identify SP3 header and position records.
  • Understand coordinate and clock units.
  • Interpolate a satellite coordinate at a non-SP3 epoch.

Why SP3 exists

Broadcast navigation files give Keplerian parameters and meter-level orbit quality. SP3 files provide precise Cartesian satellite coordinates and clocks estimated by analysis centers.

SP3 is essential for PPP and precise geodesy because the satellite position is already expressed in an ECEF reference frame such as IGS20/ITRF.

Raw data excerpt

Annotated SP3 coordinate excerpt

example.sp3
1*  2024 01 01 00 00 00.000000002PG01  12908.438647 -10025.115815  20508.373980    164.997276

SP3 coordinates are Cartesian positions in kilometers; most positioning engines convert them to meters.

SP3 position line

PG01 12908.438647 -10025.115815 20508.373980 164.997276

Line interpretation

`P` means position record, `G01` means GPS PRN 01, the next three columns are X/Y/Z in kilometers, and the last column is satellite clock in microseconds.

A clock value of `999999.999999` marks missing or invalid clock data.

Lagrange interpolation

X(t)=∑i=0nXiLi(t),Li(t)=∏j≠it−tjti−tjX(t)=\sum_{i=0}^{n}X_iL_i(t),\qquad L_i(t)=\prod_{j\ne i}\frac{t-t_j}{t_i-t_j}
Apply the same expression independently to Y(t), Z(t), and clock values when appropriate.

Five G01 epochs

Epochtk (s)X (km)Y (km)Z (km)
00:00:00012908.438647-10025.11581520508.373980
00:05:0030012988.440556-9216.82212820838.836691
00:10:0060013084.429049-8398.46712321127.872753
00:15:0090013196.669424-7571.99937621374.927788
00:20:00120013325.318847-6739.38847221579.534446

Step 1

Choose the target time

Assume the receiver observation occurred at 00:07:30 GPST, or 450 seconds after the first SP3 epoch.

t=450 st=450\ \text{s}

Step 2

Build basis polynomials

The first two basis polynomials show the pattern; the remaining bases follow the same product structure.

L0(t)=(t−300)(t−600)(t−900)(t−1200)(0−300)(0−600)(0−900)(0−1200)L_0(t)=\frac{(t-300)(t-600)(t-900)(t-1200)}{(0-300)(0-600)(0-900)(0-1200)}
L1(t)=(t−0)(t−600)(t−900)(t−1200)(300−0)(300−600)(300−900)(300−1200)L_1(t)=\frac{(t-0)(t-600)(t-900)(t-1200)}{(300-0)(300-600)(300-900)(300-1200)}

Result

Interpolated coordinate

(13034.417, -8808.781, 20988.570) km

Evaluating the Lagrange polynomial at 450 s gives X = 13034.417 km, Y = -8808.781 km, and Z = 20988.570 km.

Convert to meters before feeding most positioning software: approximately (1.3034e7, -8.8088e6, 2.0989e7) m.

Migration note

The legacy `interpolation_example.html` is a broadcast ephemeris satellite-position calculation, not an SP3 interpolation page. It is useful as a contrast between broadcast orbit propagation and SP3 interpolation, but it should not be merged blindly.

What you should understand now

  • SP3 coordinates are already Cartesian and precise.
  • The file sampling interval rarely matches observation epochs exactly.
  • Interpolation must be performed independently for each coordinate component.

Related tutorials

Help improve this tutorial

Point out numerical ambiguity, missing prerequisites, or a step that needs a fuller derivation.

Primary sources and further reading

The specifications and research below support the model and terminology. Numerical exports and teaching assumptions are documented in the lesson itself.

Browse the scientific reference library →

Continue with the numbers

GNSS terms and units · Report a correction