5G NR Resource Grid Visualization

Below is a link to download an excel spreadsheet of a srsRAN/srsUE iteration from MIB acquisition to RRC Setup Complete. The logs for this iteration are available on the Nuradio Concepts GitHub.

  • February 2nd, 2025 – I updated the frequency location of SIB1. I was originally mapping it based on PRB2 of the BWP.
  • February 4th, 2025 – Fixed the ZP-CSI-RS and NZP-CSI-RS locations and configurations

SSB

What do we know about the SSB given the known subcarrier spacing (SCS) of 15 kHz?

The SSB occupies 240 subcarriers (0 to 239) in the frequency domain, and 4 OFDM symbols (0 to 3) in the time domain. The SSB is made up of the Primary Synchronization Signal (PSS), Secondary Synchronization Signal (SSS), and the Physical Broadcast Channel (PBCH).

  • PSS is in symbol 0 and occupies 127 subcarriers (Subcarriers 56 to 182)
  • SSS is in symbol 2 and occupies 127 subcarriers (Subcarriers 56 to 182)
  • PBCH is in symbols 1, 2, and 3
    • Symbols 1 and 3 PBCH occupies subcarriers 0 to 239
    • Symbol 2 PBCH occupies subcarriers 0 to 47 and subcarrier 192 to 239

SSB Frequency Domain

Since the cells SCS is 15 kHz we know the following

  • 1 subcarrier = 15 kHz (.015 MHz)
  • 1 Resource Block = 12 subcarriers
    • 12 x .015 = .180 MHz per Resource Block (180 kHz)
  • SSB = 240 subcarriers = 20 Resource Blocks
    • .180 MHz x 20 = 3.6 MHz

The SSB spans 3.6 MHz for 15 kHz SCS

The center of the SSB (subcarrier 120) defines the frequency of the SSB

  • 1842.05 MHz
  • SSB NR- ARFCN 368410
  • GSCN 4604

The center frequency is 1842.05 MHz and the SSB is 3.6 MHz wide, then we can subtract half of the SSB from the center frequency to determine the start of the SSB

  • 1842.05 MHz – 1.8 MHz = 1840.25 MHz SSB Start

SSB Time Domain

This frequency falls under band n3 (1800 MHz FDD)

  • Frequency Range 1 (FR1)
  • 15 kHz SCS (numeroloy 0)
  • Frequency Division Duplex (FDD)
  • ≤ 3 GHz

The SSB Pattern for this cell is Case A where the location of the SSB depends on the index of the SSB, and the maximum number of SSB that can be transmitted in a half frame (5ms)

  • Any FDD frequency that is less than 3 GHz can have a maximum of 4 SSB (Lmax)

Each SSB index for SSB pattern Case A is given a time symbol index of {2, 8}+14·n, where….

  • SSB Index 1 = symbol 2
  • SSB Index 2 = symbol 8
  • SSB Index 3 = symbol 16 (2+14)
  • SSB Index 4 = symbol 22 (8+14)

PBCH/MIB – SFN

So how do we know how many SSB Indexes are transmitted in a cell or which index is the SSB the UE has detected?

  • The UE detects the SSB, where the PBCH transmits the PBCH Payload and Master Information Block (MIB)
  • PBCH Payload and MIB provide the current System Frame Number (SFN)
    • SFN 10 Bits (ranging from 0 to 1023, or 10.24 ms)
    • 6 Most Significant Bits are provided by the MIB
    • 4 Least Significant Bits are provided by the PBCH Payload
[PHY0-NR] [D] [ 656.0] PBCH-MIB: sfn=656 ssb_idx=0 hrf=n scs=15 ssb_offset=6 dmrs_typeA_pos=pos2 coreset0=12 ss0=0 barred=n intra_freq_reselection=n spare=0

Now the UE knows the SFN and SSB Index

  • SFN = 656.0
  • SSB Index = 0 (start symbol 2)

SIB1 Detection

