SIB19, Satellite Ephemeris & Epoch Time in 5G NTN
The NTN-specific system information — SIB19 carrying satellite ephemeris (position/velocity or orbital elements), common TA parameters, epoch time, t-Service and the validity/assistance the UE needs.
Every other step in NR-NTN — pre-computing timing advance, pre-correcting Doppler, deciding when to reselect to the next satellite — needs one thing the UE cannot see for itself: where the satellite is, and where it is going. SIB19 is the NTN-specific System Information Block that delivers exactly that. It carries the satellite's orbit, a reference instant to which that orbit applies, the network-side timing offset and its drift, the scheduling offsets that keep uplink and downlink from landing in the past, and the validity window after which all of it goes stale. Read it once, propagate from the epoch, combine with your own GNSS fix, and you can compute the link geometry for every slot until the next re-read. It is broadcast like any other SIB and defined in TS 38.331.
Introduction
SIB19 is the System Information Block that carries the ntn-Config — the block of NTN-specific assistance data a UE needs before it can transmit uplink over a satellite. It appears only in NTN cells, is scheduled and acquired like any other SIB (the UE finds it in the SchedulingInfoList of SIB1), and was introduced in Rel-17 as part of the 3GPP NR-NTN work in TS 38.331.
It matters at a very specific moment in the UE lifecycle: after cell search and SIB1 acquisition, but before the first PRACH transmission. Terrestrial NR lets a UE run random access as soon as it has rach-ConfigCommon; NTN inserts a hard prerequisite in front of that — the UE must first have a valid ephemeris and common timing offset, and its own GNSS position, or its preamble will arrive at the gNB tens or hundreds of milliseconds out of alignment. SIB19 is where the network hands over that ephemeris and those offsets.
Because everything downstream — timing advance, Doppler pre-correction, service-link mobility, discontinuous-coverage prediction — is derived from the contents of SIB19, a single misread or stale field propagates into every one of those functions. That is why it is worth understanding field by field: this one broadcast is the root of the whole NTN pre-compensation chain.
On this page
Why SIB19 is needed
In plain words: think of catching a ball thrown from a moving train. On the ground the thrower stands still, so you barely aim ahead. When the thrower is racing past you at several kilometres a second, you must know exactly where they are and how fast they are moving to throw back and actually hit them. SIB19 is the network telling every UE the satellite's position and velocity, so each UE can "lead the throw" — pre-compute its timing and frequency — instead of throwing at where the satellite used to be.
On the ground the UE never needs to know where its base station is — the cell is a fixed point a few kilometres away and the closed-loop timing advance from the gNB handles the rest. Point the same UE at a satellite moving several kilometres per second at a range of hundreds or thousands of kilometres, and reactive signalling can no longer keep up (see timing advance). NR-NTN's answer is to make the UE predictive: give it the satellite's trajectory and let it compute the delay and the frequency shift ahead of time. SIB19 is how the network hands over that trajectory.
Three things make broadcasting the orbit the only workable answer. First, the delay is far too large for a closed loop to chase — by the time a measurement round-trips, the geometry has already changed. Second, the delay is common to every UE under the beam (the feeder-link and satellite portion is shared), so it is efficient to broadcast it once rather than signal it per UE. Third, the orbit is deterministic — a satellite obeys physics — so a single broadcast plus a timestamp lets every UE extrapolate the future without any further messaging.
What SIB19 is and why NTN needs it
SIB19 is a broadcast System Information Block carrying the per-cell ntn-Config: the serving satellite's ephemeris, an epochTime, common timing offsets, scheduling offsets, a validity duration, polarisation, a reference location, and neighbour-cell NTN info.
The UE cannot measure the satellite's position or velocity from the air interface fast enough to pre-compensate a link that changes continuously. The network knows the orbit; broadcasting it lets every UE compute its own timing and frequency locally.
It is scheduled like other SIBs — the UE reads SIB1, finds SIB19 in the scheduling info, and acquires it. Because the orbit propagates deterministically from epochTime, a single read stays usable until ntn-UlSyncValidityDuration expires.
The core idea: SIB19 does not tell the UE its timing advance or its Doppler shift. It gives the UE the ingredients — orbit plus epoch plus common offsets — from which the UE, using its own GNSS position, computes those values itself, for any future slot, without further signalling.
The ephemeris — two ways to describe an orbit
The heart of SIB19 is ephemerisInfo: the satellite's position and motion. Rel-17 defines it in one of two mutually exclusive formats, and the choice is a genuine engineering trade-off between message size and how long the description stays accurate.
State vector — positionVelocity
The first format is a plain snapshot of the satellite's state in an Earth-Centred Earth-Fixed (ECEF) frame: position X, Y, Z and velocity Vx, Vy, Vz at the epochTime. To find the satellite later, the UE simply integrates that state forward. This is conceptually trivial — no orbital mechanics required, just straight-line-plus-correction propagation — but a first-order state vector loses accuracy quickly as the true orbit curves away from the linear extrapolation, so it must be refreshed often. In the ASN.1 the position components are signed integers of range ±33554432 in steps of ≈1.3 m (so each axis spans roughly ±43 000 km, enough to place any LEO/MEO/GEO satellite), and the velocity components are signed integers of range ±131072 in steps of ≈0.06 m/s.
Orbital parameters — orbitalParameters
The second format is the classical Keplerian element set: the semi-major axis, the eccentricity, the inclination, the RAAN (Ω, the longitude of the ascending node), the argument of periapsis (ω), and the mean anomaly (M) at the epoch. These describe the shape and orientation of the whole ellipse, so propagating them forward tracks the real curved orbit and stays valid far longer than a state vector — at the cost of the UE running a proper Kepler propagation. The elements are also compact and change slowly, which suits a longer validity window. Each element is a high-resolution quantised field (for example, the semi-major axis is carried with sub-metre resolution and the angular elements with fine angular steps) so that a propagated position stays accurate over many minutes.
| Aspect | positionVelocity (state vector) | orbitalParameters (Keplerian) |
|---|---|---|
| Fields | X, Y, Z position + Vx, Vy, Vz velocity in ECEF | semi-major axis, eccentricity, inclination, RAAN (Ω), argument of periapsis (ω), mean anomaly (M) |
| UE computation | Simple — integrate state forward | Heavier — Kepler propagation of the ellipse |
| Accuracy over time | Degrades quickly; linear-ish extrapolation drifts off the curve | Tracks the true orbit; stays accurate much longer |
| Refresh need | Frequent re-broadcast | Long-lived; slow to change |
| Best for | Simplicity, short horizons | Compactness, long validity windows |
Rule of thumb: a state vector answers "where is it right now, exactly?" cheaply but goes stale fast; orbital parameters answer "what is the whole orbit?" so the same broadcast stays trustworthy for much longer. The network picks whichever matches how often it wants to refresh SIB19.
Epoch time and the common-TA terms
An ephemeris without a timestamp is meaningless — a position is only a position at an instant. That instant is epochTime: the reference time to which both the ephemeris and the common-TA parameters apply. The UE treats it as t = 0 and propagates the satellite state, the timing offset, and the frequency reference forward from it. When epochTime is not explicitly signalled, it is tied to a defined SFN boundary so both sides agree on the anchor to the slot. It is expressed as an SFN (0–1023) plus a sub-frame index (0–9), pinning the epoch to a 1 ms boundary.
Alongside the orbit, SIB19 carries the network-side timing offset the UE cannot see: ta-Common is the common timing advance (the feeder link plus any reference-point offset the network applies), and because that too drifts as the satellite moves, ta-CommonDrift and ta-CommonDriftVariation let the UE extrapolate it between broadcasts rather than waiting for a fresh SIB19 every slot. ta-Common is an integer 0…66485757 in units of 4.072 ns, so it spans up to ≈270.7 ms of one-way common delay — comfortably covering a GEO feeder path; ta-CommonDrift is a signed first-order rate and ta-CommonDriftVariation an unsigned second-order term, so between reads the UE can hold a quadratic model of the common offset. Together with the UE-computed service-link term, these feed the full timing-advance sum described in NTN timing advance.
Two scheduling offsets also live here. cellSpecificKoffset (K_offset) shifts the uplink scheduling timing relationships so that grants and their responses remain reachable across the long round trip, and kmac offsets the downlink action timing for the same reason. Both are consumed by the timer and window machinery in timer & RTT scaling.
Spec anchor: ntn-Config and its fields — epochTime, ephemerisInfo, ta-Common, ta-CommonDrift, ta-CommonDriftVariation, cellSpecificKoffset, kmac, ntn-UlSyncValidityDuration, t-Service, referenceLocation, distanceThresh, ntn-PolarizationDL/ntn-PolarizationUL — are all carried in SIB19 per TS 38.331.
Validity, service time, and location fields
Because a propagated orbit slowly diverges from reality, SIB19 bounds how long the UE may trust it. ntn-UlSyncValidityDuration states how long the current ephemeris and common-TA parameters remain valid for computing uplink synchronisation. It is an enumeration running from a few seconds up to several hundred seconds (roughly s5 … s900). While the timer runs, the UE keeps propagating and transmitting; the moment it expires without a fresh acquisition, the UE must stop uplink transmission — its timing and frequency pre-compensation can no longer be guaranteed, and transmitting on stale data would arrive at the gNB misaligned. So the UE must re-read SIB19 before this window closes.
For quasi-earth-fixed and earth-moving cells, t-Service tells the UE when the cell will stop serving its current geographic area — the point at which the satellite's beam moves on and the UE must have reselected or handed over. This directly feeds the mobility triggers in NTN mobility. Related to that, referenceLocation gives a reference point on the ground and distanceThresh a distance threshold; when the UE's separation from the reference location crosses that threshold, it is a trigger for location-based reselection and for conditional handover (CHO) evaluation.
Finally, ntn-PolarizationDL and ntn-PolarizationUL tell the UE the signal polarisation the satellite uses on each link — an enumeration of right-hand or left-hand circular (rhcp/lhcp) or linear (see NTN spectrum), and SIB19 also carries NTN information for neighbour cells, so the UE can pre-synchronise to the next satellite or beam before its current service ends.
Validity is a hard gate: ntn-UlSyncValidityDuration is not advisory. On expiry the UE ceases uplink until it re-acquires valid ephemeris and common-TA. Uplink synchronisation in NTN is only as good as the freshness of the orbit the UE is propagating.
How the UE turns SIB19 into timing and frequency
The payoff of SIB19 is that a single broadcast plus the UE's own GNSS fix is enough to compute the whole link geometry for any slot. The chain is short and mechanical. From epochTime and ephemerisInfo the UE propagates the satellite's position and velocity to the slot it cares about. Combining the satellite position with its own GNSS position gives the slant range — which, converted to delay and added to ta-Common (extrapolated by its drift terms), yields the timing-advance components. Combining the satellite's velocity with the line-of-sight direction gives the radial velocity — which yields the Doppler shift the UE pre-corrects (see Doppler). The validity duration then forces a periodic re-read so none of this runs on a stale orbit.
TN ↔ NTN: in terrestrial NR the UE never reads its base station's position — SIB1 plus SIB2–SIB4 carry cell selection and neighbour info, and timing advance is acquired reactively from the RAR and maintained by MAC CE. NTN adds SIB19 as a wholly new block: the UE must know the transmitter's orbit and hold its own GNSS fix before it may transmit at all. Terrestrial "read the SIBs, then RACH" becomes NTN "read the SIBs including SIB19, get a GNSS fix, pre-compensate, then RACH."
⚠ Common pitfalls / gotchas
- Stale epoch. Propagating a state vector far past its
epochTimedrifts off the true curved orbit; if the network broadcastspositionVelocityit must refreshSIB19often, and a UE that lets the ephemeris age accumulates timing/frequency error even beforentn-UlSyncValidityDurationnominally expires. - No GNSS fix.
SIB19alone is not enough — without the UE's own position there is no slant range and no radial velocity, so a UE with a stale or absent GNSS fix cannot pre-compensate no matter how fresh the ephemeris. - Ignoring the drift terms. Using
ta-Commonwithout applyingta-CommonDrift/ta-CommonDriftVariationleaves a growing common-TA error between broadcasts, which shows up as uplink arriving progressively earlier or later at the gNB. - Transmitting past validity. Continuing uplink after
ntn-UlSyncValidityDurationexpires sends misaligned bursts that collide with other UEs' resources; the UE must halt UL and re-acquire, not "best-effort" continue.
SIB19 / NTN-Config parameter reference
One place to see the NTN-Config contents with their ranges, units and what each one is for. Values follow the IEs in TS 38.331 — check the ASN.1 for exact normative bounds and step sizes.
| Field (IE) | Range / type | Unit & purpose |
|---|---|---|
epochTime | SFN 0–1023, subframe 0–9 | Reference instant the ephemeris & TA values apply to; the UE propagates forward from it. |
ephemerisInfo → positionVelocity | position ±33554432 (×1.3 m); velocity ±131072 (×0.06 m/s) | ECEF state vector X,Y,Z,Vx,Vy,Vz — simple, short validity. |
ephemerisInfo → orbitalParameters | 6 Keplerian elements | Semi-major axis, eccentricity, inclination, RAAN (Ω), argument of periapsis (ω), mean anomaly (M) — compact, longer validity. |
ta-Common | 0 … 66485757 | Steps of 4.072 ns → up to ≈ 270.7 ms; network common timing offset. |
ta-CommonDrift / ta-CommonDriftVariation | signed / unsigned int | First- and second-order drift of ta-Common for extrapolation between reads. |
cellSpecificKoffset | 1 … 1023 | Slots at 15 kHz reference → up to ≈ 1 s; UL scheduling offset. |
kmac | 1 … 512 | Downlink timing-reference offset (common TA not fully pre-comp at gNB). |
ntn-UlSyncValidityDuration | enum s5 … s900 | Seconds the info stays valid; on expiry the UE halts UL and re-reads SIB19. |
t-Service | time value | When a quasi-earth-fixed / earth-moving cell stops serving the area — drives timely reselection. |
referenceLocation + distanceThresh | coordinates + distance | Reference point and radius for location-based reselection and NTN conditional-handover triggers. |
ntn-PolarizationDL / ntn-PolarizationUL | enum rhcp / lhcp / linear | Signal polarisation on each direction. |
Summary
SIB19 is the one broadcast that turns an NTN UE from reactive to predictive. It delivers the ntn-Config: an ephemerisInfo (either an ECEF positionVelocity state vector or the six Keplerian orbitalParameters), an epochTime anchor, the common-TA terms ta-Common/ta-CommonDrift/ta-CommonDriftVariation, the scheduling offsets cellSpecificKoffset and kmac, the hard validity gate ntn-UlSyncValidityDuration, the service/location fields t-Service/referenceLocation/distanceThresh, and the polarisation and neighbour-cell NTN info.
The practical mental model is a pipeline: epoch + ephemeris → propagate → combine with GNSS → slant range (timing) and radial velocity (frequency) → re-read before validity expires. Timing pre-compensation and Doppler pre-correction both fall out of the same read; the drift terms keep them accurate between broadcasts; the validity duration bounds how long the UE may trust any of it. Get the freshness right and the rest of the NTN stack — random access, HARQ timing, mobility — has the geometry it needs.
Q. What are the two ephemeris formats in SIB19 and when would you use each?
A. positionVelocity — an ECEF state vector (X,Y,Z and Vx,Vy,Vz) — is simple to propagate but loses accuracy fast, so it needs frequent refresh; use it for short validity horizons. orbitalParameters — the Keplerian set (semi-major axis, eccentricity, inclination, RAAN, argument of periapsis, mean anomaly) — is compact and tracks the true orbit, so it stays valid far longer at the cost of heavier Kepler propagation; use it when you want infrequent SIB19 refresh.
Q. What is epochTime for?
A. It is the reference instant to which the ephemeris and common-TA parameters apply. The UE treats it as t = 0 and propagates the satellite state and timing offsets forward from it; without a shared epoch the orbit data has no anchor.
Q. What must the UE do when ntn-UlSyncValidityDuration expires?
A. Stop uplink transmission. The ephemeris and common-TA can no longer be trusted for uplink synchronisation, so the UE must re-acquire valid SIB19 data before transmitting again.
Q. Which SIB19 fields feed timing versus frequency?
A. Timing: epochTime + ephemerisInfo (slant range) plus ta-Common/ta-CommonDrift/ta-CommonDriftVariation, with cellSpecificKoffset/kmac shifting the scheduling relationships. Frequency: epochTime + ephemerisInfo give the satellite velocity, from which the UE derives radial velocity and the Doppler pre-correction.
Where SIB19 leads next
SIB19 is the source; the interesting work happens in the modules that consume it. Follow the ephemeris into timing, into frequency, and into the mobility decisions its service and location fields drive.