Amarisoft

NR SA Bandwidth Change

The purpose of this tutorial is to show you how to change CBW(Channel Bandwidth, System BW) in Amari Callbox. The changing configuration in configuration file is very simple, but figuring out the proper bandwidth that can be applicable for the DUT can be tricky.  It is assumed that you don't have any previous experience with Amari callbox.

Up to 100 Mhz per component carrier, Amarisoft support any bandwidth specified in 3gpp for both FR1 and FR2 as of now.

Changing Band and Bandwidth change in NR is not as simple/straightforward as in LTE since it requires to change several different information elements in RRC message and figuring out those value is not so simple. But this process is simplified greatly in Amaricall box since RRC configuration is automatically set by Callbox. What you have to do is to set a few key configuration parameters set to be valid as per 3GPP specification.

Table of Contents

Introduction

The Amari Callbox is a sophisticated network testing and simulation platform widely used for cellular technology validation, device verification, and protocol analysis in both research and commercial environments. By emulating base station behavior, the Amari Callbox supports a wide range of 3GPP-compliant features across multiple radio access technologies, including LTE and 5G NR (New Radio). One of the critical aspects of cellular network configuration is the selection and management of Channel Bandwidth (CBW), also known as System Bandwidth, which determines the radio frequency spectrum allocated to a carrier. The configuration of CBW directly impacts network throughput, device interoperability, and compliance with 3GPP standards. Unlike LTE, where changing the operating band and bandwidth is relatively straightforward, NR (New Radio) introduces increased complexity due to its flexible numerology, broader supported bandwidths, and intricate RRC (Radio Resource Control) requirements. Amari Callbox streamlines this process by automating much of the underlying RRC configuration, allowing engineers and testers to focus on key parameters without delving into the low-level protocol intricacies. This tutorial provides a structured approach to modifying the CBW in Amari Callbox, offering both architectural context and practical guidance to help users achieve successful test setups tailored to their DUT (Device Under Test) capabilities.

Summary of the Tutorial

This tutorial outlines procedures for performing NR standalone (SA) bandwidth change testing, specifically focusing on modifying the channel bandwidth from 20MHz to 40MHz on band n78 with 30kHz subcarrier spacing, as well as providing best practices for related configuration scenarios and troubleshooting common errors.

The tutorial emphasizes careful alignment of configuration parameters with both 3GPP requirements and UE capabilities, and provides procedural steps and configuration practices for successful NR SA bandwidth change testing.

Test Setup

Test setup for this tutorial is as shown below.

A commercial handset is the UE here and it reaches the gNB over the air. There is no RF cable between the two.

Only the first SDR card carries an antenna, which is RF 1 / sdr 0 on the chassis. One cell on one card is enough for a bandwidth change, since nothing in this test needs a second carrier.

handset connecting over the air to the Callbox with one antenna on sdr 0

Check before Trying

1. Check following 3GPP tables and make it sure that the band/bandwidth you are trying to test is valid in terms of 3GPP

2. Check UE capability Information and make it sure that your DUT support the band and bandwidth you want to try

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 : NR/SA-N78-SCS30Khz-40Mhz

This is to show how to modify the default configuration tile from 20Mhz channel bandwidth to 40Mhz.

Feasibility Check

Check if the bandwidth you want to try is allowed in terms of 3GPP spec as shown below

The upper table lists the channel bandwidths allowed for each band and subcarrier spacing. On n78 with 30 kHz spacing every width from 10 to 100 MHz is marked yes, so the 40 MHz used in this test is inside the table. At 15 kHz the same band stops at 50 MHz.

The 5 MHz column is blank for n78 at all three spacings. That width is simply not available on this band, whatever else you configure.

The lower table gives the band edges. n78 runs from 3300 to 3800 MHz and the duplex mode is TDD, so uplink and downlink share the same range. That range is what the channel has to fit inside once you pick an ARFCN.

3GPP channel bandwidth and operating band tables for n78

Check if the bandwidth you want to try is allowed in terms of UE capability. The UE that I am using support scs30 only and support 20,40,50,60,80,100 Mhz

The scs-15kHz and scs-60kHz entries are all zeros in both lists, so this UE offers nothing at those spacings. Only scs-30kHz has bits set, and that is why the test keeps subcarrier_spacing at 30.

channelBWs-DL and channelBWs-UL carry the same value here, so the UE claims the same set of widths in both directions. A UE that reports different values would need each list checked on its own.

UE capability channelBWs lists with only the scs-30kHz entry populated