Now the UE knows the location of the SSB in Time and Frequency domains and is synchronized with the cell on the downlink via the SFN. Now the UE needs to find System Information Block 1 (SIB1) for Cell Access parameters and Serving Cell configuration. There are a couple of steps that the UE must take in order to receive SIB1

  1. Use MIB parameters to determine the location of PDCCH with DCI 1_0 scrambled with SI-RNTI
    • pdcch-ConfigSIB1
      • controlResourceSet0
      • searchSpaceZero
  2. PDCCH DCI 1_0 with SI-RNTI provides time and frequency resource allocation for PDSCH carrying SIB1
[PHY0-NR] [D] [ 656.0] PBCH-MIB: sfn=656 ssb_idx=0 hrf=n scs=15 ssb_offset=6 dmrs_typeA_pos=pos2 coreset0=12 ss0=0 barred=n intra_freq_reselection=n spare=0

CORESET0 and searchspacezero provide parameters for a 3GPP defined lookup table (38.213 13-1 for 15 kHz SCS for SSB and PDCCH and 38.213 13-11 )

CORESET0 = 12 (38.213 13-1 )

  • 96 Resource Blocks in frequency domain
  • 1 Symbol in time domain
  • 38 resource block offset
    • this offset is from the start of the SSB, to the next complete resource block, which is defined by
      • SSB Start Frequency – kSSB (ssb-SubcarrierOffset) in number of subcarriers
      • 1840.24 MHz – .09 MHz(6 x .015 MHz) = 1840.16 MHz
    • Now apply the CORESET0 resource block offset of 38
      • .18 MHz (1 RB) x 38 RB = 6.84 MHz
      • 1840.16 MHz – 6.84 MHz = 1833.32 MHz CORESET0 start
CORESET0 starts 38 Resource Blocks from kSSB
  • Now from 1833.32 MHz, CORESET0 will span 96 Resource Blocks
    • .18 MHz x 96 = 17.28 MHz
    • 1833.32 + 17.28 MHz = 1850.6 MHz CORESET0 end
  • And depending on searchSpaceZero, CORESET0 will occupy 1 symbol in the time domain in the define slot and symbol indexes.

searchSpaceZero = 0

38.213 13-11
38.213 13 (UE procedure for monitoring Type0-PDCCH CSS sets)
  • Basically, the equation here equals 0, so according to the bullet from the except above, n0 = 0, and n0+1 = 1, so the monitoring occasion for CORESET0 will be slot 0 and 1 of SFN 656.
    • O = 0 (from table 13-11)
    • 2^µ = 2^0 (numerology 0 – µ0)
    • i = ssb index = 0
    • M = 1 (from table 13-11)
    • modN frame,µ/slot = mod10 (slots per frame for µ0)
  • First symbol index = 0, so since symbol 0 of SFN 656.0 has already passed, the UE will monitor 656.1 symbol 0 for CORESET0
[FAPI    ] [   656.1] DL_TTI.request slot=656.1, is_last_message_in_slot=false
	- PDCCH bwp=2:96 symb=0:1 nof_dcis=1
[PHY1-NR] [I] [ 656.1] PDCCH: cc=0, si-rnti=0xffff dci=1_0 ss=common0 L=2 cce=0 f_alloc=0x2a0 t_alloc=0x0 vrb_to_prb_map=0 mcs=5 rv=0 sii=0 coreset0_bw=96 reserved=0x0 
[PHY1-NR] [I] [ 656.1] PDCCH: coreset=0, 
  - coreset_id=0
  - mapping_type=interleaved
  - duration=1
  - freq_res=11111111111111110000000000000000000000000...
  - dmrs_scrambling_present=false (id=0)
  - precoder_granularity=reg_bundle
  - interleaver_size=2
  - reg_bundle_size=6
  - shift_index=99
  - offset_rb=2
CORESET0 time position at symbol 0 of n0+1

The UE detects and decodes PDCCH DCI 1_0 with CRC scrambled with SI-SNRI and receives the downlink grant for PDSCH

