If you look at the high level procedure of RACH, LTE-NB RACH is not much different from legacy LTE or LTE BL/CE(M1). That is, they are all go through the 4 step message transaction (Msg1, Msg2, Msg3, Msg4). However, you would have noticed this procedure got more and more complicated if you look one step deeper into it.
- If you compare the legacy LTE and LTE BL/CE(M1) RACH procedure, LTE BL/CE is more complicated and the most of those complication comes from repeated transmission of each message.
- If you compare the LTE BL/CE(M1) RACH and LTE NB(M2) RACH procedure, you would notice that LTE NB(M2) RACH is more complicated. The most of this complication seems to come from physica resource allocation of Preamble signal in LTE NB (You would see a whole bunch of parameters in NPRACH-Parameters-NB-r13, most of which would not be seen in legacy LTE and LTE BL/CE(M1)) .
Followings are the topics that will be covered in this page.
- Overall Process of RACH procedure for initial attach
- Time Domain Structure
- NPRACH Parameters
- Baseband Signal Generation
- Time and Frequency Domain Resource Allocation
- NPRACH Transmission Timing
- Higher Layer Signaling Parameters
- Reference
Overall Process of RACH procedure for initial attach
Following is the overall procedure for RACH Process for Initial Attach. Technically the RACH procedure is from Step (B) through (H), but I added some additional steps that must be done before and after the RACH procedure. I will put further description some time later when I have time.

Steps (B) to (H) are the RACH procedure. Each box on the right lists the SIB2 parameters used at the step it points to. The lowest box spells ack-NACK-NumRepetitions-Msg4-r13 as CK-NACK-NumRepetitions-NB-r13.
Step (B) is the preamble : Msg1 goes on NPRACH, shaped by the nprach-* parameters in the top box.Steps (C) and (F) are NPDCCH : both use the Type2 common search space, set by npdcch-NumRepetitions-RA-r13, npdcch-StartSF-CSS-RA-r13 and npdcch-Offset-RA-r13.Step (E) is Msg3 on NPUSCH : threeTone-BaseSequence-r13 and threeTone-CyclicShift-r13 set its DMRS when Msg3 uses three tones.Step (H) is HARQ ACK for Msg4 : ack-NACK-NumRepetitions-Msg4-r13 sets how often NPUSCH format 2 repeats it.
One thing the diagram leaves out is the choice of NPRACH resource. SIB2 can carry up to three NPRACH resources, because maxNPRACH-Resources-NB-r13 is 3 in 36.331 v19.3.0. The field rsrp-ThresholdsPrachInfoList-r13 gives up to two RSRP thresholds, and the UE compares its measured RSRP with them to pick one resource, which is its coverage level. Each later step then uses the list entry for that level. So the eNB can give a UE in deep coverage more preamble repetitions, a longer RAR window and more NPDCCH repetitions than a UE near the cell centre.
Time Domain Structure
In LTE NB, there are only two Preamble formats. Each preamble format is made up of two portions : CP and Sequence. The Sequence part is made up of 5 sub blocks. All of the 5 subblock is made up of identical symbols. As you see in the following illustration, the length of Sequence part of Preamble format 0 and 1 are same. The difference lies in the length of CP.

