5G NR Resource Block Calculation, Solved

5G NR resource block calculation with solved examples: why 100 MHz at 30 kHz gives 273 RBs and not 277, the guard band formula, and a Python checker.

By BitForBytes Editorial & Hardware Research Team, Official BitForBytes Hardware Publication · · 10 min read

⚡ Quick Summary

A 5G NR resource block is 12 consecutive subcarriers, so its width is 12 times the subcarrier spacing. The number of resource blocks in a channel is not bandwidth divided by that width: 3GPP TS 38.101 fixes it in a table that reserves guard bands at both edges. A 100 MHz channel at 30 kHz has 273, not 277.


1. Introduction & Core Motivation

Almost every 5G capacity calculation starts from one number: how many resource blocks (RBs) the carrier has. Throughput, scheduler granularity, control-channel sizing and link budgets all multiply out from it. Get the RB count wrong and every figure after it is wrong by the same ratio.

The obvious method is to divide channel bandwidth by the width of one RB. For 100 MHz at 30 kHz spacing that gives 100000 / 360 = 277.8, so 277. The specification says 273. Many explainers present the division, note that the real number is "around 273" and move on, without saying where the four missing RBs went or how to get the right answer for another bandwidth.

The gap is the guard band, and it follows a formula you can apply by hand. This calculation appears in wireless-communication exams as a short numerical and in telecom interviews as a quick sanity check. After working the examples below, you will be able to find the RB count for any NR channel, compute its guard band and spectral utilisation, and estimate a peak data rate from it.


2. Detailed Technical Breakdown

What Is a Resource Block in 5G NR?

A resource block in 5G NR is 12 consecutive subcarriers in the frequency domain. 3GPP TS 38.211 defines it in frequency only; unlike LTE, the NR definition carries no time duration.

The smallest unit is the resource element (RE): one subcarrier for one OFDM symbol. One RB over one 14-symbol slot therefore contains 12 × 14 = 168 REs. Because the subcarrier spacing scales with numerology, so does the RB width:

BW_RB = 12 × Δ f

where BW_RB is the width of one resource block and Δ f is the subcarrier spacing, both in kHz.

Numerology μSubcarrier spacingRB width
015 kHz180 kHz
130 kHz360 kHz
260 kHz720 kHz
3120 kHz1,440 kHz

Why Is the RB Count Not Simply Bandwidth Divided by RB Width?

The RB count is smaller than the simple division because a guard band is left empty at each edge of the channel so that the signal's spectral roll-off stays inside the channel.

 |<----------------- channel bandwidth BW ------------------>|
 |                                                           |
 |guard|<---- transmission bandwidth = N_RB RBs ------>|guard|
 |band | RB0 | RB1 | RB2 |   ...   | RB(N-2) | RB(N-1) |band |
 |_____|_____|_____|_____|_________|_________|_________|_____|
 f_low                                                  f_high

   N_RB x 12 x SCS  +  2 x guard  +  SCS  =  BW

3GPP TS 38.101-1 (for FR1) and TS 38.101-2 (for FR2) list the maximum transmission bandwidth configuration N_RB for each combination of channel bandwidth and subcarrier spacing. The minimum guard band on each side then follows from

GB = (BW × 1000 - N_RB × 12 × Δ f) / (2) - (Δ f) / (2)

where GB is the guard band on each side in kHz, BW is the channel bandwidth in MHz, N_RB is the number of resource blocks from the table and Δ f is the subcarrier spacing in kHz.

What Are the Standard RB Counts?

The standard RB counts are tabulated in the specification, and these are the entries used most often.

Subcarrier spacing5 MHz10 MHz20 MHz40 MHz50 MHz100 MHz
15 kHz2552106216270Not defined
30 kHz112451106133273
60 kHzNot defined11245165135

For FR2 the bandwidths are wider.

Subcarrier spacing50 MHz100 MHz200 MHz400 MHz
60 kHz66132264Not defined
120 kHz3266132264

You are not expected to memorise the tables. Remember 106 (20 MHz at 15 kHz), 273 (100 MHz at 30 kHz) and 264 (400 MHz at 120 kHz), and know that the rest come from the specification.

How Do You Work Five Typical Problems Step by Step?

You work the numbers by taking N_RB from the table and then computing occupied bandwidth, guard band and utilisation from it.

Example 1: 20 MHz at 15 kHz. The naive count is 20000 / 180 = 111. The table gives N_RB = 106. Occupied bandwidth is 106 × 180 = 19080 kHz, or 19.08 MHz. Guard band is (20000 - 19080)/2 - 7.5 = 452.5 kHz per side. Utilisation is 19.08 / 20 = 95.4%. LTE uses 100 RBs in the same 20 MHz, which is 18 MHz and 90%.

Example 2: 100 MHz at 30 kHz. The naive count is 100000 / 360 = 277. The table gives 273. Occupied bandwidth is 273 × 360 = 98280 kHz. Guard band is (100000 - 98280)/2 - 15 = 845 kHz per side. Utilisation is 98.3%.

