PRACH Formats & Preamble Design for NTN
How the residual timing/frequency error after pre-compensation shapes PRACH — preamble formats and cyclic prefix, the restricted sets, ncs / zero-correlation-zone choice, and the ra-ResponseWindow.
A satellite is hundreds of milliseconds away, yet NTN reuses the ordinary terrestrial PRACH preamble formats unchanged. The trick is that the preamble never has to absorb the huge delay. By the time the UE transmits Msg1, it has already pre-compensated almost all of the timing (from GNSS + ephemeris + common TA) and almost all of the Doppler. Only a small residual timing error and a small residual carrier-frequency offset (CFO) ever reach the gNB, and PRACH is dimensioned for that residual — not for the raw round trip.
Introduction
PRACH is the physical random-access channel — the waveform the UE transmits as Msg1 to announce itself. It carries a Zadoff–Chu preamble whose cyclic prefix, sequence length, and guard period are chosen for the round-trip timing uncertainty the cell must absorb. On the ground that uncertainty is the cell radius; in NTN it is something much smaller, and understanding why is the whole story of this page.
PRACH sits at the very start of the random-access procedure, configured by rach-ConfigCommon and shaped by the pre-compensation the UE computes from timing advance and Doppler. Get its dimensioning wrong and the preamble is either undetectable (too little timing tolerance) or wasteful (too much overhead, too few preambles per root).
This page separates two numbers that people routinely conflate: the tiny residual the preamble must cover, and the huge round trip the response timers must cover. Keeping them apart explains why a short-CP preamble works fine over GEO even though ra-ResponseWindow must stretch to half a second.
On this page
PRACH sees the residual, not the delay
Terrestrially, the whole purpose of the preamble is to let the gNB discover an unknown delay. The cyclic prefix (CP) and guard period of the chosen preamble format have to be long enough to cover the round-trip uncertainty of the cell — which is why big cells need long-CP formats. Your instinct says NTN, with its enormous delay, must therefore need a gigantic CP. It does not.
The reason is the NTN pre-compensation inversion: the UE makes itself uplink-synchronised by computation before Msg1. The hundreds of milliseconds of absolute delay are absorbed by that pre-advance and by the scheduling offset cellSpecificKoffset, both of which live entirely outside the preamble. What actually lands at the gNB is only the leftover the UE could not predict.
The gNB receives a preamble whose timing error is only the residual — the difference between the UE's computed delay and reality — typically a few microseconds, not the tens-to-hundreds of milliseconds of true propagation.
A preamble format is chosen for the round-trip uncertainty its CP and guard must span. Terrestrially that equals the cell radius; in NTN it equals the residual after pre-compensation, which is tiny.
The UE pre-advances by the full computed TA and pre-corrects the service-link Doppler, then transmits an ordinary short- or long-format preamble. The gNB's detector only has to resolve the small residual within its normal window.
Key idea: the huge delay is handled by pre-compensation + cellSpecificKoffset, not by the preamble. So PRACH format selection in NTN is driven by the RESIDUAL timing uncertainty, and a modest-CP format suffices even though the true delay is enormous.
Why "far away" does not mean "long CP"
In plain words: think of the CP as the margin of error on a starting gun. If runners are scattered at unknown distances from the line, you need a big margin so everyone's start is caught. But if every runner has a GPS and steps forward by exactly their own distance before the gun, they all effectively start on the line — and the margin can be tiny even if some runners began a kilometre away. NTN pre-compensation is that "step forward first"; the CP only has to cover how imperfectly each runner measured their own distance.
So the CP and guard are sized to what pre-compensation could not predict: GNSS position error, ephemeris propagation error, and drift between SIB19 updates — a handful of microseconds. The absolute distance to the satellite is irrelevant to the preamble because the UE already subtracted it. This is why a short-format preamble is entirely normal over a GEO beam, and why reaching for a long format is a decision about the residual budget and delay spread, never about raw distance.
Long and short preamble formats — what the CP really bounds
NR keeps two families of preamble, both defined in TS 38.211. Nothing about these formats is NTN-specific; NTN simply picks from the same menu.
| Family | Formats | ZC sequence length | PRACH SCS | Bounded by CP + guard |
|---|---|---|---|---|
| Long | 0, 1, 2, 3 | LRA = 839 | 1.25 kHz / 5 kHz | Large cells; long round-trip uncertainty |
| Short | A1–A3, B1–B4, C0, C2 | LRA = 139 | 15 / 30 / 60 / 120 kHz | Small cells; short round-trip uncertainty |
Each format fixes three things that together bound the round-trip timing uncertainty it can absorb: a cyclic prefix, the sequence length, and a guard period. Make the CP and guard longer and the format tolerates more unknown delay (a bigger cell), at the cost of more overhead. That is the terrestrial logic: choose the format for the cell size.
In NTN the logic is identical but the input is different. The round-trip uncertainty the format must span is no longer the cell radius — it is the residual after pre-compensation. Because that residual is microseconds, a short-format preamble with a modest CP is perfectly adequate over a GEO beam thousands of kilometres across. You do not reach for a long format merely because the satellite is far away; you reach for it only if the residual budget or the delay spread genuinely demands it.
Common confusion: "far away" does not mean "needs a long CP." Distance is pre-compensated; the CP only has to cover what pre-compensation could not predict. A short format over GEO is entirely normal in NR-NTN.
✅ Debugging steps
- Read the configured format (from
prach-ConfigurationIndexinrach-ConfigCommon) and confirm its CP + guard exceed the residual timing budget, not the raw RTT. - If preambles are missed, estimate the actual residual (from GNSS/ephemeris quality) before assuming the format is too short.
- Confirm the PRACH SCS matches the numerology the gNB detector expects for that format.
- Check that a long format was not chosen "just because it's a satellite" — verify it is justified by residual/delay spread, or it wastes overhead.
⚠ Common causes of failure
- Residual timing exceeds the chosen CP because pre-compensation is poor (stale ephemeris, bad GNSS) — the fix is fresher SIB19/GNSS, not always a longer format.
- Format/SCS mismatch between broadcast and UE, so the gNB correlates the wrong waveform.
- Over-long format chosen needlessly, inflating overhead and cutting occasion capacity.
- Delay spread across a wide beam larger than assumed, so a short CP clips the correlation.
Ncs and zeroCorrelationZoneConfig — spacing the cyclic shifts
A single root Zadoff–Chu sequence (selected by rootSequenceIndex) is turned into many distinct preambles by applying different cyclic shifts to it. The spacing between adjacent shifts is Ncs, and it is set by zeroCorrelationZoneConfig. The rule that matters: the cyclic-shift spacing must be larger than the round-trip timing uncertainty seen at the detector, otherwise a delayed copy of one preamble slides far enough in the correlation to look like the next shift — and two preambles become indistinguishable.
rootSequenceIndex values neededTerrestrially Ncs is sized to the cell's round-trip delay plus delay spread, so a large cell burns a big Ncs, yields few preambles per root, and forces the operator to allocate many root sequences to reach the 64 preambles a cell needs. In NTN the sizing input is again the residual, so Ncs can stay small.
Worked feel: a long format runs LRA = 839 at 1.25 kHz, so the 800 µs sequence gives one ZC sample ≈ 0.95 µs. If the residual round-trip uncertainty is a few microseconds, Ncs need only be a handful of samples (plus a delay-spread guard) — yielding well over a hundred preambles from a single root. A large terrestrial cell, whose round-trip delay alone forces Ncs into the tens or hundreds of samples, collapses preambles-per-root and demands many roots. NTN's pre-compensation is what keeps this number healthy.
✅ Debugging steps
- Confirm
zeroCorrelationZoneConfigmaps to an Ncs larger than the residual round-trip uncertainty plus delay spread — not the full RTT. - Compute preambles-per-root = ⌊LRA/Ncs⌋ and verify the allocated
rootSequenceIndexrange yields at least the 64 preambles the cell needs. - If preambles alias (wrong preamble decoded at wrong timing), suspect Ncs too small for the actual residual.
- Cross-check the UE and gNB agree on
rootSequenceIndexand Ncs from the broadcast.
⚠ Common causes of failure
- Ncs undersized for the real residual, so a delayed preamble aliases onto the next cyclic shift.
- Ncs oversized (treated like a big terrestrial cell), collapsing preambles-per-root and starving the cell of preambles.
- Too few root sequences allocated to reach 64 preambles once Ncs is applied.
- Root sequence index mismatch between broadcast and UE, so correlation fails outright.
Restricted sets — why residual CFO masquerades as timing
Zadoff–Chu sequences have a property that is a gift for detection and a trap for high-Doppler links: a frequency offset applied to a ZC sequence shifts its correlation peak in the time (delay) domain. The correlator cannot tell a genuine delay from a CFO-induced shift — both move the peak the same way. So a residual CFO can land the peak on top of the position where a different cyclic shift ought to be, and the gNB decodes the wrong preamble at the wrong timing.
To defend against that aliasing, the ZC design offers an unrestricted set and two restricted sets — Restricted set type A and Restricted set type B — which remove the cyclic shifts a plausible frequency offset could map onto a neighbour's position, keeping the surviving preambles unambiguous. The price is fewer preambles per root, so restricted sets are used only when the offset is large enough to warrant them.
In NTN, the service-link Doppler is pre-corrected, so what remains is a residual CFO from oscillator error and imperfect Doppler estimation. Whether that residual is large enough to demand Restricted set type A or type B — rather than the unrestricted set — is the deciding factor, exactly as high-speed terrestrial deployments decide it. Low elevation, where residual Doppler and its rate are worst, is the case most likely to justify a restricted set.
Spec anchor: the long and short preamble formats, the Zadoff–Chu construction, Ncs tables, and the unrestricted / restricted set definitions are all in TS 38.211; the PRACH configuration IEs (zeroCorrelationZoneConfig, rootSequenceIndex, restrictedSetConfig, prach-ConfigurationIndex) are broadcast in rach-ConfigCommon per TS 38.331.
✅ Debugging steps
- Read
restrictedSetConfig(unrestricted / type A / type B) and confirm it matches the residual-CFO regime — worst at low elevation. - Estimate residual CFO (oscillator + imperfect Doppler pre-correction) and check it against the shift the correlator can tolerate.
- If wrong preambles are detected at plausible-looking timings, suspect CFO aliasing and consider a restricted set.
- Balance the preamble-per-root cost of a restricted set against the aliasing risk before enabling it.
⚠ Common causes of failure
- Unrestricted set used where residual CFO is large (low elevation), so preambles alias.
- Restricted set enabled unnecessarily, wasting preambles-per-root for no aliasing benefit.
- Doppler pre-correction disabled or wrong, inflating residual CFO beyond the set's protection.
- Oscillator drift larger than assumed, pushing the peak into a neighbouring shift's window.
The two budgets: residual CP vs the round-trip window
The cleanest way to see NTN PRACH is to keep two numbers separate. One is the residual timing budget the preamble CP must cover; the other is the true round-trip time that the response timers must cover. They differ by orders of magnitude, and different mechanisms own each.
| Quantity | Made of | Scale | Handled by |
|---|---|---|---|
| Residual timing (drives CP / Ncs) | GNSS position error + ephemeris propagation error + drift between SIB19 updates | microseconds | Preamble CP + guard, Ncs |
| True RTT — LEO 600 km (transparent) | Full service + feeder path, pre-computed | ≈ 25.77 ms | Pre-compensation + cellSpecificKoffset |
| True RTT — GEO | Full service + feeder path, pre-computed | ≈ 541 ms | Pre-compensation + cellSpecificKoffset |
The left column is what the CP and Ncs are sized to — small, so a short format works. The bottom two rows never touch the preamble at all: the UE pre-advances by them and the scheduling offset shifts Msg3 past them. Yet one timer still has to respect the full RTT.
ra-ResponseWindow stays long. Pre-compensation aligns the preamble's arrival, but the RAR still cannot physically come back until a real round-trip after Msg1. So while the CP shrinks to the residual, ra-ResponseWindow (and msgB-ResponseWindow for two-step, and ra-ContentionResolutionTimer for Msg4) must be extended to span the true RTT. This is the asymmetry that catches people out: the preamble is dimensioned for microseconds, the response window for tens-to-hundreds of milliseconds. See NTN timers for how those windows are stretched.
| PRACH aspect | Terrestrial driver | NTN driver |
|---|---|---|
| CP + guard (format choice) | Cell radius / round-trip delay | Residual timing after pre-compensation |
Ncs (zeroCorrelationZoneConfig) | Cell round-trip delay + delay spread | Residual round-trip uncertainty + delay spread |
| Restricted set | High UE speed (Doppler) | Residual CFO after Doppler pre-correction (worst at low elevation) |
ra-ResponseWindow | A few ms (local RTT) | Extended to full satellite RTT |
LTE ↔ NR · TN ↔ NTN: LTE and terrestrial NR size the preamble CP/guard and Ncs directly to the cell's physical round-trip delay — a big cell needs a long-CP format and a large Ncs. NR-NTN reuses the same TS 38.211 formats and ZC construction unchanged, but drives their sizing from the post-pre-compensation residual instead of the absolute delay, so a short format serves a GEO beam. The absolute delay is pushed entirely into pre-compensation, cellSpecificKoffset, and the extended response timers — none of which touch the preamble waveform itself.
Reading PRACH config in the logs
Two things are worth pulling from a trace: what the UE derived from rach-ConfigCommon (the sizing decisions above) and what the gNB actually measured at detection (the residual, which proves whether pre-compensation worked). If the residual is small, the format/Ncs sizing is validated; if it is large, the sizing is being asked to cover a residual the pre-compensation should have removed.
Representative PRACH config + gNB detection log — illustrative, values vary by vendor/build:
| Field | Meaning | Example | Check |
|---|---|---|---|
prach-ConfigurationIndex | Selects format, occasion timing, periodicity. | 158 (short A2) | Must match broadcast; format CP must cover the residual, not the RTT. |
rootSequenceIndex | Logical root ZC index; LRA = 139 (short) / 839 (long). | 12 | Must match broadcast, or correlation fails outright. |
zeroCorrelationZoneConfig | Maps to Ncs — cyclic-shift spacing. | 8 | Ncs must exceed residual + delay spread; verify preambles-per-root reaches 64 cell-wide. |
restrictedSetConfig | Unrestricted / type A / type B against CFO aliasing. | unrestricted | Move to restricted if residual CFO (low elevation) risks aliasing. |
ra-ResponseWindow | RAR monitoring window, NTN-extended. | sl80 | Must span the true RTT even though the CP is tiny. |
residualTA_us | Leftover timing error the gNB measured. | 1.9 | Must fit inside the CP; a large value means pre-compensation failed. |
residualCFO_Hz | Leftover frequency offset after Doppler pre-correction. | 380 | Compare to the shift the correlator tolerates; large values justify a restricted set. |
corrPeakToSide | Correlation peak-to-sidelobe margin. | 11.4 dB | Low margin points to aliasing risk, wrong Ncs, or interference. |
Summary
NTN PRACH is terrestrial PRACH with one substitution: everywhere the terrestrial design sizes the preamble to the cell's physical round-trip delay, NTN sizes it to the post-pre-compensation residual. That single change lets the unchanged TS 38.211 long/short formats, Zadoff–Chu construction, Ncs tables, and restricted-set machinery serve a satellite beam. The CP + guard cover a few microseconds of residual timing; Ncs (via zeroCorrelationZoneConfig) covers the residual round-trip uncertainty plus delay spread; the restricted set (restrictedSetConfig) defends against residual CFO, worst at low elevation.
Keep the two budgets separate and everything falls into place: the residual (microseconds) drives the preamble; the true RTT (tens to hundreds of ms) drives pre-compensation, cellSpecificKoffset, and the extended ra-ResponseWindow. When a preamble is missed, first ask whether the residual is genuinely small — a large measured residualTA or residualCFO means the fix is fresher ephemeris/GNSS or a restricted set, not a longer format.
Q. Why doesn't NTN need a giant PRACH cyclic prefix despite the huge propagation delay?
A. Because the delay never reaches the preamble. The UE pre-compensates the full timing from GNSS position, satellite ephemeris and the common-TA parameters in SIB19, and the scheduling offset cellSpecificKoffset absorbs the round-trip in the DL-to-UL timing relationships. Only a small residual — GNSS error, ephemeris propagation error, drift — lands at the gNB, so a modest-CP short format covers it. The CP is sized to the residual uncertainty, not the absolute delay.
Q. What sets Ncs / zeroCorrelationZoneConfig in NTN?
A. The residual round-trip timing uncertainty plus delay spread, not the cell round-trip delay. Ncs is the cyclic-shift spacing between preambles from one root ZC and it must exceed that uncertainty so a delayed preamble is not confused with the next shift. Because the residual is small, Ncs stays small, giving many preambles per rootSequenceIndex — where a large terrestrial cell would burn a big Ncs and need many roots.
Q. Why might NTN use restricted preamble sets, and why is ra-ResponseWindow still long?
A. Restricted sets exist because a frequency offset shifts a Zadoff–Chu correlation peak along the delay axis, so a residual CFO can alias one preamble onto another's cyclic-shift position; Restricted set type A/type B remove the vulnerable shifts. NTN pre-corrects Doppler, but the leftover CFO — worst at low elevation — may still justify a restricted set. ra-ResponseWindow stays long because pre-compensation fixes only the preamble's arrival alignment; the RAR itself cannot return until a full round-trip later, so the window must span the true RTT.
Related NTN topics
PRACH dimensioning only makes sense alongside the pre-compensation that shrinks its residual and the delay that stretches its timers — follow those next.