An NPRACH symbol group is one cyclic prefix plus five identical 3.75 kHz symbols. The LTE preamble is one cyclic prefix plus one long Zadoff-Chu sequence.
TSEQ is the same for both formats : 5 × 8192 Ts = 1.333 ms.Format 0 has a 66.7 µs cyclic prefix : 2048 Ts, so one symbol group lasts 1.4 ms.Format 1 has a 266.7 µs cyclic prefix : 8192 Ts, so one symbol group lasts 1.6 ms.nprach-CP-Length-r13 picks the format : us66dot7 is format 0, and us266dot7 is format 1.
The longer cyclic prefix exists for large cells. A cyclic prefix has to cover the round-trip delay of the farthest UE, because the UE sends its first preamble before it has any timing advance. 266.7 µs covers a round trip of about 40 km, and 66.7 µs about 10 km.
The two-format picture is the Release 13 one. 36.211 v19.3.0 Table 10.1.6.1-1 lists three formats for frame structure type 1, and Table 10.1.6.1-2 lists five for TDD. The table below summarises the FDD formats, with P symbol groups per repetition unit, G of them contiguous in time, and N symbols per group.
Preamble format | P | G | N | TSEQ | Subcarrier spacing |
0 | 4 | 4 | 5 | 5 × 8192 Ts | 3.75 kHz |
1 | 4 | 4 | 5 | 5 × 8192 Ts | 3.75 kHz |
2 | 6 | 6 | 3 | 3 × 24576 Ts | 1.25 kHz |
From 36.211 v19.3.0 Table 10.1.6.1-1 and Table 10.1.6.2-1, frame structure type 1. Format 2 is not used for IoT NTN TDD operation.
Format 2 uses a 1.25 kHz subcarrier spacing, three times narrower than formats 0 and 1, so each of its symbols is three times longer. It hops over 36 subcarriers instead of 12. For TDD, formats 0, 1, 2, 0-a and 1-a use G = 2 or 3, because the symbol groups have to fit into short runs of uplink subframes.
NPRACH Parameters
As I mentioned in other page, in terms of physical layer implementation LTE-NB is pretty new radio technology comparing to legacy LTE. You can see this new aspects of physical layer in RACH preamble signal design as well (Higher layer sequence (i.e, MAC and higher) of RACH process is not so different from legacy LTE and LTE BL/CE(M1) though). A lot of new parameters defining the physical layer aspect of PRACH are introduced and followings are the list of those parameters.
|
PHY Parameter |
RRC Parameter (SIB2) |
Description |
|
nprach-Periodicity |
NPRACH resource periodicity |
|
|
nprach-SubcarrierOffset |
Frequency location of the first subcarrier allocated to NPRACH |
|
|
nprach-NumSubcarriers |
Number of subcarriers allocated to NPRACH |
|
|
nprach-NumCBRA-StartSubcarriers |
Number of starting sub-carriers allocated to contention based NPRACH random access |
|
|
numRepetitionsPerPreambleAttempt |
Number of NPRACH repetitions per attempt |
|
|
nprach-StartTime |
NPRACH starting time |
|
|
nprach-SubcarrierMSG3-RangeStart |
Fraction for calculating starting subcarrier index for the range of NPRACH subcarriers reserved for indication of UE support for multi-tone msg3 transmission |
Following is the ASN definition of each of the parameters listed above.
Following is based on
NPRACH-Parameters-NB-r13::= SEQUENCE { nprach-Periodicity-r13 ENUMERATED {ms40, ms80, ms160, ms240, ms320, ms640, ms1280, ms2560}, nprach-StartTime-r13 ENUMERATED {ms8, ms16, ms32, ms64, ms128, ms256, ms512, ms1024}, nprach-SubcarrierOffset-r13 ENUMERATED {n0, n12, n24, n36, n2, n18, n34, spare1}, nprach-NumSubcarriers-r13 ENUMERATED {n12, n24, n36, n48}, nprach-SubcarrierMSG3-RangeStart-r13 ENUMERATED {zero, oneThird, twoThird, one}, maxNumPreambleAttemptCE-r13 ENUMERATED {n3, n4, n5, n6, n7, n8, n10, spare1}, numRepetitionsPerPreambleAttempt-r13 ENUMERATED {n1, n2, n4, n8, n16, n32, n64, n128}, npdcch-NumRepetitions-RA-r13 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048, spare4, spare3, spare2, spare1}, npdcch-StartSF-CSS-RA-r13 ENUMERATED {v1dot5, v2, v4, v8, v16, v32, v48, v64}, npdcch-Offset-RA-r13 ENUMERATED {zero, oneEighth, oneFourth, threeEighth} } NPRACH-ConfigSIB-NB-v1330 ::= SEQUENCE { nprach-ParametersList-v1330 NPRACH-ParametersList-NB-v1330 } NPRACH-ParametersList-NB-v1330 ::= SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF NPRACH-Parameters-NB-v1330 NPRACH-Parameters-NB-v1330 ::= SEQUENCE { nprach-NumCBRA-StartSubcarriers-r13 ENUMERATED {n8, n10, n11, n12, n20, n22, n23, n24, n32, n34, n35, n36, n40, n44, n46, n48} }
nprach-NumCBRA-StartSubcarriers is in the table above but not in NPRACH-Parameters-NB-r13. 36.331 v19.3.0 carries it in NPRACH-Parameters-NB-v1330, an extension added to Release 13 after the first version. It tells the UE how many of the nprach-NumSubcarriers starting subcarriers it may use for contention based random access. The rest are kept for random access that the eNB starts with an NPDCCH order.
Format 2 has its own parameter list, NPRACH-ParametersFmt2-NB-r15. Its fields mirror the ones above, but in 1.25 kHz subcarriers. The field nprach-NumSubcarriers-r15 takes n36, n72, n108 or n144, and 144 subcarriers of 1.25 kHz fill the same 180 kHz as 48 subcarriers of 3.75 kHz.
The green fields are the PHY parameters : they match the rows of the table above, one for one.maxNumPreambleAttemptCE-r13 is a MAC parameter : it limits how many attempts the UE makes at one coverage level.The npdcch-* fields belong to Msg2 and Msg4 : they configure the Type2 NPDCCH common search space for this resource.nprach-NumCBRA-StartSubcarriers-r13 is in v1330 : it splits the starting subcarriers between contention based and NPDCCH order random access.
Baseband Signal Generation
An LTE PRACH preamble is a Zadoff-Chu sequence spread over 839 or 139 subcarriers. An NB-IoT UE sends a single tone instead, and the picture below compares the two formulas. The top one is 36.211 clause 10.1.6.2 for LTE-NB, and the bottom one is clause 5.7.3 for LTE.

