Amarisoft

NR SA UL MIMO

 

The purpose of this tutorial is to show you how to configure and test UL MIMO for NR SA.  At this point, I don't have any commercial UE supporting UL MIMO. So the first test is with Amari Callbox and Amari UEsim and I will add the test with commercial UE as soon as I managed to get a commercial UE.

When you want to try UL MIMO test with your own UE, make it sure that your UE really support UL MIMO and the UE declare the support of UL MIMO in UE capability Information as shown in Precondition section.  

Even though the configuration  for UL MIMO in Amarisoft gNB is designed to be pretty simple, you need to have detailed understandings on 3GPP lower layer specification if you want to configure the test condition exactly as you intended. The specification you need through understanding for this test are summarized as follows :

 

NOTE : If you are familiar with operations of Amari Callbox (gNB) and UEsim operation and want to have simplified version of UL MIMO, refer to this wiki.

 

 

Table of Contents

 

 

Test Setup

 

Test setup for this tutorial is as shown below.

TestSetup Callbox UEsim 1sdr 01

 

 

Preconditions

Before you try any test in this tutorial, make it sure that your UE (DUT) support UL MIMO. An easy way to check if the UE support UL MIMO or not is to check following IE in UE capability Information.

featureSetsUplinkPerCC {

{

   supportedSubcarrierSpacingUL kHz30,

   supportedBandwidthUL fr1: mhz20,

   mimo-CB-PUSCH {

      maxNumberMIMO-LayersCB-PUSCH    twoLayers

      maxNumberSRS-ResourcePerSet 1

    },

      supportedModulationOrderUL qam256

   }

},

 

 

Key Configuration Parameters

Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.

 

 

Test 1 : Reference Test - UL SISO

This test is not for UL MIMO, but I decided to perform this test as a reference (i.e, comparative purpose with the test result for MIMO case) before trying UL MIMO.  It would be helpful to understand the concept of UL MIMO if you compare this reference with other test cases.

 

Configuration

I used the gnb-sa-ulsiso.cfg on gNB which is copied and modified from gnb-sa.cfg

NR SA ULMIMO Test 1 Configuration 01

In gnb-sa-ulsiso.cfg , the configuration is done as follows. I set UL to SISO for reference and enabled SRS as well. Set N_ANTENNA_UL to 1 to configure for SISO and USE_SRS to 1 to enable SRS.

NR SA ULMIMO Test 1 Configuration 02

It is not mandatory but I forced UL PHY/MAC to schedule every possible UL slots with fixed mcs to compare this reference with other test in terms of throughput.

NR SA ULMIMO Test 1 Configuration 03

One important thing to note is that number of srs port (n_ports) in srs_resource configuration is same as the number of MIMO antenna (N_ANTENNA_UL).

NR SA ULMIMO Test 1 Configuration 04

I also set max_rank and n_layer of pusch configuration to be same as the number of UL antenna. These configuration (max_rank and n_layer) will be reflected into RRC message. (NOTE : n_layer parameter is not mandatory for UL MIMO operation in Amarisoft callbox. By default, UL MIMO gets configured based on CSI report from UE as long as srs port is propery configured. If you want to force gNB to apply UL MIMO regardless of CSI report, you can use n_layer parameter).

NR SA ULMIMO Test 1 Configuration 05

This is not mandatory either. I extended inactivity_timer for long enough to check phy throughput without generating IP throughput.

NR SA ULMIMO Test 1 Configuration 06

 

I used the ue-nr-sa-ulsiso.cfg on UEsim which is copied and modified from ue-nr-sa.cfg

NR SA ULMIMO Test 1 Configuration 07

In ue-nr-sa-ulsiso.cfg , the configuration is done as follows.

I set the number of ULand DL antenna of UEsim to be same as the number of UL and DL antenna of Callbox(gNB) by setting the value of N_ANTENNA_DL and N_ANTENNA_UL.

NR SA ULMIMO Test 1 Configuration 08

NR SA ULMIMO Test 1 Configuration 09

 

Perform the Test

Check if the cell is configured as intended. The important thing in this test is Uplink configuration. Check out the number of UL ANT and NL(number of layers) with cell phy command and check out RX channels and port with rf_info command.

NR SA ULMIMO Test 1 Run 03

Power on UE on UE sim if everything is configured as you intended.

NR SA ULMIMO Test 1 Run 01

Confirm that the UE completes the attach and check the throughput. It would be better to remember the UL throughput of this test as a reference.

NR SA ULMIMO Test 1 Run 02

 

Log Analysis

Sample Log

Now let's look into the log and see how the configuration is reflected in signaling message.

The first important thing to check is maxRank value in pusch-Config of RRC Setup. Since this test is SISO, it is set to 1.

NR SA ULMIMO Test 1 Log 01

Next to check is the number of srs port. You can confirm on it with nrofSRS-Ports of srs-ResourceToAddModList. In this test, it is set to port1 since it is SISO.

NR SA ULMIMO Test 1 Log 02

Lastly let's check about the operation at PHY layer.

First thing you need to check is the field antenna_ports in DCI 0_1. Interpretation of the value is a little bit complicated. Check out this note for the interpretation of this field.

