Amarisoft

NR SA - SSB / CSI RS

The purpose of this tutorial is a little straightforward. it is about how to change SSB bitmap, but implementation is not that simple because just increasing the number of active bits in SSB bitmap may cause collision of other signals for example coliision with CSI RS as shown below.

NR SA SSB CSI RS CommonError 01

To resolve this kind of collision, you may need to change the resource allocation of other signals (e.g, CSI RS) to avoid the collision with the SSB. What I am going to show you in this tutorial is to change the resource allocation of CSI RS when the number of active bits in SSB bitmap is increased.

Table of Contents

Introduction

In 5G NR (New Radio) systems, Synchronization Signal Blocks (SSBs) play a critical role in enabling initial access, beam management, and mobility operations for user equipment (UE). The SSB bitmap determines which SSB beams are active, directly influencing the coverage and capacity of the gNB (next-generation NodeB) cell. However, modifying the SSB bitmap—particularly by increasing the number of active SSB beams—can introduce complexities within the radio frame, specifically due to the risk of resource collisions with other downlink signals such as Channel State Information Reference Signals (CSI-RS). The NR frame structure is carefully partitioned, and overlapping resource allocations can degrade system performance or cause signaling failures. Therefore, proper coordination and reconfiguration of signal resource allocations are essential when adjusting the SSB bitmap. This tutorial addresses the technical challenges associated with modifying the SSB bitmap, focusing on how to resolve potential collisions with CSI-RS. By guiding you through the process of adjusting CSI-RS resource allocations in response to changes in the SSB bitmap, this tutorial ensures that you can maintain robust and efficient network operation while extending SSB coverage or enhancing beamforming capabilities. The concepts and procedures discussed here are integral to the effective deployment and optimization of 5G NR networks, reflecting the intricate balance required in radio resource planning and management.

Summary of the Tutorial

This tutorial outlines the procedure for low-layer testing of SSB bitmap configuration and CSI-RS resource allocation in an NR (5G) system using Amarisoft tools. The focus is on ensuring that SSB and CSI-RS resources do not collide, particularly with all SSB positions enabled.

Summary of Methodology:

This procedure ensures robust configuration and testing of SSB and CSI-RS coexistence, focusing on resource separation and verification through both configuration checks and real-time log analysis.

Test Setup

Test setup for this tutorial is as shown below.  This is just for low layer testing, you may not need any complicated IP layer setup.

Only one SDR card is used. The antenna goes to the first card, RF 1 on the panel and sdr 0 in the configuration. The other ports stay empty.

The UE talks to the eNB over the air rather than through a cable. That is fine for this test, because nothing here depends on an exact power level. What matters is that the UE can decode the SSB and report CSI.

Callbox rear panel with the antenna on the first SDR card and a UE connecting over the air

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 : n78, Case C - SSB bitmap 11111111

In this test, I will show you the case where all of the SSB bits are enabled. Enabling the ssb bit is very simple.. changing just one parameter is enough but the problem rises in the case where the enabled SSB bit collides with other signals especially with CSI-RS.  You may need to change CSI-RS so that it does not collide with the enabled SSB. It would not be easy to change CSI-RS properly without clear picture in your mind. So my recommendation is to draw some picture showing the physical resources for various physical signals as shown below. In this test, it is assumed that TDD_Config 2 of our sample configuration : gnb-sa.cfg.

First draw a picture showing all the major physical signal resources except  and mark which slots/symbols are allowed for CSI-RS and which are not allowed as shown below.

The grid covers one 5 ms TDD period. At 30 kHz subcarrier spacing that is subframes 0 to 4 and slots 0 to 9. The bottom row is the UL/DL pattern from TDD-UL-DL-Common, with slots 0 to 7 downlink in blue and slots 8 and 9 uplink in green.

Three of the five colours mark symbols that CSI-RS has to stay out of. Grey is the SSB itself. Dark grey is what PDCCH and PDSCH DMRS are likely to take. Light blue is the uplink part of the pattern.

