5G/NR  - MIMO UL  

 

 

 

Uplink MIMO Configuration

In LTE, I haven't seen much case of UL MIMO being really used even though it is defined in 3GPP specification. In NR, as of now (Apr 2022), I still don't see UL MIMO being used in wide scale but I am expecting it to be used more (at least more than LTE MIMO).

How UL MIMO is configured ?

In NR, Downlink MIMO is configured by relatively straight forward manner (i.e, only by Antenna Port in DCI) as described in this page. But UL MIMO configuration is more complicated and multiple types of tables and multiple fields in DCI are working together to configure UL MIMO. Followings are the summary of those tables related to configuring UL MIMO.

< Precoding information and number of layers >

txConfig(UL)

Antenna

PUSCH-tp

maxRank

CodebookSubset

Bit Length

Table in 38.212

NonCodeBook

 

 

 

 

0

 

CodeBook

4 ports

Disabled

2 or 3 or 4

 

4 or 5 or 6

7.3.1.1.2-2

CodeBook

4 ports

Disabled

 

 

2 or 4 or 5

7.3.1.1.2-3

Enabled

1

 

CodeBook

2 ports

 

2

 

3 or 4

7.3.1.1.2-4

CodeBook

2 ports

 

1

 

2 or 3

7.3.1.1.2-5

NOTE : PUSCH-tp indicates PUSCH Transform Precoding. Refer to Transform Precoding section in Waveform Page if you want to know what this is.

NOTE : txConfig, PUSCH-tp, maxRank, codebook Subset are specified by PUSCH-Config in RRC.

 

< Precoding  Matrix for PUSCH>

# of Layers

# of Antenna Ports

Transform Precoding

Precoding Matrix (38.211)

1

2

 

Table 6.3.1.5-1

4

enabled

Table 6.3.1.5-2

disabled

Table 6.3.1.5-3

2

2

disabled

Table 6.3.1.5-4

4

disabled

Table 6.3.1.5-5

3

4

disabled

Table 6.3.1.5-6

4

4

disabled

Table 6.3.1.5-7

NOTE : These table is not directly specified by DCI. It is referenced by Precoding Information table which is directly specified in DCI.

NOTE : Refer to PUSCH Channel Processing page for how the Precoding Matrix is used.

 

<  Antenna ports >

PUSCH-tp

DMRS-config-type

DMRS-config-max-len

Rank

Bit Lenth

Table in 38.212

Enabled

1

1

 

2

7.3.1.1.2-6

1

2

 

4

7.3.1.1.2-7

Disabled

1

1

1

3

7.3.1.1.2-8

1

1

2

3

7.3.1.1.2-9

1

1

3

3

7.3.1.1.2-10

1

1

4

3

7.3.1.1.2-11

Disabled

1

2

1

4

7.3.1.1.2-12

1

2

2

4

7.3.1.1.2-13

1

2

3

4

7.3.1.1.2-14

1

2

4

4

7.3.1.1.2-15

Disabled

2

1

1

4

7.3.1.1.2-16

2

1

2

4

7.3.1.1.2-17

2

1

3

4

7.3.1.1.2-18

2

1

4

4

7.3.1.1.2-19

Disabled

2

2

1

5

7.3.1.1.2-20

2

2

2

5

7.3.1.1.2-21

2

2

3

5

7.3.1.1.2-22

2

2

4

5

7.3.1.1.2-23

NOTE : PUSCH-tp indicates PUSCH Transform Precoding. Refer to Transform Precoding section in Waveform Page if you want to know what this is.

MIMO Configuration Table :  Precoding Information and Number of Layers

 

< 38.212 - Table 7.3.1.1.2-2: Precoding information and number of layers, for 4 antenna ports, if transform precoder is disabled, maxRank = 2 or 3 or 4, and ul-FullPowerTransmission is not configured or configured to fullpowerMode2 or configured to fullpower >

 

< 38.212 - Table 7.3.1.1.2-2A: Precoding information and number of layers for 4 antenna ports, if transform precoder is disabled, maxRank = 2, and ul-FullPowerTransmission = fullpowerMode1 >

 