NR SA ULMIMO Test 1 Log 03

Next thing to check is the number of layers for PUSCH. Number of layers for PUSCH is informed via nl field in PUSCH log. In this case, nl field is not printed in the log. It means the value of nl is 1 which indicates SISO.

NR SA ULMIMO Test 1 Log 04

 

 

Test 2 : UL MIMO - 2x2

This test is to show how to configure and validate UL 2x2 MIMO.

 

Configuration

I used the gnb-sa-ulmimo.cfg on gNB which is copied and modified from gnb-sa.cfg

NR SA ULMIMO Test 2 Configuration 01

In gnb-sa-ulmimo.cfg , the configuration is done as follows. I set UL to 2x2 MIMO for reference and enabled SRS as well. Set N_ANTENNA_UL to 2 to configure for SISO and USE_SRS to 1 to enable SRS.

NR SA ULMIMO Test 2 Configuration 02

It is not mandatory but I forced UL PHY/MAC to schedule every possible UL slots with fixed mcs to compare this reference with other test in terms of throughput.

NR SA ULMIMO Test 1 Configuration 03

One important thing to note is that number of srs port (n_ports) in srs_resource configuration is same as the number of MIMO antenna (N_ANTENNA_UL).

NR SA ULMIMO Test 1 Configuration 04

I also set max_rank and n_layer of pusch configuration to be same as the number of UL antenna. These configuration (max_rank and n_layer) will be reflected into RRC message. (NOTE : n_layer parameter is not mandatory for UL MIMO operation in Amarisoft callbox. By default, UL MIMO gets configured based on CSI report from UE as long as srs port is propery configured. If you want to force gNB to apply UL MIMO regardless of CSI report, you can use n_layer parameter).

NR SA ULMIMO Test 1 Configuration 05

This is not mandatory either. I extended inactivity_timer for long enough to check phy throughput without generating IP throughput.

NR SA ULMIMO Test 1 Configuration 06

 

I used the ue-nr-sa-ulmimo.cfg on UEsim which is copied and modified from ue-nr-sa.cfg

NR SA ULMIMO Test 2 Configuration 07

In ue-nr-sa-ulmimo.cfg, the configuration is done as follows.

I set the number of ULand DL antenna of UEsim to be same as the number of UL and DL antenna of Callbox(gNB) by setting the value of N_ANTENNA_DL and N_ANTENNA_UL.

NR SA ULMIMO Test 2 Configuration 08

NR SA ULMIMO Test 1 Configuration 09

 

Perform the Test

Check if the cell is configured as intended.

Check if the cell is configured as intended. The important thing in this test is Uplink configuration. Check out the number of UL ANT and NL(number of layers) with cell phy command and check out RX channels and port with rf_info command. You see 2 RX channels are configured.

NR SA ULMIMO Test 2 Run 03

Power on UE on UE sim.

NR SA ULMIMO Test 1 Run 01

Confirm that the UE completes the attach and check the throughput. Confirm that the UE completes the attach and check the throughput.  Compare the throughput with the reference throughput that you had with SISO.

NR SA ULMIMO Test 2 Run 02

 

Log Analysis

Sample Log

Now let's look into the log and see how the configuration is reflected in signaling message.

The first important thing to check is maxRank value in pusch-Config of RRC Setup. Since this test is 2x2 MIMO, it is set to 2.

NR SA ULMIMO Test 2 Log 01

Next to check is the number of srs port. You can confirm on it with nrofSRS-Ports of srs-ResourceToAddModList. In this test, it is set to port2 since it is 2x2 MIMO.

NR SA ULMIMO Test 2 Log 02

Lastly let's check about the operation at PHY layer.

First thing you need to check is the field antenna_ports and precoding_info in DCI 0_1 (NOTE : precoding_info is printed only in MIMO case). Interpretation of these values are a little bit complicated. Check out this note for the interpretation of this field.

NR SA ULMIMO Test 2 Log 03

Next thing to check is the number of layers for PUSCH. Number of layers for PUSCH is informed via nl field in PUSCH log. In this case, nl field is set to 2 which indicates 2 layers. 2 layer indicates it is 2x2 or 2x4 or 2x8 MIMO etc.

NR SA ULMIMO Test 2 Log 04

 

 

Test 3 : UL MIMO - 4x4

This test is to show how to configure and validate UL 4x4 MIMO.

 

Configuration

I used the gnb-sa-ulmimo-4x4.cfg on gNB which is copied and modified from gnb-sa.cfg

NR SA ULMIMO Test 3 Configuration 01

In gnb-sa-ulmimo-4x4.cfg , the configuration is done as follows. I set UL to 4x4 MIMO for reference and enabled SRS as well. Set N_ANTENNA_UL to 4 to configure for SISO and USE_SRS to 1 to enable SRS.

NR SA ULMIMO Test 3 Configuration 02

It is not mandatory but I forced UL PHY/MAC to schedule every possible UL slots with fixed mcs to compare this reference with other test in terms of throughput.

NR SA ULMIMO Test 1 Configuration 03

