Doppler & Frequency Pre-compensation in 5G NTN
Why a fast LEO satellite smears the carrier, how Doppler shift and drift are pre-compensated on the service and feeder links, and the residual the UE must track.
A low-Earth-orbit satellite tears across the sky at roughly 7.5 km/s. That velocity has a component pointed straight at you โ or straight away โ and a radial velocity of that size smears the carrier frequency by tens of kilohertz through the Doppler effect. Worse than being large, it changes quickly: the shift swings from strongly positive as the satellite rises to zero at closest approach to strongly negative as it sets, all within a pass of a few minutes. OFDM only works because sub-carriers stay orthogonal, and a big uncorrected carrier frequency offset destroys that orthogonality; the same offset makes PRACH correlators miss entirely, so initial access fails before it starts. Terrestrial UEs only ever correct a small oscillator error plus a little mobility Doppler. NTN adds a huge, fast, but crucially deterministic component โ deterministic because the UE knows the geometry โ and the design leans on exactly that predictability. This page explains the split of responsibility between the service and feeder links, how the UE pre-compensates its own Doppler from GNSS and ephemeris, and what residual is left for ordinary AFC to track. The framework is defined in TR 38.821 and TS 38.213, with the ephemeris broadcast in SIB19 per TS 38.331.
Introduction
Doppler shift is the change in observed frequency that relative motion along the line of sight imposes on a carrier. Every mobile radio system deals with a little of it โ a UE in a car adds a few hundred hertz of mobility Doppler on top of its oscillator error. NTN is different in degree so large it becomes different in kind: a LEO satellite's line-of-sight velocity is measured in kilometres per second, so the carrier offset it produces runs to tens or hundreds of kilohertz, comparable to or larger than the sub-carrier spacing itself.
That matters because OFDM โ the waveform underneath NR โ depends on sub-carriers staying mutually orthogonal, which only holds if the frequency error is a small fraction of the sub-carrier spacing. A Doppler offset that large collapses the orthogonality, floods the grid with inter-carrier interference, and, before any of that, prevents the PRACH correlators from finding the preamble at all. Uncorrected NTN Doppler does not merely degrade the link; it stops the UE from ever getting onto the network.
The saving grace, and the theme of this page, is that the dominant part of NTN Doppler is deterministic: it is fixed by orbital geometry the UE can know exactly from its GNSS position and the satellite's broadcast ephemeris. So NTN does not try to track a shift that is too fast to follow; it calculates it in advance and pre-compensates, leaving only a small residual for the ordinary frequency-control loop. This is where every NTN UE meets Doppler โ at the very first step, initial access โ and getting it right is the precondition for everything that follows.
On this page
Why Doppler is the NTN frequency problem
In plain words: it is the ambulance-siren effect, scaled up enormously. A siren sounds higher-pitched as the ambulance races toward you and lower as it speeds away โ the pitch shifts because the source is moving along your line of sight. A LEO satellite is an "ambulance" travelling at 7.5 km/s, so the pitch shift it puts on the radio carrier is huge, and it sweeps from high to low as the satellite rises, passes overhead, and sets. The trick NTN uses is that, unlike a random siren, the satellite's path is known in advance โ so the UE can predict the pitch change and tune it out before it causes trouble.
Doppler shift is the change in observed frequency caused by relative motion along the line of sight. Only the radial velocity โ the component of relative velocity pointing toward or away from you โ matters; motion across your line of sight produces no shift. For a satellite the geometry is stark: as it comes over the horizon it is rushing toward you, so the radial velocity is large and positive and the received frequency is shifted up; as it passes overhead the velocity is momentarily all tangential, radial velocity crosses zero, and the shift vanishes; as it recedes the radial velocity is large and negative and the frequency shifts down.
vradial · sign flips through zero at closest approach
fc · higher carrier → larger absolute shift in Hz
Two things follow from that formula. First, the shift scales with the carrier frequency fc: the same 7.5 km/s produces a far larger absolute offset in Ka-band than at 2 GHz. Second, because vradial passes through zero and reverses, the rate of change of Doppler is greatest near overhead โ the shift is small there but moving fastest, which is exactly where a naive tracker struggles. That rate, the Doppler slope dfD/dt, is itself set by geometry (the angular rate of the satellite times the carrier), so like the shift it can be predicted rather than chased โ for a 600 km LEO it reaches on the order of a few hundred Hz per second at S-band.
Why it matters: OFDM sub-carriers are spaced to stay orthogonal only if frequency error is a small fraction of the sub-carrier spacing. A CFO of tens of kHz is comparable to or larger than the spacing, so it collapses orthogonality, raises inter-carrier interference, and defeats the PRACH correlators used in initial access. Uncorrected, the UE cannot even complete random access.
LEO versus GEO โ large shift versus almost none
The magnitude of the problem depends entirely on how fast the satellite moves relative to you, which is a function of orbit (see orbits & geometry). A LEO satellite at ~600 km orbits so fast that its ground track sweeps past in minutes, producing the full rise-to-set Doppler swing. A GEO satellite sits essentially fixed over a point on the equator, so its radial velocity relative to a fixed UE is nearly zero and the Doppler is negligible โ the frequency problem effectively disappears, leaving GEO with the delay problem instead.
| Aspect | LEO (~600 km) | GEO (~35 786 km) |
|---|---|---|
| Satellite speed | ~7.5 km/s | ~stationary over ground |
| Service-link Doppler @ 2 GHz | up to ~±48 kHz | negligible |
| Doppler rate | up to a few hundred Hz/s | ~0 |
| Scaling with carrier | much larger in Ka-band (absolute Hz) | still negligible |
| Service-link pre-comp | UE (GNSS + ephemeris) | trivial / small |
| Feeder-link pre-comp | network / gateway | network / gateway |
The numbers are for the service link at 2 GHz; move to Ka-band and the same fractional shift becomes many times more hertz, which is why higher-frequency NTN designs lean even harder on pre-compensation. The Doppler rate figure is what forces the UE not just to correct a static offset but to keep re-computing it continuously across the pass.
Two links, two responsibilities
An NTN path has two hops โ the service link between the UE and the satellite, and the feeder link between the satellite and the ground gateway. Each hop has its own Doppler, and the design assigns each to whoever can best predict it.
The service-link Doppler is pre-compensated by the UE; the feeder-link Doppler is pre-compensated by the network / gateway. The UE only ever has to deal with the service link.
The UE knows the service-link geometry โ its own GNSS position and the satellite's ephemeris โ so it can predict that shift exactly. It knows nothing about the feeder-link geometry to the gateway, so that side is handled on the ground where the geometry is known.
With a transparent payload the feeder-link Doppler is corrected at the gateway before the signal is relayed, so it is invisible to the UE. A common frequency offset may additionally be applied or broadcast so all UEs share a reference.
Service link โ the UE pre-compensates
Because the UE has its GNSS position and the satellite's ephemeris (position and velocity at a known epoch, from SIB19), it can compute the radial velocity along the line of sight, evaluate fD, and correct its transmit frequency so the signal arrives at the satellite on the right carrier. It applies the mirror correction on receive, tuning its downlink frequency to undo the shift on signals coming down. And because it knows the Doppler rate from the ephemeris velocity, it keeps updating the correction across the pass rather than setting it once.
Feeder link โ the network pre-compensates
The satellite-to-gateway hop also has Doppler, but the UE has no visibility of it. In a transparent (bent-pipe) architecture the gateway pre-compensates the feeder-link Doppler on the ground, so by the time the signal reaches the UE only the service-link component remains. A network-applied common frequency offset can align everyone to a shared reference so the residual each UE must handle is minimised.
The residual and ordinary AFC
Pre-compensation is not perfect โ GNSS position has error, the ephemeris is quantised and propagated from an epoch, and the UE's own oscillator drifts. What survives after service-link pre-comp (and network feeder-link pre-comp) is only a small residual carrier frequency offset, comparable to what a terrestrial UE already handles. That residual is left to the UE's ordinary automatic frequency control (AFC), the same loop that tracks oscillator error on the ground. The whole point of pre-compensation is to shrink the offset from tens of kilohertz down to a range small enough that AFC can lock and, critically, small enough that PRACH correlation succeeds during random access.
Deterministic vs stochastic: the huge part of NTN Doppler is deterministic โ fixed by geometry the UE knows โ so it is removed by open-loop calculation, not tracking. Only the small, unpredictable residual is left for the closed-loop AFC. Pre-compensation converts a tracking problem too fast to follow into an arithmetic problem the UE solves in advance.
TN ↔ NTN: a terrestrial UE faces only two frequency errors โ its own oscillator drift (a few ppm) and mobility Doppler (a few hundred Hz), both small enough for the closed-loop AFC to acquire and track directly. NTN keeps that same AFC loop but bolts an open-loop pre-compensation stage in front of it, because the added geometric Doppler (tens to hundreds of kHz) is far too large and too fast for AFC alone. The terrestrial mechanism is not replaced; it is preceded by a calculation that hands it back a terrestrial-sized residual.
Worked example โ how big is LEO Doppler, really?
The Doppler shift is the radial velocity as a fraction of the speed of light, times the carrier:
A LEO satellite at 600 km orbits at about 7.56 km/s. Near the horizon almost all of that velocity points along the line of sight, so the radial component peaks around 7.2 km/s. Plug that into the carrier:
at fc = 20 GHz (Ka-band): fD = (7200 / 3×108) × 20×109 = ±480 kHz
Two things fall straight out of the arithmetic. First, the shift scales with the carrier โ Ka-band sees roughly ten times the S-band offset in Hz, which is why frequency handling is even more demanding up there (see NTN Spectrum & Bands). Second, the sign flips as the satellite passes overhead: approaching, the shift is positive; at the point of closest approach the radial velocity is zero (so fD = 0) but the rate of change of Doppler is at its maximum โ the frequency swings fastest exactly when its offset is smallest. Compare a GEO satellite, effectively stationary relative to the ground, whose Doppler is negligible.
| Orbit / band | Peak Doppler shift | Character |
|---|---|---|
| LEO-600 @ 2 GHz (S) | ≈ ±48 kHz | Large shift, high rate; sign flips at closest approach. |
| LEO-600 @ 20 GHz (Ka) | ≈ ±480 kHz | ~10× the S-band offset; hardest to track. |
| GEO @ 2 GHz | negligible | Satellite ~stationary over the ground. |
Magnitudes are illustrative, consistent with the service-link figures in TR 38.821; the exact peak depends on elevation geometry and the UE's own motion.
⚠ Common pitfalls / gotchas
- Correcting the shift but not the rate. Pre-compensating a single fD value and holding it is not enough on a LEO pass โ the offset moves at hundreds of Hz/s, so the UE must keep re-evaluating from the ephemeris or the residual grows within a slot.
- Stale or expired ephemeris. SIB19 ephemeris is valid from an epoch; if it is not refreshed the propagated position drifts, the computed range-rate is wrong, and both Doppler and timing pre-comp degrade together.
- No GNSS fix, no access. Treating GNSS as optional is fatal โ without the UE's own position the geometry cannot be closed, so neither Doppler nor timing can be pre-compensated and PRACH fails.
- Assuming the feeder link is the UE's problem. The UE only ever pre-compensates the service link; expecting it to handle feeder-link Doppler (which it cannot even observe) confuses the responsibility split.
- Scaling S-band intuition to Ka-band. The offset is ~10× larger at 20 GHz, so a frequency-error budget that is comfortable in S-band can be wildly insufficient in Ka-band.
Summary
NTN Doppler is the ambulance-siren effect at satellite speed: a LEO's ~7.5 km/s line-of-sight velocity puts tens of kilohertz of offset on the carrier (fD = vradial/c · fc), the offset scales with the band (~±48 kHz at S-band, ~±480 kHz at Ka-band), and it flips sign through zero at closest approach while its rate peaks overhead. That is large and fast enough to break OFDM orthogonality and defeat the PRACH correlators, so uncorrected it stops initial access outright. GEO, by contrast, is nearly stationary and has negligible Doppler โ it trades the frequency problem for a delay problem.
The design's key move is to exploit determinism. The dominant Doppler is fixed by geometry the UE already knows, so it is removed by open-loop calculation, not closed-loop tracking. The UE pre-compensates the service link from its GNSS position plus the satellite ephemeris and epoch in SIB19 โ the same inputs that drive timing advance โ while the network/gateway pre-compensates the feeder link the UE cannot see. What is left is a small residual (GNSS error, ephemeris quantisation, oscillator drift) that the ordinary AFC loop handles exactly as it does on the ground.
The practical takeaways: GNSS is mandatory because without a position fix the geometry cannot be closed; the correction must track the rate, not just the offset; and one geometry data set serves both frequency and timing pre-compensation. Get those right and NTN's frequency problem reduces to a terrestrial-sized residual.
Q. Why is LEO Doppler large but GEO Doppler tiny?
A. Doppler depends on radial velocity along the line of sight. A LEO satellite moves at ~7.5 km/s, giving a large radial component that produces up to ~±48 kHz at 2 GHz and reverses sign across the pass. A GEO satellite is essentially stationary over the ground, so its radial velocity relative to a fixed UE is near zero and the Doppler is negligible โ GEO trades the frequency problem for a large fixed delay instead.
Q. Who compensates service-link versus feeder-link Doppler?
A. The UE pre-compensates the service link (UE to satellite) because it knows that geometry from its GNSS position and the satellite ephemeris. The network/gateway pre-compensates the feeder link (satellite to gateway) on the ground, since the UE has no visibility of it; with a transparent payload the feeder-link Doppler is fully handled below, so the UE only ever deals with the service link, plus a possible network-applied common frequency offset.
Q. What UE input makes service-link pre-compensation possible, and what is left over?
A. The UE needs its own GNSS position plus the satellite ephemeris (position and velocity) and epoch time from SIB19 โ the same inputs used for timing advance. From the range-rate it computes the Doppler and its rate and corrects transmit and receive frequency. After pre-comp only a small residual CFO remains (GNSS error, ephemeris quantisation, oscillator drift), which the UE's ordinary AFC tracks and which is small enough for PRACH to succeed.
Where this leads next
Doppler pre-compensation shares its inputs and its purpose with timing pre-compensation, and both exist to let initial access succeed. Follow the connected mechanisms that build on the same SIB19 geometry.