[MAC-NR ] [D] [ 656.1] new_grant_dl(): cc_idx=0, tti=6561, rnti=65535, pid=0, tbs=80, ndi=0, rv=0
[PHY1-NR] [I] [ 656.1] PDSCH: cc=0 pid=0 si-rnti=0xffff prb=(2,9) symb=(2,13) CW0: mod=QPSK tbs=80
Grant:
    rnti=0xffff
    rnti_type=SI-RNTI
    k=0
    mapping=A
    t_alloc=2:12
    f_alloc=2:8

Looking at the FAPI resource allocation for PDSCH, see that the PDSCH is transmitted in a BWP starting at RB 2 and spanning 96 RB’s (same size as CORESET0)

[FAPI    ] [   656.1] DL_TTI.request slot=656.1, is_last_message_in_slot=false
- PDSCH rnti=0xffff bwp=2:96 symb=2:12 CW: tbs=80 mod=2 rv_idx=0

Since the UE has not received SIB1 yet, it is not aware of any BWPs and does not explicitly print anything related to BWP in the UE log. So a bit confused here, but after looking at the logs for the other PDSCH that are received. The gNB logs explicitly state the BWP start and span and the resource allocation based on the PRBs of the BWP, and the UE logs the CRB based on the entire channel bandwidth.

  • t_alloc=2:12
    • Starting at symbol 2 and spanning 12 symbols
  • f_alloc=2:8
    • Starting at CRB 2 and spanning 8 RB

SIB1 Reception

The UE decodes SIB1 on the PDSCH and is provided important parameters for channel access, as well as serving cell configuration parameters. This is imperative moving forward, since before the reception of SIB1, the UE only knows the SSB frequency and time positions, though since the SSB does not define the center of the carrier, the UE does not know the full characteristics of the carrier associated with the SSB.

** srsUE is different that a real UE since the channel bandwidth is specified in the ue.conf file

                   servingCellConfigCommon
                        downlinkConfigCommon
                            frequencyInfoDL
                                frequencyBandList: 1 item
                                    Item 0
                                        NR-MultiBandInfo
                                            freqBandIndicatorNR: 3
                                offsetToPointA: 40 PRBs
                                scs-SpecificCarrierList: 1 item
                                    Item 0
                                        SCS-SpecificCarrier
                                            offsetToCarrier: 0
                                            subcarrierSpacing: kHz15 (0)
                                            carrierBandwidth: 106
                            initialDownlinkBWP
                                genericParameters
                                    locationAndBandwidth: 28875
                                    subcarrierSpacing: kHz15 (0)
                        uplinkConfigCommon
                            frequencyInfoUL
                                frequencyBandList: 1 item
                                    Item 0
                                        NR-MultiBandInfo
                                            freqBandIndicatorNR: 3
                                absoluteFrequencyPointA: 347592
                                scs-SpecificCarrierList: 1 item
                                    Item 0
                                        SCS-SpecificCarrier
                                            offsetToCarrier: 0
                                            subcarrierSpacing: kHz15 (0)
                                            carrierBandwidth: 106
                            initialUplinkBWP
                                genericParameters
                                    locationAndBandwidth: 28875
                                    subcarrierSpacing: kHz15 (0)
                        ssb-PositionsInBurst
                            inOneGroup: 80 [bit length 8, 1000 0000 decimal value 128]
                        ssb-PeriodicityServingCell: ms10 (1)

PointA and carrierBandwidth

PointA defines the center of subcarrier 0 of the lowest usable resource block (CRB 0) in the channel. To find PointA, the SIB1 parameter offsetToPointA is subtracted from the ssb-SubcarrierOffset (kSSB) position.

  • kSSB Position = 1840.16 MHz
  • offsetToPointA = 40 Resource Blocks
    • .18 MHz x 40 RB = 7.2 MHz
    • PointA = 1840.16 MHz – 7.2 MHz = 1832.96 MHz

carrierBandwidth defines the channel bandwidth in number of resource blocks

  • 106 RB * .18 MHz = 19.08 MHz (20 MHz including guard band)

