4G/LTE - MCS

 

 

 

MCS and Modulation Order

 

You may know that MCS (Modulation Coding Scheme) is related to Modulation Order (Modulation Depth, e.g, QPSK, 16 QAM, 64 QAM, 256 QAM).  This modulation order is defined as a Parameter called Qm in 3GPP and the relationship between MCS value and Qm is defined in a little bit differently for PDSCH and PUSCH in the three tables : Table 7.1.7.1-1, 7.1.7.1-1A and Table 8.6.1-1 in 36.213.

The MCS index in the DCI tells the UE two things at once: the modulation order Qm and the TBS index. The modulation order is the number of bits per modulation symbol. The TBS index, together with the number of RBs, gives the transport block size.

The mapping between Qm and Modulation Method is defined as follows (Following is for downlink).

 

Qm

Modulation Method

2

QPSK

4

16 QAM

6

64 QAM

8

256 QAM

 

NOTE : If Uplink case, the meaning of Qm 6 varies a little depending UE capability. Qm 6 in UL is interpreted as 16 QAM if UE does not support 64QAM and it is interpreted as 64QAM if UE support 64QAM.

Followings are the list of topics that will be described in this page.

Downlink MCS

Following tables show mapping between MCS and Qm for PDSCH (Downlink). As you see, each MCS value is directly mapped to as specific Qm. Table 7.1.7.1-1 is for the UE which does not support 256 QAM and Table 7.1.7.1-1A is for the UE which support 256 QAM. How eNB can figure out whether a UE support 256 QAM or not ? UE is supposed to notify this capability to eNB via UE Capability Information message as shown below. (Regarding the details of DL 256 QAM, refer to LTE Advanced - 256 QAM page)

Decoded RRC message, tester tree format. Field values are from a captured message, not from the specification.

+-nonCriticalExtension
  +-phyLayerParameters-v1170 = Omit
  +-ue-Category-v1170  = 9
  +-nonCriticalExtension = 00001
    +-rf-Parameters-v1180 = Omit
    +-mbms-Parameters-r11 = Omit
    +-fdd-Add-UE-EUTRA-Capabilities-v1180 = Omit
    +-tdd-Add-UE-EUTRA-Capabilities-v1180 = Omit
    +-nonCriticalExtension
      +-ue-Category-v11a0 = 11
      +-measParameters-v11a0 = Omit
      +-nonCriticalExtension
        +-phyLayerParameters-v1250 = Omit
        +-rf-Parameters-v1250
        | +-supportedBandListEUTRA-v1250 = 5
        | | +-SupportedBandEUTRA-v1250
        | | | +-dl-256QAM-r12 = supported
        | | | +-ul-64QAM-r12 = supported
        | | +-SupportedBandEUTRA-v1250
        | | | +-dl-256QAM-r12 = supported
        | | | +-ul-64QAM-r12 = supported
        | | +-SupportedBandEUTRA-v1250
        | | | +-dl-256QAM-r12 = supported
        | | | +-ul-64QAM-r12 = supported
        | | +-SupportedBandEUTRA-v1250
        | | | +-dl-256QAM-r12 = supported
        | | | +-ul-64QAM-r12 = supported
        | | +-SupportedBandEUTRA-v1250
        | |   +-dl-256QAM-r12 = supported
        | |   +-ul-64QAM-r12 = supported

The capture above reports dl-256QAM-r12 = supported for each of the five bands in supportedBandListEUTRA-v1250. The capability is reported per band, so a UE can support 256QAM in one band and not in another.

The two tables below are 36.213 Table 7.1.7.1-1 and Table 7.1.7.1-1A. In Table 7.1.7.1-1, the MCS indices 0 to 9 use QPSK, 10 to 16 use 16QAM and 17 to 28 use 64QAM. Table 7.1.7.1-1A shifts every index towards a higher order. It uses QPSK only up to MCS 4, and it reaches 256QAM from MCS 20 to 27.

 

< 36.213 Table 7.1.7.1-1 >

< 36.213 Table 7.1.7.1-1A >

