Originally published on 4GNation, February 2016 — republished here as part of the Telco & Beyond Engineering Archive.
RACH planning sits at the intersection of theory and real network deployment — it’s one of the parameters that looks purely mathematical on a spec sheet, but has direct, measurable impact on access success rates in a live cell. This was originally one of my more math-heavy posts, and I’ve kept the worked example intact since it’s the clearest way to actually understand root sequence allocation across neighboring cells.
The total number of RACH preambles available in LTE is 64. These preambles are shared among users for both initial access and handover. Access to LTE systems is classified based on whether or not preambles are reserved:
- Contention-Free Random Access (CFRA) — used when a UE has a reserved signature to access the system. Typically used during handover and at the arrival of downlink data.
- Contention-Based Random Access — used when no signature is reserved.
The 64 preambles aren’t communicated to UEs directly by the eNodeB. Instead, the UE is told how to generate them, through parameters broadcast in SIB2:
a) RootConfigurationIndex
LTE has 838 root Zadoff-Chu sequences available for preambles, each of length 839. RootConfigurationIndex tells the UE, via SIB2, which sequence to use.
b) ZeroCorrelationZoneConfig
A single root sequence can generate several preambles via cyclic shift. One or more root sequences are needed to generate all 64 preambles in a cell. The UE starts with the broadcasted root index and applies cyclic shifts to generate preambles, with ZeroCorrelationZoneConfig pointing to the table the cyclic shift value is drawn from.
The smaller the cyclic shift, the more preambles a single root sequence can generate. So the number of root sequences needed to produce all 64 preambles in a given cell is:
# of rows = ceiling(64 / integer(sequence length / cyclic shift))
Worked example: if the root sequence index is 300 and the cyclic shift is 119:
# of rows = ceiling(64 / integer(839 / 119)) = 10
This means that if root sequence index 300 is allocated to Cell X, Cell Y must be allocated root sequence index 310, and Cell Z index 320, in order to avoid root sequence conflict — which, left unmanaged, directly degrades a cell’s RACH success rate.
This is exactly the kind of parameter that separates a network that “works” in the lab from one that performs well at scale: the math is simple, but the planning discipline across dozens or hundreds of cells is where operators either get it right or spend months chasing intermittent access failures.