< 38.212 - Table 7.3.1.1.2-2B: Precoding information and number of layers for 4 antenna ports, if transform precoder is disabled, maxRank = 3 or 4, and ul-FullPowerTransmission = fullpowerMode1 >

 

< 38.212 - Table 7.3.1.1.2-3: Precoding information and number of layers for 4 antenna ports, if transform precoder is enabled and ul-FullPowerTransmission is either not configured or configured to fullpowerMode2, or if transform precoder is disabled, maxRank = 1, and ul-FullPowerTransmission is not configured or configured to fullpowerMode2 or configured to fullpower >

 

< 38.212 - Table 7.3.1.1.2-3A: Precoding information and number of layers for 4 antenna ports, if transform precoder is enabled and ul-FullPowerTransmission = fullpowerMode1, or if transform precoder is disabled, maxRank = 1, and ul-FullPowerTransmission = fullpowerMode1 >

 

< 38.212 - Table 7.3.1.1.2-4: Precoding information and number of layers, for 2 antenna ports, if transform precoder is disabled, maxRank = 2, and ul-FullPowerTransmission is not configured or configured to fullpowerMode2 or configured to fullpower >

 

< 38.212 - Table 7.3.1.1.2-4A: Precoding information and number of layers, for 2 antenna ports, if transform precoder is disabled, maxRank = 2, and ul-FullPowerTransmission = fullpowerMode1 >

 

< 38.212 - Table 7.3.1.1.2-5: Precoding information and number of layers, for 2 antenna ports, if transform precoder is enabled and ul-FullPowerTransmission is not configured or configured to fullpowerMode2 or configured to fullpower, or if transform precoder is disabled, maxRank = 1, and and ul-FullPowerTransmission is not configured or configured to fullpowerMode2 or configured to fullpower >

 

< 38.212 - Table 7.3.1.1.2-5A: Precoding information and number of layers, for 2 antenna ports, if transform precoder is enabled and ul-FullPowerTransmission = fullpowerMode1, or if transform precoder is disabled, maxRank = 1, and ul-FullPowerTransmission = fullpowerMode1 >

MIMO Configuration Table : Antenna Port Configuration

Tables in this section shows Antenna Port Configuration for PUSCH for various situations. Which one of these tables to use is determined by RRC Configuration and which row(element) of the selected table is used is determined by Antenna Port in DCI 0_1.

 

< 38.212 - Table 7.3.1.1.2-6: Antenna port(s), transform precoder is enabled, dmrs-Type=1, maxLength=1,except that dmrs-UplinkTransformPrecoding and tp-pi2BPSK are both configured and π/2-BPSK modulation is used >

 

< 38.212 - Table 7.3.1.1.2-6A: Antenna port(s), transform precoder is enabled, dmrs-UplinkTransformPrecoding and tp-pi2BPSK are both configured, π/2-BPSK modulation is used, dmrs-Type=1, maxLength=1 >

 

< 38.212 - Table 7.3.1.1.2-7: Antenna port(s), transform precoder is enabled, dmrs-Type=1, maxLength=2, except that dmrs-UplinkTransformPrecoding and tp-pi2BPSK are both configured and π/2-BPSK modulation is used >

: Antenna port(s), transform precoder is enabled, dmrs-UplinkTransformPrecoding and tp-pi2BPSK are both configured, π/2-BPSK modulation is used, dmrs-Type=1, maxLength=2 >

 

< 38.212 - Table 7.3.1.1.2-8:Antenna port(s), transform precoder is disabled, dmrs-Type=1, maxLength=1,rank=1>

 

< 38.212 - Table 7.3.1.1.2-9:Antenna port(s), transform precoder is disabled, dmrs-Type=1, maxLength=1,rank= 2>

 

< 38.212 - Table 7.3.1.1.2-10: Antenna port(s), transform precoder is disabled,dmrs-Type=1,maxLength=1,rank=3 >

 

< 38.212 - Table 7.3.1.1.2-11: Antenna port(s), transform precoder is disabled, dmrs-Type=1,maxLength=1,rank= 4>

 