If we add half of the carrierBandwidth to PointA, we will find the center frequency of the carrier.

  • PointA = 1832.96 MHz
  • half of carrierBandwidth = 9.54 MHz
    • 1832.96 MHz + 9.54 MHz = 1842.5 MHz

Bandwidth Part

The initial BWP for the UE is defined by locationAndBandwidth parameter using a Resource Indication Value (RIV) of 28875 which will give the UE a starting Resource Block and Span of Resource Blocks that the BWP occupies. To calculate this, use the following equations

38.214 (5.1.2.2.2)
  1. Check the “if” condition
    • N size/BWP = 275
      • 275/2 = 137.5
        • 106 RBs – 1 = 105 is ≤ 137.5
  2. Proceed to “then”
    • 275*(106-1)+0
      • 275*105=28875

So we can determine that the BWP starts at PRB 0 and spans 106 RBs

You can also use some RIV calculators

https://www.sqimway.com/rb_calc.php

Additional SSB Information

The ssb-PositionsInBurst parameter will give the UE information about other SSB indexes that might be transmitted in the cell.

  • The parameter is given as a bitmap in HEX as 80
    • 1000 0000 in binary bitmask

This means that there is only one SSB transmitted on the cell at SSB Index 0, which we have already discussed and know that SSB Index 0 is transmitted at symbol 2.

Prior to decoding SIB1, the UE assumes that the SSB periodicity is 20ms, though now that SIB1 has been decoded, the UE now knows that the ssb-PeriodicityServingCell is 10ms.

SSB Periodicity of 10ms

You can see on the resource grid that the SSB is transmitted every 10ms based on the SFN

[FAPI    ] [   657.0] DL_TTI.request slot=657.0, is_last_message_in_slot=true																		
- SSB pointA=40 L_max=4 pci=99 k_SSB=6	

[FAPI    ] [   658.0] DL_TTI.request slot=658.0, is_last_message_in_slot=false																																				
- SSB pointA=40 L_max=4 pci=99 k_SSB=6	

[FAPI    ] [   659.0] DL_TTI.request slot=659.0, is_last_message_in_slot=true																		
- SSB pointA=40 L_max=4 pci=99 k_SSB=6	

[FAPI    ] [   660.0] DL_TTI.request slot=660.0, is_last_message_in_slot=true																	
- SSB pointA=40 L_max=4 pci=99 k_SSB=6																																																																				

You might notice the ZP-CSI-RS and NZP-CSI-RS on Resource Grid following SIB1. The gNB is transmitting these reference signals, though the UE has not received the RRC Setup message yet to know how the CSI are configured in the serving cell.

Random Access (Contention Based)

SIB1 provides the UE with information regarding the transmission of the PRACH preamble, which is sent by the UE and initiates the Random Access procedure.

rach-ConfigCommon: setup (1)
    setup
        rach-ConfigGeneric
            prach-ConfigurationIndex: 1
            msg1-FDM: one (0)
            msg1-FrequencyStart: 8
            zeroCorrelationZoneConfig: 0
            preambleReceivedTargetPower: -100 dBm
            preambleTransMax: n7 (4)
            powerRampingStep: dB4 (2)
            ra-ResponseWindow: sl10 (4)
        ssb-perRACH-OccasionAndCB-PreamblesPerSSB: one (3)
            one: n64 (15)
        ra-ContentionResolutionTimer: sf64 (7)
        prach-RootSequenceIndex: l839 (0)
            l839: 1

MSG1 Time Domain Allocation

prach-ConfigurationIndex of 1, from 38.211 Table 6.3.3.2-2 (FR1 with paired spectrum) give the UE the subframe number (4) and starting symbol index (0) for the PRACH preamble transmission.

38.211 Table 6.3.3.2-2 (FR1 with paired spectrum)

MSG1 Frequency Domain Allocation

msg1-FrequencyStart defines 8 Resource Block offset from PRB0 for the lowest PRACH transmit occasion. msg1-FDM defines that there is a single PRACH transmit occasion, so in this case, the 8 RB offset applies to the PRACH transmission. Then reference prach-RootSequenceIndex of l839 which indicates the Long Sequence PRACH format which is a length of 839 subcarriers. Reference 38.211 Table 6.3.3.2-1