With ssb_pos_bitmap at 11111111 the grey covers most of slots 0 to 3. What is left is slots 4 to 7, and every CSI-RS resource in this test has to go somewhere in there.

Resource grid over one 5 ms TDD period marking which symbols CSI-RS must avoid

Then allocate the various CSI-RS to any of the allowed slots/symbols. There can be many possibilities, but following diagram shows only one of those possibilities and this will configured into the configuration file for this test.

Four colours are added on top of the same grid. Magenta is the two port nzp CSI-RS used for the CSI report. Red is the four single port nzp CSI-RS that make up the TRS. Yellow is the zp CSI-RS and cyan is the CSI-IM.

Everything sits in slots 4 and 5. Slot 4 carries the CSI report resource, the first TRS pair and the zp CSI-RS. Slot 5 carries the second TRS pair and the CSI-IM.

This is only one workable arrangement. Slots 6 and 7 are free as well, so you can move a resource there if you need slot 4 or 5 for something else. What you cannot do is put anything back into slots 0 to 3.

Same resource grid with the nzp, zp and CSI-IM resources placed in slots 4 and 5

Configuration

The configuration shown here is common configuration for all the subtests belonging to Test 1 and I will not show this configuration repeatedly for every subtest.

I have used gnb-sa-ssb-11111111.cfg which is copied and modified from gnb-sa.cfg

Callbox config directory with enb.cfg linked to gnb-sa-ssb-11111111.cfg

I am using the default mme, ims config as shown below. ims.default.cfg is used for ims.cfg and mme-ims.cfg is used for mme.cfg

Callbox config directory with mme.cfg linked to mme-ims.cfg and ims.cfg to ims.default.cfg

In gnb-sa-ssb-11111111.cfg , it is configured as follows.

TDD is used for duplex mode and TDD DL/UL configuration is set to NR_TDD_CONFIG 2. This is one of the preconfigured set in the configuration file provided by sample configuration.

NR_TDD is 1 and FR2 is 0, so this is an FR1 TDD cell. NR_TDD_CONFIG takes 1, 2, 3 or 4 in FR1, and 2 is the one that matches LTE TDD config 2.

The rest of the block is left at the sample values. N_ANTENNA_DL is 2 and N_ANTENNA_UL is 1, NR_BANDWIDTH is 20 and USE_SRS is 0.

N_ANTENNA_DL matters more here than it looks. The CSI report resource further down the file branches on it, so changing it to 1 or 4 changes which nzp CSI-RS definition gets compiled in.

gNB define block with NR_TDD_CONFIG set to 2 for the FR1 TDD cell

In this example, ssb_pos_bitmap is set to "11111111" meaning that every SSB burst is activated.

The cell is band 78 at dl_nr_arfcn 632628, which is 3489.42 MHz, with 30 kHz subcarrier spacing. That is the FR1 TDD branch and it is the one in use.

ssb_pos_bitmap is a bit string whose length depends on the downlink frequency. The FR2 branch above it uses 64 bits and the band 7 branch below it uses 4. This cell takes 8, and all 8 are set.

Neither of the other two branches is compiled in. FR2 is 0, so band 257 at 28 GHz is skipped, and NR_TDD is 1, so the band 7 FDD branch at the bottom is skipped as well.

nr_cell_list band 78 branch with ssb_pos_bitmap set to 11111111

Followings are configurations for csi-rs. Just looking at the numbers would not make much sense.  Check out the resource allocation diagram above again and check out the symbol number (OFDM symbol number) and offset (slot) in this configuration and compare them with the diagram shown above.

The parameters to be noted in this example are as follows : (NOTE : the detailed meaning of each of these parameter in terms of 3GPP, check out this note)

csi_rs_id 0 is the CSI report resource. N_ANTENNA_DL is 2, so the #elif branch is the one that applies: n_ports 2, frequency_domain_allocation other, bitmap 100000 and cdm_type fd_cdm2. The N_ANTENNA_DL == 1 branch above it is not used here.