< 38.212 - Table 7.3.1.1.2-12: Antenna port(s), transform precoder is disabled, dmrs-Type=1, maxLength=2, rank=1>

 

< 38.212 - Table 7.3.1.1.2-13: Antenna port(s), transform precoder is disabled, dmrs-Type=1, maxLength=2, rank=2>

 

< 38.212 - Table 7.3.1.1.2-14: Antenna port(s), transform precoder is disabled, dmrs-Type=1, maxLength=2,rank=3>

 

< 38.212 - Table 7.3.1.1.2-15: Antenna port(s), transform precoder is disabled, dmrs-Type=1, maxLength=2, rank=4>

 

< 38.212 - Table 7.3.1.1.2-16: Antenna port(s), transform precoder is disabled, dmrs-Type=2, maxLength=1,rank=1>

 

< 38.212 - Table 7.3.1.1.2-17:Antenna port(s), transform precoder is disabled, dmrs-Type=2, maxLength=1,rank=2>

 

< 38.212 - Table 7.3.1.1.2-18:Antenna port(s), transform precoder is disabled, dmrs-Type=2, maxLength=1, rank=3>

 

< 38.212 - Table 7.3.1.1.2-19:Antenna port(s), transform precoder is disabled, dmrs-Type=2, maxLength=1, rank=4>

 

< 38.212 - Table 7.3.1.1.2-20:Antenna port(s), transform precoder is disabled, dmrs-Type=2, maxLength=2,rank=1>

 

< 38.212 - Table 7.3.1.1.2-21:Antenna port(s), transform precoder is disabled,dmrs-Type=2,maxLength=2,rank=2>

 

< 38.212 - Table 7.3.1.1.2-22: Antenna port(s), transform precoder is disabled, dmrs-Type=2, maxLength=2,rank=3>

 

< 38.212 - Table 7.3.1.1.2-23:Antenna port(s), transform precoder is disabled, dmrs-Type=2, maxLength=2,rank=4>

MIMO Configuration Table : Precoding Matrix

Tables in this section shows Precoding Matrix for PUSCH for various situations. Which one of these tables to use is determined by RRC Configuration and which row(element) of the selected table is used is associated with Precoding information and number of layers in DCI 0_1. (i.e, the specific TMPI index is indirectly determined by Precoding Information and number of layers field).

< 38.211 v15.5 - Table 6.3.1.5-1: Precoding matrix W for single-layer transmission using two antenna ports. >

 

< 38.211 v15.5 - Table 6.3.1.5-2: Precoding matrix W for single-layer transmission using four antenna ports with transform precoding enabled. >

 

< 38.211 v15.5 - Table 6.3.1.5-3: Precoding matrix W for single-layer transmission using four antenna ports with transform precoding disabled. >

 

< 38.211 v15.5 - Table 6.3.1.5-4: Precoding matrix W for two-layer transmission using two antenna ports with transform precoding disabled. >

 

< 38.211 v15.5 - Table 6.3.1.5-5: Precoding matrix W for two-layer transmission using four antenna ports with transform precoding disabled. >

 

< 38.211 v15.5 - Table 6.3.1.5-6: Precoding matrix W for three-layer transmission using four antenna ports with transform precoding disabled. >

 

< 38.211 v15.5 - Table 6.3.1.5-7: Precoding matrix W for four-layer transmission using four antenna ports with transform precoding disabled. >

Examples

NOTE : If you want to see the contents of full log with Amarisoft Log viewer, go to LogAnalysis section and click on 'Sample Log' in this tutorial of Amarisoft TechAcademy.

Example 01 :  UL 2x2 MIMO

: This example is from the test with Amarisoft Callbox(gNB) and Amarisoft UEsim