Example 3: resource elements per second. For the same carrier, one slot holds 273 × 12 × 14 = 45864 REs. At 30 kHz there are 2,000 slots per second, so the carrier offers 45864 × 2000 = 91.7 million REs per second per antenna layer.

Example 4: approximate peak data rate. 3GPP TS 38.306 gives an approximate maximum data rate per carrier:

R = v · Q_m · f · R_max · (12 · N_RB) / T_s^(μ) · (1 - OH)

where v is the number of MIMO layers, Q_m is bits per modulation symbol, f is a scaling factor (1 here), R_max = 948/1024 is the highest code rate, T_s^(μ) = 10⁻³/(14 × 2^(μ)) s is the average OFDM symbol duration and OH is the overhead (0.14 for FR1 downlink). With 4 layers, 256-QAM (Q_m = 8), N_RB = 273 and μ = 1: (12 × 273) / (35.714 × 10⁻⁶) = 91.73 × 10⁶ REs per second; multiply by 4 × 8 × 0.9258 × 0.86 to get about 2.34 × 10⁹ bit/s. That is the 2.34 Gbit/s figure often quoted for a 100 MHz carrier. A TDD network reaches only the downlink share of it.

Example 5: 400 MHz at 120 kHz (FR2). The naive count is 400000 / 1440 = 277. The table gives 264. Occupied bandwidth is 264 × 1440 = 380160 kHz. Guard band is (400000 - 380160)/2 - 60 = 9860 kHz per side, and utilisation is 95.0%.

Can You Check the Numbers in Code?

You can check every example with a short Python script that stores the table values and applies the guard-band formula.

# (bandwidth MHz, SCS kHz) -> N_RB, copied from 3GPP TS 38.101-1
# Table 5.3.2-1 (FR1) and TS 38.101-2 Table 5.3.2-1 (FR2).
N_RB = {
    (5, 15): 25, (10, 15): 52, (20, 15): 106, (50, 15): 270,
    (10, 30): 24, (20, 30): 51, (40, 30): 106, (100, 30): 273,
    (20, 60): 24, (40, 60): 51, (100, 60): 135,
    (100, 120): 66, (400, 120): 264,
}