The LTE-NB formula has no sum and no sequence. Each symbol group is one tone at subcarrier nscRA(i), and only the frequency changes from one group to the next.
K = Δf / ΔfRA : 15 kHz divided by 3.75 kHz gives K = 4.k0 = -NscUL/2 centres the tone grid : the 48 NPRACH subcarriers sit symmetrically around the carrier centre.nstart comes from nprach-SubcarrierOffset : the picture highlights NscoffsetNPRACH in green.ninit is selected by MAC : it is drawn from 0 to NscNPRACH - 1.
The single tone changes how UEs are told apart. In LTE, UEs pick different Zadoff-Chu sequences in the same band. In LTE-NB, the MAC layer picks the starting subcarrier ninit, as the label Selected by MAC in the picture shows, and that choice fixes the whole hopping pattern. Two UEs that pick the same starting subcarrier in the same NPRACH occasion collide.
A single tone also keeps the UE transmitter simple. The signal has a constant envelope within each symbol group, so the power amplifier can run close to its maximum output. 36.211 v19.3.0 Table 10.1.6.2-1 adds ΔfRA = 1.25 kHz for preamble format 2, which gives K = 12 in the same formula.
Time and Frequency Domain Resource Allocation
NPRACH preamble is transmitted within 180 Khz range which is made up of 48 subcarriers with the subcarrier spacing of 3.75 Khz. Basically NPRACH preamble is transmitted in repetition and at each repetition it hops to a different subcarriers according to rules illustrated below.