Configuration

I used the configuration file gnb-sa-n78-40Mhz.cfg which is copied from gnb-sa.cfg and modified.

enb config directory with enb.cfg linked to gnb-sa-n78-40Mhz.cfg

Configured in gnb-sa-n78-40Mhz.cfg is as shown below. In this configuration, I changed the channel bandwidth using NR_BANDWIDTH and keep band, dl_nr_arfcn, subcarrier spacing as it is with the default configuration (gnb-sa.cfg)

NR_BANDWIDTH is set to 40, and that one macro is the whole change from the default file. The bandwidth parameter inside the cell block reads it, so a single edit takes the cell from 20 to 40 MHz.

The three values below it are the ones deliberately left alone: band 78, dl_nr_arfcn 632628 which is 3489.42 MHz, and subcarrier_spacing 30 kHz. Holding the centre frequency while widening the channel is what keeps this a bandwidth change and nothing more.

NR_TDD is 1 and FR2 is 0, so the branch that applies is the one with band 78. The FR2 branch above it with band 257 and the FDD branch below it with band 7 are both compiled out and play no part in this test.

gNB defines with NR_BANDWIDTH 40 and the n78 branch of nr_cell_list

Perform the Test

Run LTE service and check cell configuration in (enb) screen as shown below. Confirm that the Bandwidth are configured as you intended. You can check the channel bandwidth with BW value in cell phy output. Note that SSB ARFCN would automatically change according to BW change.

BW reads 40 in the cell phy line, which is NR_BANDWIDTH taking effect. The DL and UL ARFCN are both 632628 as configured, and they match because the cell is TDD.

The SSB ARFCN comes out as 631968, and that value appears nowhere in the configuration file. gscn is left at its default of 0. That tells the gNB to place the SSB at the lowest frequency fitting inside the cell bandwidth. Widening the channel therefore moves the SSB on its own. Setting ssb_nr_arfcn is how you would pin it instead.

cell main below it gives the identity side of the same cell: pci 500, TAC 0x000064 and PLMN 00101.

cell phy and cell main output showing BW 40 and SSB ARFCN 631968

Power on UE and let it complete the attach

The base station is started with ltelaunch.sh ENB. The RF line reports dl_freq and ul_freq both at 3489.420 MHz on band n78, with two downlink antennas and one uplink antenna.

PRACH: cell=01 seq=1 ta=5 snr=11.7 dB is the random access that begins the attach. After it the UE holds RNTI 4601 as UE_ID 1, running two layers with a DL mcs around 20.

gNB launch output and trace with the UE attached on RNTI 4601

Log Analysis

In this section, I would not go through the full log. I would show you just the parts that are related to the test in this tutorial.

If you open /tmp/gnb0.log file (WebGUI does not show this information), you will see the following information at the beginning. Blue and red lined part is automatically configured by AmariCall box. Red lined part is MIB configuration and it is very tricky to set proper values for these parameters manually and error prone, but these are configured automatically in Amari Callbox. (NOTE : The exact print out at this part may vary depending on the release of the callbox software (it may print out more information in the later release), but overall contents and concept would be same)

NOTE : Since 2022-06-17, MIB logging is supported (Check out this) and you can confirm the red lined part directly from MIB message.

n_rb_dl and n_rb_ul both read 106. That is the resource block count a 40 MHz channel at 30 kHz spacing works out to, and it is what the bandwidth parameter was turned into.

ssb_arfcn on the blue underlined line is 631968, the same value the cell phy output reported. The red underlined line then places the SSB and CORESET0 inside the channel: ssb_prb 15:21 with k_ssb 12, and coreset0_prb 3:48 with coreset0_idx 10.

dl_mu and ul_mu are both 1, which is the numerology index that goes with 30 kHz. mode reads TDD and pci is 500, matching the cell main output.

gnb0.log header with n_rb 106, ssb_arfcn and the coreset0 placement

In the WebGUI log, you can easily check the bandwidth related configurations as shown below. The downlink band, bandwidth, subcarrier spacing can be confirmed from frequencyInfoDL and initialDownlinkBWP IE. These IEs are automatically set by gNB software based on the configuration file.

freqBandIndicatorNR reads 78 and carrierBandwidth reads 106, the same resource block count the gnb0.log header printed. subcarrierSpacing is kHz30 in both frequencyInfoDL and initialDownlinkBWP.

locationAndBandwidth inside initialDownlinkBWP is 28875. That single value encodes both the start and the width of the initial bandwidth part, so it changes whenever the channel bandwidth does.