36.213 Table 7.1.7.1-1, Modulation and TBS index table for PDSCH

36.213 Table 7.1.7.1-1A, Modulation and TBS index table 2 for PDSCH, MCS 0 to 15

36.213 Table 7.1.7.1-1A, Modulation and TBS index table 2 for PDSCH, MCS 16 to 31

 

36.213 Table 7.1.7.1-1 on the left and Table 7.1.7.1-1A on the right. The reserved MCS indices at the bottom carry only a modulation order.

The capability alone does not switch the table. In 36.213 v19.4.0 clause 7.1.7.1, the UE uses Table 7.1.7.1-1A only when the higher layer parameter altCQI-Table-r12 is configured. The PDSCH must also be scheduled by DCI format 1, 1B, 1D, 2, 2A, 2B, 2C or 2D with the CRC scrambled by C-RNTI. So the eNB first reads dl-256QAM-r12, then sets altCQI-Table-r12 in CQI-ReportConfig-v1250. From that point, the CQI report and the MCS both use the 256QAM tables.

The reserved rows have a job too. In Table 7.1.7.1-1, MCS 29, 30 and 31 carry no TBS index. The eNB uses them for a retransmission, where the transport block size is already known from the first transmission. The rows only tell the UE the modulation order to use, QPSK, 16QAM or 64QAM. Table 7.1.7.1-1A uses MCS 28 to 31 the same way, with 256QAM added.

  • Two PDSCH tables in the original page : Table 7.1.7.1-1 up to 64QAM and Table 7.1.7.1-1A up to 256QAM.
  • dl-256QAM-r12 is a per-band capability : reported in SupportedBandEUTRA-v1250.
  • altCQI-Table-r12 selects Table 7.1.7.1-1A : together with a C-RNTI scheduled DCI format 1, 1B, 1D or 2 to 2D.
  • Reserved MCS indices : carry the modulation order for a retransmission.

Uplink MCS

Following is the mapping table for PUSCH (Uplink). If you look at the table carefully, you would notice that the modulation parameter is Q'm (Q prime m), not Qm. It implies that this is some additional rule to convert the Q'm to Qm. This rule is described at the beginning of 36.213 8.6.1.

< 36.213 Table 8.6.1-1 >

36.213 Table 8.6.1-1, Modulation, TBS index and redundancy version table for PUSCH

36.213 Table 8.6.1-1. The modulation order column is Q'm, and MCS 29 to 31 give only the redundancy version.

In Table 8.6.1-1, MCS 0 to 10 give Q'm = 2, MCS 11 to 20 give 4, and MCS 21 to 28 give 6. MCS 29, 30 and 31 are reserved for retransmission, and they select the redundancy version 1, 2 and 3. The uplink table therefore carries the redundancy version, which the downlink table does not.

Simply put, the mapping between Qm and Q'm gets different whether UE support Uplink 64 QAM or not. How eNB can figure out whether a UE support UL 64 QAM or not ? UE is supposed to notify this capability to eNB via UE Capability Information message as shown below. If UE support 64 QAM and eNB enable UL 64 QAM, Q'm = 6 is translated to Qm = 6 (64 QAM), but if UE does not support 64 QAM or eNB does not enable UL 64 QAM, Q'm = 6 is translated to Qm = 4. (Refer to 36.213 8.6.1 for further details).

NOTE : Even though Qm varies depending on the situation as explained above, the Mapping between I_MCS and I_TBS does not change. It means the mapping between I_MCS and Transport block size does not change. As a result, PUSCH Code Rate would change in case of Q'm = 6 depending on whether it is translated to 16 QAM or 64 QAM.

  • Q'm, not Qm : Table 8.6.1-1 gives Q'm, and 36.213 clause 8.6.1 turns it into Qm.
  • MCS 21 to 28 give Q'm = 6 : 64QAM only if the UE supports it and 64QAM is not restricted.
  • MCS 29 to 31 set the redundancy version : for a PUSCH retransmission.

How eNB knows whether a UE support 64 Qam or not ?