In this example, nprach-SubcarrierOffset puts the NPRACH band at subcarriers 12 to 23. Each orange block is one symbol group, and every group hops inside those 12 subcarriers.
Hops of one subcarrier : between symbol groups 0 and 1, and between 2 and 3, i mod 4 = 1 or 3.Hops of six subcarriers : between symbol groups 1 and 2, i mod 4 = 2.A pseudo-random jump between repetitions : f(t) moves the whole pattern at the start of each repetition unit, i mod 4 = 0.numRepetitionsPerPreambleAttempt sets NrepNPRACH : the picture shows Repetition 1 to Repetition N.
The two fixed hop sizes serve the eNB receiver. Reference [1] explains the design. The phase difference across a hop of 3.75 kHz gives a coarse timing estimate over a wide range, and the phase difference across a hop of 22.5 kHz gives a finer one. The pseudo-random hop between repetitions spreads interference between cells.
Preamble format 2 follows the same idea with other sizes. 36.211 v19.3.0 clause 10.1.6.1 hops it within 36 subcarriers, with steps of 1, 3 and 18 subcarriers across six symbol groups. The frequency range is still constrained by nprach-NumSubcarriers, and a configuration where the offset plus the number of subcarriers exceeds the uplink band is invalid.
NPRACH Transmission Timing
According to 36.211-10.1.6.1, NPRACH can be transmitted only at one specific timing within a NPRACH period as illustrated below. nprach-StartTime, nprach-Periodicity is configured by Higher Layer (SIB2)