first_symb is 3 and offset is 4, so this resource lands on symbol 3 of slot 4. period is 80 slots. The offset has to be non zero, otherwise the resource falls into slot 0 and runs straight into the SSB.

rb_start is 0 and l_crb is -1, so it spans the whole bandwidth. density is 1, and power_control_offset and power_control_offset_ss are both 0.

nzp CSI-RS resource 0 for the CSI report with n_ports 2 at symbol 3 of slot 4

csi_rs_id 1 and 2 are the first half of the TRS. Both use n_ports 1 with frequency_domain_allocation row1, bitmap 0001, cdm_type no_cdm and density 3.

They differ only in first_symb, which is 6 on the first and 10 on the second. Both take offset 4 and period 40, so the pair lands in slot 4 with four symbols between them.

rb_start is 0 and l_crb is -1 on both, so each one covers the whole bandwidth.

csi_rs_id 3 and 4 complete the TRS. Every field matches csi_rs_id 1 and 2 apart from offset, which is 5 instead of 4.

That puts this pair in slot 5, again at symbols 6 and 10, with period 40. csi_rs_id 1 to 4 together make up the TRS, and all four are grouped into a single nzp CSI-RS resource set with trs_info set.

If you need to move them, move both entries together. Each pair is only useful while it stays inside one slot.

nzp CSI-RS resources 1 and 2 forming the slot 4 TRS pair at symbols 6 and 10

nzp CSI-RS resources 3 and 4 forming the slot 5 TRS pair at symbols 6 and 10

This is the configuration for interference measurement. symbol_location and offset are configured not to collide with SSB and all other settings are set to be same as in the original sample configuration file.

pattern is 1, subcarrier_location is 8 and symbol_location is 12. offset is 5 and period is 80, so the CSI-IM sits on symbol 12 of slot 5.

Slot 5 already carries the second TRS pair at symbols 6 and 10. Symbol 12 keeps the CSI-IM clear of both of them.

rb_start is 0 with l_crb -1, so it runs across the whole bandwidth like the rest of the resources.

csi_im_resource on symbol 12 of slot 5 with pattern 1 and subcarrier location 8

This is for blank resource elements configuration within PDSCH RB. Set first_symb and offset so that it does not collide with the SSB burst.

frequency_domain_allocation is row4 with bitmap 100, n_ports is 4 and cdm_type is fd_cdm2. density is 1.

first_symb is 8 and offset is 4, so the muted resource elements fall on symbol 8 of slot 4, with period 80. Slot 4 also holds the CSI report resource at symbol 3 and the first TRS pair at symbols 6 and 10, so symbol 8 fits between them.

rb_start is 0 and l_crb is -1, so the muting applies across the whole bandwidth.

zp CSI-RS resource on symbol 8 of slot 4 with row4 allocation and 4 ports

Perform Test

Check out the cell phy configuration and see if overall configuration is set as intended

The cell comes up as NR on band n78 with BW 20. The DL and UL ARFCN are both 632628 because the cell is TDD, and the SSB sits at 632544.

DL shows ANT 2 and NL 2, UL shows ANT 1 and NL 1. That matches N_ANTENNA_DL 2 and N_ANTENNA_UL 1. Subcarrier spacing is 30 kHz on both sides with 256QAM available.

The cell output below adds the identity. pci is 500, TAC is 0x000064 and the PLMN is 00101. That pci is worth noting, because the CSI-RS scrambling falls back to it.

cell phy output for the n78 20 MHz cell with SSB at ARFCN 632544

Power on UE and wait until the initial attach is complete and some phy data goes through

The PRACH line reads cell=01 with ta=5 and snr=12.5 dB, so the UE found the cell and got in. In the table CL is 001 and the RNTI is 4601.