38.211 Table 6.3.3.2-1

For this configuration, the PRACH Preamble will utilize 1.25 kHz SCS, and will be allocated 6 Resource Blocks for the transmission. So we can break down the frequency domain allocation as follows

  1. msg1-FrequencyStart = 8 Resource Blocks
    • PRB 8 will be the first Resource Block for the PRACH occasion
  2. 6 Resource Block allocation
    • PRB 8 + 6 = PRB 13 (The frequency domain allocation is from start of PRB 8 to the end of PRB 13)
  3. 839 subcarriers x 1.25 subcarrier spacing = 1048.75 kHz PRACH Transmission occupation
  4. 6 Resource Blocks x 12 subcarriers x 15 kHz = 1080 kHz PRACH Resource Block Allocation
  5. 1048.75 – 1080 = 31.25 kHz guard band allocation
    • 13 subcarriers (16.25 kHz) guard band allocated at the beginning of the occasion
    • 12 subcarriers (15 kHz) guard band allocated at the end of the occasion

The value k applies so that beginning of the guard band is offset 15 kHz from the adjacent subcarrier, so the first six 1.25 SCS represent 7.5 kHz of offset, and so that k starts 15 kHz from the adjacent subcarrier.

MSG 2

Once the gNB receives MSG1, it processes the Preamble and then schedules PDCCH DCI 1_0 scrambled with RA-RNTI and PDSCH for MSG2 RAR Payload. The PDCCH will be used to allocate resources for the PDSCH carrying the MSG2 RAR payload. The gNB FAPI then requests DL TTI resources for the Physical Channels and a Data Request.

[SCHED   ] [   658.0] Slot decisions pci=99 t=19us (1 PDSCH, 0 PUSCHs):
- DL PDCCH: rnti=0x39 type=ra-rnti cs_id=0 ss_id=1 format=1_0 cce=0 al=4 
- RAR PDSCH: ra-rnti=0x39 rb=[0..3) symb=[1..14) tbs=10 mcs=0 rv=0 grants (1): tc-rnti=0x4601: rapid=0 ta=4 time_res=0
[FAPI    ] [   658.0] DL_TTI.request slot=658.0, is_last_message_in_slot=false
	- PDCCH bwp=2:96 symb=0:1 nof_dcis=1
	- SSB pointA=40 L_max=4 pci=99 k_SSB=6
	- PDSCH rnti=0x39 bwp=2:96 symb=1:13 CW: tbs=10 mod=2 rv_idx=0
[FAPI    ] [   658.0] Tx_Data.request slot=658.0 nof_pdus=1

The PHY layer transmits the PDCCH and PDSCH on the assigned TTI

[PHY     ] [   658.0] PDCCH: rnti=0x0039 ss_id=1 format=1_0 cce=0 al=4
  rnti=0x0039
  ss_id=1
  format=1_0
  slot=658.0
  cp=normal
  bwp=[2, 98)
  symb=[0, 1)
  f_re=111111111111111100000000000000000000000000000
  mapping=coreset0
  shift_idx=99
  cce=0
  al=4
[PHY     ] [   658.0] PDSCH: rnti=0x0039 prb=[0, 3) symb=[1, 14) mod=QPSK rv=0 tbs=10 t=30.1us
  rnti=0x0039
  bwp=[2, 98)
  prb=[0, 3)
  symb=[1, 14)
  mod=QPSK
  rv=0
  n_id=99
  ref_point=CRB0

The UE receives the PDCCH which provides the DL Grant for PDSCH carrying MSG2 RAR – the CORESET here is the same in the frequency domain as CORESET0 that was used for SIB1. Though SIB1 provides common configuration parameters for PDCCH and PDSCH