< RRC Setup > : Full contents of the message is here.

    {

      message c1: rrcSetup: {

      ...

            spCellConfig {

              spCellConfigDedicated {

                initialDownlinkBWP {

                ...

                uplinkConfig {

                  initialUplinkBWP {

                    ...

                    pusch-Config setup: {

                      txConfig codebook,

                      dmrs-UplinkForPUSCH-MappingTypeA setup: {

                        dmrs-AdditionalPosition pos1,

                        transformPrecodingDisabled {

                        }

                      },

                      // NOTE : dmrs-Type is not present, it mean dmrs-Type is type 1,

                                    maxLength is not present, it mean maxLength is len1

                      pusch-PowerControl {

                        msg3-Alpha alpha1,

                        p0-NominalWithoutGrant -84,

                        p0-AlphaSets {

                          {

                            p0-PUSCH-AlphaSetId 0,

                            p0 0,

                            alpha alpha1

                          }

                        },

                        pathlossReferenceRSToAddModList {

                          {

                            pusch-PathlossReferenceRS-Id 0,

                            referenceSignal ssb-Index: 0

                          }

                        },

                        sri-PUSCH-MappingToAddModList {

                          {

                            sri-PUSCH-PowerControlId 0,

                            sri-PUSCH-PathlossReferenceRS-Id 0,

                            sri-P0-PUSCH-AlphaSetId 0,

                            sri-PUSCH-ClosedLoopIndex i0

                          }

                        }

                      },

                      resourceAllocation resourceAllocationType1,

                      codebookSubset nonCoherent,

                      maxRank 2,

                      uci-OnPUSCH setup: {

                        betaOffsets semiStatic: {

                          betaOffsetACK-Index1 9,

                          betaOffsetACK-Index2 9,

                          betaOffsetACK-Index3 9,

                          betaOffsetCSI-Part1-Index1 7,

                          betaOffsetCSI-Part1-Index2 7,

                          betaOffsetCSI-Part2-Index1 7,

                          betaOffsetCSI-Part2-Index2 7

                        },

                        scaling f1

                      }

                    },

                    srs-Config setup: {

                      srs-ResourceSetToAddModList {

                        {

                          srs-ResourceSetId 0,

                          srs-ResourceIdList {

                            0

                          },

                          resourceType periodic: {

                          },

                          usage codebook,

                          p0 -84,

                          pathlossReferenceRS ssb-Index: 0

                        }

                      },

                      srs-ResourceToAddModList {

                        {

                          srs-ResourceId 0,

                          nrofSRS-Ports ports2,

                          transmissionComb n2: {

                            combOffset-n2 0,

                            cyclicShift-n2 0

                          },

                          resourceMapping {

                            startPosition 1,

                            nrofSymbols n1,

                            repetitionFactor n1

                          },

                          freqDomainPosition 0,

                          freqDomainShift 5,

                          freqHopping {

                            c-SRS 11,

                            b-SRS 3,

                            b-hop 0

                          },

                          groupOrSequenceHopping neither,

                          resourceType periodic: {

                            periodicityAndOffset-p sl80: 7

                          },

                          sequenceId 500

                        }

                      }

                    }

                  },

                  firstActiveUplinkBWP-Id 0,

                  pusch-ServingCellConfig setup: {

                  }

                },

               ...

     

< DCI 0_1 >

Following is an example of DCI 0_1 transmitted by the gNB.  In this case (based on RRC configuration shown above : 2 antenna ports, codebookSubset = nonCoherent, transform precoder = disabled, ul-FullPowerTransmission = not configured), precoding_info indicates the index in  38.212 - Table 7.3.1.1.2-4 and antenna_ports indicates the index in 38.212 - Table 7.3.1.1.2-9

    Message: ss_id=2 cce_index=2 al=2 dci=0_1 k2=7

     

    Data:

    rb_alloc=0x12f

    time_domain_rsc=0

    mcs=2

    ndi=1

    rv_idx=0

    harq_process=0

    dai=3

    tpc_command=1

    precoding_info=2

    antenna_ports=0

    srs_request=0

    dmrs_seq_init=0

    ul_sch_indicator=1

Example 02 :  UL 4x4 MIMO

: This example is from the test with Amarisoft Callbox(gNB) and Amarisoft UEsim

< RRC Setup > : Full contents of the message is here.

    {

      message c1: rrcSetup: {

        rrc-TransactionIdentifier 0,

        ...

            spCellConfig {

              spCellConfigDedicated {

                ...

                uplinkConfig {

                  initialUplinkBWP {

                    ...

                    pusch-Config setup: {

                      txConfig codebook,

                      dmrs-UplinkForPUSCH-MappingTypeA setup: {

                        dmrs-AdditionalPosition pos1,

                        transformPrecodingDisabled {

                        }

                        // NOTE : dmrs-Type is not present, it mean dmrs-Type is type 1,

                                      maxLength is not present, it mean maxLength is len1

                      },

                      pusch-PowerControl {

                        msg3-Alpha alpha1,

                        p0-NominalWithoutGrant -84,

                        p0-AlphaSets {

                          {

                            p0-PUSCH-AlphaSetId 0,

                            p0 0,

                            alpha alpha1

                          }

                        },

                        pathlossReferenceRSToAddModList {

                          {

                            pusch-PathlossReferenceRS-Id 0,

                            referenceSignal ssb-Index: 0

                          }

                        },

                        sri-PUSCH-MappingToAddModList {

                          {

                            sri-PUSCH-PowerControlId 0,

                            sri-PUSCH-PathlossReferenceRS-Id 0,

                            sri-P0-PUSCH-AlphaSetId 0,

                            sri-PUSCH-ClosedLoopIndex i0

                          }

                        }

                      },

                      resourceAllocation resourceAllocationType1,

                      codebookSubset nonCoherent,

                      maxRank 4,

                      uci-OnPUSCH setup: {

                        betaOffsets semiStatic: {

                          betaOffsetACK-Index1 9,

                          betaOffsetACK-Index2 9,

                          betaOffsetACK-Index3 9,

                          betaOffsetCSI-Part1-Index1 7,

                          betaOffsetCSI-Part1-Index2 7,

                          betaOffsetCSI-Part2-Index1 7,

                          betaOffsetCSI-Part2-Index2 7

                        },

                        scaling f1

                      }

                    },

                    srs-Config setup: {

                      srs-ResourceSetToAddModList {

                        {

                          srs-ResourceSetId 0,

                          srs-ResourceIdList {

                            0

                          },

                          resourceType periodic: {

                          },

                          usage codebook,

                          p0 -84,

                          pathlossReferenceRS ssb-Index: 0

                        }

                      },

                      srs-ResourceToAddModList {

                        {

                          srs-ResourceId 0,

                          nrofSRS-Ports ports4,

                          transmissionComb n2: {

                            combOffset-n2 0,

                            cyclicShift-n2 2

                          },

                          resourceMapping {

                            startPosition 1,

                            nrofSymbols n1,

                            repetitionFactor n1

                          },

                          freqDomainPosition 0,

                          freqDomainShift 5,

                          freqHopping {

                            c-SRS 11,

                            b-SRS 3,

                            b-hop 0

                          },

                          groupOrSequenceHopping neither,

                          resourceType periodic: {

                            periodicityAndOffset-p sl80: 7

                          },

                          sequenceId 500

                        }

                      }

                    }

                  },

                  firstActiveUplinkBWP-Id 0,

                  pusch-ServingCellConfig setup: {

                  }

                },

< DCI 0_1 >

Following is an example of DCI 0_1 transmitted by the gNB.  In this case (based on RRC configuration shown above : 2 antenna ports, codebookSubset = nonCoherent, transform precoder = disabled, ul-FullPowerTransmission = not configured), precoding_info indicates the index in  38.212 - Table 7.3.1.1.2-2 and antenna_ports indicates the index in 38.212 - Table 7.3.1.1.2-11

    Message: ss_id=2 cce_index=2 al=2 dci=0_1 k2=7

     

    Data:

    rb_alloc=0x12f

    time_domain_rsc=0

    mcs=2

    ndi=1

    rv_idx=0

    harq_process=2

    dai=0

    tpc_command=1

    precoding_info=11

    antenna_ports=0

    srs_request=0

    dmrs_seq_init=0

    ul_sch_indicator=1

Reference

[1]