An NPRACH occasion starts NstartNPRACH · 30720 Ts after a radio frame that meets nf mod (NperiodNPRACH/10) = 0, and the pattern repeats every NperiodNPRACH.
nprach-Periodicity is 40 ms to 2560 ms : NperiodNPRACH in the picture.nprach-StartTime is 8 ms to 1024 ms : NstartNPRACH times 30720 Ts, which is 1 ms.One occasion per period : the orange block is the only place the UE may start a preamble in that period.
The occasion has to be long enough for all repetitions. With format 1, one repetition unit is four symbol groups of 1.6 ms, so 128 repetitions take 819.2 ms before any gap. 36.211 v19.3.0 clause 10.1.6.1 inserts a gap after every 4 · 64 symbol groups for formats 0 and 1, and after every 16 · 6 for format 2.
Each NPRACH resource in NPRACH-ParametersList-NB-r13 has its own periodicity and start time. So the eNB can give the deep coverage level a long period and a late start, and keep the normal coverage level on a short period.
Higher Layer Signaling Parameters
All the NPRACH parameters above reach the UE in SystemInformationBlockType2-NB. The listing below follows them from the top of SIB2-NB down to NPRACH-Parameters-NB-r13, and the red names are the ones on the RACH path.
Following is based on
SystemInformationBlockType2-NB-r13 ::= SEQUENCE {
radioResourceConfigCommon-r13 RadioResourceConfigCommonSIB-NB-r13,
ue-TimersAndConstants-r13 UE-TimersAndConstants-NB-r13,
freqInfo-r13 SEQUENCE {
ul-CarrierFreq-r13 CarrierFreq-NB-r13 OPTIONAL, -- Need OP
additionalSpectrumEmission-r13 AdditionalSpectrumEmission
},
timeAlignmentTimerCommon-r13 TimeAlignmentTimer,
multiBandInfoList-r13 SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission OPTIONAL, -- Need OR
lateNonCriticalExtension OCTET STRING OPTIONAL,
...,
[[ cp-Reestablishment-r14 ENUMERATED {true} OPTIONAL -- Need OP
]],
[[ servingCellMeasInfo-r14 ENUMERATED {true} OPTIONAL, -- Need OR
cqi-Reporting-r14 ENUMERATED {true} OPTIONAL -- Need OR
]],
[[ enhancedPHR-r15 ENUMERATED {true} OPTIONAL, -- Need OR
freqInfo-v1530 SEQUENCE {
tdd-UL-DL-AlignmentOffset-r15 TDD-UL-DL-AlignmentOffset-NB-r15
} OPTIONAL, -- Cond TDD
cp-EDT-r15 ENUMERATED {true} OPTIONAL, -- Need OR
up-EDT-r15 ENUMERATED {true} OPTIONAL -- Need OR
]],
[[ earlySecurityReactivation-r16 ENUMERATED {true} OPTIONAL, -- Need OR
cp-EDT-5GC-r16 ENUMERATED {true} OPTIONAL, -- Need OR
up-EDT-5GC-r16 ENUMERATED {true} OPTIONAL, -- Need OR
cp-PUR-EPC-r16 ENUMERATED {true} OPTIONAL, -- Need OR
up-PUR-EPC-r16 ENUMERATED {true} OPTIONAL, -- Need OR
cp-PUR-5GC-r16 ENUMERATED {true} OPTIONAL, -- Need OR
up-PUR-5GC-r16 ENUMERATED {true} OPTIONAL, -- Need OR
rai-ActivationEnh-r16 ENUMERATED {true} OPTIONAL -- Need OR
]],
[[ gnss-PositionFixDurationReporting-r18 ENUMERATED {true} OPTIONAL -- Need OR
]],
[[ cp-CB-Msg3-EDT-r19 ENUMERATED {true} OPTIONAL, -- Need OR
up-CB-Msg3-EDT-r19 ENUMERATED {true} OPTIONAL -- Need OR
]]
}
RadioResourceConfigCommonSIB-NB-r13 ::= SEQUENCE {
rach-ConfigCommon-r13 RACH-ConfigCommon-NB-r13,
bcch-Config-r13 BCCH-Config-NB-r13,
pcch-Config-r13 PCCH-Config-NB-r13,
nprach-Config-r13 NPRACH-ConfigSIB-NB-r13,
npdsch-ConfigCommon-r13 NPDSCH-ConfigCommon-NB-r13,
npusch-ConfigCommon-r13 NPUSCH-ConfigCommon-NB-r13,
dl-Gap-r13 DL-GapConfig-NB-r13 OPTIONAL, -- Need OP
uplinkPowerControlCommon-r13 UplinkPowerControlCommon-NB-r13,
...,
[[ nprach-Config-v1330 NPRACH-ConfigSIB-NB-v1330 OPTIONAL -- Need OR
]],
[[ nprach-Config-v1450 NPRACH-ConfigSIB-NB-v1450 OPTIONAL -- Cond EnhPowerControl
]],
[[ nprach-Config-v1530 NPRACH-ConfigSIB-NB-v1530 OPTIONAL, -- Need OR
dl-Gap-v1530 DL-GapConfig-NB-v1530 OPTIONAL, -- Cond TDD
wus-Config-r15 WUS-Config-NB-r15 OPTIONAL -- Need OR
]],
[[ nprach-Config-v1550 NPRACH-ConfigSIB-NB-v1550 OPTIONAL -- Cond TDD1
]],
[[
gwus-Config-r16 GWUS-Config-NB-r16 OPTIONAL, -- Need OR
nrs-NonAnchorConfig-r16 ENUMERATED {true} OPTIONAL, -- Need OR
ue-SpecificDRX-CycleMin-r16 ENUMERATED {rf32, rf64, rf128, rf256, rf512,
rf1024} OPTIONAL -- Need OR
]],
[[ ntn-ConfigCommon-r17 SEQUENCE {
ta-Report-r17 ENUMERATED {enabled} OPTIONAL, -- Need OR
t318-r17 ENUMERATED {
ms0, ms200, ms500, ms1000, ms2000, ms4000, ms8000},
nprach-TxDurationFmt01-r17 NPRACH-TxDurationFmt01-NB-r17 OPTIONAL, -- Need OR
nprach-TxDurationFmt2-r17 NPRACH-TxDurationFmt2-NB-r17 OPTIONAL, -- Need OR
npusch-TxDuration-r17 NPUSCH-TxDuration-NB-r17 OPTIONAL -- Need OR
} OPTIONAL -- Cond NTN
]],
[[ cb-Msg3-ConfigSIB-NB-r19 CB-Msg3-ConfigSIB-NB-r19 OPTIONAL -- Need OR
]]
}
RACH-ConfigCommon-NB-r13 ::= SEQUENCE {
preambleTransMax-CE-r13 PreambleTransMax,
powerRampingParameters-r13 PowerRampingParameters,
rach-InfoList-r13 RACH-InfoList-NB-r13,
connEstFailOffset-r13 INTEGER (0..15) OPTIONAL, -- Need OP
...,
[[ powerRampingParameters-v1450 PowerRampingParameters-NB-v1450 OPTIONAL -- Need OR
]],
[[ rach-InfoList-v1530 RACH-InfoList-NB-v1530 OPTIONAL -- Cond EDT
]]
}
RACH-InfoList-NB-r13 ::= SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF RACH-Info-NB-r13
RACH-Info-NB-r13 ::= SEQUENCE {
ra-ResponseWindowSize-r13 ENUMERATED {
pp2, pp3, pp4, pp5, pp6, pp7, pp8, pp10},
mac-ContentionResolutionTimer-r13 ENUMERATED {
pp1, pp2, pp3, pp4, pp8, pp16, pp32, pp64}
}
NPRACH-ConfigSIB-NB-r13 ::= SEQUENCE {
nprach-CP-Length-r13 ENUMERATED {us66dot7, us266dot7},
rsrp-ThresholdsPrachInfoList-r13 RSRP-ThresholdsNPRACH-InfoList-NB-r13 OPTIONAL, -- Need OR
nprach-ParametersList-r13 NPRACH-ParametersList-NB-r13
}
NPRACH-ParametersList-NB-r13 ::= SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF NPRACH-Parameters-NB-r13
NPRACH-Parameters-NB-r13::= SEQUENCE {
nprach-Periodicity-r13 ENUMERATED {ms40, ms80, ms160, ms240,
ms320, ms640, ms1280, ms2560},
nprach-StartTime-r13 ENUMERATED {ms8, ms16, ms32, ms64,
ms128, ms256, ms512, ms1024},
nprach-SubcarrierOffset-r13 ENUMERATED {n0, n12, n24, n36, n2, n18, n34, spare1},
nprach-NumSubcarriers-r13 ENUMERATED {n12, n24, n36, n48},
nprach-SubcarrierMSG3-RangeStart-r13 ENUMERATED {zero, oneThird, twoThird, one},
maxNumPreambleAttemptCE-r13 ENUMERATED {n3, n4, n5, n6, n7, n8, n10, spare1},
numRepetitionsPerPreambleAttempt-r13 ENUMERATED {n1, n2, n4, n8, n16, n32, n64, n128},
npdcch-NumRepetitions-RA-r13 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128,
r256, r512, r1024, r2048,
spare4, spare3, spare2, spare1},
npdcch-StartSF-CSS-RA-r13 ENUMERATED {v1dot5, v2, v4, v8, v16, v32, v48, v64},
npdcch-Offset-RA-r13 ENUMERATED {zero, oneEighth, oneFourth, threeEighth}
}
RSRP-ThresholdsNPRACH-InfoList-NB-r13 ::= SEQUENCE (SIZE(1..2)) OF RSRP-Range
Release 13 defined every field in the listing above without an extension group. 36.331 v19.3.0 adds several groups that change the RACH, and they sit after the ... marker of each SEQUENCE.
nprach-Config-v1330 : adds nprach-NumCBRA-StartSubcarriers-r13.powerRampingParameters-v1450 and nprach-Config-v1450 : add power ramping across coverage levels.nprach-Config-v1530 and rach-InfoList-v1530 : add preamble format 2, the TDD parameters and early data transmission.ntn-ConfigCommon-r17 : adds NPRACH and NPUSCH transmission durations for non-terrestrial networks.cb-Msg3-ConfigSIB-NB-r19 : adds the Release 19 CB-Msg3 configuration, and SIB2-NB adds cp-CB-Msg3-EDT-r19 and up-CB-Msg3-EDT-r19.
The v19.3.0 text also differs from the Release 13 copy on this page in its presence flags. The fields dl-Gap-r13, ul-CarrierFreq-r13, multiBandInfoList-r13, lateNonCriticalExtension and rsrp-ThresholdsPrachInfoList-r13 are OPTIONAL in the listing above.
Reference
[1] Random Access Preamble Design and Detection for 3GPP Narrowband IoT Systems
[2] 3GPP TS 36.211 v19.3.0 - clause 10.1.6 for NPRACH, clause 5.7 for the LTE PRACH
[3] 3GPP TS 36.331 v19.3.0 - SystemInformationBlockType2-NB, RadioResourceConfigCommonSIB-NB, NPRACH-ConfigSIB-NB, NPUSCH-ConfigCommon-NB