5G NR PRACH Resource Grid Visualizer
- Venkateshu Kamarthi

- 12 hours ago
- 4 min read
What this tool is
This tool that turns the rach-ConfigCommon / rach-ConfigGeneric fields broadcast in SIB1 into a visual picture of the actual time–frequency resource grid the UE's PRACH preamble is transmitted on — which resource blocks, which subcarriers, which subframe, slot and OFDM symbols.
It's meant for RAN/protocol engineers who want to sanity-check a PRACH configuration, explain the config to someone else, or build intuition for how SIB1 parameters map onto the physical resource grid — not as a certified spec-compliance calculator.
What it shows
Section | What you're looking at |
Summary strip | Quick-glance derived values: format, L_RA, Δf_RA, N_RB^RA, guard size, FDM/TDM occasion counts, N_CS, preambles per root |
Carrier frequency overview | The PRACH RB allocation highlighted against the full uplink BWP / carrier |
Subcarrier zoom | Inside the PRACH RBs: the L_RA active preamble subcarriers vs. the guard subcarriers on each side |
Radio frame → subframe | Which subframe(s) of the 10 ms frame carry a PRACH occasion |
PRACH resource grid | The core view — resource blocks (rows) × 14 OFDM symbols (columns), with each TDM'd time-domain occasion drawn as a colored block |
Preamble generation & mapping flow | Root ZC sequence → cyclic shift (N_CS) → preamble → SSB beam, as a left-to-right flow |
Typical workflow
Paste in the rach-ConfigGeneric values from a captured SIB1 message.
Look up your prach-ConfigurationIndex row in Table 6.3.3.2-3 (FR1 unpaired) or -2 (FR1 paired/SUL) for the exact format, subframe(s), starting symbol, slots/subframe and occasions/slot — enter those in the Time Domain panel.
Set the active UL BWP subcarrier spacing and start RB from your BWP config.
Click Update resource grid and use the visual to confirm the occasion lands where you expect, or to explain the configuration to a colleague.
Field-by-field input guide
Preamble sequence
Field | SIB1 source | Notes |
Root sequence length (L_RA) | prach-RootSequenceIndex (l139 vs l839) | l139 = short format (used with 15/30/60/120 kHz PRACH SCS); l839 = long format (1.25/5 kHz) |
Root sequence index value | prach-RootSequenceIndex | The actual index number |
restrictedSetConfig | restrictedSetConfig | N_CS lookup only runs for unrestrictedSet (see limitations) |
zeroCorrelationZoneConfig | zeroCorrelationZoneConfig | 0–15, selects the N_CS row |
Frequency domain
Field | SIB1 source | Notes |
msg1-SubcarrierSpacing | msg1-SubcarrierSpacing | The PRACH's own subcarrier spacing (Δf_RA) |
Active UL BWP subcarrier spacing | (not in rach-ConfigCommon) | Numerology of the UL BWP the PRACH RBs are counted in — comes from the BWP config, not the RACH IE. Set to match your cell's active UL BWP. |
msg1-FrequencyStart | msg1-FrequencyStart | RB offset from the BWP start |
msg1-FDM | msg1-FDM | Number of frequency-domain (FDM'd) PRACH occasions |
UL BWP start (RB) | (BWP config) | Where the active UL BWP begins on the carrier |
Carrier width shown | (display only) | How many RBs wide to draw the overview strip |
Time domain occasion
Field | SIB1 source | Notes |
prach-ConfigurationIndex | prach-ConfigurationIndex | Selects format + subframe/slot/symbol pattern via 3GPP tables |
PRACH format | (derived from index) | Pick the format your index maps to |
Subframe number(s) | (derived from index) | Comma-separated, 0–9 |
Starting symbol / Duration / Slots per subframe / Occasions per slot | (derived from index) | The exact numbers for your specific index — see Accuracy & limitations |
SSB – preamble mapping
Field | SIB1 source |
ssb-perRACH-Occasion | ssb-perRACH-OccasionAndCB-PreamblesPerSSB (ratio part) |
CB-PreamblesPerSSB | ssb-perRACH-OccasionAndCB-PreamblesPerSSB (preamble count part) |
Reading the resource grid
Rows = resource blocks within the PRACH allocation (highest RB at top, like a spectrum display).
Columns = the 14 OFDM symbols of the PRACH slot.
Colored blocks = one TDM'd time-domain occasion each; color alternates between consecutive occasions so you can count them at a glance.
White/gray cells = symbols in that slot not used by PRACH.
A red warning banner appears if your occasion count × duration doesn't fit in 14 symbols, or if the PRACH RB allocation runs past the carrier width you've set — both are signals to revisit the inputs.
Accuracy & limitations
This tool computes what's formulaic and directly derivable from the parameters, and is explicit about the parts that require a spec table lookup you should verify yourself:
Frequency-domain mapping (N_RB^RA and k̄ guard offset) is computed from the standard Δf_RA / BWP-SCS relationship (3GPP TS 38.211 Table 6.3.3.2-1) for the common combinations. The long-format (L_RA=839) mapping is illustrative for the two supported combinations shown.
N_CS lookup (cyclic shift) is reference values for the unrestrictedSet case only. Restricted-set values aren't tabulated — consult 3GPP TS 38.211 Table 6.3.3.1-7/8 directly if you need those.
Time-domain occasion fields (subframe/slot/symbol) are left editable rather than auto-derived, because the exact mapping from prach-ConfigurationIndex depends on frequency range and duplex mode (Tables 6.3.3.2-2/3/4) and differs by spec release. The defaults shown match the commonly-cited example for index 160 / format B4 / FR1 unpaired — treat them as a starting point, not a guarantee, and update them to match the table row for your actual band and duplex mode.
If you're using this for anything spec-compliance-critical, cross-check the derived numbers against the current version of 3GPP TS 38.211 §6.3.3 before relying on them.
References:




Comments