One important thing to note is that number of srs port (n_ports) in srs_resource configuration is same as the number of MIMO antenna (N_ANTENNA_UL).

NR SA ULMIMO Test 1 Configuration 04

I also set max_rank and n_layer of pusch configuration to be same as the number of UL antenna. These configuration (max_rank and n_layer) will be reflected into RRC message. (NOTE : n_layer parameter is not mandatory for UL MIMO operation in Amarisoft callbox. By default, UL MIMO gets configured based on CSI report from UE as long as srs port is propery configured. If you want to force gNB to apply UL MIMO regardless of CSI report, you can use n_layer parameter).

NR SA ULMIMO Test 1 Configuration 05

This is not mandatory either. I extended inactivity_timer for long enough to check phy throughput without generating IP throughput.

NR SA ULMIMO Test 1 Configuration 06

 

I used the ue-nr-sa-ulmimo-4x4.cfg on UEsim which is copied and modified from ue-nr-sa.cfg

NR SA ULMIMO Test 3 Configuration 07

In ue-nr-sa-ulmimo-4x4.cfg, the configuration is done as follows.

I set the number of ULand DL antenna of UEsim to be same as the number of UL and DL antenna of Callbox(gNB) by setting the value of N_ANTENNA_DL and N_ANTENNA_UL.

NR SA ULMIMO Test 3 Configuration 08

NR SA ULMIMO Test 1 Configuration 09

 

Perform the Test

Check if the cell is configured as intended.

Check if the cell is configured as intended. The important thing in this test is Uplink configuration. Check out the number of UL ANT and NL(number of layers) with cell phy command and check out RX channels and port with rf_info command. You see 4 RX channels are configured.

NR SA ULMIMO Test 3 Run 01

NR SA ULMIMO Test 3 Run 02

Power on UE on UE sim.

NR SA ULMIMO Test 1 Run 01

Confirm that the UE completes the attach and check the throughput.  Confirm that the UE completes the attach and check the throughput. Confirm that the UE completes the attach and check the throughput.  Compare the throughput with the reference throughput that you had with SISO.

NR SA ULMIMO Test 3 Run 04

 

Log Analysis

Sample Log

Now let's look into the log and see how the configuration is reflected in signaling message.

The first important thing to check is maxRank value in pusch-Config of RRC Setup. Since this test is 4x4 MIMO, it is set to 4

NR SA ULMIMO Test 3 Log 01

Next to check is the number of srs port. You can confirm on it with nrofSRS-Ports of srs-ResourceToAddModList. In this test, it is set to port4 since it is 4x4 MIMO.

NR SA ULMIMO Test 3 Log 02

Lastly let's check about the operation at PHY layer.

First thing you need to check is the field antenna_ports and precoding_info in DCI 0_1 (NOTE : precoding_info is printed only in MIMO case). Interpretation of these values are a little bit complicated. Check out this note for the interpretation of this field.

NR SA ULMIMO Test 3 Log 03

Next thing to check is the number of layers for PUSCH. Number of layers for PUSCH is informed via nl field in PUSCH log. In this case, nl field is set to 4 which indicates 4 layers. 4 layer indicates it is 4x4 or 4x8 MIMO etc.

NR SA ULMIMO Test 3 Log 04

 

 

 

RRC / NAS Signaling

 

RrcSetup (SA)

: This is the RrcSetup message sent by gNB  to configure NR SA. (NOTE : You would see some IEs that has a specific assigned vale here, but consider it as just an example value. Those values should vary depending on test requirement)

{

  message c1: rrcSetup: {

    rrc-TransactionIdentifier 0,

    criticalExtensions rrcSetup: {

      radioBearerConfig {

        ...

      },

      masterCellGroup {

        cellGroupId 0,

        rlc-BearerToAddModList {

          ...

        },

        mac-CellGroupConfig {

          ...

        },

        physicalCellGroupConfig {

          pdsch-HARQ-ACK-Codebook dynamic

        },

        spCellConfig {

          spCellConfigDedicated {

            initialDownlinkBWP {

              pdcch-Config setup: {

                ...

              },

              pdsch-Config setup: {

                ...

              }

            },

            firstActiveDownlinkBWP-Id 0,

            uplinkConfig {

              initialUplinkBWP {

                pucch-Config setup: {

                  ...

                },

                pusch-Config setup: {

                  txConfig codebook,

                  dmrs-UplinkForPUSCH-MappingTypeA setup: {

                    dmrs-AdditionalPosition pos1,

                    transformPrecodingDisabled {

                    }

                  },

                  pusch-PowerControl {

                    ...

                  },

                  resourceAllocation resourceAllocationType1,

                  codebookSubset nonCoherent,

                  maxRank 4,

                  uci-OnPUSCH setup: {

                    ...

                  }

                },

                srs-Config setup: {

                 ...

              },

              firstActiveUplinkBWP-Id 0,

              pusch-ServingCellConfig setup: {

              }

            },

            pdcch-ServingCellConfig setup: {

            },

            pdsch-ServingCellConfig setup: {

              ...

            },

            csi-MeasConfig setup: {

              ...

            },

            tag-Id 0

          }