cqi comes back at 13 and then settles around 11, and ri is 2. The UE is reporting a usable two layer channel, and that is the part to look at here. A CSI-RS colliding with the SSB shows up as a missing or stuck CQI rather than as a failed attach.

snr is 6.4 dB on the uplink with pl 61 dB and phr 38. The link is not especially strong, which is what you get from an over the air setup.

eNB t trace after attach with cqi around 11 and rank 2 reported

Log Analysis

Sample Log

This is just for showing the association between the configuration shown above and IE (Information Elements) in RRC.

You can confirm on ssb position with ssb-PositionInBurst IE in SIB1. Check out if this is properly set as you configured in the configuration file.

inOneGroup comes across as 'FF'H, which is the 11111111 you set written as hex. All eight positions are advertised.

The same message carries the TDD pattern the resource grid was drawn from. tdd-UL-DL-ConfigurationCommon has referenceSubcarrierSpacing kHz30 and pattern1 with dl-UL-TransmissionPeriodicity ms5, nrofDownlinkSlots 7, nrofDownlinkSymbols 6, nrofUplinkSlots 2 and nrofUplinkSymbols 4.

That works out to 10 slots per period at 30 kHz. Slots 0 to 6 are full downlink, slot 7 has 6 downlink symbols and 4 uplink symbols, and slots 8 and 9 are uplink. ssb-PeriodicityServingCell is ms20.

SIB1 with ssb-PositionsInBurst inOneGroup FF and the TDD pattern

Now check out all the elements related to CSI reference signal and make it sure that they are not colliding with SSB burst in terms of slots and symbols.

First check out the IE zp-CSI-RS-ResourceToAddModList in RRC Setup. Make it sure that it does not collide with SSB burst by checking periodicityAndOffset IE.

zp-CSI-RS-ResourceId 0 comes back with frequencyDomainAllocation row4: '100'B, nrofPorts p4, cdm-Type fd-CDM2 and density one. Those are the configured values arriving unchanged.

firstOFDMSymbolInTimeDomain is 8 and periodicityAndOffset is slots80: 4. That is first_symb 8 and offset 4 on a period of 80 slots, so slot 4, well clear of the SSB in slots 0 to 3.

freqBand reads startingRB 0 with nrofRBs 52. That is what l_crb -1 turns into once the gNB resolves it against the cell bandwidth.

RRC Setup zp-CSI-RS-ResourceToAddModList with slots80 offset 4 and symbol 8

Then check out the IE nzp-CSI-RS-ResourceToAddModList in RRC Setup. Make it sure that noe of the nzp CSI RS does collide with SSB burst by checking firstDMRSSymbolInTimeDomain and periodicityAndOffset IE.  

nzp-CSI-RS-ResourceId 3 and 4 are the two entries in view. Both are row1: '1'H with nrofPorts p1, cdm-Type noCDM and density three, and both carry periodicityAndOffset slots40: 5.

firstOFDMSymbolInTimeDomain is 6 on Id 3 and 10 on Id 4. With the offset of 5 that puts the pair on symbols 6 and 10 of slot 5, exactly as configured. The tail of Id 2 above the pair shows slots40: 4, which is the slot 4 pair.

scramblingID comes out as 500 on both. scrambling_id was left at its default of -1 in the file, so the gNB falls back to n_id_cell, and n_id_cell is the pci 500 the cell reported.

RRC Setup nzp-CSI-RS resources 3 and 4 on symbols 6 and 10 with slots40 offset 5

Now check out the IE csi-IM-ResourceToAddModList in RRC Setup. Make it sure that it does not collide with SSB burst by checking csi-IM-ResourceElementPattern and periodicityAndOffset IE.  

csi-IM-ResourceId 0 carries csi-IM-ResourceElementPattern pattern1 with subcarrierLocation-p1 s8 and symbolLocation-p1 12. periodicityAndOffset is slots80: 5, so it sits on symbol 12 of slot 5.