def rb_report(bw_mhz, scs_khz):
    n_rb = N_RB[(bw_mhz, scs_khz)]
    naive = int(bw_mhz * 1000 // (12 * scs_khz))   # no guard band
    occupied_khz = n_rb * 12 * scs_khz
    guard_khz = (bw_mhz * 1000 - occupied_khz) / 2 - scs_khz / 2
    util = occupied_khz / (bw_mhz * 1000)
    return n_rb, naive, occupied_khz / 1000, guard_khz, util

print(" BW  SCS  N_RB naive occupied  guard   util")
for key in sorted(N_RB, key=lambda k: (k[1], k[0])):
    n_rb, naive, occ, guard, util = rb_report(*key)
    print(f"{key[0]:4d} {key[1]:4d} {n_rb:5d} {naive:5d} "
          f"{occ:7.2f} {guard:7.1f} {util:6.1%}")

Output (occupied in MHz, guard in kHz per side):

 BW  SCS  N_RB naive occupied  guard   util
   5   15    25    27    4.50   242.5  90.0%
  10   15    52    55    9.36   312.5  93.6%
  20   15   106   111   19.08   452.5  95.4%
  50   15   270   277   48.60   692.5  97.2%
  10   30    24    27    8.64   665.0  86.4%
  20   30    51    55   18.36   805.0  91.8%
  40   30   106   111   38.16   905.0  95.4%
 100   30   273   277   98.28   845.0  98.3%
  20   60    24    27   17.28  1330.0  86.4%
  40   60    51    55   36.72  1610.0  91.8%
 100   60   135   138   97.20  1370.0  97.2%
 100  120    66    69   95.04  2420.0  95.0%
 400  120   264   277  380.16  9860.0  95.0%

Two patterns stand out. Utilisation rises with bandwidth at a fixed spacing, from 90.0% at 5 MHz to 97.2% at 50 MHz for 15 kHz, because the guard band grows more slowly than the channel. And a narrow channel with a wide spacing is wasteful: 10 MHz at 30 kHz uses only 86.4%.

How Does NR Compare With LTE?

NR fills more of the channel than LTE does, which is one reason a 5G carrier carries more than an LTE carrier of the same width.

PropertyLTE5G NR
Subcarrier spacing15 kHz only15, 30, 60, 120 kHz for data
RB definition12 subcarriers over one 0.5 ms slot12 subcarriers, frequency only
RBs in 20 MHz at 15 kHz100106
Spectral utilisation at 20 MHz90%95.4%
Largest single carrier20 MHz100 MHz in FR1, 400 MHz in FR2
Largest RB count per carrier100273 in FR1 tables; grid size limit 275

3. Practical Takeaways for Students

  • Exam angle: State that N_RB comes from the 3GPP table, then show the working: occupied bandwidth = N_RB × 12 × Δ f, guard band from the formula, utilisation as a ratio. If the question gives only bandwidth and spacing and expects division, do the division and add one line that the standardised value is lower because of guard bands.
  • Interview angle: "How many PRBs in 100 MHz at 30 kHz?" 273. "Why not 277?" Guard bands of 845 kHz per side. "How many REs in one RB in one slot?" 168 with normal cyclic prefix. "Rough peak rate of that carrier with 4 layers and 256-QAM?" About 2.3 Gbit/s before the TDD split.
  • Common mistake: Giving the RB a time duration. In NR a resource block is a frequency-domain unit; time is counted in symbols and slots. The second trap is using the LTE figure of 90% utilisation for NR.
  • Try it yourself: Add (50, 30): 133 and (200, 120): 132 to the dictionary and predict the guard bands before running. For a refresher on OFDM subcarriers, use the BitForBytes Roadmaps.

4. Frequently Asked Questions

What is the difference between a resource block and a resource element?

A resource element is one subcarrier during one OFDM symbol and carries one modulation symbol. A resource block is a group of 12 consecutive subcarriers. Over a 14-symbol slot, one resource block therefore spans 168 resource elements, some of which carry reference signals instead of data.

Schedulers allocate in resource blocks, because signalling an allocation per resource element would cost too much control overhead. Data-rate calculations count resource elements.

Why is the maximum 273 resource blocks when the specification mentions 275?

The two numbers answer different questions. TS 38.211 allows a resource grid of up to 275 resource blocks for any numerology, which bounds how large a carrier can ever be. TS 38.101-1 then lists what fits in each real channel bandwidth with guard bands, and for 100 MHz at 30 kHz that is 273.

At 15 kHz the widest FR1 channel in the table is 50 MHz with 270 resource blocks, also under the 275 limit.

What is the difference between a PRB and a CRB in 5G NR?

A common resource block (CRB) is numbered from a fixed reference called Point A and covers the whole carrier, while a physical resource block (PRB) is numbered from zero inside one bandwidth part. The same 12 subcarriers have one CRB index and, within a given bandwidth part, one PRB index.

This split exists because an NR device need not use the whole carrier. It is configured with bandwidth parts, and its allocations are expressed in PRBs relative to the active one.

Does a wider subcarrier spacing give a higher data rate?

Not by itself. For the same channel bandwidth, doubling the spacing halves the number of subcarriers and doubles the number of symbols per second, so the resource elements per second stay roughly the same. Compare 40 MHz: 106 resource blocks at 30 kHz and 51 at 60 kHz.

Wider spacing is chosen for other reasons: shorter slots for lower latency, and tolerance to phase noise and Doppler at high carrier frequencies. The price is larger guard bands and a shorter cyclic prefix.


5. References & Further Reading

  • 3GPP TS 38.211, "NR; Physical channels and modulation" (clause 4.4, resource grid, resource elements and resource blocks).
  • 3GPP TS 38.101-1, "NR; User Equipment (UE) radio transmission and reception; Part 1: Range 1 Standalone" (clause 5.3, channel bandwidth, transmission bandwidth configuration and minimum guard band).
  • 3GPP TS 38.101-2, "NR; User Equipment (UE) radio transmission and reception; Part 2: Range 2 Standalone" (clause 5.3).
  • 3GPP TS 38.306, "NR; User Equipment (UE) radio access capabilities" (clause 4.1.2, supported maximum data rate).
  • 3GPP TS 36.101, "E-UTRA; User Equipment (UE) radio transmission and reception" (LTE transmission bandwidth configuration).

Frequently Asked Questions

What is the difference between a resource block and a resource element?

A resource element is one subcarrier during one OFDM symbol and carries one modulation symbol. A resource block is a group of 12 consecutive subcarriers. Over a 14-symbol slot, one resource block therefore spans 168 resource elements, some of which carry reference signals instead of data.

Why is the maximum 273 resource blocks when the specification mentions 275?

The two numbers answer different questions. TS 38.211 allows a resource grid of up to 275 resource blocks for any numerology, which bounds how large a carrier can ever be. TS 38.101-1 then lists what fits in each real channel bandwidth with guard bands, and for 100 MHz at 30 kHz that is 273.

What is the difference between a PRB and a CRB in 5G NR?

A common resource block (CRB) is numbered from a fixed reference called Point A and covers the whole carrier, while a physical resource block (PRB) is numbered from zero inside one bandwidth part. The same 12 subcarriers have one CRB index and, within a given bandwidth part, one PRB index.

Does a wider subcarrier spacing give a higher data rate?

Not by itself. For the same channel bandwidth, doubling the spacing halves the number of subcarriers and doubles the number of symbols per second, so the resource elements per second stay roughly the same. Compare 40 MHz: 106 resource blocks at 30 kHz and 51 at 60 kHz.