Modulation & MCS in 5G NR
QPSK through 256QAM, MCS tables, and how modulation order is chosen.
Modulation decides how many bits ride on each transmitted symbol, and the MCS index is the single knob the gNB turns to trade throughput against robustness. Pick a dense constellation and a high code rate when the channel is clean; drop to something rugged when it isn't. This is the machinery behind every "why is my 5G speed changing" question, grounded in TS 38.211 (the physical layer) and TS 38.214 (the tables and procedures that turn one index into a transport block size).
Introduction
Modulation and the Modulation and Coding Scheme (MCS) are how NR matches the data rate of a transmission to the quality of the channel carrying it. Modulation, defined in TS 38.211 §5.1, maps coded bits onto complex I/Q symbols; the MCS index, defined through the tables in TS 38.214, is a compact 5-bit code that names both a modulation order and a target code rate at once. Together they are the output of link adaptation and the input to the transport-block-size calculation.
You meet them on every scheduled transmission. The gNB reads a UE's CQI feedback and HARQ history, picks an MCS index, and signals it in the scheduling DCI on PDCCH; the UE looks it up to recover the modulation and code rate it must use to demodulate and decode the PDSCH (or to transmit its PUSCH). The same index, retuned per slot, is what makes a 5G link speed up in good coverage and slow down at the cell edge.
It matters because this is the direct lever on user throughput and reliability. Choose too aggressive an MCS and the block fails, triggering HARQ retransmissions that lower effective rate; choose too conservative and you leave capacity on the table. Understanding how one index resolves into (modulation order, code rate) and then into a transport block size is the difference between reading a throughput number and knowing why it is what it is.
On this page
- Why modulation and MCS are needed
- What modulation actually does
- The modulation ladder
- Constellations and Gray mapping
- The MCS index — one number, two meanings
- The 38.214 MCS tables in detail
- From (Qm, R) to transport block size
- The CQI cross-link and link adaptation
- Reserved indices and HARQ retransmissions
- Summary
Why modulation and MCS are needed
In plain words: think of a delivery van on roads of varying quality. On a smooth motorway you load it to the roof and drive fast; on a rutted farm track you carry less and go slow, or nothing arrives intact. Modulation is how much you load onto each symbol; the MCS index is the driver's single decision that sets both the load and the safety margin to match the road the channel happens to be today.
The concrete problem is that one fixed modulation cannot serve a whole cell. A UE at the centre with 25 dB SINR could carry eight bits per symbol; a UE at the edge with 2 dB would drop every packet at that setting. Offering a graded ladder of modulation orders and code rates, and a compact index to select among them per transmission, lets the scheduler track each UE's instantaneous channel — extracting throughput where the SINR allows and staying decodable where it does not.
A ladder of modulation schemes (bits per symbol) paired with target code rates, addressed by a single 5-bit MCS index that resolves via a TS 38.214 table into a (Qm, R) pair.
Channel quality varies by orders of magnitude across a cell and over time. A per-transmission index lets link adaptation match the rate to the channel, maximising throughput at a controlled block-error rate.
The UE reports CQI; the gNB maps it to a starting MCS, corrects with an outer loop driven by HARQ ACK/NACK, and signals the chosen index in DCI. The UE looks up (Qm, R) and, with the allocation, derives the transport block size.
What modulation actually does
A modulation scheme maps a group of coded bits onto one complex symbol — a point in the I/Q plane. The number of bits per symbol is the modulation order Qm. Higher Qm packs more bits into each symbol, so you send more data in the same time-frequency resource — but the constellation points sit closer together, so the same amount of noise flips them into each other more easily. That is the whole tension of link adaptation in one sentence: bits-per-symbol versus distance-between-symbols.
NR downlink uses QPSK, 16QAM, 64QAM and 256QAM. The uplink adds π/2-BPSK when the waveform is DFT-s-OFDM (transform precoding enabled), for extreme coverage and low peak-to-average power. Later releases also define 1024QAM for the downlink. Constellation definitions live in TS 38.211 §5.1.
One fixed modulation can't serve a cell edge and a cell centre at once. Offering a ladder of schemes lets the scheduler match each UE's instantaneous channel — squeezing throughput where the SINR allows, staying decodable where it doesn't.
The gNB reads the UE's CQI (from CSI feedback), plus HARQ ACK/NACK history, and chooses an MCS index. That 5-bit index resolves — via a table in TS 38.214 — into a concrete (Qm, target code rate) pair for the transport block.
Core idea: modulation order Qm = bits per symbol. π/2-BPSK=1, QPSK=2, 16QAM=4, 64QAM=6, 256QAM=8, 1024QAM=10. Each step adds one bit per axis (one bit to I, one bit to Q); the naming (16/64/256/1024) is simply 2Qm points in the plane.
It helps to separate two ideas that beginners often merge. Modulation order Qm is a physical-layer waveform property — how the constellation is drawn and how many bits map to one symbol. The MCS index is a scheduling concept — a compact code that names both a modulation order and a target code rate at once, so the gNB can convey the entire per-transmission rate decision in five bits of DCI. The rest of this page walks from the constellation up to that index and back down into the transport block size it produces.
The modulation ladder — Qm, bits and where each lives
Each rung buys you more bits per symbol at the cost of needing a cleaner channel. The SINR figures below are typical operating points, not spec thresholds — the actual switch points come from the CQI tables and the gNB's link-adaptation policy. Read the table top-to-bottom as "worse channel to better channel."
| Modulation | Qm | Bits/symbol | Constellation points (2Qm) | Typical SINR | Where used |
|---|---|---|---|---|---|
π/2-BPSK | 1 | 1 | 2 | < 0 dB | UL only, DFT-s-OFDM, deep coverage |
QPSK | 2 | 2 | 4 | ~ 0–6 dB | Cell edge, control, robust DL/UL |
16QAM | 4 | 4 | 16 | ~ 8–14 dB | Mid-cell DL/UL |
64QAM | 6 | 6 | 64 | ~ 14–20 dB | Good conditions, near cell centre |
256QAM | 8 | 8 | 256 | > 20 dB | Excellent SINR, small cells / high-end UEs |
1024QAM | 10 | 10 | 1024 | > 27 dB | DL, Rel-17+, near-ideal fixed / short link |
The uplink π/2-BPSK deserves a note. Ordinary BPSK places its two points on opposite ends of one axis; the π/2 variant rotates the constellation by 90 degrees on every alternate symbol. That rotation keeps the phase transitions from passing through the origin, which lowers the peak-to-average power ratio (PAPR) of the DFT-s-OFDM waveform. Lower PAPR lets the UE's power amplifier run closer to saturation without distortion, buying a few precious dB of link budget exactly where it is needed — a power-limited UE screaming from the cell edge.
Common trap: 256QAM is not "always better." Its tight constellation needs a very clean channel and a UE that signals the capability; forcing it at low SINR just raises the block error rate and triggers HARQ retransmissions, which lowers effective throughput. Higher order only helps when the channel can carry it — the same warning applies with even more force to 1024QAM.
LTE ↔ NR: LTE started with QPSK/16QAM/64QAM and added 256QAM only in Rel-12. NR treats 256QAM as a first-class table from the start, adds π/2-BPSK for the transform-precoded uplink (a rung below QPSK that LTE never had), and later adds 1024QAM in the downlink. The link-adaptation idea is identical; NR simply widens the ladder at both ends.
Constellations and Gray mapping
A constellation is just the set of legal I/Q points. What matters for performance is not only how many points there are, but how bits are assigned to them. NR uses Gray mapping: adjacent constellation points differ by exactly one bit. Because noise most often nudges a received symbol into its nearest neighbour, a single-symbol error then corrupts only one bit rather than several — which is exactly what the channel decoder is best equipped to fix.
The mapping itself is defined bit by bit in TS 38.211 §5.1. For a square QAM constellation the coded bits split into two halves: the first half selects the in-phase (I) amplitude level and the second half selects the quadrature (Q) level, each half Gray-coded independently. That separability is why the picture is always a clean square grid and why the decoder can compute soft bits (log-likelihood ratios) per axis rather than searching all 2Qm points. The constellation is also power-normalised — each order is scaled by a fixed factor so that the average symbol energy is the same regardless of Qm, which is precisely why higher orders squeeze the points closer together instead of spreading out.
Spec detail: the normalisation factors (for example 1/√2 for QPSK, 1/√10 for 16QAM, 1/√42 for 64QAM, 1/√170 for 256QAM) come straight from TS 38.211 §5.1. They keep average power fixed across modulation orders, so a fair SINR comparison between orders is exactly the comparison of minimum-distance between neighbours.
The MCS index — one number, two meanings
The scheduler doesn't signal modulation and code rate separately. It signals a single 5-bit MCS index (values 0–31) in the DCI, and the UE looks it up in an MCS table to recover both the modulation order Qm and the target code rate R (listed in the table as R × 1024). That pair, together with the number of allocated resource elements and layers, determines the transport block size. One index, two meanings: modulation and coding, bundled.
Which table the UE consults is not fixed — it is selected by a combination of RRC configuration and the RNTI that scrambled the DCI. The precedence, from TS 38.214 §5.1.3.1, works like this:
- If
PDSCH-Configcarriesmcs-Tableset toqam256, and the DCI is a UE-specific format (for example1_1) scrambled byC-RNTI, the UE uses the 256QAM table. - If an
MCS-C-RNTIis configured and scrambles the DCI, the UE uses the low-spectral-efficiency (qam64LowSE) table — this is the reliability/URLLC path. - If
mcs-Tableis set toqam64LowSEfor a search space, that low-SE table applies there. - Otherwise the UE falls back to the baseline 64QAM table.
The uplink follows the same idea with its own IE, mcs-Table (and mcs-TableTransformPrecoder) inside PUSCH-Config, so a transform-precoded uplink can point at the table that contains π/2-BPSK. The takeaway is that the same 5-bit index means different things depending on which table is active — the index alone is meaningless without knowing the table selection rule.
Index vs table: an MCS index is a row number. The table is chosen by mcs-Table RRC config plus the scrambling RNTI (C-RNTI vs MCS-C-RNTI). Same row, different table, different (Qm, R) — so both must be known to decode a grant.
The 38.214 MCS tables in detail
TS 38.214 §5.1.3.1 defines several tables for PDSCH, each an ordered ladder from rugged QPSK up to a maximum modulation order. The network tells the UE which one to use via RRC (mcs-Table) and/or the DCI/RNTI, as above.
| Table (TS 38.214 §5.1.3.1) | Top modulation | Indices 0–28 carry | Purpose |
|---|---|---|---|
| Table 5.1.3.1-1 | 64QAM | (Qm, R) pairs | Baseline table (Qm up to 6) |
| Table 5.1.3.1-2 | 256QAM | (Qm, R) pairs | Enables Qm=8 for capable UEs in good SINR |
| Table 5.1.3.1-3 | 64QAM low-SE | (Qm, R) pairs, lower rates | Low spectral-efficiency table for coverage / high reliability (URLLC) |
Within any of these, low indices map to QPSK with a low code rate (maximum robustness), the middle to 16QAM and 64QAM, and the top to the highest modulation with code rates approaching ~0.93. Here is a representative excerpt of the baseline 64QAM table (Table 5.1.3.1-1). Spectral efficiency in the last column is simply Qm × R, and the "R × 1024" column is how the standard actually prints the target code rate.
MCS index (IMCS) | Modulation | Qm | Target code rate R × 1024 | R (approx) | Spectral efficiency (bits/RE) |
|---|---|---|---|---|---|
| 0 | QPSK | 2 | 120 | 0.117 | 0.2344 |
| 4 | QPSK | 2 | 308 | 0.301 | 0.6016 |
| 9 | QPSK | 2 | 616 | 0.602 | 1.2031 |
| 10 | 16QAM | 4 | 466 | 0.455 | 1.8203 |
| 16 | 16QAM | 4 | 658 | 0.643 | 2.5703 |
| 17 | 64QAM | 6 | 438 | 0.428 | 2.5664 |
| 22 | 64QAM | 6 | 666 | 0.650 | 3.9023 |
| 27 | 64QAM | 6 | 948 | 0.926 | 5.5547 |
| 28 | QPSK | 2 | reserved | — | retransmission only |
| 29 | 16QAM | 4 | reserved | — | retransmission only |
| 30 | 64QAM | 6 | reserved | — | retransmission only |
| 31 | 64QAM | 6 | reserved | — | retransmission only |
Two structural features jump out. First, the table is monotonic in spectral efficiency across the data-carrying rows — walk up the index and bits/RE rises, which is exactly what makes it a clean adaptation ladder. Second, notice the overlap around indices 16–17: the network can deliver almost the same spectral efficiency either as high-rate 16QAM or low-rate 64QAM. That is deliberate — the lower-order option at a similar efficiency is more resilient to phase noise and estimation error, so the scheduler has a choice of "same speed, different robustness."
Spec detail: the analogous uplink tables for PUSCH are in TS 38.214 §6.1.4.1, with a separate variant when transform precoding (DFT-s-OFDM) is configured — that variant is where π/2-BPSK appears at the lowest indices, giving the uplink a rung below QPSK for coverage.
From (Qm, R) to transport block size
The MCS index is only half the throughput story; the resource allocation is the other half. TS 38.214 §5.1.3.2 turns the (Qm, R) pair plus the grant size into a concrete transport block size (TBS) in bits. The intuition is a two-step estimate then a quantisation.
Reading the pieces: NRE is how many usable resource elements sit in one RB after you subtract DMRS and configured overhead; multiply by the number of allocated PRBs (nPRB), by the code rate R, by the bits-per-symbol Qm, and by the number of layers ν, and you get a raw bit count Ninfo. The standard then quantises Ninfo to a valid TBS — snapping to a table of allowed sizes for small blocks, or to a byte- and LDPC-friendly value for large ones — so the transport block aligns with the channel-coding chain. This is why two different MCS indices on the same allocation can yield different transport block sizes, and why the same index on a bigger allocation scales the block up.
Two fixed pieces are worth pinning down. NscRB = 12 subcarriers always — a resource block is 12 subcarriers wide by definition. The overhead term Noverhead is not free-form: it takes one of the RRC-configured values 0, 6, 12 or 18 from xOverhead in PDSCH-ServingCellConfig (defaulting to 0 when absent), and the per-RB count NRE the standard actually uses is additionally capped at 156. That cap keeps the TBS calculation stable regardless of how many symbols the allocation spans.
Where each factor comes from: Qm and R come from the MCS table; nPRB comes from the frequency-domain resource assignment in the DCI; Nsymb, DMRS and overhead come from the PDSCH mapping and xOverhead config; layers ν come from the rank/precoding. The MCS index sets the efficiency, the allocation sets the quantity.
The CQI cross-link and link adaptation
Modulation and MCS are not chosen in a vacuum — they are the output of link adaptation. The chain is: the UE measures CSI-RS, and reports a CQI that recommends the highest efficiency keeping block error rate at or below the target (typically 10%, or 0.001% for the URLLC CQI table). The gNB maps that CQI to a starting MCS, then refines with an outer-loop offset driven by real HARQ ACK/NACK feedback (too many NACKs → back off; a run of ACKs → push higher). The final MCS index goes out in the scheduling DCI.
The CQI tables in TS 38.214 §5.2.2.1 mirror the MCS tables: there is a 64QAM CQI table, a 256QAM CQI table, and a URLLC (low-SE) CQI table, and the UE is told which to use so its report and the eventual grant speak the same language. Each CQI index itself already names a modulation and a code rate — so CQI-to-MCS is really a translation between two ladders indexed by spectral efficiency. The CQI field is 4 bits (indices 0–15, where 0 means "out of range / no transmission").
CQI index | Modulation (64QAM CQI table) | Code rate × 1024 | Efficiency (bits/RE) | Maps toward MCS (baseline) |
|---|---|---|---|---|
| 1 | QPSK | 78 | 0.1523 | ~ IMCS 0 |
| 4 | QPSK | 449 | 0.8770 | ~ IMCS 6 |
| 7 | 16QAM | 438 | 1.7100 | ~ IMCS 10 |
| 10 | 64QAM | 466 | 2.7300 | ~ IMCS 18 |
| 13 | 64QAM | 772 | 4.5234 | ~ IMCS 24 |
| 15 | 64QAM | 948 | 5.5547 | ~ IMCS 27 |
The mapping shown is conceptual, not normative — each vendor's link-adaptation logic sets the exact CQI→MCS correspondence and the outer-loop bias — but the principle is fixed: both ladders are ordered by spectral efficiency, so translating between them is a matter of matching bits/RE and then applying the HARQ-driven correction.
Two loops: the inner loop maps reported CQI to a starting MCS; the outer loop corrects for CQI reporting delay and error using actual HARQ outcomes, so the effective BLER stays near the target. The CQI is a recommendation; the MCS the gNB transmits is the decision.
Reserved indices and HARQ retransmissions
Look again at indices 28–31 in the excerpt: their code-rate cell reads "reserved." These are not throughput rungs at all. When the gNB schedules a HARQ retransmission, the transport block size must not change — the receiver has to combine the retransmission with the soft bits it already stored from the first attempt (chase combining or incremental redundancy). But the earlier code rate was what set that TBS, and recomputing it from a fresh (Qm, R) could land on a different size.
The reserved indices solve this cleanly. An MCS index of 28–31 (in the 64QAM/low-SE tables; 28–31 with Qm from 2/4/6/8 in the 256QAM table) signals only a modulation order — no target code rate. The UE keeps the TBS from the original transmission of that HARQ process and simply re-decodes with the indicated modulation. The gNB can thus retune the modulation for the retransmission (say drop from 64QAM to QPSK because the channel worsened) while guaranteeing the transport block size is byte-for-byte identical to the first send.
Spec detail: TS 38.214 §5.1.3.2 states that for IMCS in the reserved range, the modulation order is read from the table while the transport block size is determined from the most recent transmission for the same transport block using a non-reserved MCS. The New Data Indicator (NDI) in the DCI is what tells the UE whether this is a fresh block or a retransmission of the current one.
So the five bits of MCS carry two regimes in one field: indices 0–27 (or 0–28) are (modulation, code rate) pairs that define a brand-new transport block, and the top handful are modulation-only overrides that preserve an in-flight block for HARQ combining. It is a small piece of encoding economy that keeps retransmissions soft-combinable without a separate signalling field.
⚠ Common pitfalls / gotchas
- Decoding an MCS index without knowing the table. The same 5-bit value means different (
Qm, R) in the 64QAM, 256QAM and low-SE tables. You must resolvemcs-Tableplus the scrambling RNTI first. - Treating indices 28–31 as high-rate rungs. They are modulation-only, reserved for HARQ retransmissions; the TBS is inherited from the original send. Reading a code rate from them is a category error.
- Chasing peak MCS at the cell edge. Forcing 256QAM or 1024QAM below its SINR budget raises BLER, forces retransmissions and lowers net throughput — the scheduler's job is the highest MCS that keeps BLER near target, not the highest MCS.
- Forgetting the layer factor in TBS. Ninfo scales with the number of layers ν; comparing throughput across ranks without it undercounts a multi-layer transmission badly.
- Ignoring xOverhead and the 156-RE cap. Assuming all 12×Nsymb REs carry data overstates TBS; the calculation subtracts DMRS and
xOverheadand caps NRE at 156 per RB.
Q. What are the modulation orders Qm for π/2-BPSK, QPSK, 16QAM, 64QAM, 256QAM and 1024QAM?
A. 1, 2, 4, 6, 8 and 10 bits per symbol respectively — the constellation has 2Qm points. π/2-BPSK is uplink DFT-s-OFDM only; 1024QAM is a downlink Rel-17+ addition for near-ideal links.
Q. What does an MCS index actually convey, and which table is used?
A. A single 5-bit index that a TS 38.214 table maps to a (modulation order Qm, target code rate R) pair. Which table — baseline 64QAM (5.1.3.1-1), 256QAM (-2) or low-SE (-3) — is chosen by the mcs-Table RRC field and the scrambling RNTI (C-RNTI vs MCS-C-RNTI).
Q. How do Qm and R feed the transport block size?
A. TBS = quantise(NRE × nPRB × R × Qm × layers). The MCS table supplies Qm and R (the efficiency); the DCI resource assignment supplies the PRB count and layers (the quantity). See TS 38.214 §5.1.3.2.
Q. Why is Gray mapping used on the constellation?
A. Adjacent points differ by one bit, so a symbol pushed by noise into its nearest neighbour corrupts only a single bit — minimising bit errors and giving the channel decoder the easiest possible job.
Q. What do MCS indices 28–31 mean?
A. They are reserved: they signal a modulation order only, with no code rate, for HARQ retransmissions. The UE reuses the transport block size from the original transmission of that HARQ process so the soft bits can be combined; the NDI flags it as a retransmission.
Q. Why offer separate 64QAM, 256QAM and low-SE tables?
A. The 256QAM table unlocks Qm=8 for capable UEs in strong SINR; the low-spectral-efficiency table packs finer, more robust low-rate entries for coverage-limited or high-reliability (URLLC) traffic. The network selects the table via mcs-Table / RNTI.
Summary
Modulation order Qm is bits per symbol — the ladder runs π/2-BPSK (UL only), QPSK, 16QAM, 64QAM, 256QAM and 1024QAM, each with 2Qm Gray-mapped, power-normalised constellation points. The MCS index is the scheduling shorthand: a single 5-bit code that a TS 38.214 table resolves into a (Qm, target code rate R) pair, where the table itself is chosen by mcs-Table RRC config and the scrambling RNTI. Neither the index nor the modulation means anything without the other half of the pair.
From there, (Qm, R) plus the allocation (PRBs, symbols, DMRS/overhead, layers) quantises into the transport block size — efficiency times quantity. The whole selection is link adaptation: the UE's CQI sets the starting rung (inner loop), HARQ ACK/NACK trims it to hold BLER at target (outer loop), and the reserved indices 28–31 signal modulation-only overrides that preserve an in-flight TBS for HARQ combining. Chasing peak modulation beyond the channel's SINR budget backfires — the right MCS is the highest one that still decodes.
Where this fits
Modulation and MCS are the lever; the feedback that positions it and the throughput math it drives sit on either side.