The message carrying all of this is the SIB1 selected in the list on the left. offsetToPointA is 30 and offsetToCarrier is 0.

SIB1 downlinkConfigCommon with carrierBandwidth 106 and locationAndBandwidth 28875

The uplink band, bandwidth, subcarrier spacing can be confirmed from frequencyInfoUL and initialUplinkBWP IE. These IEs are automatically set by gNB software based on the configuration file.

carrierBandwidth is 106 and subcarrierSpacing is kHz30 here as well, and locationAndBandwidth is the same 28875 as the downlink. The cell is TDD, so the two directions end up with matching values.

frequencyInfoUL carries no frequencyBandList of its own. A TDD uplink reuses the downlink band, so there is nothing separate to send.

rach-ConfigCommon and pusch-ConfigCommon sit below the marked part. They travel in the same SIB1 but none of it is what this test changed.

SIB1 uplinkConfigCommon carrying the same carrierBandwidth 106

RRC / NAS Signaling

The two messages below are where the bandwidth settings reach the UE. SIB1 carries them in SA, while in NSA they travel inside an LTE rrcConnectionReconfiguration. Reading them shows which IE each configuration parameter ends up as.

SIB1 (SA)

: This is the SIB1 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: systemInformationBlockType1: {

    ...

    servingCellConfigCommon {

      downlinkConfigCommon {

        frequencyInfoDL {

          frequencyBandList {

            {

              freqBandIndicatorNR 78

            }

          },

        ...

        },

        initialDownlinkBWP {

          genericParameters {

            locationAndBandwidth 13750,

            subcarrierSpacing kHz30

          },

          

      },

      uplinkConfigCommon {

        frequencyInfoUL {

          scs-SpecificCarrierList {

            {

              offsetToCarrier 0,

              subcarrierSpacing kHz30,

              carrierBandwidth 51

            }

          },

          p-Max 10

        },

        initialUplinkBWP {

          genericParameters {

            locationAndBandwidth 13750,

            subcarrierSpacing kHz30

          },

          

}

rrcConnectionReconfiguration for NR Addition (NSA)

: This is the RRC message sent by eNB (LTE) to add NR. (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: rrcConnectionReconfiguration: {

    rrc-TransactionIdentifier 0,

    criticalExtensions c1: rrcConnectionReconfiguration-r8: {

    ....

      nonCriticalExtension {

        nonCriticalExtension {

          nonCriticalExtension {

            nonCriticalExtension {

              nonCriticalExtension {

                nonCriticalExtension {

                  nonCriticalExtension {

                    nonCriticalExtension {

                      nr-Config-r15 setup: {

                        endc-ReleaseAndAdd-r15 FALSE,

                        nr-SecondaryCellGroupConfig-r15 {

                          rrc-TransactionIdentifier 0,

                          criticalExtensions rrcReconfiguration: {

                            secondaryCellGroup {

                              ...

                              spCellConfig {

                                servCellIndex 1,

                                reconfigurationWithSync {

                                  spCellConfigCommon {

                                    physCellId 500,

                                    downlinkConfigCommon {

                                      frequencyInfoDL {

                                        absoluteFrequencySSB 632256,

                                        frequencyBandList {

                                          78

                                        },

                                        absoluteFrequencyPointA 632016,

                                        scs-SpecificCarrierList {

                                          {

                                            offsetToCarrier 0,

                                            subcarrierSpacing kHz30,

                                            carrierBandwidth 51

                                          }

                                        }

                                      },

                                      initialDownlinkBWP {

                                        genericParameters {

                                          locationAndBandwidth 13750,

                                          subcarrierSpacing kHz30

                                        },

                                    ...

                                    },

                                    uplinkConfigCommon {

                                      frequencyInfoUL {

                                        scs-SpecificCarrierList {

                                          {

                                            offsetToCarrier 0,

                                            subcarrierSpacing kHz30,

                                            carrierBandwidth 51

                                          }

                                        }

                                      },

                                      initialUplinkBWP {

                                        genericParameters {

                                          locationAndBandwidth 13750,

                                          subcarrierSpacing kHz30

                                        },

 

Tips

Two cases need more than a change of the bandwidth parameter. The first is 5 MHz, which forces a different subcarrier spacing. The second is giving each cell of a multi cell configuration its own width.

Changing BW to 5 Mhz

In many cases, BW change would work just by changing Bandwidth parameters and selecting TDD/FDD according to 3GPP table and UE capability. But you may need extra cautions when you try to change BW to 5Mhz since it support only 15Khz not only for SSB but also other physical channels. Also there is another restriction on Amari callbox limiting ra_window_size to 10ms max. You may refer to this example configuration that I verified working with Amari Callbox and Amari UEsim : gnb-sa-5Mhz.cfg and ue-nr-sa-5Mhz.cfg .

Setting different BW to each cell

In most of the default configuration samples provided by the installation package, bandwidth parameter is set in cell_default : {  } or in nr_cell_default: {} meaning that the same bandwidth is used for all cells. But there would be some cases where you want to configure different bandwidth for each cell. In this case, you can change the configuration as follows.

Follwing is an example ;

Step 1 :

The bandwidth line inside nr_cell_default is the one to comment out. Everything else in the block stays where it is, so subcarrier spacing and the two antenna counts are still shared by every cell.

  nr_cell_default: {

#if NR_TDD == 1

    subcarrier_spacing: 30, /* kHz */

#else

    subcarrier_spacing: 15, /* kHz */

#endif

    //bandwidth: NR_BANDWIDTH, /* MHz */   <== Comment out

    n_antenna_dl: N_ANTENNA_DL,

    n_antenna_ul: N_ANTENNA_UL,

Step 2 :

Each entry of nr_cell_list then carries a bandwidth line of its own. The two cells here use NR_BANDWIDTH_1 and NR_BANDWIDTH_2, which are macros you define yourself at the top of the file.

The rest of each entry is what already differed between the cells: rf_port 0 against 1, cell_id 0x01 against 0x02, and a separate band and dl_nr_arfcn under each branch.

  nr_cell_list: [

  {

    rf_port: 0,

    cell_id: 0x01,

    n_id_cell: 500,

    ncell_list : [

      {cell_id: 2},

    ],

 

#if NR_TDD == 1

    band: 78,

    dl_nr_arfcn: 632628,

#else

    band: 7,

    dl_nr_arfcn: 526000,

#endif

    bandwidth: NR_BANDWIDTH_1,  <==  Add bandwidth config for the first cell. it is assumed that you defined NR_BANDWIDTH_1 at the beginning of the configuration file.

  },

  {

    rf_port: 1,

    cell_id: 0x02,

    n_id_cell: 501,

    ncell_list : [

      {cell_id: 1},

    ],

 

#if NR_TDD == 1

    band: 41,

    dl_nr_arfcn: 510006,

#else

    band: 7,

    dl_nr_arfcn: 532000,

#endif

    bandwidth: NR_BANDWIDTH_2,  <==  Add bandwidth config for the second cell. it is assumed that you defined NR_BANDWIDTH_2 at the beginning of the configuration file.

  },

  ], /* nr_cell_list */

NOTE :  If you want to configure differntly not only for Bandwidth but also for TDD/FDD or TDD_ConfigPatterns, the configuration change would get a little bit complicated. Check out this tutorial.

Frequent Errors

Followings are some of the frequent errors (common errors) you may encounter when you try to set your own band, frequency (arfcn) and bandwidth

the DL frequency must be a multiple of XXX kHz

You would get this error when you set arfcn which is not divisible by the raster frequency specified for each band in 3GPP as shown below.

The marked column is the one that produces this error. It reads 100 kHz for every band listed, so an ARFCN that does not land on that grid is refused.

The two range columns give the allowed N_REF values, with the step size in angle brackets between the first and the last. n1 uplink runs from 384000 to 396000 in steps of 20, so 384020 is a valid ARFCN and 384010 is not.

3GPP table of applicable NR-ARFCN per band with the raster column marked

cell bandwidth does not fit in band definition

You would get this error when you set arfcn too low or too high so that the configured bandwidth gets out of lower or upper boundary of the band as illustrated below.

Case A on the left is an ARFCN sitting too close to the bottom of the band. The centre is inside the band, but the lower half of the channel falls below the minimum frequency.

Case B on the right is the same fault at the top, with half the channel running past the maximum frequency.

The wider the channel, the further from either edge the ARFCN has to sit. A 40 MHz cell needs roughly 20 MHz of room on each side of its centre.

diagram of a channel falling below and above the band edges

Could not find a SSB frequency compatible with the channel bandwidth and the CoReSet 0 parameters

This error occurs mostly when you configured the coreset 0 to be wider than the channel bandwidth you configured or a part of Coreset 0 gets out of the channel band. Check out this tutorial for further details.