Before the eNB schedules MCS 21 or higher, it has to know that the UE can transmit 64QAM. The UE reports this per band in the same part of UE Capability Information that carried dl-256QAM-r12 above.

Decoded RRC message, tester tree format. Field values are from a captured message, not from the specification.

+-nonCriticalExtension
  +-phyLayerParameters-v1170 = Omit
  +-ue-Category-v1170  = 9
  +-nonCriticalExtension = 00001
    +-rf-Parameters-v1180 = Omit
    +-mbms-Parameters-r11 = Omit
    +-fdd-Add-UE-EUTRA-Capabilities-v1180 = Omit
    +-tdd-Add-UE-EUTRA-Capabilities-v1180 = Omit
    +-nonCriticalExtension
      +-ue-Category-v11a0 = 11
      +-measParameters-v11a0 = Omit
      +-nonCriticalExtension
        +-phyLayerParameters-v1250 = Omit
        +-rf-Parameters-v1250
        | +-supportedBandListEUTRA-v1250 = 5
        | | +-SupportedBandEUTRA-v1250
        | | | +-dl-256QAM-r12 = supported
        | | | +-ul-64QAM-r12 = supported
        | | +-SupportedBandEUTRA-v1250
        | | | +-dl-256QAM-r12 = supported
        | | | +-ul-64QAM-r12 = supported
        | | +-SupportedBandEUTRA-v1250
        | | | +-dl-256QAM-r12 = supported
        | | | +-ul-64QAM-r12 = supported
        | | +-SupportedBandEUTRA-v1250
        | | | +-dl-256QAM-r12 = supported
        | | | +-ul-64QAM-r12 = supported
        | | +-SupportedBandEUTRA-v1250
        | |   +-dl-256QAM-r12 = supported
        | |   +-ul-64QAM-r12 = supported

ul-64QAM-r12 is the field highlighted in the capture above. The listing below is its definition in the current 36.331. Both fields are ENUMERATED {supported} and OPTIONAL, so a band that does not support the feature simply leaves the field out.

Following is based on 36.331 v19.3.0 (Release 19)

SupportedBandEUTRA-v1250 ::=        SEQUENCE {
    dl-256QAM-r12                       ENUMERATED {supported}      OPTIONAL,
    ul-64QAM-r12                        ENUMERATED {supported}      OPTIONAL
}

The UE category also matters. 36.331 v19.3.0 includes ul-64QAM-r12 only when ue-CategoryUL indicates an UL category that supports 64QAM. If the field is present for one band, it must be present for all bands, including downlink-only bands.

  • ul-64QAM-r12 in SupportedBandEUTRA-v1250 : one entry per band in supportedBandListEUTRA-v1250.
  • OPTIONAL and ENUMERATED {supported} : an absent field means the band does not support it.

How UE figure out whether it has to use 64QAM or not ?

Knowing the UE capability is only half of the answer. The network can still restrict the UE to QPSK and 16QAM, and 36.213 clause 8.6.1 states what the UE does in each case.

This answer to this question is described in 36.213 8.6.1 as follows.

For 0 <= MCS_I <= 28 , the modulation order ( Qm ) is determined as follows:

    - If the UE is capable of supporting 64QAM in PUSCH and has not been configured by higher layers to transmit only QPSK and 16QAM, the modulation order is given by Qm in Table 8.6.1-1. // this means UE should use 64QAM if MCS >= 21

    - If the UE is not capable of supporting 64QAM in PUSCH or has been configured by higher layers to transmit only QPSK and 16QAM, Q'm is first read from Table 8.6.1-1. The modulation order is set to Qm = min(4, Q'm ) // This means UE does not use 64 QAM

Now the questions is what does it mean by 'Configured by higher layers' ?  Followings are the IEs that seems to be related to the higher layer configuration.

Decoded RRC message, tester tree format. Field values are from a captured message, not from the specification.

