Amarisoft

NR SA PUSCH Aggregation

 

The purpose of this tutorial is to show you how to configure and test PUSCH Aggregation Factor / Repetition. Main user case of this mechanism is to provide chance of more reliable PUSCH reception. Conceptually you may consider this to be similar to PUSCH in LTE IoT application. Overall mechanism of PUSCH Aggrection Factor can be illustrated as below.

NR SA PUSCH Aggregation Overview

Image Source : Sharetechnote

 

NOTE : PUSCH Aggregation Factor is supported since 2023-02-06 release, but it is recommended to use latest release available in your extranet because there has been multiple updates for the feature since the initial release.

 

 

Table of Contents

 

 

Test Setup

 

Test setup for this tutorial is as shown below.

TestSetup Callbox UEsim 1sdr 01

 

 

 

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 : PUSCH Aggregation -TDD

 

This test is to test PUSCH Aggregation Factor operation in NR SA TDD

 

 

Configuration

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

NR SA PUSCH Aggregation Test 1 Configuration 01

I used ims.default.cfg as ims configuration and mme-ims.cfg as mme configuration. These two are default configuration on Callbox.

NR SA PDSCH Aggregation Test 1 Configuration 02

In gnb-sa-pusch-agg.cfg , the configuration is done as follows.

I added a log option phy.rep=1 for clear verification in the log. This is not mandatory, but recommended if you want to capture all of the repeated transmission.

In this test, I used TDD.  You can select any specific tdd pattern with the parameter NR_TDD_CONFIG.  To apply TDD configuration, you first need to configure the duplex mode (NR_TDD) to 1 (TDD). And then I set NR_TDD_CONFIG to 5 which is not the default configuration and is configured by me for this test. I defined a new TDD pattern to create a uplink dominant pattern to give enough number of UL slots for pusch repetition.

NR SA PUSCH Aggregation Test 1 Configuration 03

NOTE : If you are not familiar with defining your own tdd config, check out this tutorial.

In this test, band n78, subcarrier spacing(subcarrier_spacing) 30 is used, but this is not the mandatory condition. You can specify any band and subcarrier spacing that 3GPP allows. In addition, just for this test I enabled force_full_bsr and set pusch_mcs so as to force stable UL slots to show the PUSCH repetition without the data from higher layer.

NR SA PUSCH Aggregation Test 1 Configuration 04

Enabling PDSCH aggregation is simple. Just add a parameter aggregation_factor in pdsch configuration.

NR SA PUSCH Aggregation Test 1 Configuration 05

This is the TDD pattern that I configured for this test. In this configuration, the cycle length is 5ms which is 10 slots in case of Subcarrier spacing 30Khz. Out of the 10 slots, 3 slots and 10 OFDM symbols are allocated for downlink by the parameter dl_slots and dl_symbols respectively. 6 slots and 2 OFDM symbols are allocated for uplink by the parameter ul_slots and ul_symbols respectively.

NR SA PUSCH Aggregation Test 1 Configuration 05 01

 

I used the ue-nr-sa.cfg as it is.

Configure UE as TDD which matches to callbox configuration. Set the band, subcarrier spacing(subcarrier_spacing), channel frequency(dl_nr_arfcn) and SSB frequency(ssb_nr_arfcn) to match with Callbox configuration.

NR SA PDSCH Aggregation Test 1 Configuration 06

Set UE access release (as_release) to 15 and ue_category to "nr".

NR SA PDSCH Aggregation Test 1 Configuration 08

 

 

Perform the Test

Start LTE service (gNB) and run 'cell phy' and 'cell' command, then everything is configured as you intended.

NR SA PDSCH Aggregation Test 1 Run 01

Power on UE on UE sim using power_on command.

NR SA PDSCH Aggregation Test 1 Run 02

Confirm that the UE completes the attach and check the throughput with 't' command.

NR SA PDSCH Aggregation Test 1 Run 03

 

 

Log Analysis

Sample Log

Before you start logging (i.e, before you turn on UE) I would suggest to check 'Repetition' in eNB log property window for more detailed verification.

NR SA PDSCH Aggregation Test 1 Log 01

Once the initial attach is done, check UE capability information message and see if UE support PUSCH aggregation (pusch-RepetitionMultiSlots).

NR SA PUSCH Aggregation Test 1 Log 02

If UE notifies that pdsch-RepetitionMultiSlots is supported, gNB enables the PUSCH Aggregation by setting pdsch-AggregationFactor in pusch-Config IE (Information Element)

NR SA PUSCH Aggregation Test 1 Log 03

Once PUSCH aggregation is enabled, you can check in PHY log to confirm that it is really working as expected.

First find any PDCCH/DCI 1_1 that schedule a PUSCH and then check a few consecutive PUSCH. You see the first PUSCH log after the PDCCH is printed with n_rep and the following three PUSCH are transmitted with different rep values and rv_idx values without any separate PDCCH/DCI 0_1. The k2 value in this case is calculated from the first transmission of PUSCH.

NR SA PUSCH Aggregation Test 1 Log 04

You can confirm the transmission of the aggregated PUSCH in visual way on the WebGUI. As shown here, you see the 4 consecutive PUSCH. First transmission is marked in dark color and the following repetition is marked in ligher colors.

NR SA PUSCH Aggregation Test 1 Log 05

 

 

 

RRC / NAS Signaling

 

RrcReconfiguration (SA)

: This is the RrcReconfiguration sent by gNB  to configure PUSCH Aggregation Factor. (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: rrcReconfiguration: {

    rrc-TransactionIdentifier 0,

    criticalExtensions rrcReconfiguration: {

      nonCriticalExtension {

        masterCellGroup {

          cellGroupId 0,

          spCellConfig {

            spCellConfigDedicated {

              initialDownlinkBWP {

                pdsch-Config setup: {

                  resourceAllocation resourceAllocationType1,

                  rbg-Size config1,

                  mcs-Table qam256,

                  prb-BundlingType staticBundling: {

                    bundleSize wideband

                  }

                }

              },

              uplinkConfig {

                initialUplinkBWP {

                  pusch-Config setup: {

                    txConfig codebook,

                    resourceAllocation resourceAllocationType1,

                    pusch-AggregationFactor n4,

                    mcs-Table qam256,

                    mcs-TableTransformPrecoder qam256,

                    codebookSubset nonCoherent,

                    maxRank 1

                  }

                }

              },

              pdsch-ServingCellConfig setup: {

                nrofHARQ-ProcessesForPDSCH n16,

                maxMIMO-Layers 2

              },

              tag-Id 0

            }

          }

        },

        dedicatedNAS-MessageList {

          '7E025ADA2D4D017E0042010977000BF200F110800101D72E2BF954070000F11000006415020101210203005E01BE3408031F19F1031F11F2'H

        }

      }

    }

  }

}