pdcch-ConfigCommon: setup (1)
    setup
        commonSearchSpaceList: 1 item
            Item 0
                SearchSpace
                    searchSpaceId: 1
                    controlResourceSetId: 0
                    monitoringSlotPeriodicityAndOffset: sl1 (0)
                        sl1: NULL
                    monitoringSymbolsWithinSlot: 8000 
                    nrofCandidates
                        aggregationLevel1: n0 (0)
                        aggregationLevel2: n0 (0)
                        aggregationLevel4: n1 (1)
                        aggregationLevel8: n0 (0)
                        aggregationLevel16: n0 (0)
                    searchSpaceType: common (0)
                        common
                            dci-Format0-0-AndFormat1-0
pdsch-ConfigCommon: setup (1)
    setup
        pdsch-TimeDomainAllocationList: 1 item
            Item 0
                PDSCH-TimeDomainResourceAllocation
                    mappingType: typeA (0)
                    startSymbolAndLength: 40

monitoringSlotPeriodicityAndOffset set to 1, means that the UE monitors every slot for PDCCH and within each slot it monitoring monitoringSymbolsWithinSlot which is set to 8000 or 1000 0000 0000 0000, which mean symbol index 0 of every slot until it finds PDCCH with DCI 1_0.

[MAC-NR ] [D] [ 657.7] SCHED: Searching RAR-RNTI=0x39, tti=6577
[MAC-NR ] [D] [ 657.8] SCHED: Searching RAR-RNTI=0x39, tti=6578
[MAC-NR ] [D] [ 657.9] SCHED: Searching RAR-RNTI=0x39, tti=6579
[MAC-NR ] [D] [ 658.0] SCHED: Searching RAR-RNTI=0x39, tti=6580
[PHY_LIB] [I] [    0]  PDCCH Rx: K=65; E=432; M=216; n=9;
[PHY_LIB] [I] [    0]  Found DCI in L=2,ncce=0

The PDCCH is detected and decoded and the DL grant for PDSCH is extracted.

[PHY2-NR] [I] [ 658.0] PDCCH: cc=0, ra-rnti=0x0039 dci=1_0 ss=common1 L=2 cce=0 f_alloc=0xc0 t_alloc=0x0 vrb_to_prb_map=0 mcs=0
[PHY2-NR] [I] [ 658.0] PDCCH: coreset=0, 
  - coreset_id=0
  - mapping_type=interleaved
  - duration=1
  - freq_res=11111111111111110000000000000000000000000...
  - dmrs_scrambling_present=false (id=0)
  - precoder_granularity=reg_bundle
  - interleaver_size=2
  - reg_bundle_size=6
  - shift_index=99
  - offset_rb=2
[MAC-NR ] [D] [ 658.0] new_grant_dl(): cc_idx=0, tti=6580, rnti=57, pid=0, tbs=10, ndi=0, rv=0

The grant is explicitly stated in the UE logs for the PDSCH

[PHY2-NR] [I] [ 658.0] PDSCH: cc=0 pid=0 ra-rnti=0x39 prb=(2,4) symb=(1,13) CW0: mod=QPSK tbs=10 R=0.133 rv=0 CRC=OK
 Grant:
    rnti=0x39
    rnti_type=RA-RNTI
    k=0
    mapping=A
    t_alloc=1:13
    f_alloc=2:3

Lets compare how the resources are logged in both the gNB and the UE

gNB SchedulergNB FAPIgNB PHYUE PHY
PDCCHn/abwp=2:96 symb=0:1bwp=[2, 98) symb=[0, 1)f_alloc=0xc0 t_alloc=0x0
PDSCHrb=[0..3) symb=[1..14)bwp=2:96 symb=1:13bwp=[2, 98) prb=[0, 3) symb=[1, 14)t_alloc=1:13 f_alloc=2:3
prb=[0, 3) symb=[1, 14)

gNB Scheduler

  • PDSCH
    • Frequency Domain
      • rb 0..3
        • this will start at PRB 0 of BWP and end at PRB 3
    • Time Domain
      • symb 1..14
        • start at symbol index 1 and end at symbol index 14