+-systemInformation-r8 ::= SEQUENCE [0]
  +-sib-TypeAndInfo ::= SEQUENCE OF SIZE(1..maxSIB[32]) [1]
  | +- ::= CHOICE [sib2]
  |   +-sib2 ::= SEQUENCE [00]
  |     +-ac-BarringInfo ::= SEQUENCE OPTIONAL:Omit
  |     +-radioResourceConfigCommon ::= SEQUENCE
  |     | +-rach-ConfigCommon ::= SEQUENCE
  |     | +-bcch-Config ::= SEQUENCE
  |     | +-pcch-Config ::= SEQUENCE
  |     | +-prach-Config ::= SEQUENCE
  |     | +-pdsch-ConfigCommon ::= SEQUENCE
  |     | +-pusch-ConfigCommon ::= SEQUENCE
  |     | | +-pusch-ConfigBasic ::= SEQUENCE
  |     | | | +-n-SB ::= INTEGER (1..4) [1]
  |     | | | +-hoppingMode ::= ENUMERATED [interSubFrame]
  |     | | | +-pusch-HoppingOffset ::= INTEGER (0..98) [16]
  |     | | | +-enable64QAM ::= BOOLEAN [True]
  |     | | +-ul-ReferenceSignalsPUSCH ::= SEQUENCE
  |     | +-pucch-ConfigCommon ::= SEQUENCE
  |     | +-soundingRS-UL-ConfigCommon ::= CHOICE [release]
  |     | +-uplinkPowerControlCommon ::= SEQUENCE
  |     | +-ul-CyclicPrefixLength ::= ENUMERATED [len1]
  |     | +-EXTENSION ::= SEQUENCE [001]
  |     |   +-VERSION-BRACKETS1 ::= SEQUENCE OPTIONAL:Omit
  |     |   +-VERSION-BRACKETS2 ::= SEQUENCE OPTIONAL:Omit
  |     |   +-VERSION-BRACKETS3 ::= SEQUENCE [1] OPTIONAL:Exist
  |     |     +-pusch-ConfigCommon-v1270 ::= SEQUENCE OPTIONAL:Exist
  |     |       +-enable64QAM-v1270 ::= ENUMERATED [true]
  |     +-ue-TimersAndConstants ::= SEQUENCE
  |     +-freqInfo ::= SEQUENCE [00]
  |     +-mbsfn-SubframeConfigList ::= SEQUENCE OF OPTIONAL:Omit
  |     +-timeAlignmentTimerCommon ::= ENUMERATED [infinity]
  |     +-EXTENSION ::= SEQUENCE [0000]
  |       +-lateNonCriticalExtension ::= OCTET STRING OPTIONAL:Omit
  |       +-VERSION-BRACKETS1 ::= SEQUENCE OPTIONAL:Omit
  |       +-VERSION-BRACKETS2 ::= SEQUENCE OPTIONAL:Omit
  |       +-VERSION-BRACKETS3 ::= SEQUENCE OPTIONAL:Omit
  +-nonCriticalExtension ::= SEQUENCE OPTIONAL:Omit

The higher layer configuration is enable64QAM in pusch-ConfigBasic, which SIB2 broadcasts in pusch-ConfigCommon. The capture above sets it to True, and it also carries pusch-ConfigCommon-v1270 with enable64QAM-v1270 = true. The listing below shows both IEs in 36.331 v19.3.0.

Following is based on 36.331 v19.3.0 (Release 19)

PUSCH-ConfigCommon ::=              SEQUENCE {
    pusch-ConfigBasic                   SEQUENCE {
        n-SB                                INTEGER (1..4),
        hoppingMode                         ENUMERATED {interSubFrame, intraAndInterSubFrame},
        pusch-HoppingOffset                 INTEGER (0..98),
        enable64QAM                         BOOLEAN
    },
    ul-ReferenceSignalsPUSCH            UL-ReferenceSignalsPUSCH
}

PUSCH-ConfigCommon-v1270 ::=        SEQUENCE {
    enable64QAM-v1270                       ENUMERATED {true}
}

The two fields serve different UEs. In 36.331, enable64QAM = TRUE allows 64QAM for UE categories 5 and 8. It also allows 64QAM for the UL categories that support 64QAM and can fall back to category 5 or 8. enable64QAM-v1270 allows 64QAM for the UL categories that support 64QAM but cannot fall back to category 5 or 8. E-UTRAN sets enable64QAM-v1270 only when enable64QAM is TRUE.

