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 >

The second column is headed Q'm, not Qm. The table is the same for every UE, and what a UE is allowed to do with the value it reads there is decided somewhere else entirely.
The column is Q prime m : the modulation order actually used is derived from it rather than read straight off.MCS index 0 to 10 gives Q'm of 2 : QPSK, with the TBS index running 0 to 10.MCS index 11 to 20 gives Q'm of 4 : 16QAM, with the TBS index running 10 to 19.MCS index 21 to 28 gives Q'm of 6 : 64QAM, with the TBS index running 19 to 26.MCS index 29 to 31 is reserved : those three rows carry a redundancy version of 1, 2 or 3 and no transport block size.Two boundaries repeat a TBS index : TBS index 10 appears at MCS 10 and 11, and TBS index 19 at MCS 20 and 21.
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 ?
- How UE figure out whether it has to use 64QAM or not ?
- How UE figure out whether it has to use 64QAM or not for SCC in UL CA ?
- Reference :
How eNB knows whether a UE support 64 QAM or not ?
: eNB can figure it out from UE Capability Information as shown below One UE's answer for five bands follows, and the field to read in each entry is ul-64QAM-r12, which the capture marks in red.
UE Capability Information, the rf-Parameters-v1250 branch, decoded as a tree,
+-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 shape of that capture is worth reading as well as the values. The list supportedBandListEUTRA-v1250 holds five entries, one per band, so the answer is not a single yes for the UE. A handset can offer uplink 64QAM on one band and withhold it on another, and the network has to look at the entry for the band it wants.
36.331 v19.3.0 still defines the structure exactly this way. SupportedBandEUTRA-v1250 carries ul-64QAM-r12 beside dl-256QAM-r12, and both are ENUMERATED with the single value supported and both are optional. The enumeration has no value meaning unsupported, so a UE declines by omitting the field.
The capability is per band : the capture shows five SupportedBandEUTRA-v1250 entries, each with its own answer.Uplink and downlink sit in one structure : ul-64QAM-r12 sits beside dl-256QAM-r12 in every entry.Absence is the negative : the enumeration has one value, so omission is the only way to say no.The structure has not changed : 36.331 v19.3.0 defines SupportedBandEUTRA-v1250 as the capture shows it.
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. The clause is short but conditional, and it turns on a phrase the page has not defined yet, which is what configured by higher layers actually means.
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.
System Information carrying SIB2, decoded as a tree,
+-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 two conditions quoted above are the Release 12 shape of the clause, and 36.213 has grown since. The first now also requires the UE not to support 256QAM in PUSCH, because a separate branch covers uplink 256QAM through the higher layer parameter Enable256QAM and Table 8.6.1-3. The min(4, Q'm) fallback quoted here is unchanged.
The capture answers the question directly. Both red lines sit inside the PUSCH common configuration that SIB2 broadcasts, and 36.331 puts enable64QAM in PUSCH-ConfigCommon and enable64QAM-v1270 in PUSCH-ConfigCommon-v1270. Configured by higher layers therefore means broadcast to the whole cell, not signalled to one UE.
The two fields split the UE population rather than repeating each other. 36.331 says enable64QAM without a suffix allows 64QAM for UE categories 5 and 8 and for uplink categories that support uplink 64QAM and can fall back to category 5 or 8. enable64QAM-v1270 covers the uplink categories that support it but cannot fall back. The same description adds that E-UTRAN configures the v1270 field only when the suffix-less one is TRUE, which is why the capture shows both.
The fallback in the clause is arithmetic rather than a flag. Two cases take the fallback: the UE cannot support 64QAM, or it has been configured to transmit only QPSK and 16QAM. 36.213 clause 8.6.1 then reads Q'm from Table 8.6.1-1 and sets the modulation order to min(4, Q'm). A high MCS index therefore still selects its transport block size, and only the modulation drops back to 16QAM.
One more condition overrides both. The clause sets the modulation order to 2 when the higher layer parameter ttiBundling is TRUE, so a bundled transmission is QPSK whatever the capability and whatever the cell has enabled.
Configured by higher layers means SIB2 here : enable64QAM lives in PUSCH-ConfigCommon, which the cell broadcasts.Two fields cover two groups of UE : the suffix-less one for categories that can fall back to 5 or 8, the v1270 one for those that cannot.The second depends on the first : 36.331 says E-UTRAN configures enable64QAM-v1270 only when enable64QAM is TRUE.The fallback is min of 4 and Q prime m : the transport block size still follows the MCS index, and only the modulation drops.ttiBundling forces QPSK : the clause sets the modulation order to 2 whenever it is TRUE.
How UE figure out whether it has to use 64QAM or not for SCC in UL CA ?
RRC Connection Reconfiguration adding a secondary cell, decoded as a tree,
rrcConnectionReconfiguration
rrc-TransactionIdentifier: 0
criticalExtensions: c1 (0)
.....
nonCriticalExtension
nonCriticalExtension
nonCriticalExtension
sCellToAddModList-r10: 1 item
Item 0
SCellToAddMod-r10
sCellIndex-r10: 1
cellIdentification-r10
physCellId-r10: 1
dl-CarrierFreq-r10: 3048
radioResourceConfigCommonSCell-r10
nonUL-Configuration-r10
dl-Bandwidth-r10: n100 (5)
antennaInfoCommon-r10
antennaPortsCount: an2 (1)
phich-Config-r10
phich-Duration: normal (0)
phich-Resource: oneSixth (0)
pdsch-ConfigCommon-r10
referenceSignalPower: -30dBm
p-b: 1
ul-Configuration-r10
ul-FreqInfo-r10
ul-CarrierFreq-r10: 21048
ul-Bandwidth-r10: n100 (5)
additionalSpectrumEmissionSCell-r10: 1
p-Max-r10: 24dBm
uplinkPowerControlCommonSCell-r10
p0-NominalPUSCH-r10: -40dBm
alpha-r10: al08 (5)
soundingRS-UL-ConfigCommon-r10: release (0)
release: NULL
ul-CyclicPrefixLength-r10: len1 (0)
prach-ConfigSCell-r10
prach-ConfigIndex-r10: 3
pusch-ConfigCommon-r10
pusch-ConfigBasic
n-SB: 1
hoppingMode: interSubFrame (0)
pusch-HoppingOffset: 16
...1 .... enable64QAM: True
ul-ReferenceSignalsPUSCH
.... 0... groupHoppingEnabled: False
groupAssignmentPUSCH: 0
..0. .... sequenceHoppingEnabled: False
cyclicShift: 0
pusch-ConfigCommon-v1270
enable64QAM-v1270: true (0)
radioResourceConfigDedicatedSCell-r10
physicalConfigDedicatedSCell-r10
nonUL-Configuration-r10
antennaInfo-r10
transmissionMode-r10: tm3 (2)
codebookSubsetRestriction-r10: c0
ue-TransmitAntennaSelection: release (0)
release: NULL
pdsch-ConfigDedicated-r10
p-a: dB-3 (2)
ul-Configuration-r10
antennaInfoUL-r10
transmissionModeUL-r10: tm1 (0)
uplinkPowerControlDedicatedSCell-r10
p0-UE-PUSCH-r10: 0dB
deltaMCS-Enabled-r10: en0 (0)
1... .... accumulationEnabled-r10: True
pSRS-Offset-r10: 0
pSRS-OffsetAp-r10: 0
filterCoefficient-r10: fc4 (4)
pathlossReferenceLinking-r10: pCell (0)
cqi-ReportConfigSCell-r10
nomPDSCH-RS-EPRE-Offset-r10: 0dB (0)
cqi-ReportPeriodicSCell-r10: release (0)
release: NULL
The answer for a secondary carrier is the same pair of fields in a different place. A UE never reads the SCell's system information, so the permission cannot arrive by broadcast. The capture carries it inside radioResourceConfigCommonSCell-r10 instead, in the uplink half of the cell being added.
That is why the reconfiguration is as long as it is. Everything SIB2 would have told a UE about the primary cell has to be restated for the secondary one, and enable64QAM and enable64QAM-v1270 arrive with the rest of it.
The SCell gets its own copy : enable64QAM and enable64QAM-v1270 arrive in the SCell's common configuration.Broadcast is not available : a UE does not read system information from a secondary cell.The pairing rule still holds : the capture shows both fields, which is what 36.331 requires when the v1270 one is used.Uplink 64QAM needs two yes answers : the capability is per band and the permission is per cell, so both have to agree for the carrier in use.
Reference :
[1] R4-151580 : 3GPP TSG-RAN WG4 #74bis Rio de Janeiro, Brazil, 20th – 24th April 2015
[2] 36.213 : 3GPP - E-UTRA; Physical layer procedures. Clause 8.6.1 determines the modulation order, and Table 8.6.1-1 is the table shown above.
[3] 36.331 : 3GPP - E-UTRA; Radio Resource Control, v19.3.0. SupportedBandEUTRA-v1250 carries ul-64QAM-r12, and enable64QAM sits in PUSCH-ConfigCommon with enable64QAM-v1270 in PUSCH-ConfigCommon-v1270.