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 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)

    +-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

 

< 36.213 Table 7.1.7.1-1 >

< 36.213 Table 7.1.7.1-1A >

 

 

< 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 >

 

 

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 and 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.

 

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

    +-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

 

 

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

 

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.

     

    +-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