Just above it a resource set ends with resources 1, 2, 3, 4 and trs-Info true. That is the confirmation that the four single port resources are being used as the TRS and not for reporting.

csi-ResourceConfigToAddModList follows underneath. csi-ResourceConfigId 0 points at nzp-CSI-RS-ResourceSetList 0 and Id 1 points at csi-IM-ResourceSetList 0. All of them are bwp-Id 0 with resourceType periodic.

RRC Setup csi-IM resource on symbol 12 of slot 5 with the TRS resource set above itt

Just to confirm the CSI report is not interruped by SSB burst configuration, check if all the CSI report is being received at the expected timing.

The Layer filter is on PHY here rather than RRC. The reports arrive on PUCCH with format=2 at prb=1 prb2=49 symb=8:2, and the csi field is the payload.

The rows run 40 ms apart with no gaps, at 12:36:41.101, .141, .181 and so on. That even spacing is the thing to check. A CSI-RS sitting under the SSB would show up as reports going missing rather than as anything failing outright.

The csi values themselves move around, 1000111 then 1111100 then 1000110. That is the UE reacting to the channel and is not a problem.

PHY log with CSI reports arriving on PUCCH format 2 every 40 ms

RRC / NAS Signaling

The two messages below are what carry everything set up in this test onto the air. SIB1 broadcasts the SSB positions to every UE, and RrcSetup delivers the nzp CSI-RS, CSI-IM and zp CSI-RS resources to one UE. Both are trimmed to the parts that matter here.

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 {

      ...

      ssb-PositionsInBurst {

        inOneGroup 'FF'H

      },

      ssb-PeriodicityServingCell ms20,

 

|

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,

    ...

        spCellConfig {

          spCellConfigDedicated {

              ...

            csi-MeasConfig setup: {

              nzp-CSI-RS-ResourceToAddModList {

                {

                  nzp-CSI-RS-ResourceId 0,

                  resourceMapping {

                    frequencyDomainAllocation other: '100000'B,

                    nrofPorts p2,

                    firstOFDMSymbolInTimeDomain 3,

                    cdm-Type fd-CDM2,

                    density one: NULL,

                    freqBand {

                      startingRB 0,

                      nrofRBs 52

                    }

                  },

                  powerControlOffset 0,

                  powerControlOffsetSS db0,

                  scramblingID 500,

                  periodicityAndOffset slots80: 4,

                  qcl-InfoPeriodicCSI-RS 0

                },

                {

                  nzp-CSI-RS-ResourceId 1,

                  resourceMapping {

                    frequencyDomainAllocation row1: '1'H,

                    nrofPorts p1,

                    firstOFDMSymbolInTimeDomain 6,

                    cdm-Type noCDM,

                    density three: NULL,

                    freqBand {

                      startingRB 0,

                      nrofRBs 52

                    }

                  },

                  powerControlOffset 0,

                  powerControlOffsetSS db0,

                  scramblingID 500,

                  periodicityAndOffset slots40: 4,

                  qcl-InfoPeriodicCSI-RS 0

                },

                {

                  nzp-CSI-RS-ResourceId 2,

                  resourceMapping {

                    frequencyDomainAllocation row1: '1'H,

                    nrofPorts p1,

                    firstOFDMSymbolInTimeDomain 10,

                    cdm-Type noCDM,

                    density three: NULL,

                    freqBand {

                      startingRB 0,

                      nrofRBs 52

                    }

                  },

                  powerControlOffset 0,

                  powerControlOffsetSS db0,

                  scramblingID 500,

                  periodicityAndOffset slots40: 4,

                  qcl-InfoPeriodicCSI-RS 0

                },

                {

                  nzp-CSI-RS-ResourceId 3,

                  resourceMapping {

                    frequencyDomainAllocation row1: '1'H,

                    nrofPorts p1,

                    firstOFDMSymbolInTimeDomain 6,

                    cdm-Type noCDM,

                    density three: NULL,

                    freqBand {

                      startingRB 0,

                      nrofRBs 52

                    }

                  },

                  powerControlOffset 0,

                  powerControlOffsetSS db0,

                  scramblingID 500,

                  periodicityAndOffset slots40: 5,

                  qcl-InfoPeriodicCSI-RS 0

                },

                {

                  nzp-CSI-RS-ResourceId 4,

                  resourceMapping {

                    frequencyDomainAllocation row1: '1'H,

                    nrofPorts p1,

                    firstOFDMSymbolInTimeDomain 10,

                    cdm-Type noCDM,

                    density three: NULL,

                    freqBand {

                      startingRB 0,

                      nrofRBs 52

                    }

                  },

                  powerControlOffset 0,

                  powerControlOffsetSS db0,

                  scramblingID 500,

                  periodicityAndOffset slots40: 5,

                  qcl-InfoPeriodicCSI-RS 0

                }

              },

              nzp-CSI-RS-ResourceSetToAddModList {

                {

                  nzp-CSI-ResourceSetId 0,

                  nzp-CSI-RS-Resources {

                    0

                  }

                },

                {

                  nzp-CSI-ResourceSetId 1,

                  nzp-CSI-RS-Resources {

                    1,

                    2,

                    3,

                    4

                  },

                  trs-Info true

                }

              },

              csi-IM-ResourceToAddModList {

                {

                  csi-IM-ResourceId 0,

                  csi-IM-ResourceElementPattern pattern1: {

                    subcarrierLocation-p1 s8,

                    symbolLocation-p1 12

                  },

                  freqBand {

                    startingRB 0,

                    nrofRBs 52

                  },

                  periodicityAndOffset slots80: 5

                }

              },

              csi-IM-ResourceSetToAddModList {

                {

                  csi-IM-ResourceSetId 0,

                  csi-IM-Resources {

                    0

                  }

                }

              },

              csi-ResourceConfigToAddModList {

                {

                  csi-ResourceConfigId 0,

                  csi-RS-ResourceSetList nzp-CSI-RS-SSB: {

                    nzp-CSI-RS-ResourceSetList {

                      0

                    }

                  },

                  bwp-Id 0,

                  resourceType periodic

                },

                {

                  csi-ResourceConfigId 1,

                  csi-RS-ResourceSetList csi-IM-ResourceSetList: {

                    0

                  },

                  bwp-Id 0,

                  resourceType periodic

                },

                {

                  csi-ResourceConfigId 2,

                  csi-RS-ResourceSetList nzp-CSI-RS-SSB: {

                    nzp-CSI-RS-ResourceSetList {

                      1

                    }

                  },

                  bwp-Id 0,

                  resourceType periodic

                }

              },

              csi-ReportConfigToAddModList {

                {

                  reportConfigId 0,

                  resourcesForChannelMeasurement 0,

                  csi-IM-ResourcesForInterference 1,

                  reportConfigType periodic: {

                    reportSlotConfig slots80: 9,

                    pucch-CSI-ResourceList {

                      {

                        uplinkBandwidthPartId 0,

                        pucch-Resource 13

                      }

                    }

                  },

                  reportQuantity cri-RI-PMI-CQI: NULL,

                  reportFreqConfiguration {

                    cqi-FormatIndicator widebandCQI,

                    pmi-FormatIndicator widebandPMI

                  },

                  timeRestrictionForChannelMeasurements notConfigured,

                  timeRestrictionForInterferenceMeasurements notConfigured,

                  codebookConfig {

                    codebookType type1: {

                      subType typeI-SinglePanel: {

                        nrOfAntennaPorts two: {

                          twoTX-CodebookSubsetRestriction '111111'B

                        },

                        typeI-SinglePanel-ri-Restriction '03'H

                      },

                      codebookMode 1

                    }

                  },

                  groupBasedBeamReporting disabled: {

                  },

                  cqi-Table table2,

                  subbandSize value1

                }

              }

            },

            tag-Id 0

          }