Amarisoft

NR SA PUSCH Transform Precoding

 

The purpose of this tutorial is to show you how to configure and verify PUSCH Transform Precoding. In LTE, we use the different waveform for DL and UL by default in which OFDMA is for DL and SC-FDMA(Single Carrier-FDMA) is used for UL. However in NR, we use the same type of waveform OFDM for both DL and UL in most of the default configuration. The reason why we use SC-FDMA in LTE UL is to decrease PAPR (Peak to Average Power Ratio). It implies that UL PAPR would be larger in NR default configuration comparing to LTE UL. For some specific case where low PAPR is necessary in NR, NR support a specific parameter to use SC-FDMA for UL and it is called 'Transform Precoding'.  You may think of Transform Precoding as another name for SC-FDMA. There are two stages of applying the Transform Precoding in NR as listed below.

You can enable both of them or enable only one of the options as you like.

 

 

Table of Contents

 

 

Test Setup

 

Setup A

 

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 : Transform-Precoding enabled for both Msg3 and PUSCH afterwards

In this test I will show you how to apply transform precoding (SC-FDMA) to Msg3 and all the PUSCH after the msg3.

 

Configuration

An important thing in using UE sim is to do proper matching between UE sim configuration and Call box configuration In this tutorial, I used the ue.default.cfg and and enb.default.cfg without any change

If you use other Network (e.g, other network simulator or real network), you have to make it sure to configure UE sim according to the settings on network side

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

NR SA PUSCH TP Test 1 Config 01

I used gnb-sa-tf-precode.cfg which is copied from gnb-sa.cfg.

NR SA PUSCH TP Test 1 Config 02

The configuration in gnb-sa-tf-precode.cfg (Callbox) is set as follows. In this test, TDD is used and one of the default TDD config (NR_TDD_CONFIG 2) is applied. And SRS is disabled (USE_SRS 0) for simplicity.

NR SA PUSCH TP Test 1 Config 03

It doesn't matter whatever band and frequency is used for transform precoding. In this test, n78 (band :78) with SCS 30 Khz (subcarrier_spacing 30) is used.

NR SA PUSCH TP Test 1 Config 04

These are the main configuration parameter for transform preconding. Transform Precoding is applied to msg3 by setting msg3_tf_precoding to true and applied to all the PUSCH by setting tf_precoding to true.

NR SA PUSCH TP Test 1 Config 05

 

The configuration in ue-nr-sa.cfg  (UEsim) is set as follows. TDD is used for UEsim to be aligned to Callbox (gNB) configuration. BANDWIDTH 20 and band :78, subcarrier_spacing:30 are configured to get aligned to gNB configuration.

NR SA PUSCH TP Test 1 Config 06

 

 

Perform the Test

check if callbox confgiuration (gNB configuration) is properly set as you intended by the command 'cell phy' and 'cell'.

NR SA PUSCH TP Test 1 Run 01

If gNB configuration is done as you desire, power on UE on UEsim.

NR SA 2step RACH Test 1 Run 02

Make it sure that call setup is properly established using 't' command.

NR SA PUSCH TP Test 1 Run 03

 

 

Log Analysis

Sample Log

You can confirm that msg3 transform precoding is enabled by checking out msg3-transformPrecoder IE in SIB1.

NR SA PUSCH TP Test 1 Log 01

Transform Precoding for PUSCH after msg3 can be confirmed by checking out transformPrecodingEnabled in RRC Setup. If transformPrecodingEnabled exists, it indicates transform precoding is enabled.

NR SA PUSCH TP Test 1 Log 02

Make it sure that all the PUSCH are properly received and decoded by gNB. PUSCH log print itself does not print any specific information about transform precoding.

NR SA PUSCH TP Test 1 Log 03

 

 

 

RRC / NAS Signaling

 

SIB1 (SA)

: This is the SIB1 message sent by gNB  to enable transform precoding for msg1. (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: systemInformationBlockType1: {

    cellSelectionInfo {

      ...

    },

    cellAccessRelatedInfo {

      ...

    },

    connEstFailureControl {

      ...

    },

    servingCellConfigCommon {

      downlinkConfigCommon {

        frequencyInfoDL {

          ...

        },

        initialDownlinkBWP {

          genericParameters {

            locationAndBandwidth 13750,

            subcarrierSpacing kHz30

          },

          pdcch-ConfigCommon setup: {

            ...

          },

          pdsch-ConfigCommon setup: {

            ...

          }

        },

        bcch-Config {

          ...

        },

        pcch-Config {

          ...

        }

      },

      uplinkConfigCommon {

        frequencyInfoUL {

          scs-SpecificCarrierList {

            {

              offsetToCarrier 0,

              subcarrierSpacing kHz30,

              carrierBandwidth 51

            }

          }

        },

        initialUplinkBWP {

          genericParameters {

            locationAndBandwidth 13750,

            subcarrierSpacing kHz30

          },

          rach-ConfigCommon setup: {

            rach-ConfigGeneric {

              prach-ConfigurationIndex 160,

              msg1-FDM one,

              msg1-FrequencyStart 3,

              zeroCorrelationZoneConfig 15,

              preambleReceivedTargetPower -110,

              preambleTransMax n7,

              powerRampingStep dB4,

              ra-ResponseWindow sl20

            },

            ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,

            ra-ContentionResolutionTimer sf64,

            prach-RootSequenceIndex l139: 1,

            msg1-SubcarrierSpacing kHz30,

            restrictedSetConfig unrestrictedSet,

            msg3-transformPrecoder enabled

          },

          pusch-ConfigCommon setup: {

            ...

          },

          pucch-ConfigCommon setup: {

            ...

          }

        },

        timeAlignmentTimerCommon infinity

      },

      ssb-PositionsInBurst {

        ...

      },

      ssb-PeriodicityServingCell ms20,

      tdd-UL-DL-ConfigurationCommon {

        ...

      },

      ...

    },

    ue-TimersAndConstants {

      ...

 

 

RrcSetup (SA)

: This is the RrcSetup message sent by gNB  to enable transform precoding for PUSCH after msg1. (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 {

        ...

        },

        physicalCellGroupConfig {

          ...

        },

        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,

                    transformPrecodingEnabled {

                    }

                  },

                  pusch-PowerControl {

                    ...

                  },

                  resourceAllocation resourceAllocationType1,

                  codebookSubset nonCoherent,

                  maxRank 1,

                  uci-OnPUSCH setup: {

                    ...

                  }

                },

                srs-Config setup: {

                  ...

                }

              },

              firstActiveUplinkBWP-Id 0,

              pusch-ServingCellConfig setup: {

              }

            },

            pdcch-ServingCellConfig setup: {

            },

            pdsch-ServingCellConfig setup: {

              ...

            },

            csi-MeasConfig setup: {

              ...