gNB FAPI

  • PDCCH
    • Frequency Domain
      • bwp 2:96
        • BWP PRB 0 starts at CRB 2 and spans 96 RBs
    • Time Domain
      • symb 0:1
        • start at symbol index 0 and span 1 symbol
  • PDSCH
    • Frequency Domain
      • bwp 2:96
        • BWP PRB starts at CRB 2 and spans 96 RBs
    • Time Domain
      • symb 1:13
        • start at symbol 1 and span 13 symbols

gNB PHY

  • PDCCH
    • Frequency Domain
      • bwp 2, 98
        • BWP PRB 0 starts at CRB 2 and ends at CRB 98
    • Time Domain
      • symb 0,1
        • start at symbol index 0 and end at symbol index 1
  • PDSCH
    • Frequency Domain
      • bwp 2, 98
        • BWP PRB 0 starts at CRB 2 and ends at CRB 98
      • prb 0, 3
        • PDSCH will occupy PRB 0 and end at PRB 3
    • Time Domain
      • symb 1, 14
        • start at symbol index 1 and end at symbol index 14

UE PHY

  • PDCCH
    • Frequency Domain
      • f_alloc=0xc0 (192)
    • Time Domain
      • t_alloc=0x0 (0000)
  • PDSCH
    • Frequency Domain
      • f_alloc=2:3
        • Starts at CRB 2 and spans 3 RB
    • Time Domain
      • t_alloc=1:13
        • Starts at symbol index 1 and spans 13 symbols

It took me awhile to figure out exactly how the PDCCH f_alloc value mapped to the PDSCH f_alloc value… But, alas, I realized what I was doing wrong…

PDCCH f_alloc = 0xC0 (192 in decimal)

  • 192 is a RIV value that needs to be applied to the BWP size of 96 Resource Blocks
38.214 (5.1.2.2.2)

Where, if the length in number of resource blocks minus 1 (3-1=2) is less than or equal to the size of the bandwidth divided by 2 (96/2=48) then the size of the BWP (96) is multiplied by the length in number of resource blocks minus 1 (3-1=2) plus the starting resource block (0) will equal the RIV.

  • 96 x 2 = 192

CSI-RS

Further along when the UE receives the RRC Setup message from the gNB, it will be able to configure the ZP-CSI-RS and NZP-CSI-RS

ZP-CSI-RS

zp-CSI-RS-ResourceToAddModList: 1 item
    Item 0
        ZP-CSI-RS-Resource
            zp-CSI-RS-ResourceId: 0
            resourceMapping
                frequencyDomainAllocation: row4 (2)
                    row4: 80 [bit length 3, 5 LSB pad bits, 100. .... decimal value 4]
                nrofPorts: p4 (2)
                firstOFDMSymbolInTimeDomain: 8
                cdm-Type: fd-CDM2 (1)
                density: one (1)
                    one: NULL
                freqBand
                    startingRB: 0
                    nrofRBs: 108
            periodicityAndOffset: slots20 (5)
                slots20: 2

NZP-CSI-RS