The clause 8.6.1 text quoted above is the Release 8 wording. In 36.213 v19.4.0, the first condition also requires that the UE does not support 256QAM in PUSCH. A UE that supports 256QAM follows Table 8.6.1-3 when Enable256QAM is configured, and it follows Table 8.6.1-1 otherwise. The min(4, Q'm) rule for a UE without 64QAM has not changed.

  • enable64QAM in SIB2 : set in pusch-ConfigBasic of pusch-ConfigCommon.
  • enable64QAM-v1270 : for UL categories that cannot fall back to category 5 or 8, and only with enable64QAM = TRUE.
  • Without 64QAM, Qm = min(4, Q'm) : MCS 21 to 28 are then sent in 16QAM with the same TBS.

MCS Tables in the Current Specification

How many MCS tables does LTE have now? The page above covers the three tables of Release 12. Later releases added 1024QAM and a 6-bit MCS table for the PDSCH, and 256QAM for the PUSCH. 36.213 v19.4.0 lists these tables for a UE that is not a BL/CE UE.

 

Table

Channel

Highest modulation

Used when

7.1.7.1-1

PDSCH

64QAM, Qm = 6

default

7.1.7.1-1A

PDSCH

256QAM, Qm = 8

altCQI-Table-r12 is configured

7.1.7.1-1B

PDSCH

1024QAM, Qm = 10

altCQI-Table-1024QAM-r15 is configured

7.1.7.1-1C

PDSCH

1024QAM, Qm = 10

altMCS-Table is configured, 6-bit MCS 0 to 63

8.6.1-1

PUSCH

64QAM, Q'm = 6

default

8.6.1-3

PUSCH

256QAM, Qm = 8

Enable256QAM is configured

 

In clause 7.1.7.1, altMCS-Table has the highest priority, then altCQI-Table-1024QAM-r15, then altCQI-Table-r12. Table 7.1.7.1-1 applies when none of them is configured. The v19.4.0 PDSCH tables also carry a second modulation order column. It applies when the PDSCH is transmitted only in the second slot of a subframe.

Table 8.6.1-3 uses the modulation order Qm directly, with QPSK at MCS 0 to 5 and 256QAM from MCS 23 to 28. Enable256QAM-r14 sits in PUSCH-ConfigDedicated-v1430, and its value is set per DCI format 0 and 4, as the listing below shows. The UE reports the capability as ul-256QAM-r14.

Following is based on 36.331 v19.3.0 (Release 19)

Enable256QAM-r14 ::=                    CHOICE {
        release                             NULL,
        setup                               CHOICE {
            tpc-SubframeSet-Configured-r14      SEQUENCE {
                    subframeSet1-DCI-Format0-r14                                        BOOLEAN,
                    subframeSet1-DCI-Format4-r14                                        BOOLEAN,
                    subframeSet2-DCI-Format0-r14                                        BOOLEAN,
                    subframeSet2-DCI-Format4-r14                                        BOOLEAN
            },
            tpc-SubframeSet-NotConfigured-r14   SEQUENCE {
                    dci-Format0-r14     BOOLEAN,
                    dci-Format4-r14     BOOLEAN
            }
        }
}
  • Four PDSCH tables and two PUSCH tables : for a UE that is not a BL/CE UE, in 36.213 v19.4.0.
  • altMCS-Table, then 1024QAM, then 256QAM : the order in which clause 7.1.7.1 checks the higher layer parameters.
  • Enable256QAM-r14 selects Table 8.6.1-3 : per DCI format 0 and 4.

Reference

[1] 3GPP TS 36.213 v19.4.0 - clause 7.1.7.1 and clause 8.6.1, Modulation order and redundancy version determination

[2] 3GPP TS 36.331 v19.3.0 - PUSCH-ConfigCommon, SupportedBandEUTRA-v1250 and Enable256QAM-r14 with their field descriptions