nzp-CSI-RS-ResourceToAddModList: 5 items
    Item 0
        NZP-CSI-RS-Resource
            nzp-CSI-RS-ResourceId: 0
            resourceMapping
                frequencyDomainAllocation: row2 (1)
                    row2: 8000 [bit length 12, 4 LSB pad bits, 1000 0000  0000 .... decimal value 2048]
                nrofPorts: p1 (0)
                firstOFDMSymbolInTimeDomain: 4
                cdm-Type: noCDM (0)
                density: one (1)
                    one: NULL
                freqBand
                    startingRB: 0
                    nrofRBs: 108
            periodicityAndOffset: slots20 (5)
                slots20: 2
    Item 1
        NZP-CSI-RS-Resource
            nzp-CSI-RS-ResourceId: 1
            resourceMapping
                frequencyDomainAllocation: row1 (0)
                    row1: 10 [bit length 4, 4 LSB pad bits, 0001 .... decimal value 1]
                nrofPorts: p1 (0)
                firstOFDMSymbolInTimeDomain: 4
                cdm-Type: noCDM (0)
                density: three (2)
                    three: NULL
                freqBand
                    startingRB: 0
                    nrofRBs: 108
            periodicityAndOffset: slots20 (5)
                slots20: 12
    Item 2
        NZP-CSI-RS-Resource
            nzp-CSI-RS-ResourceId: 2
            resourceMapping
                frequencyDomainAllocation: row1 (0)
                    row1: 10 [bit length 4, 4 LSB pad bits, 0001 .... decimal value 1]
                nrofPorts: p1 (0)
                firstOFDMSymbolInTimeDomain: 8
                cdm-Type: noCDM (0)
                density: three (2)
                    three: NULL
                freqBand
                    startingRB: 0
                    nrofRBs: 108
            periodicityAndOffset: slots20 (5)
                slots20: 12
    Item 3
        NZP-CSI-RS-Resource
            nzp-CSI-RS-ResourceId: 3
            resourceMapping
                frequencyDomainAllocation: row1 (0)
                    row1: 10 [bit length 4, 4 LSB pad bits, 0001 .... decimal value 1]
                nrofPorts: p1 (0)
                firstOFDMSymbolInTimeDomain: 4
                cdm-Type: noCDM (0)
                density: three (2)
                    three: NULL
                freqBand
                    startingRB: 0
                    nrofRBs: 108
            periodicityAndOffset: slots20 (5)
                slots20: 13
    Item 4
        NZP-CSI-RS-Resource
            nzp-CSI-RS-ResourceId: 4
            resourceMapping
                frequencyDomainAllocation: row1 (0)
                    row1: 10 [bit length 4, 4 LSB pad bits, 0001 .... decimal value 1]
                nrofPorts: p1 (0)
                firstOFDMSymbolInTimeDomain: 8
                cdm-Type: noCDM (0)
                density: three (2)
                    three: NULL
                freqBand
                    startingRB: 0
                    nrofRBs: 108
            periodicityAndOffset: slots20 (5)
                slots20: 13
nzp-CSI-RS-ResourceSetToAddModList: 2 items
    Item 0
        NZP-CSI-RS-ResourceSet
            nzp-CSI-ResourceSetId: 0
            nzp-CSI-RS-Resources: 1 item
                Item 0
                    NZP-CSI-RS-ResourceId: 0
    Item 1
        NZP-CSI-RS-ResourceSet
            nzp-CSI-ResourceSetId: 1
            nzp-CSI-RS-Resources: 4 items
                Item 0
                    NZP-CSI-RS-ResourceId: 1
                Item 1
                    NZP-CSI-RS-ResourceId: 2
                Item 2
                    NZP-CSI-RS-ResourceId: 3
                Item 3
                    NZP-CSI-RS-ResourceId: 4
            trs-Info: true (0)

Frequency Domain Allocation

frequencyDomainAllocation refers to a row of a lookup table in 38.211 (7.4.1.5.3-1) and is followed by a bit map

  • zp-CSI-RS-ResourceId: 0 = row4
    • 80 (3 MSB)
      • 100
  • nzp-CSI-RS-ResourceId: 0 = row2
    • 8000 (12 MSB)
      • 1000 0000 0000
  • nzp-CSI-RS-ResourceId: 1 = row1
  • nzp-CSI-RS-ResourceId: 2 = row1
  • nzp-CSI-RS-ResourceId: 3 = row1
  • nzp-CSI-RS-ResourceId: 4 = row1
    • 10 (4 MSB)
      • 0001
38.211 (7.4.1.5.3-1)

density and the number of antenna ports go together so that in the case where row1 has a single port and a density of 3 then 3 symbols across 12 subcarriers will contain the CSI-RS, and in the case where row4 has 4 ports and density of 1, then 4 consecutive symbols (4 ports) will be across 12 subcarriers. The frequency position of the subcarriers is based on the associated bitmap.

Leave a Reply

Discover more from

Subscribe now to keep reading and get access to the full archive.

Continue reading