5G/NR - CSI RS

 

 

 

CSI RS in a Nutshell

 

  • What is it for ? It is a special type of Reference Signal being transmitted by gNB for UE to use in order to estimate downlink radio channel quality.
  • In LTE, CRS (Cell Reference Signal) is usually used for this purpose but NR does not have CRS. You may consider CSI RS in NR as a counter part of CRS in LTE.
  • Main difference between CRS(LTE) and CSI RS (NR) is that CSI RS should be configured by RRC to be transmitted (meaning that it is not mandatory signal) whereas CRS is always being transmitted.
  • Another difference is that NR CSI-RS is designed with consideration for beamforming.
  • There are many different options for the number of CSI RS ports : 1,2,4,8,16,24,32
  • 1 port configuration (p1) is mainly used for TRS (Tracking Refernece Signal) and multi port configuration (e.g, p2 or higher) are mainly used for CSI measurement
  • CSI RS can be transmitted in any OFDM symbols and in subcarriers in almost arbitrary (not 100% arbitrary but super flexibily) way as configured in RRC message.

CSI RS  in Detail

As in LTE CSI, NR CSI (Channel Status Information) is a mechanism that a UE measure various radio channel quality and report the result to Network(gNB).

There are pretty complicated factors involved in CSI operation, but this page would focus on CSI signal generation and Resource Mapping. Other CSI operation procedure will be explained in other page.

For most of LTE case, we don't need any special signal for CSI since we used Cell Specific Reference Signal. However, from LTE TM9 we stared using a special reference signal for CSI. So if you have some understandings on LTE CSI Reference signal in TM9 or higher, it would be relatively easier for you to understand this page even if NR CSI RS(Reference Signal) is constructed more complicated way comparing to LTE CSI RS.

Before going into the details, it may help to have a simple picture in mind. The gNB transmits a signal that the UE already knows – it knows exactly which resource elements carry it and exactly what value each of those resource elements should hold. So when the UE receives it, any difference between what it expected and what it actually got is caused by the radio channel and nothing else. That is the whole idea of a reference signal, and CSI-RS is simply the reference signal that NR provides for measuring the downlink channel.

Now the natural question is : if LTE already had reference signals, why does NR need such a complicated one ? The short answer is flexibility. LTE CRS was always there, always in the same place, in every subframe, whether anybody needed it or not. That is convenient for the UE but expensive for the network – it burns resources and it radiates energy all the time. NR took the opposite approach : transmit a reference signal only where and when it is needed, and let RRC decide the details. The price you pay for that flexibility is exactly what makes this page long : almost nothing about CSI-RS is fixed, so almost everything has to be signalled.

It also helps to know that CSI-RS is not used for only one purpose. The same physical signal is reused for several different jobs, and which job it is doing is decided purely by how it is configured :

  • Channel quality measurement – the classic use. The UE measures the channel and reports CQI/PMI/RI back to the network. This normally uses a multi-port configuration (p2 and above).
  • Beam management – the network sweeps beams and the UE reports which one it hears best (L1-RSRP).
  • Time/Frequency tracking (TRS) – a single-port configuration used to keep the UE's timing and frequency locked. Covered in the TRS section.
  • Interference measurement – done with a companion resource called CSI-IM, which is a set of REs where the network deliberately sends nothing.

NOTE : If you find the tables in the next few sections overwhelming on first reading, that is completely normal and you are not missing anything. A practical way to read this page is to skim the tables, then jump straight to the worked examples and follow one of them end to end. Once you have seen a single example fully resolved, the tables stop looking like an encrypted document and start looking like what they really are – a lookup.

Sequence Generation and Resource Mapping

As you may notice in the following equation, NR CSI is based on Pseudo Random Sequence. Then this sequence is multipied by sepcially designed weighting sequence in both time domain and frequency domain and than scaled by power scaling factor. And then this sequence is mapped to a set of specific resource elements in Resource Grid. All of these process can be summarized as follows and so many factors are involved in this procedure.

If you are not the physical layer developer who need to implement this part, you don't need to go through this to the full details, but it will be beneficial to pay attention to various parameters (especially RRC parameters) involved in this process.

The equation looks intimidating, but the good news is that it is really answering two completely separate questions, and you can think about them one at a time :

  • What values do I transmit ? – this is the sequence generation part. A pseudo random sequence is generated, modulated, and then multiplied by the CDM weights.
  • Where do I put them ? – this is the resource mapping part. It decides which subcarriers and which OFDM symbols carry those values.

Most of the confusion around CSI-RS comes from mixing these two together. They are almost independent : you can change where the signal is mapped without changing a single value in the sequence, and you can change the sequence (by changing the scrambling ID) without moving a single resource element. Keep them in separate boxes in your head and the rest of this page gets much easier.

One more thing worth noticing early : the sequence is generated as a function of the slot number and symbol number, not just once at configuration time. That is why the same CSI-RS resource carries different values in different slots, and it is also why the UE has to be time synchronised before it can use CSI-RS at all – if the UE thinks it is in the wrong slot, it will generate the wrong reference sequence and the measurement becomes meaningless.

Tables for Resource Element Mapping

Following table contains everything about the physical resource allocation for CSI-RS. If you just take a first look, it would be almost like an encrypted document and no idea on what it mean. Follow through the explaination in this note and try to get clear undestandings on examples and you will gradually get familiar with this table.

NOTE : For the intuitive and visual understanding on how this table is mapped onto the resource grid, check out this visual tutorial.

< 38.211-Table 7.4.1.5.3-1: CSI-RS locations within a slot. >

 

The reference location of CSI-RS in time domain is determined by RRC layer as below.

Do not try to memorize this table, and do not try to read it top to bottom. In practice you never read the whole thing – you land on exactly one row and everything you need comes from that single row. The whole table is really just a catalogue of pre-approved patterns, and the RRC configuration is how the network tells you which one it picked.

The way to use it is always the same three steps :

  • Step 1 – find your row. The combination of nrofPorts, density and cdm-Type from RRC picks out one row, and only one row. This is a lookup, not a calculation.
  • Step 2 – read the pattern off that row. The row tells you how many REs are used per port, and gives you the (k̄, l̄) list which is the relative position of each RE within the pattern.
  • Step 3 – anchor the pattern. The row also tells you how many bits the frequency domain bitmap has (that is why the ASN.1 has row1/row2/row4/other with different sizes). The bitmap gives you the frequency anchor, and firstOFDMSymbolInTimeDomain gives you the time anchor.

So the row decides the shape of the pattern, and RRC decides where that shape is placed. If you keep that division in mind, the table becomes much less frightening – you are only ever using one line of it.

The reference location of CSI-RS in frequency domain (k1,k2,k3) is determined by RRC layer as below

  •  
  •  
  •  

    f(i) is the bit number of the i th bit in the bitmap(CSI-RS-ResourceMapping.frequencyDomainAllocation) set to one, repeated across every 1/density.

    Example : Row 4 (FD-CDM2, Density 1):

    • Bitmap:  [b2 b1 b0] = 101 (bits 0 and 2 set).
    • f(0) = 0, f(1) = 2. therefore
      • ki= 4 × f(0) = 4 × 0 = 0,  
      • ki= 4 × f(1) = 4× 2 = 8.

Ports, Density, cdm-Type are specified by following RRC parameters

Tables for CDM Sequence Generation

CDM table is used for CSI-RS signal generation as shown below.

Each element values of CDM tables are specified in 38.211 as shown below.

< 38.211 - Table 7.4.1.5.3-2: The sequences wf(k) f and wt(l) for cdm-Type equal to 'no CDM'. >

< 38.211 - Table 7.4.1.5.3-3: The sequences wf(k) f and wt(l) for cdm-Type equal to fd-CDM2 >

< 38.211 - Table 7.4.1.5.3-4: The sequences wf(k) f and wt(l) for cdm-Type equal to cdm4-FD2-TD2. >

< 38.211 - Table 7.4.1.5.3-5: The sequences wf(k) f and wt(l) for cdm-Type equal to cdm8-FD2-TD4. >

< 38.211 - Table 7.4.1.5.3-6: The supported combinations of Ntot, K and N when the number of CSI-RS ports is 48, 64, or 128. >

It is worth pausing on why CDM exists at all, because the table makes much more sense afterwards. Suppose the network has 8 antenna ports and wants the UE to measure all of them. The obvious approach is to give every port its own resource elements – but that costs 8 times the overhead, and those REs cannot carry data.

CDM (Code Division Multiplexing) is the trick that avoids paying that price. Several ports transmit on the very same resource elements, but each port multiplies its signal by a different orthogonal code. Because the codes are orthogonal, the UE can separate the ports again at the receiver. The naming tells you exactly how the code is spread :

  • noCDM – no code applied. One port per RE, the simplest case.
  • fd-CDM2 – a length-2 code spread over the frequency domain, i.e. over 2 adjacent subcarriers. 2 ports share the same REs.
  • cdm4-FD2-TD2 – a length-4 code spread over 2 subcarriers and 2 symbols. 4 ports share the same REs.
  • cdm8-FD2-TD4 – a length-8 code over 2 subcarriers and 4 symbols. 8 ports share the same REs.

This is also why the tables below are expressed as two separate weights, wf (frequency direction) and wt (time direction). The actual weight applied to a given RE is simply the product of the two.

NOTE : there is a practical consequence that catches people out. Because CDM spreads a code across several REs, the UE can only recover the ports correctly if the channel is roughly constant across those REs. That is fine in most conditions, but it is the reason CDM patterns are kept small and compact rather than spread far apart.

RRC Parameter : NZP-CSI-RS-Resource

Almost all of the contents in this page is about the IE(Information Element) resourceMapping. The IE resourceMapping is a part of the NZP-CSI-RS-Resource as shown below.

Before reading the field list, it helps to know where this IE sits in the bigger picture, because CSI-RS configuration is layered and it is easy to lose track of which level you are looking at :

  • NZP-CSI-RS-Resource (this IE) – describes one CSI-RS resource. Where it sits in frequency and time, how many ports, which CDM type, what scrambling ID, how often it repeats.
  • NZP-CSI-RS-ResourceSet – a group of the above. This is the level where the network says 'these resources belong together', and where trs-Info lives.
  • CSI-ReportConfig – says what the UE should actually measure and report using those resources, and how often.

In other words this IE answers 'what does the signal look like and where is it', while the levels above it answer 'what is it for'. A very common source of confusion is expecting a resource on its own to produce a report – it will not. A resource is only transmitted and measured because something above it refers to it.

NZP, by the way, simply means Non-Zero Power : this is a CSI-RS that actually radiates. Its counterpart, ZP-CSI-RS, uses almost the same resource description but transmits nothing at all.

NZP-CSI-RS-Resource ::= SEQUENCE {
   nzp-CSI-RS-ResourceId      NZP-CSI-RS-ResourceId,
   resourceMapping            CSI-RS-ResourceMapping,
   powerControlOffset         INTEGER (-8..15),
   powerControlOffsetSS       ENUMERATED{db-3, db0, db3, db6} OPTIONAL, -- Need R
   scramblingID               ScramblingId,
   periodicityAndOffset       CSI-ResourcePeriodicityAndOffset OPTIONAL,-
   qcl-InfoPeriodicCSI-RS     TCI-StateId OPTIONAL, -- Cond Periodic
   ...
}
                                                                                                                                

resourceMapping : Refer to the section CSI-RS-ResourceMapping for the details.

powerControlOffset : Power offset of PDSCH RE to NZP CSI-RS RE. Value in dB

powerControlOffsetSS : Power offset of NZP CSI-RS RE to SSS RE. Value in dB

qcl-InfoPeriodicCSI-RS : For a target periodic CSI-RS, contains a reference to one TCI-State in TCI-States for providing the QCL source and QCL type. For periodic CSI-RS, the source can be SSB or another periodic-CSI-RS. Refers to the TCI-State which has this value for tci-StateId and is defined in tci-StatesToAddModList in the PDSCH-Config included in the BWPDownlink corresponding to the serving cell and to the DL BWP to which the resource belongs to.

In short, this indicates the tci-StateId to which this CSI-RS is QCLed.

How UE figure out which CSI-RS the network is using ? (CSI-RS-ResourceMapping)

When Network allocate the CSI-RS, it selects a specific row from 38.211-Table 7.4.1.5.3-1 and fill in a set of resource elements with the specific signal. This part would be straightforward.. the challenging part is how UE can figure out which CSI-RS the gNB(Network) is using.

The answer is that Network informs UE of all the details of CSI-RS via RRC message. Let's look into what kind of RRC parameters get involved in this process.

This is worth stating plainly because it removes a lot of mystery : the UE never guesses, and the UE never searches. Unlike PSS/SSS, where the UE genuinely has to hunt blindly for a signal it has not been told about, CSI-RS is fully described in advance by RRC. By the time a CSI-RS is transmitted, the UE already knows the exact subcarriers, the exact symbols, the exact slots and the exact sequence.

So the question 'how does the UE figure it out' really becomes 'which RRC fields carry which piece of the answer'. There are only four pieces, and the next two sections walk through them :

  • Which row of the table ? – from nrofPorts, cdm-Type and density.
  • Where in frequency ? – from frequencyDomainAllocation (the bitmap) plus freqBand (which RBs are covered at all).
  • Where in time, within the slot ? – from firstOFDMSymbolInTimeDomain.
  • Which slots ? – from periodicityAndOffset, covered in the transmission timing section.

If you can answer those four questions from a real RRC message, you can draw the CSI-RS on a resource grid yourself – which is exactly what the examples later in this page do.

How to determine CSI-RS port and cdm (in Row number of 38.211 Table 7.4.1.5.3-1) ?  

:This is specified by nrofPorts and cdm-Type in CSI-RS-ResourceMapping as shown below.

This is the first of the four questions, and it is the one that unlocks the table. Everything else depends on knowing which row you are on, so this is always the step to do first.

Three RRC fields work together to narrow 38.211 Table 7.4.1.5.3-1 down to a single row :

  • nrofPorts – p1, p2, p4, p8 ... This eliminates most of the table immediately, since each row supports one specific port count.
  • cdm-Type – noCDM, fd-CDM2, cdm4-FD2-TD2, cdm8-FD2-TD4. Several rows may share the same port count but differ in how the ports are stacked.
  • density – dot5, one or three. This is 'how many REs per RB per port', and it is what separates the remaining candidates.

NOTE : the combination is not free. Not every (ports, cdm-Type, density) triple exists in the table – for example density three only appears with a single port. So if a combination you invented does not appear anywhere in the table, that is not a mistake in the table, it simply is not a legal configuration.

There is also a neat consistency check hiding here, and it is a good habit to use it : the row tells you how many (k̄, l̄) entries the pattern has, and the ASN.1 CHOICE in frequencyDomainAllocation tells you how many bits the bitmap has. Those two must agree with the row you selected. If they do not, you picked the wrong row.

CSI-RS-ResourceMapping ::= SEQUENCE {
   frequencyDomainAllocation CHOICE {
      row1     BIT STRING (SIZE (4)),
      row2     BIT STRING (SIZE (12)),
      row4     BIT STRING (SIZE (3)),
      other    BIT STRING (SIZE (6))
   },
   nrofPorts                       ENUMERATED {p1,p2,p4,p8,p12,p16,p24,p32},
   firstOFDMSymbolInTimeDomain     INTEGER (0..13),
   firstOFDMSymbolInTimeDomain2    INTEGER (2..12) OPTIONAL, -- Need R
   cdm-Type                        ENUMERATED {noCDM, fd-CDM2, cdm4-FD2-TD2, cdm8-FD2-TD4},
   density CHOICE {
     dot5      ENUMERATED {evenPRBs, oddPRBs},
     one       NULL,
     three     NULL,
     spare     NULL
   },
   freqBand    CSI-FrequencyOccupation,
   ...
}
                                                                

How to determine REs(Resource Elements) for the selected CSI-RS ?

: This is configured by (k_bar, l_bar) column and frequencyDomainAllocation and firstOFDMSymbolInTimeDomain of CSI-RS-ResourceMapping as shown below.

This is where the row you just selected finally turns into actual positions on the resource grid. The mechanism is simple once you see it : the table gives you a relative pattern, and RRC gives you the anchor that the pattern is placed against.

  • k (subcarrier) = the frequency anchor from the frequencyDomainAllocation bitmap, plus the k̄ offsets listed in the row.
  • l (symbol) = firstOFDMSymbolInTimeDomain, plus the l̄ offsets listed in the row. Some rows also use firstOFDMSymbolInTimeDomain2 for a second group of symbols.

NOTE : the bitmap is where almost everybody slips at least once, so it is worth being very deliberate about it. The bits are labelled bi in the specification and the first bit of the ASN.1 BIT STRING is the highest-numbered bit, not the lowest. Reading it from the wrong end does not produce an error – it produces a perfectly legal CSI-RS at the wrong subcarrier, which is a much harder problem to notice. If you ever suspect this, the quickest sanity check is to compare against the worked examples below, where the bitmap and the resulting grid are both shown.

The other thing to remember is that freqBand decides which resource blocks the pattern is repeated over. The pattern itself describes what happens inside one RB; freqBand says how far across the carrier that repetition extends.

CSI-RS-ResourceMapping ::= SEQUENCE {
   frequencyDomainAllocation CHOICE {
      row1     BIT STRING (SIZE (4)),
      row2     BIT STRING (SIZE (12)),
      row4     BIT STRING (SIZE (3)),
      other    BIT STRING (SIZE (6))
   },
   nrofPorts                       ENUMERATED {p1,p2,p4,p8,p12,p16,p24,p32},
   firstOFDMSymbolInTimeDomain     INTEGER (0..13),
   firstOFDMSymbolInTimeDomain2    INTEGER (2..12) OPTIONAL, -- Need R
   cdm-Type                        ENUMERATED {noCDM, fd-CDM2, cdm4-FD2-TD2, cdm8-FD2-TD4},
   density CHOICE {
     dot5      ENUMERATED {evenPRBs, oddPRBs},
     one       NULL,
     three     NULL,
     spare     NULL
   },
   freqBand    CSI-FrequencyOccupation,
   ...
}

CSI-FrequencyOccupation ::= SEQUENCE {
   startingRB    INTEGER (0..maxNrofPhysicalResourceBlocks-1),
   nrofRBs       INTEGER (24..maxNrofPhysicalResourceBlocksPlus1),
   ...
}
                                                                                                                                

startingRB : PRB where this CSI resource starts in relation to common resource block #0 (CRB#0) on the common resource block grid. Only multiples of 4 are allowed (0, 4, ...)

nrofRBs : Number of PRBs across which this CSI resource spans. Only multiples of 4 are allowed. The smallest configurable number is the minimum of 24 and the width of the associated BWP. If the configured value is larger than the width of the corresponding BWP, the UE shall assume that the actual CSI-RS bandwidth is equal to the width of the BWP.

Combining thse two, we come come up with an example as shown below.

How to figure out what kind of (Logical) Antenna Configuration Network is using ?

: This is another complicated story and is explained in a separate page here.

CSI RS Resource Mapping Examples

This section is to show various examples of configuring following RRC Parameters.

This is the part of the page that makes everything above click, so if the tables felt abstract, this is where to slow down. Each example takes a real RRC configuration and resolves it all the way to a picture of the resource grid, using exactly the steps described above.

The examples are ordered deliberately, from simple to complex, and they are much easier if you read them in order :

  • Examples 01 to 03 – single port (p1), density three, no CDM. The simplest possible case. Only the bitmap changes between them, so these three show you very clearly what the frequency domain bitmap actually does.
  • Examples 04 and 05 – still small, but now with 2 and 3 ports, and example 05 introduces CDM. This is where you see multiple ports sharing REs for the first time.
  • Examples 06 to 08 – 8 ports. Examples 06 and 07 differ only in the bitmap, and example 08 keeps the same bitmap as 07 but switches the CDM type. Comparing 07 and 08 side by side is the clearest way to see what CDM changes and what it does not.

A suggestion that is worth the effort : try to draw one example yourself before looking at the answer. Pick example 01, work out the row, the k and l values, and sketch the grid. Checking your sketch against the figure is far more effective than reading all eight examples passively.

CSI-RS-ResourceMapping ::= SEQUENCE {
   frequencyDomainAllocation CHOICE {
      row1     BIT STRING (SIZE (4)),
      row2     BIT STRING (SIZE (12)),
      row4     BIT STRING (SIZE (3)),
      other    BIT STRING (SIZE (6))
   },
   nrofPorts                       ENUMERATED {p1,p2,p4,p8,p12,p16,p24,p32},
   firstOFDMSymbolInTimeDomain     INTEGER (0..13),
   firstOFDMSymbolInTimeDomain2    INTEGER (2..12) OPTIONAL, -- Need R
   cdm-Type                        ENUMERATED {noCDM, fd-CDM2, cdm4-FD2-TD2, cdm8-FD2-TD4},
   density CHOICE {
     dot5      ENUMERATED {evenPRBs, oddPRBs},
     one       NULL,
     three     NULL,
     spare     NULL
   },
   freqBand    CSI-FrequencyOccupation,
   ...
}
                                                                                                                                

Followings are some of the examples showing the location (Resource Elements) within a PRB(physical resource block). Since these examples are showing the location only within one RB, n N^RB_sc term is removed in the equation determining k value.

Example 01 >

Given the following RRC parameters,

    density = three

    nrofPorts = p1

    cdm-Type = noCDM

    frequencyDomainAllocation.row1 = 0001

    firstOFDMSymbolinTimeDomain = 4

According to 38.211-Table 7.4.1.5.3-1,

    From the given configuration:

    • k prime (k'): {0} => k'[0] = 0
    • l prime (l'): {0} => l'[0] = 0

    According to the RRC parameters:

    • k0: 0 (based on frequencyDomainAllocation.row1 = 0001)
    • l0: 4 (based on firstOFDMSymbolInTimeDomain = 4)

    Using this information and 38.211-Table 7.4.1.5.3-1, the final resource elements for CSI-RS placement are:

    • (k, l) = (k0 + k'[0], l0 + l'[0])
    • (k, l) = (k0 + 4 + k'[0], l0 + l'[0])
    • (k, l) = (k0 + 8 + k'[0], l0 + l'[0])

    By substitution:

    • (k, l) = (0 + 0 + 0, 4 + 0) = (0, 4)
    • (k, l) = (0 + 4 + 0, 4 + 0) = (4, 4)
    • (k, l) = (0 + 8 + 0, 4 + 0) = (8, 4)

    Final positions of CSI-RS resource elements are:

    • (4, 4)
    • (4, 4)
    • (8, 4)

 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Example 02 >

Given the following RRC parameters,

    density = three

    nrofPorts = p1

    cdm-Type = noCDM

    frequencyDomainAllocation.row1 = 0100

    firstOFDMSymbolinTimeDomain = 4

According to 38.211-Table 7.4.1.5.3-1,

    Given RRC Parameters:

    • Density: three
      • Indicates 3 Resource Elements (REs) per Physical Resource Block (PRB).
    • Number of Ports: p1
      • Single antenna port (Port 0) is configured.
    • CDM Type: noCDM
      • No Code Division Multiplexing (CDM) is applied.
    • Frequency Domain Allocation: row1 = 0100
      • A 4-bit bitmap is used for Row 1 configurations:
      • Bits: [b3, b2, b1, b0] = [0, 1, 0, 0].
      • The second bit (b2) is set to "1", which corresponds to the subcarrier offset k0 = 2.
    • First OFDM Symbul in Time Domain: 4
      • The starting OFDM symbul index in the time domain is l0 = 4.

    Referencing 3GPP Table 7.4.1.5.3-1:

    From 3GPP TS 38.211, Table 7.4.1.5.3-1, the configuration for Row 1 with 1 port (density: three) and noCDM is:

    • CSI-RS locations in the frequency and time domains are described as:
      • (k0, l0)
      • (k0 + 4, l0)
      • (k0 + 8, l0)
    • CDM group index (j): 0, 0, 0
    • k′: 0 (frequency offset within the resource block)
    • l′: 0 (time offset within the OFDM symbul)

    Step-by-Step Derivation:

    •   From the bitmap [b3, b2, b1, b0] = [0, 1, 0, 0]:
      • The bit b2 = 1, so k0 = 2.
    •   Using the firstOFDMSymbulInTimeDomain parameter:
      • l0 = 4.
    •   Using the formulas from Table 7.4.1.5.3-1, the resource element positions are determined as:
      • (k, l) = (k0 + k′[0], l0 + l′[0])
      • (k, l) = (k0 + 4 + k′[0], l0 + l′[0])
      • (k, l) = (k0 + 8 + k′[0], l0 + l′[0])

    Substituting Values:

    •   For the first RE:
      • (k, l) = (2 + 0, 4 + 0) = (2, 4)
    •   For the second RE:
      • (k, l) = (2 + 4, 4 + 0) = (6, 4)
    •   For the third RE:
      • (k, l) = (2 + 8, 4 + 0) = (10, 4)

    Final Resource Element (RE) Positions:

      The final CSI-RS RE positions in the grid are:

      • (2, 4)
      • (6, 4)
      • (10, 4)

      This means the CSI-RS signals will be transmitted at:

      • Subcarrier indices k = 2, 6, 10
      • In the time domain symbul l = 4.

 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Example 03 >

Given the following RRC parameters, (this example is based on TRS case in 38.508-1 Table 4.6.3-45: CSI-RS-ResourceMapping)

    density = three

    nrofPorts = p1

    cdm-Type = noCDM

    frequencyDomainAllocation.row1 = 1000 // From density,nrofPorts we can guess that this is for row1.

    firstOFDMSymbolinTimeDomain = 4

 

According to 38.211-Table 7.4.1.5.3-1,

    Given RRC Parameters:

    • Density: three
      • Indicates 3 Resource Elements (REs) per Physical Resource Block (PRB).
    • Number of Ports: p1
      • Single antenna port (Port 0) is configured.
    • CDM Type: noCDM
      • No Code Division Multiplexing (CDM) is applied.
    • Frequency Domain Allocation: row1 = 1000
      • A 4-bit bitmap is used for Row 1 configurations:
      • Bits: [b3, b2, b1, b0] = [1, 0, 0, 0].
      • The first bit (b3) is set to "1", which corresponds to the subcarrier offset k0 = 3.
    • First OFDM Symbul in Time Domain: 4
      • The starting OFDM symbul index in the time domain is l0 = 4.

    Referencing 3GPP Table 7.4.1.5.3-1:

    From 3GPP TS 38.211, Table 7.4.1.5.3-1, the configuration for Row 1 with 1 port (density: three) and noCDM is:

    • CSI-RS locations in the frequency and time domains are described as:
      • (k0, l0)
      • (k0 + 4, l0)
      • (k0 + 8, l0)
    • CDM group index (j): 0, 0, 0
    • k′: 0 (frequency offset within the resource block)
    • l′: 0 (time offset within the OFDM symbul)

    Step-by-Step Derivation:

    •   From the bitmap [b3, b2, b1, b0] = [1, 0, 0, 0]:
      • The bit b3 = 1, so k0 = 3.
    •   Using the firstOFDMSymbulInTimeDomain parameter:
      • l0 = 4.
    •   Using the formulas from Table 7.4.1.5.3-1, the CSI-RS resource element positions are calculated as:
      • (k, l) = (k0 + k′[0], l0 + l′[0])
      • (k, l) = (k0 + 4 + k′[0], l0 + l′[0])
      • (k, l) = (k0 + 8 + k′[0], l0 + l′[0])

    Substituting Values:

    •   For the first RE:
      • (k, l) = (3 + 0, 4 + 0) = (3, 4)
    •   For the second RE:
      • (k, l) = (3 + 4, 4 + 0) = (7, 4)
    •   For the third RE:
      • (k, l) = (3 + 8, 4 + 0) = (11, 4)

    Final Resource Element (RE) Positions:

      The final CSI-RS RE positions in the grid are:

      • (3, 4)
      • (7, 4)
      • (11, 4)

      This means the CSI-RS signals will be transmitted at:

      • Subcarrier indices k = 3, 7, 11
      • In the time domain symbul l = 4.

 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Example 04 >

Given the following RRC parameters,

    density = one

    nrofPorts = p1

    cdm-Type = noCDM

    frequencyDomainAllocation.row2 = 010000000000

    firstOFDMSymbolinTimeDomain = 13

 

According to 38.211-Table 7.4.1.5.3-1,

    Given RRC Parameters:

    • Density: one
      • Indicates that CSI-RS occupies every subcarrier in the configured frequency domain.
    • Number of Ports: p1
      • Single antenna port (Port 0) is configured.
    • CDM Type: noCDM
      • No Code Division Multiplexing (CDM) is applied.
    • Frequency Domain Allocation: row2 = 010000000000
      • A 12-bit bitmap is used for Row 2 configurations:
      • Bits: [b11, b10, ..., b0] = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0].
      • The bit b10 is set to "1", which corresponds to the subcarrier offset k0 = 10.
    • First OFDM Symbul in Time Domain: 13
      • The starting OFDM symbul index in the time domain is l0 = 13.

    Referencing 3GPP Table 7.4.1.5.3-1:

    From 3GPP TS 38.211, Table 7.4.1.5.3-1, the configuration for Row 2 with 1 port (density: one) and noCDM is:

    • CSI-RS location in the frequency and time domain is described as:
      • (k0, l0)
    • CDM group index (j): 0
    • k′: 0 (frequency offset within the resource block)
    • l′: 0 (time offset within the OFDM symbul)

    Step-by-Step Derivation:

    •   From the bitmap [b11, b10, ..., b0] = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]:
      • The bit b10 = 1, so k0 = 10.
    •   Using the firstOFDMSymbulInTimeDomain parameter:
      • l0 = 13.
    •   Using the formula from Table 7.4.1.5.3-1, the CSI-RS resource element position is calculated as:
      • (k, l) = (k0 + k′[0], l0 + l′[0]).

    Substituting Values:

      (k, l) = (10 + 0, 13 + 0) = (10, 13)

    Final Resource Element (RE) Position:

      The final CSI-RS RE position in the grid is:

      • (10, 13)

      This means the CSI-RS signal will be transmitted at:

      • Subcarrier index k = 10
      • In the time domain symbul l = 13.

 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Example 05 >

Given the following RRC parameters,

    density = one

    nrofPorts = p2

    cdm-Type = FD-CDM2

    frequencyDomainAllocation.other = 001000

    firstOFDMSymbolinTimeDomain = 13

    Assume that row = 3 (you need additional information to determine the row number other than 1,2,4. In this example, it is given)

 

According to 38.211-Table 7.4.1.5.3-1,

    Given RRC Parameters:

    • Density: one
      • Indicates that CSI-RS occupies every subcarrier in the configured frequency domain.
    • Number of Ports: p2
      • Two antenna ports (Port 0 and Port 1) are configured.
    • CDM Type: FD-CDM2
      • Frequency domain code division multiplexing with two orthogonal sequences is applied.
    • Frequency Domain Allocation: other = 001000
      • A 6-bit bitmap is used for Row 3 configurations:
      • Bits: [b5, b4, ..., b0] = [0, 0, 1, 0, 0, 0].
      • The bit b2 is set to "1", which corresponds to the subcarrier offset k0 = 6 (calculated as 2 × bit position).
    • First OFDM Symbul in Time Domain: 13
      • The starting OFDM symbul index in the time domain is l0 = 13.

    Referencing 3GPP Table 7.4.1.5.3-1:

    From 3GPP TS 38.211, Table 7.4.1.5.3-1, the configuration for Row 3 with 2 ports (density: one) and FD-CDM2 is:

    • CSI-RS locations in the frequency and time domains are described as:
      • (k0, l0)
    • CDM group index (j): 0
    • k′: [0, 1]
    • l′: 0

    Step-by-Step Derivation:

    •   From the bitmap [b5, b4, ..., b0] = [0, 0, 1, 0, 0, 0]:
      • The bit b2 = 1, so k0 = 6.
    •   Using the firstOFDMSymbulInTimeDomain parameter:
      • l0 = 13.
    •   Using the formula from Table 7.4.1.5.3-1, the CSI-RS resource element positions  are calculated as:
      • (k, l) = (k0 + k′[0], l0 + l′[0]).
      • (k, l) = (k0 + k′[1], l0 + l′[0]).

    Substituting Values:

    • (k, l) = (6 + 0, 13 + 0) = (6, 13)
    • (k, l) = (6 + 1, 13 + 0) = (7, 13)

    Final Resource Element (RE) Positions:

      The final CSI-RS RE positions in the grid are:

      • (6, 13)
      • (7, 13)

      This means the CSI-RS signals will be transmitted at:

      • Subcarrier indices k = 6 and k = 7
      • In the time domain symbul l = 13.

 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

wf(1)

6

 

 

 

 

 

 

 

 

 

 

 

 

 

wf(0)

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Example 06 >

Given the following RRC parameters, (this example is based on FR1 case in 38.508-1 Table 4.6.3-45: CSI-RS-ResourceMapping)

    density = one

    nrofPorts = p8

    cdm-Type = fd-CDM2

    frequencyDomainAllocation.other = 011110 //From density,nrofPorts,cdm-Tye it is assumed that this is for row6.

    firstOFDMSymbolinTimeDomain = 3

 

According to 38.211-Table 7.4.1.5.3-1,

    Given RRC Parameters:

    • Density: one
      • Indicates that CSI-RS occupies every subcarrier in the configured frequency domain.
    • Number of Ports: p8
      • Eight antenna ports (Ports 0 to 7) are configured.
    • CDM Type: FD-CDM2
      • Frequency domain code division multiplexing with two orthogonal sequences is applied.
    • Frequency Domain Allocation: other = 011110
      • A 6-bit bitmap is used for Row 6 configurations:
      • Bits: [b5, b4, ..., b0] = [0, 1, 1, 1, 1, 0].
      • The bits b1, b2, b3, b4 are set to "1," which correspond to subcarrier offsets:
        • k0 = 2
        • k1 = 4
        • k2 = 6
        • k3 = 8
    • First OFDM Symbul in Time Domain: 3
      • The starting OFDM symbul index in the time domain is l0 = 3.

    Referencing 3GPP Table 7.4.1.5.3-1:

    From 3GPP TS 38.211, Table 7.4.1.5.3-1, the configuration for Row 6 with 8 ports (density: one) and FD-CDM2 is:

    • CSI-RS locations in the frequency and time domains are described as:
      • (k0, l0), (k1, l0), (k2, l0), (k3, l0)
    • CDM group index (j): 0, 1, 2, 3
    • k′: [0, 1]
    • l′: 0

    Step-by-Step Derivation:

    •   From the bitmap [b5, b4, ..., b0] = [0, 1, 1, 1, 1, 0]:
      • The bits b1, b2, b3, b4 = 1 correspond to:
        • k0 = 2
        • k1 = 4
        • k2 = 6
        • k3 = 8
    •   Using the firstOFDMSymbulInTimeDomain parameter:
      • l0 = 3.
    •   Using the formula from Table 7.4.1.5.3-1, the CSI-RS resource element positions for each port and frequency offset are calculated as:
      • For k′:0: (k, l) = (ki + k′[0], l0 + l′[0]).
      • For k′:1: (k, l) = (ki + k′[1], l0 + l′[0]).

    Final Resource Element (RE) Positions:

      The final CSI-RS RE positions in the grid are:

      • k′:0 (2, 3), (4, 3), (6, 3), (8, 3)
      • k′:1 (3, 3), (5, 3), (7, 3), (9, 3)

      This means the CSI-RS signals will be transmitted at:

      • Subcarrier indices k = 2, 3, 4, 5, 6, 7, 8, 9
      • In the time domain symbol l = 3.

 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

wf(1)

 

 

 

 

 

 

 

 

 

 

8

 

 

 

wf(0)

 

 

 

 

 

 

 

 

 

 

7

 

 

 

wf(1)

 

 

 

 

 

 

 

 

 

 

6

 

 

 

wf(0)

 

 

 

 

 

 

 

 

 

 

5

 

 

 

wf(1)

 

 

 

 

 

 

 

 

 

 

4

 

 

 

wf(0)

 

 

 

 

 

 

 

 

 

 

3

 

 

 

wf(1)

 

 

 

 

 

 

 

 

 

 

2

 

 

 

wf(0)

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NOTE : The above resource mapping  is showing the CSI-RS for all antenna ports (8 ports in this case) superimposed in one resource grid. In real transmission, these resources are devided among the 8 CSI-RS antenna ports. How they are splitted among each CSI-RS antenna port is specified in 38.211 section 7.4.1.5.3. Applying the logic in the spec to this example, the antenna port distribution become as follows.

Since this example is using FD-CDM2, it is assumed that 's' is determined by the index value of the following table and 'L' becomes 2. N is given in this example (38.211-Table 7.4.1.5.3-1) is 8.

< 38.211 - Table 7.4.1.5.3-3: The sequences wf(k) f and wt(l) for cdm-Type equal to 'FD-CDM2'. >

Based on this information, j and s can be calculated as follows.

    s = 0,1 (index of Table 7.4.1.5.3-3)

    j = 0,1,...,N/L-1 = 0,1,...,(8/2-1) = 0,1,2,3

Now we can calculate the antenna port as follows.

    p = 3000 + s + j L , where s = {0,1}, j = {0,1,2,3}

       = 3000 + {0,1} + {0,1,2,3} 2

       = {3000, 3002, 3004, 3006, 3001, 3003, 3005, 3007}

NOTE : I posted Matlab simulation for this case showing the resource mapping for each antenna port on this note and for animation (page turner) check out this note.

Example 07 >

Given the following RRC parameters, (this example is based on FR1 case in 38.508-1 Table 4.6.3-45: CSI-RS-ResourceMapping)

    density = one

    nrofPorts = p8

    cdm-Type = fd-CDM2

    frequencyDomainAllocation.other = 000110 //From density,nrofPorts,cdm-Tye it is assumed that this is for row7.

    firstOFDMSymbolinTimeDomain = 3

According to 38.211-Table 7.4.1.5.3-1,

    Given RRC Parameters:

    • Density: one
      • Indicates that CSI-RS occupies every subcarrier in the configured frequency domain.
    • Number of Ports: p8
      • Eight antenna ports (Ports 0 to 7) are configured.
    • CDM Type: FD-CDM2
      • Frequency domain code division multiplexing with two orthogonal sequences is applied.
    • Frequency Domain Allocation: other = 000110
      • A 6-bit bitmap is used for Row 7 configurations:
      • Bits: [b5, b4, ..., b0] = [0, 0, 0, 1, 1, 0].
      • The bits b2, b3 are set to "1," which correspond to subcarrier offsets:
        • k0 = 2 (based on frequencyDomainAllocation.other = 000110)
        • k1 = 4 (based on frequencyDomainAllocation.other = 000110)
    • First OFDM Symbul in Time Domain: 3
      • The starting OFDM symbul index in the time domain is l0 = 3. (based on firstOFDMSymbolinTimeDomain = 3)

    Calculations Based on k' = [0, 1]:

    From 3GPP TS 38.211, Table 7.4.1.5.3-1, the CSI-RS positions are grouped by k' = [0, 1] for each subcarrier position (k0, k1) and time domain symbul (l0, l0 + 1).

    General Formula:

    • For k' = 0:
      • (ki + k'[0], l0)
      • (ki + k'[0], l0 + 1)
    • For k' = 1:
      • (ki + k'[1], l0)
      • (ki + k'[1], l0 + 1)

    Substituting Values:

    • For k' = 0:
      • At l0 = 3:
        • (k0 + k'[0], l0) = (2 + 0, 3) = (2, 3)
        • (k1 + k'[0], l0) = (4 + 0, 3) = (4, 3)
      • At l0 + 1 = 4:
        • (k0 + k'[0], l0 + 1) = (2 + 0, 4) = (2, 4)
        • (k1 + k'[0], l0 + 1) = (4 + 0, 4) = (4, 4)
    • For k' = 1:
      • At l0 = 3:
        • (k0 + k'[1], l0) = (2 + 1, 3) = (3, 3)
        • (k1 + k'[1], l0) = (4 + 1, 3) = (5, 3)
      • At l0 + 1 = 4:
        • (k0 + k'[1], l0 + 1) = (2 + 1, 4) = (3, 4)
        • (k1 + k'[1], l0 + 1) = (4 + 1, 4) = (5, 4)

    Final Grouped Positions (By k'):

    • For k' = 0:
      • (2, 3), (2, 4) for k0 = 2
      • (4, 3), (4, 4) for k1 = 4
    • For k' = 1:
      • (3, 3), (3, 4) for k0 = 2
      • (5, 3), (5, 4) for k1 = 4

 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

wf(1)

wf(1)

 

 

 

 

 

 

 

 

 

4

 

 

 

wf(0)

wf(0)

 

 

 

 

 

 

 

 

 

3

 

 

 

wf(1)

wf(1)

 

 

 

 

 

 

 

 

 

2

 

 

 

wf(0)

wf(0)

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NOTE : The above resource mapping  is showing the CSI-RS for all antenna ports (8 ports in this case) superimposed in one resource grid. In real transmission, these resources are devided among the 8 CSI-RS antenna ports. How they are splitted among each CSI-RS antenna port is specified in 38.211 section 7.4.1.5.3. Applying the logic in the spec to this example, the antenna port distribution become as follows.

Since this example is using FD-CDM2, it is assumed that 's' is determined by the index value of the following table and 'L' becomes 2. N is given in this example (38.211-Table 7.4.1.5.3-1) is 8.

< 38.211 - Table 7.4.1.5.3-3: The sequences wf(k) f and wt(l) for cdm-Type equal to 'FD-CDM2'. >

Based on this information, j and s can be calculated as follows.

    s = 0,1 (index of Table 7.4.1.5.3-3)

    j = 0,1,...,N/L-1 = 0,1,...,(8/2-1) = 0,1,2,3

Now we can calculate the antenna port as follows.

    p = 3000 + s + j L , where s = {0,1}, j = {0,1,2,3}

       = 3000 + {0,1} + {0,1,2,3} 2

       = {3000, 3002, 3004, 3006, 3001, 3003, 3005, 3007}

NOTE : I posted Matlab simulation for this case showing the resource mapping for each antenna port on this note. For animation (page turner) for this, check this out.

Example 08 >

Given the following RRC parameters, (this example is based on FR1 case in 38.508-1 Table 4.6.3-45: CSI-RS-ResourceMapping)

    density = one

    nrofPorts = p8

    cdm-Type = CDM4(FD2,TD2)

    frequencyDomainAllocation.other = 000110 //From density,nrofPorts,cdm-Tye it is assumed that this is for row8.

    firstOFDMSymbolinTimeDomain = 3

According to 38.211-Table 7.4.1.5.3-1,

    Given RRC Parameters:

    • Density: one
      • Indicates that CSI-RS occupies every subcarrier in the configured frequency domain.
    • Number of Ports: p8
      • Eight antenna ports (Ports 0 to 7) are configured.
    • CDM Type: CDM4(FD2,TD2)
      • Code division multiplexing with four orthogonal codes is applied:
        • FD2: Two orthogonal sequences in the frequency domain.
        • TD2: Two orthogonal sequences in the time domain.
    • Frequency Domain Allocation: other = 000110
      • A 6-bit bitmap is used for Row 8 configurations:
      • Bits: [b5, b4, ..., b0] = [0, 0, 0, 1, 1, 0].
      • The bits b2, b3 are set to "1," which correspond to subcarrier offsets:
        • k0 = 2 (based on frequencyDomainAllocation.other = 000110)
        • k1 = 4 (based on frequencyDomainAllocation.other = 000110)
    • First OFDM Symbul in Time Domain: 3
      • The starting OFDM symbul index in the time domain is l0 = 3 (based on firstOFDMSymbolinTimeDomain = 3).

    Calculations Based on k' = [0, 1] and l' = [0, 1]:

    From 3GPP TS 38.211, Table 7.4.1.5.3-1, the CSI-RS positions are grouped by k' = [0, 1] and l' = [0, 1] for each subcarrier position (k0, k1) and time symbul (l0, l0 + 1).

    General Formula:

    • For k' = 0:
      • (ki + k'[0], l0 + l'[0])
      • (ki + k'[0], l0 + l'[1])
    • For k' = 1:
      • (ki + k'[1], l0 + l'[0])
      • (ki + k'[1], l0 + l'[1])

    Substituting Values:

    • For k' = 0:
      • At l'[0] = 0 (l0 = 3):
        • (k0 + k'[0], l0 + l'[0]) = (2 + 0, 3 + 0) = (2, 3)
        • (k1 + k'[0], l0 + l'[0]) = (4 + 0, 3 + 0) = (4, 3)
      • At l'[1] = 1 (l0 + 1 = 4):
        • (k0 + k'[0], l0 + l'[1]) = (2 + 0, 3 + 1) = (2, 4)
        • (k1 + k'[0], l0 + l'[1]) = (4 + 0, 3 + 1) = (4, 4)
    • For k' = 1:
      • At l'[0] = 0 (l0 = 3):
        • (k0 + k'[1], l0 + l'[0]) = (2 + 1, 3 + 0) = (3, 3)
        • (k1 + k'[1], l0 + l'[0]) = (4 + 1, 3 + 0) = (5, 3)
      • At l'[1] = 1 (l0 + 1 = 4):
        • (k0 + k'[1], l0 + l'[1]) = (2 + 1, 3 + 1) = (3, 4)
        • (k1 + k'[1], l0 + l'[1]) = (4 + 1, 3 + 1) = (5, 4)

    Final Grouped Positions (By k'):

    • For k' = 0:
      • (2, 3), (2, 4) for k0 = 2
      • (4, 3), (4, 4) for k1 = 4
    • For k' = 1:
      • (3, 3), (3, 4) for k0 = 2
      • (5, 3), (5, 4) for k1 = 4

 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

wft1

wft1

 

 

 

 

 

 

 

 

 

4

 

 

 

wft0

wft0

 

 

 

 

 

 

 

 

 

3

 

 

 

wft1

wft1

 

 

 

 

 

 

 

 

 

2

 

 

 

wft0

wft0

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NOTE : wft0 = wf(0) wt(0), wft1 = wf(1) wt(1)

NOTE : The above resource mapping  is showing the CSI-RS for all antenna ports (8 ports in this case) superimposed in one resource grid. In real transmission, these resources are devided among the 8 CSI-RS antenna ports. How they are splitted among each CSI-RS antenna port is specified in 38.211 section 7.4.1.5.3. Applying the logic in the spec to this example, the antenna port distribution become as follows.

Since this example is using FD-CDM2, it is assumed that 's' is determined by the index value of the following table and 'L' becomes 4. N is given in this example (38.211-Table 7.4.1.5.3-1) is 8.

< 38.211 - Table 7.4.1.5.3-4: The sequences wf(k) f and wt(l) for cdm-Type equal to 'CDM4'. >

Based on this information, j and s can be calculated as follows.

    s = 0,1,2,3 (index of Table 7.4.1.5.3-4)

    j = 0,1,...,N/L-1 = 0,1,...,(8/4-1) = 0,1

Now we can calculate the antenna port as follows.

    p = 3000 + s + j L , where s = {0,1}, j = {0,1,2,3}

       = 3000 + {0,1,2,3} + {0,1} 4

       = {3000, 3004, 3004, 3006, 3001, 3003, 3005, 3007}

NOTE : I posted Matlab simulation for this case showing the resource mapping for each antenna port on this note. For animation (page turner) check out this note.

CSI RS Transmission Timing

CSI Transmission Timing in slot is determined by RRC parameter CSI-ResourcePeriodicityAndOffset based on following equation.

It may look a little too complicated equation, but figuring out the transmission timing from RRC is pretty simple and straightforward as shown in the example below.

Example 01 >

The exact timing for a specific csi-rs is determined by periodicityAndOffset and  firstOFDMSymbolInTimeDomain in RRC as shown below. The IE(Information Element) periodicityAndOffset specifies the slot level timing and firstOFDMSymbolInTimeDomain specifies symbol level timing within the slot.

periodicityAndOffset has the value in the format of slots[p]:[o]. [p] indicates the period in the unit of slots and [o] indicates the offset within the period in the unit of slots.  slots40: 11 in this example means the csi-rs is transmitted at every 40 symbols with the offset of 11 slot. It means the csi-rs is transmitted at the slot (0*40+11),(1*40+11),(2*40+11) etc. In other words, it is transmitted at the slot 11, 51, 81 etc.

firstOFDMSymbolInTimeDomain indicates the symbol location within the slot where csi-rs is transmitted. For example, the value 4 as shown below indicates the csi-rs is transmitted at the symbol 4 (i.e, 5th OFDM symbol within the slot)

                {

                  nzp-CSI-RS-ResourceId 1,

                  resourceMapping {

                    frequencyDomainAllocation row1: '1'H,

                    nrofPorts p1,

                    firstOFDMSymbolInTimeDomain 4,

                    cdm-Type noCDM,

                    density three: NULL,

                    freqBand {

                      startingRB 0,

                      nrofRBs 52

                    }

                  },

                  powerControlOffset 0,

                  powerControlOffsetSS db0,

                  scramblingID 500,

                  periodicityAndOffset slots40: 11,

                  qcl-InfoPeriodicCSI-RS 0

                },

When you assign timing resources for CSI-RS, it is important to allocate it not to collide with physical resources for other physical signals (e.g, SSB) and make it sure that it falls into the downlink slot/symbol if it is TDD. My recommendation is to draw timining diagram as shown below when you first configure CSI-RS.

Image Source : Amarisoft Tech-Academy

Timing splits into two independent questions, and mixing them up is the usual source of confusion. One decides which slots carry the CSI-RS, the other decides which symbols inside that slot :

  • Which slot ?periodicityAndOffset, written as slots[p]:[o]. The resource is transmitted in a slot whenever the slot counter satisfies (slot number) mod p == o. That is all the equation is really saying.
  • Which symbol ?firstOFDMSymbolInTimeDomain, which you already met in the resource mapping section. This does not change from slot to slot.

So a CSI-RS occasion is simply 'every p slots, at offset o, on these symbols'. Note the offset is counted against the system frame and slot numbering, which is another reason the UE has to be properly synchronised before any of this works.

NOTE : the period is expressed in slots, not milliseconds, so the same configuration means different things at different subcarrier spacings. At 15 kHz a slot is 1 ms, so slots40 is 40 ms; at 30 kHz a slot is 0.5 ms, so the very same slots40 is 20 ms. Whenever you compare a configuration against a measurement in time, convert to slots first.

Resource for Interference Measurement (CSI-IM)

CSI IM resource is a set of specific resource elements reserved for Interference Measurement. This resources are configurable by RRC message. The frequency and time domain location is defined in 38.214 - 5.2.2.4 as illustrated below.

 

It is easy to skip past CSI-IM as a minor detail, but it is worth understanding why it has to exist at all. Channel quality is not an absolute signal strength – CQI is fundamentally a signal-to-interference-and-noise quantity. So the UE needs two different measurements : how strong the wanted signal is, and how strong everything else is.

NZP-CSI-RS gives the first one. CSI-IM gives the second, and it does it in an elegantly simple way : the network reserves a small set of REs and deliberately transmits nothing on them. Whatever the UE receives there cannot be from this cell, so by definition it is interference plus noise.

That leads to the single most important practical point about CSI-IM : those REs must genuinely be empty. If your own cell transmits anything at all in the CSI-IM location – data, a filler signal, anything – then the UE measures your own transmission as if it were interference. The reported CQI will still look perfectly plausible, it will simply be wrong, and nothing in the system will flag it. This is exactly the situation the ZP-CSI-RS section addresses.

You will also notice that CSI-IM offers only two patterns (pattern0 and pattern1) rather than the large table used for NZP CSI-RS. That is intentional : nothing is being transmitted here, so there are no ports and no CDM to describe. All that is needed is a location.

CSI-IM-Resource ::= SEQUENCE {
   csi-IM-ResourceId                   CSI-IM-ResourceId,
   csi-IM-ResourceElementPattern       CHOICE {
      pattern0 SEQUENCE {
         subcarrierLocation-p0         ENUMERATED { s0, s2, s4, s6, s8, s10 },
         symbolLocation-p0             INTEGER (0..12)
      },
      pattern1 SEQUENCE {
         subcarrierLocation-p1         ENUMERATED { s0, s4, s8 },
         symbolLocation-p1             INTEGER (0..13)
      }
   } OPTIONAL, -- Need M
   freqBand                            CSI-FrequencyOccupation OPTIONAL, 
   periodicityAndOffset                CSI-ResourcePeriodicityAndOffset OPTIONAL, 
   PeriodicOrSemiPersistent
...
}
                                                                                                                                

pattern 0 / pattern1 : illustrated above.

CSI-FrequencyOccupation ::= SEQUENCE {

   startingRB    INTEGER (0..maxNrofPhysicalResourceBlocks-1),

   nrofRBs       INTEGER (24..maxNrofPhysicalResourceBlocksPlus1),

   ...

}

startingRB : PRB where this CSI resource starts in relation to common resource block #0 (CRB#0) on the common resource block grid. Only multiples of 4 are allowed (0, 4, ...)

nrofRBs : Number of PRBs across which this CSI resource spans. Only multiples of 4 are allowed. The smallest configurable number is the minimum of 24 and the width of the associated BWP. If the configured value is larger than the width of the corresponding BWP, the UE shall assume that the actual CSI-RS bandwidth is equal to the width of the BWP.

Tracking Reference Signal (TRS)

5G TRS, or Tracking Reference Signal, is a key component in 5G wireless technology, primarily used for beam management. TRS in 5G plays a crucial role in maintaining time and frequency synchronization, particularly in high mobility scenarios, distinguishing it from CSI-RS, which is more aligned with beam management and channel quality assessment

The first thing to understand about TRS is that it is not a new physical signal. There is no separate TRS generator anywhere in the specification. A TRS is an ordinary NZP-CSI-RS resource set which happens to have trs-Info present – the same sequence generation, the same resource mapping tables, the same everything. Only the purpose and the configuration constraints differ.

Why does it need a special purpose at all ? Because a UE's local oscillator is never perfect. Over time its clock drifts, both in frequency (which shows up as a carrier frequency offset) and in time (which shows up as a sampling or timing offset). Left alone, that drift will eventually destroy demodulation. The UE therefore needs something to track against, and that is exactly what TRS is for – the name Tracking Reference Signal is quite literal.

The configuration constraints follow directly from that job, which makes them easy to remember rather than easy to forget :

  • Single port – you are measuring a drift, not a spatial channel, so more ports would only add cost.
  • Wide in frequency, with density three – estimating a timing offset means measuring how phase rotates across frequency, so the samples must be spread widely across the band.
  • Two symbols spaced 4 apart, in each of two consecutive slots – estimating a frequency offset means measuring how phase rotates over time, so you need pairs of symbols separated by a known gap. The two spacings, 4 symbols and one slot, give both a fine and a coarse measurement.

NOTE : because no CSI report configuration points at a TRS resource set, a TRS changes nothing about the CQI the UE reports. It is consumed internally by the UE's synchronisation, so when you enable it you should expect to see it on the air but you should not expect the reported channel quality to change.

NZP-CSI-RS-ResourceSet ::= SEQUENCE {
   nzp-CSI-ResourceSetId     NZP-CSI-RS-ResourceSetId,
   nzp-CSI-RS-Resources      SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourcesPerSet)) 
                                  OF NZP-CSI-RS-ResourceId,
   repetition                ENUMERATED { on, off } OPTIONAL, 
   aperiodicTriggeringOffset INTEGER(0..4) OPTIONAL, 
   trs-Info                  ENUMERATED {true} OPTIONAL, 
   ...
}
                                                                

38.331 defines trs-Info as follows.

trs-Info : Indicates that the antenna port for all NZP-CSI-RS resources in the CSI-RS resource set is same. If the field is absent or released the UE applies the value false

38.214-5.2.2.3.1 provides additional information as follows :

trs-Info in NZP-CSI-RS-ResourceSet is associated with a CSI-RS resource set and for which the UE can assume that the antenna port with the same port index of the configured NZP CSI-RS resources in the NZP-CSI-RSResourceSet is the same as described in Subclause 5.1.6.1.1 and can be configured when reporting setting is not configured or when the higher layer parameter reportQuantity associated with all the reporting settings linked with the CSI-RS resource set is set to 'none'.

38.214-5.1.6.1.1 specifies the condition about how multiple csi-rs is grouped into a trs as stated below.

For a NZP-CSI-RS-ResourceSet configured with the higher layer parameter trs-Info, the UE shall assume the antenna

port with the same port index of the configured NZP CSI-RS resources in the NZP-CSI-RS-ResourceSet is the same.For frequency range 1(FR1), the UE may be configured with one or more NZP CSI-RS set(s), where a NZP-CSI-RS-ResourceSet consists offour periodic NZP CSI-RS resources intwo consecutive slots with two periodic NZP CSI-RS resources in each slot.

For frequency range 2(FR2) the UE may be configured with one or more NZP CSI-RS set(s), where a NZP-CSI-RSResourceSet consists oftwo periodic CSI-RS resources in one slot or with a NZP-CSI-RS-ResourceSet offour periodic NZP CSI-RS resourcesin two consecutive slots with two periodic NZP CSI-RS resources in each slot.

NOTE : trs-info setting affects the applicable QCL type which is described in this note.

Zero Power CSI-RS

As shown in the configuration below, in terms of resource element configuration and resource set definition it is same as NZP CSI-RS. But there are two big differences between NZP CSI-RS and ZP CSI RS as below

The name causes a lot of head scratching on first contact, so it is worth saying very directly : ZP-CSI-RS is not a signal. It is a hole. Nothing is generated, nothing is scrambled, nothing is transmitted. What is configured is a set of resource elements that the network promises to leave alone.

The reason it is described using CSI-RS machinery at all is purely practical : the thing being described is a shape on the resource grid, and the CSI-RS resource mapping tables are already an excellent way to describe shapes on a resource grid. So ZP-CSI-RS reuses them wholesale rather than inventing a second notation for the same idea.

The one thing that genuinely matters, and that the configuration placement is telling you, is who the message is for. ZP-CSI-RS lives inside PDSCH-Config, and that is not an accident. It is an instruction to the UE's PDSCH receiver, and it means : 'when you decode PDSCH, these resource elements are not carrying your data – skip them'. In other words it is a rate matching instruction. Without it the UE would happily try to decode whatever it found there and the transport block would fail its CRC.

  • ZP CSI-RS is a configuration within PDSCH-Config. It means the location of ZP CSI RS would be tightly associated with the area scheduled for PDSCH.
  • ZP-CSI-RS does not transmit any signal. As the term 'ZP(zero power)', this is like a 'blanked resource element' that does not transmit any signal/data.
PDSCH-Config ::=                        SEQUENCE {
    ...
    zp-CSI-RS-ResourceToAddModList          SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Resources))
                                                OF ZP-CSI-RS-Resource   OPTIONAL,   -- Need N
    zp-CSI-RS-ResourceToReleaseList         SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Resources))
                                                OF ZP-CSI-RS-ResourceId OPTIONAL,   -- Need M
    aperiodic-ZP-CSI-RS-ResourceSetsToAddModList    SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets))
                                                OF ZP-CSI-RS-ResourceSet   OPTIONAL, -- Need N
    aperiodic-ZP-CSI-RS-ResourceSetsToReleaseList   SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets))
                                                OF ZP-CSI-RS-ResourceSetId   OPTIONAL, -- Need N
    sp-ZP-CSI-RS-ResourceSetsToAddModList   SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets))
                                                OF ZP-CSI-RS-ResourceSet     OPTIONAL, -- Need N
    sp-ZP-CSI-RS-ResourceSetsToReleaseList  SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets))
                                                OF ZP-CSI-RS-ResourceSetId   OPTIONAL, -- Need N

    ...
}

ZP-CSI-RS-Resource ::= SEQUENCE {
   zp-CSI-RS-ResourceId                 ZP-CSI-RS-ResourceId,
   resourceMapping                         CSI-RS-ResourceMapping,
   periodicityAndOffset                    CSI-ResourcePeriodicityAndOffset OPTIONAL, --Cond PeriodicOrSemiPersistent
   ...
}

ZP-CSI-RS-ResourceSet ::= SEQUENCE {
   zp-CSI-RS-ResourceSetId             ZP-CSI-RS-ResourceSetId,
   zp-CSI-RS-ResourceIdList             SEQUENCE (SIZE(1..maxNrofZP-CSI-RS-ResourcesPerSet)) 
                                                            OF ZP-CSI-RS-ResourceId,
   ...
}

ZP-CSI-RS-ResourceSetId ::= INTEGER (0..maxNrofZP-CSI-RS-ResourceSets-1)
                                                                

Why ZP CSI RS ?

In terms of configuration of ZP CSI RS, it looks clear since it is same as NZP CSI RS, but it does not look clear (at least to me) on why we need ZP CSI RS ? Why this concept is introduced ?

To be honest, this is still open question to me. So I am trying to complile various opinions in this section. If you have any different opinions, ping me via email or linkedIn.

This is the question that makes ZP-CSI-RS finally make sense, so it deserves a direct answer : you are not configuring it for the sake of the empty REs themselves. You are configuring it so that the UE's PDSCH decoder and the gNB's PDSCH encoder agree about which REs carry data. The hole is the side effect; the agreement is the point.

There are two situations where you need that agreement, and they are worth separating clearly :

  • To protect somebody else's CSI-RS. A neighbouring cell, or another UE in your own cell, may have a CSI-RS in a given location. You must not transmit PDSCH over it. ZP-CSI-RS is how you punch that hole and, just as importantly, how you tell the UE that the hole is there.
  • To protect your own CSI-IM. Interference measurement only works if the REs are truly empty. ZP-CSI-RS is what keeps your own PDSCH out of them – which is why a CSI-IM resource and a ZP-CSI-RS resource covering the same REs so often appear together in real configurations.

NOTE : this is also the failure mode to watch for in a real deployment. If PDSCH is scheduled across REs that something else has blanked, and no ZP-CSI-RS told the UE about it, the result is not an obvious error message. It is a transport block that fails CRC while every counter in the system looks healthy – the radio appears fine and only the throughput suffers.

< Chat with Experts >

First I had chance to chat with Sakshama Ghoslya. He is working as L1/L2 stack developer with better knowledge than I. So the chat went as I raised question and he answered. The chat was pretty long back-and-forth but I tried to compacted as much as possible and I am sharing this with the approval of Sakshama.

[Sharetechnote] Why do we need ZP CSI-RS ? What is it designed for ?  Vaguely I think it would act in a similar role as CSI-IM which can be a reference power measurement for Noise Floor(Serving cell only environment) or interference power from neighbour cells(Serving cell + neighbour cell environment).

[Sakshama] ZP-CSI-RS can be used for the following purpose:

    1. Beam Mobility: gNB can configure multiple beams with identical physical layer settings and the UE finds out which beam is the best based on the power levels. For an example consider 2 adjacent beams B0 and B1. at a particular time T0, gNB can configure B0 as ZP-CSI-RS & B1 as NZP-CSI-RS and at time T1, it can configure B0 as NZP-CSI-RS & B1 as ZP-CSI-RS. This helps UE to measure CSI-RSRP individually. This helps gNB to decide (based on CQI reports) which beam to use for the UE (B0 or B1). Whether to switch or not.

Image Source : Zero Power CSI-RS (ZP-CSI-RS) in 5G NR

    2. Interference Awareness/Measurement: In this case ZP-CSI-RS is configured as CSI-IM. It allows the UE to obtain awareness of the interference. In this case gNB makes sure the ZP-CSI-RS resources are configured such that they collide with PDSCH resources of the neighbouring cells.

 

[Sharetechnote] Are there any other use cases you can think of ?

[Sakshama] Yes, ZP-CSI-RS can also be used for PDSCH rate matching. When a transport block is not equal to the PDSCH scheduled resources, the rate has to match. gNB can use ZP-CSI-RS resource elements to match the data rate. Configuration of ZP-CSI-RS is the same as CSI-IM, just the purpose is different.

Image Source : Zero Power CSI-RS (ZP-CSI-RS) in 5G NR

< LinkedIn Post >

  • Personally I tend to agree more with this view posted in LinkedIn article Deep Dive into 5G CSI RS
  • On a time-domain OFDM symbol, CSI-RS for IM or NZP CSI-RS occasionally does not fully occupy the corresponding frequency-domain resources. Per specifications, ZP CSI-RS is used to inform UEs of the REs that are not mapped onto any data, as shown in the figure below. The gNodeB uses ZP CSI-RS resources to inform UEs of the remaining frequency-domain resources for mapping data, thereby increasing the number of available REs of the UEs.

< Papers/Articles >

I want to quote statements from some papers/aritcles that I have read.

VI-C of this paper would state as follows:

    Zero-power CSI-RS can be used as a masking tool to protect certain REs by making them unavailable for PDSCH mapping. This masking supports transmission of UE specific CSI-RS, but the design is also a tool for allowing introduction of new features to NR with retained backward compatibility

It is worth noting the statements from this paper :

  • It should be clear that CSI-IM and ZP CSIRS have different functions, where CSI-IM defines the set of resource elements from which the interference is measured, and ZP CSI-RS defines a set of resource elements where physical downlink shared channel (PDSCH) is not mapped and UE can not make any assumptions of the content of these resources (Section III-B)-2))
  • In CSI-IM method, the NZP CSI-RSs are protected from inter-cell-interference by allocating either CSI-IM or ZP CSI-RS to the REs overlapping with NZP CSI-RSs from other gNBs. This allows the UE to obtain higher quality channel measurement due to reduced interference on top of the NZP CSI-RS (Section III-B)-2))

NOTE : I think you need to pay close attention to reading this paper and try to clearly understand the meaning of each figures and the test result. For me, two figures in the paper got my attention Fig 2 and Fig 3 as shown below.

First let look into the details of resource allocations in Fig 2 and try to understand the implications of each resource allocations.

For all cells, the symbol for DMRS are same, but further details of DMRS is not described in the paper.

[a] only NZP-CSI RS are configured for every cells (Serving gNB, gNB1, gNB2) in PDSCH regions. And the RE position of NZP CSI-RS for every cells are same. This implies that NZP CSI-RS from gNB1, gNB2 would interfere with NZP CSI RS of serving cell. In other words, NZP CSI-RS of Serving gNB is interfered by NZP CSI RS of gNB1 and gNB2. ==> This is labeld as [NZP CSI-RS non precoded IM]

[b] only NZP-CSI RS are configured for every cells (Serving gNB, gNB1, gNB2) in PDSCH regions. And the RE position of NZP CSI-RS for every cells are different in such a way that the position does not overlap with CSI-RS of any other cells. In this case, NZP CSI-RS of Serving gNB is interfered by PDSCH data RE of gNB1 and gNB2. ==> This is labeld as [NZP CSI-RS precoded IM]

[c] NZP-CSI RS and CSI-IM are configured for every cells (Serving gNB, gNB1, gNB2) in PDSCH regions. And the RE position of NZP CSI-RS for every cells are different in such a way that the position does not overlap with CSI-RS of any other cells. In this case, NZP CSI-RS of Serving gNB is NOT interfered (theoretically) by PDSCH data RE of gNB1/gNB2 nor NZP CSI-RS RE of gNB1/gNB2. ==> This is labeld as [CSI-IM non precoded IM]]

[d] NZP-CSI RS, CSI-IM and ZP CSI-RS are configured for every cells (Serving gNB, gNB1, gNB2) in PDSCH regions. And the RE position of NZP CSI-RS for every cells are different in such a way that the position does not overlap with CSI-RS of any other cells. In this configuation, the RE position of ZP CSI-RS is same as CSI-IM position of [c]. In this case, NZP CSI-RS of Serving gNB is NOT interfered (theoretically) by PDSCH data RE of gNB1/gNB2 nor NZP CSI-RS RE of gNB1/gNB2. ==> This is labeld as [CSI-IM precoded IM]]

BLER and Throughput measurement for each of the configuration are shown in Fig 3. In short, it is shown that when SINR is very good (e.g, greater than 25), you wouldn't see any differences in terms of performance regardless of which configuration you use. When SINR is poor (e.g, around cell boundary), non-precoded IM shows better performance comparing to precoded IM.

 

Image Source : Interference Measurement Methods in 5G NR: Principles and Performance - Fig 2

 

Image Source : Interference Measurement Methods in 5G NR: Principles and Performance - Fig 3

RRC Parameters for CSI RS

The hierarchy to configure CSI-RS is pretty complicated. Overall hierachy (procedure) to configure CSI-RS can be described as follows.

The hierarchy is genuinely deep, so rather than reading it top to bottom, it helps to know that there are really two separate trees and that they meet only at the end. Once you can tell which tree you are in, navigating either one is much easier :

  • The measurement tree – CSI-MeasConfig holds the NZP-CSI-RS resources, the resource sets, the CSI-IM resources, and the report configurations. This is the tree that answers 'what should the UE measure and report'.
  • The scheduling tree – PDSCH-Config holds the ZP-CSI-RS resources. This is the tree that answers 'which REs should the UE's data decoder avoid'.

The four-step procedure below is really describing a movement from the smallest unit outwards : first the pattern inside one RB, then how far it extends across the band, then how often it repeats in time, and only then which tree it is attached to. If you get lost while reading a real configuration, asking 'which of these four am I looking at' usually gets you back on track quickly.

NOTE : one detail that surprises people is that the same resource description can be referenced from more than one place. A resource is not 'used up' by being referenced – and conversely, a beautifully specified resource that nothing references will simply never be transmitted.

PDSCH-Config ::=                        SEQUENCE {
    dataScramblingIdentityPDSCH             INTEGER (0..1007)    OPTIONAL,
    dmrs-DownlinkForPDSCH-MappingTypeA      SetupRelease { DMRS-DownlinkConfig }  OPTIONAL,   
    dmrs-DownlinkForPDSCH-MappingTypeB      SetupRelease { DMRS-DownlinkConfig }  OPTIONAL,  
    tci-StatesToAddModList                  SEQUENCE (SIZE(1..maxNrofTCI-States)) 
                                                OF TCI-State    OPTIONAL,   -- Need N
    tci-StatesToReleaseList                 SEQUENCE (SIZE(1..maxNrofTCI-States)) 
                                                OF TCI-StateId  OPTIONAL,   -- Need N
    vrb-ToPRB-Interleaver                   ENUMERATED {n2, n4},
    resourceAllocation                      ENUMERATED { resourceAllocationType0,
                                                         resourceAllocationType1, 
                                                         dynamicSwitch},
    pdsch-AllocationList                    SEQUENCE (SIZE(1..maxNrofDL-Allocations)) 
                                                OF PDSCH-TimeDomainResourceAllocation ,
    pdsch-AggregationFactor                 ENUMERATED { n2, n4, n8 } OPTIONAL, 
    rateMatchPatternToAddModList            SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) 
                                                 OF RateMatchPattern    OPTIONAL, -- Need N
    rateMatchPatternToReleaseList           SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) 
                                                 OF RateMatchPatternId     OPTIONAL, -- Need N
    rateMatchPatternGroup1                  SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) 
                                                 OF RateMatchPatternId     OPTIONAL, -- Need R
    rateMatchPatternGroup2                  SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) 
                                                 OF RateMatchPatternId     OPTIONAL, -- Need R
    rbg-Size                                ENUMERATED {config1, config2},
    mcs-Table                               ENUMERATED {qam64, qam256},
    maxNrofCodeWordsScheduledByDCI          ENUMERATED {n1, n2} OPTIONAL,   -- Need R
    prb-BundlingType                    CHOICE {
        static                                  SEQUENCE {
            bundleSize                              ENUMERATED { n4, wideband }  OPTIONAL  
        },
        dynamic                                 SEQUENCE {
            bundleSizeSet1                          ENUMERATED { n4, 
                                                                 wideband,
                                                                 n2-wideband,
                                                                 n4-wideband
                                                                }  OPTIONAL,   -- Need S
            bundleSizeSet2                          ENUMERATED { n4, 
                                                                 wideband
                                                                } OPTIONAL    -- Need S
        }
    },
    zp-CSI-RS-ResourceToAddModList          SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Resources)) 
                                                OF ZP-CSI-RS-Resource   OPTIONAL,   -- Need N
    zp-CSI-RS-ResourceToReleaseList         SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Resources)) 
                                                OF ZP-CSI-RS-ResourceId OPTIONAL,   -- Need M
    aperiodic-ZP-CSI-RS-ResourceSetsToAddModList    SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets)) 
                                                OF ZP-CSI-RS-ResourceSet   OPTIONAL, -- Need N
    aperiodic-ZP-CSI-RS-ResourceSetsToReleaseList   SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets)) 
                                                OF ZP-CSI-RS-ResourceSetId   OPTIONAL, -- Need N
    sp-ZP-CSI-RS-ResourceSetsToAddModList   SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets)) 
                                                OF ZP-CSI-RS-ResourceSet     OPTIONAL, -- Need N
    sp-ZP-CSI-RS-ResourceSetsToReleaseList  SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets)) 
                                                OF ZP-CSI-RS-ResourceSetId   OPTIONAL, -- Need N

    ...
}

CSI-MeasConfig ::= SEQUENCE {
   nzp-CSI-RS-ResourceToAddModList          SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-Resources)) 
                                                OF NZP-CSI-RS-Resource OPTIONAL, 
   nzp-CSI-RS-ResourceToReleaseList         SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-Resources)) 
                                                OF NZP-CSI-RS-ResourceId OPTIONAL, 
   nzp-CSI-RS-ResourceSetToAddModList       SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourceSets)) 
                                                OF NZP-CSI-RS-ResourceSet OPTIONAL, 
   nzp-CSI-RS-ResourceSetToReleaseList      SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourceSets)) 
                                                OF NZP-CSI-RS-ResourceSetId OPTIONAL, 
   csi-IM-ResourceToAddModList              SEQUENCE (SIZE (1..maxNrofCSI-IM-Resources)) 
                                                OF CSI-IM-Resource OPTIONAL, 
   csi-IM-ResourceToReleaseList             SEQUENCE (SIZE (1..maxNrofCSI-IM-Resources)) 
                                                OF CSI-IM-ResourceId OPTIONAL, 
   csi-IM-ResourceSetToAddModList           SEQUENCE (SIZE (1..maxNrofCSI-IM-ResourceSets)) 
                                                OF CSI-IM-ResourceSet OPTIONAL,
   csi-IM-ResourceSetToReleaseList          SEQUENCE (SIZE (1..maxNrofCSI-IM-ResourceSets)) 
                                                OF CSI-IM-ResourceSetId OPTIONAL, 
   csi-SSB-ResourceSetToAddModList          SEQUENCE (SIZE (1..maxNrofCSI-SSB-ResourceSets)) 
                                                OF CSI-SSB-ResourceSet OPTIONAL, 
   csi-SSB-ResourceSetToAddReleaseList      SEQUENCE (SIZE (1..maxNrofCSI-SSB-ResourceSets)) 
                                                OF CSI-SSB-ResourceSetId OPTIONAL, 
   csi-ResourceConfigToAddModList           SEQUENCE (SIZE (1..maxNrofCSI-ResourceConfigurations))
                                                OF CSI-ResourceConfig OPTIONAL,
   csi-ResourceConfigToReleaseList          SEQUENCE (SIZE (1..maxNrofCSI-ResourceConfigurations))
                                                OF CSI-ResourceConfigId OPTIONAL,
   csi-ReportConfigToAddModList             SEQUENCE (SIZE (1..maxNrofCSI-ReportConfigurations)) 
                                                OF CSI-ReportConfig OPTIONAL,
   csi-ReportConfigToReleaseList            SEQUENCE (SIZE (1..maxNrofCSI-ReportConfigurations)) 
                                                OF CSI-ReportConfigId OPTIONAL,
   reportTriggerSize                        INTEGER (0..6) OPTIONAL,
   aperiodicTriggerStateList                SetupRelease { CSI-AperiodicTriggerStateList },
   semiPersistentOnPUSCH-TriggerStateList   SetupRelease { 
                                                CSI-SemiPersistentOnPUSCH-TriggerStateList 
                                            } OPTIONAL,
...
}

ZP-CSI-RS-Resource ::= SEQUENCE {
   zp-CSI-RS-ResourceId        ZP-CSI-RS-ResourceId,
   resourceMapping             CSI-RS-ResourceMapping,
   periodicityAndOffset        CSI-ResourcePeriodicityAndOffset OPTIONAL,
   ...
}

ZP-CSI-RS-ResourceSet ::= SEQUENCE {
   zp-CSI-RS-ResourceSetId    ZP-CSI-RS-ResourceSetId,
   zp-CSI-RS-ResourceIdList   SEQUENCE (SIZE(1..maxNrofZP-CSI-RS-ResourcesPerSet)) 
                                OF ZP-CSI-RS-ResourceId,
...
}

NZP-CSI-RS-Resource ::= SEQUENCE {
   nzp-CSI-RS-ResourceId      NZP-CSI-RS-ResourceId,
   resourceMapping            CSI-RS-ResourceMapping,
   powerControlOffset         INTEGER (-8..15),
   powerControlOffsetSS       ENUMERATED{db-3, db0, db3, db6} OPTIONAL, -- Need R
   scramblingID               ScramblingId,
   periodicityAndOffset       CSI-ResourcePeriodicityAndOffset OPTIONAL,-
   qcl-InfoPeriodicCSI-RS     TCI-StateId OPTIONAL, -- Cond Periodic
   ...
}

NZP-CSI-RS-ResourceSet ::= SEQUENCE {
   nzp-CSI-ResourceSetId     NZP-CSI-RS-ResourceSetId,
   nzp-CSI-RS-Resources      SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourcesPerSet)) 
                                  OF NZP-CSI-RS-ResourceId,
   repetition                ENUMERATED { on, off } OPTIONAL, 
   aperiodicTriggeringOffset INTEGER(0..4) OPTIONAL, 
   trs-Info                  ENUMERATED {true} OPTIONAL, 
   ...
}

CSI-RS-ResourceMapping ::= SEQUENCE {
   frequencyDomainAllocation CHOICE {
      row1     BIT STRING (SIZE (4)),
      row2     BIT STRING (SIZE (12)),
      row4     BIT STRING (SIZE (3)),
      other    BIT STRING (SIZE (6))
   },
   nrofPorts                       ENUMERATED {p1,p2,p4,p8,p12,p16,p24,p32},
   firstOFDMSymbolInTimeDomain     INTEGER (0..13),
   firstOFDMSymbolInTimeDomain2    INTEGER (2..12) OPTIONAL, -- Need R
   cdm-Type                        ENUMERATED {noCDM, fd-CDM2, cdm4-FD2-TD2, cdm8-FD2-TD4},
   density CHOICE {
     dot5      ENUMERATED {evenPRBs, oddPRBs},
     one       NULL,
     three     NULL,
     spare     NULL
   },
   freqBand    CSI-FrequencyOccupation,
   ...
}

CSI-ResourcePeriodicityAndOffset ::= CHOICE {
   slots4       INTEGER (0..3),
   slots5       INTEGER (0..4),
   slots8       INTEGER (0..7),
   slots10      INTEGER (0..9),
   slots16      INTEGER (0..15),
   slots20      INTEGER (0..19),
   slots32      INTEGER (0..31),
   slots40      INTEGER (0..39),
   slots64      INTEGER (0..63),
   slots80      INTEGER (0..79),
   slots160     INTEGER (0..159),
   slots320     INTEGER (0..319),
   slots640     INTEGER (0..639)
}

CSI-FrequencyOccupation ::= SEQUENCE {
   startingRB    INTEGER (0..maxNrofPhysicalResourceBlocks-1),
   nrofRBs       INTEGER (24..maxNrofPhysicalResourceBlocksPlus1),
   ...
}

CSI-IM-Resource ::= SEQUENCE {
   csi-IM-ResourceId                   CSI-IM-ResourceId,
   csi-IM-ResourceElementPattern       CHOICE {
      pattern0 SEQUENCE {
         subcarrierLocation-p0         ENUMERATED { s0, s2, s4, s6, s8, s10 },
         symbolLocation-p0             INTEGER (0..12)
      },
      pattern1 SEQUENCE {
         subcarrierLocation-p1         ENUMERATED { s0, s4, s8 },
         symbolLocation-p1             INTEGER (0..13)
      }
   } OPTIONAL, -- Need M
   freqBand                            CSI-FrequencyOccupation OPTIONAL, 
   periodicityAndOffset                CSI-ResourcePeriodicityAndOffset OPTIONAL, 
   PeriodicOrSemiPersistent
...
}

CSI-IM-ResourceSet ::= SEQUENCE {
   csi-IM-ResourceSetId              CSI-IM-ResourceSetId,
   csi-IM-Resources                  SEQUENCE (SIZE(1..maxNrofCSI-IM-ResourcesPerSet)) 
                                         OF CSI-IM-ResourceId,
   ...
}

CSI-SSB-ResourceSet ::= SEQUENCE {
   csi-SSB-ResourceSetId            CSI-SSB-ResourceSetId,
   csi-SSB-ResourceList             SEQUENCE (SIZE(1..maxNrofCSI-SSB-ResourcePerSet)) 
                                        OF SSB-Index,
   ...
}

CSI-ResourceConfig ::= SEQUENCE {
   csi-ResourceConfigId           CSI-ResourceConfigId,
   csi-RS-ResourceSetList         CHOICE {
      nzp-CSI-RS-SSB                 SEQUENCE {
         nzp-CSI-RS-ResourceSetList   SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourceSetsPerConfig))
                                              OF NZP-CSI-RS-ResourceSetId OPTIONAL,
         csi-SSB-ResourceSetList      SEQUENCE (SIZE (1..maxNrofCSI-SSB-ResourceSetsPerConfig))
                                              OF CSI-SSB-ResourceSetId OPTIONAL 
      },
      csi-IM-ResourceSetList          SEQUENCE (SIZE (1..maxNrofCSI-IM-ResourceSetsPerConfig)) 
                                             OF CSI-IM-ResourceSetId
   },
   bwp-Id                         BWP-Id,
   resourceType                   ENUMERATED { aperiodic, semiPersistent, periodic },
   ...
}

CSI-ReportConfig ::= SEQUENCE {
   reportConfigId                         CSI-ReportConfigId,
   carrier                                ServCellIndex OPTIONAL, 
   resourcesForChannelMeasurement         CSI-ResourceConfigId,
   csi-IM-ResourcesForInterference        CSI-ResourceConfigId OPTIONAL, 
   nzp-CSI-RS-ResourcesForInterference    CSI-ResourceConfigId OPTIONAL, 
   reportConfigType                       CHOICE {
      periodic SEQUENCE {
         reportSlotConfig                 CSI-ReportPeriodicityAndOffset,
         pucch-CSI-ResourceList           SEQUENCE (SIZE (1..maxNrofBWPs)) OF PUCCH-CSI-Resource
      },
      semiPersistentOnPUCCH SEQUENCE {
         reportSlotConfig                 CSI-ReportPeriodicityAndOffset,
         pucch-CSI-ResourceList           SEQUENCE (SIZE (1..maxNrofBWPs)) OF PUCCH-CSI-Resource
      },
      semiPersistentOnPUSCH SEQUENCE {
         reportSlotConfig                 ENUMERATED {sl5, sl10, sl20, sl40, sl80, sl160, sl320},
         reportSlotOffsetList             SEQUENCE (SIZE (1.. maxNrofUL-Allocations)) 
                                               OF INTEGER(0..32),
      p0alpha                             P0-PUSCH-AlphaSetId
      },
      aperiodic SEQUENCE {
         reportSlotOffsetList             SEQUENCE (SIZE (1..maxNrofUL-Allocations)) 
                                               OF INTEGER(0..32)
      }
   },
   reportQuantity CHOICE {
      none NULL,
      cri-RI-PMI-CQI                      NULL,
      cri-RI-i1                           NULL,
      cri-RI-i1-CQI                       SEQUENCE {
         pdsch-BundleSizeForCSI                ENUMERATED {n2, n4} OPTIONAL
      },
      cri-RI-CQI                          NULL,
      cri-RSRP                            NULL,
      ssb-Index-RSRP                      NULL,
      cri-RI-LI-PMI-CQI                   NULL
   },
   reportFreqConfiguration SEQUENCE {
      cqi-FormatIndicator                 ENUMERATED { widebandCQI, subbandCQI } OPTIONAL, 
      pmi-FormatIndicator                 ENUMERATED { widebandPMI, subbandPMI } OPTIONAL, 
      csi-ReportingBand CHOICE {
         subbands3                        BIT STRING(SIZE(3)),
         subbands4                        BIT STRING(SIZE(4)),
         subbands5                        BIT STRING(SIZE(5)),
         subbands6                        BIT STRING(SIZE(6)),
         subbands7                        BIT STRING(SIZE(7)),
         subbands8                        BIT STRING(SIZE(8)),
         subbands9                        BIT STRING(SIZE(9)),
         subbands10                       BIT STRING(SIZE(10)),
         subbands11                       BIT STRING(SIZE(11)),
         subbands12                       BIT STRING(SIZE(12)),
         subbands13                       BIT STRING(SIZE(13)),
         subbands14                       BIT STRING(SIZE(14)),
         subbands15                       BIT STRING(SIZE(15)),
         subbands16                       BIT STRING(SIZE(16)),
         subbands17                       BIT STRING(SIZE(17)),
         subbands18                       BIT STRING(SIZE(18)),
         ...,
         subbands19-v1530                 BIT STRING(SIZE(19))
      } OPTIONAL 
   } OPTIONAL, 
   timeRestrictionForChannelMeasurements          ENUMERATED {configured, notConfigured},
   timeRestrictionForInterferenceMeasurements     ENUMERATED {configured, notConfigured},
   codebookConfig                                 CodebookConfig OPTIONAL, 
   nrofCQIsPerReport                              ENUMERATED {n1, n2} OPTIONAL, 
   groupBasedBeamReporting                CHOICE {
      enabled                                 NULL,
      disabled                            SEQUENCE {
         nrofReportedRS                          ENUMERATED {n1, n2, n3, n4} OPTIONAL 
      }
   },
   cqi-Table                              ENUMERATED {table1, table2, table3, spare1} OPTIONAL, 
   subbandSize                            ENUMERATED {value1, value2},
   non-PMI-PortIndication                 SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourcesPerConfig)) 
                                                OF PortIndexFor8Ranks OPTIONAL,
   ...,
   [[
   semiPersistentOnPUSCH-v1530 SEQUENCE {
      reportSlotConfig-v1530             ENUMERATED {sl4, sl8, sl16}
   } OPTIONAL
   ]]
}

CSI-ReportPeriodicityAndOffset ::= CHOICE {
   slots4          INTEGER(0..3),
   slots5          INTEGER(0..4),
   slots8          INTEGER(0..7),
   slots10         INTEGER(0..9),
   slots16         INTEGER(0..15),
   slots20         INTEGER(0..19),
   slots40         INTEGER(0..39),
   slots80         INTEGER(0..79),
   slots160        INTEGER(0..159),
   slots320        INTEGER(0..319)
}

PUCCH-CSI-Resource ::= SEQUENCE {
   uplinkBandwidthPartId         BWP-Id,
   pucch-Resource                PUCCH-ResourceId
}

PortIndexFor8Ranks ::= CHOICE {
   portIndex8    SEQUENCE{
      rank1-8         PortIndex8 OPTIONAL, -- Need R
      rank2-8         SEQUENCE(SIZE(2)) OF PortIndex8 OPTIONAL, -- Need R
      rank3-8         SEQUENCE(SIZE(3)) OF PortIndex8 OPTIONAL, -- Need R
      rank4-8         SEQUENCE(SIZE(4)) OF PortIndex8 OPTIONAL, -- Need R
      rank5-8         SEQUENCE(SIZE(5)) OF PortIndex8 OPTIONAL, -- Need R
      rank6-8         SEQUENCE(SIZE(6)) OF PortIndex8 OPTIONAL, -- Need R
      rank7-8         SEQUENCE(SIZE(7)) OF PortIndex8 OPTIONAL, -- Need R
      rank8-8         SEQUENCE(SIZE(8)) OF PortIndex8 OPTIONAL -- Need R
   },
   portIndex4    SEQUENCE{
      rank1-4         PortIndex4 OPTIONAL, -- Need R
      rank2-4         SEQUENCE(SIZE(2)) OF PortIndex4 OPTIONAL, -- Need R
      rank3-4         SEQUENCE(SIZE(3)) OF PortIndex4 OPTIONAL, -- Need R
      rank4-4         SEQUENCE(SIZE(4)) OF PortIndex4 OPTIONAL -- Need R
   },
   portIndex2    SEQUENCE{
      rank1-2         PortIndex2 OPTIONAL, -- Need R
      rank2-2         SEQUENCE(SIZE(2)) OF PortIndex2 OPTIONAL -- Need R
   },
   portIndex1         NULL
}

CodebookConfig ::= SEQUENCE {
   codebookType CHOICE {
      type1 SEQUENCE {
         subType CHOICE {
            typeI-SinglePanel SEQUENCE {
                  nrOfAntennaPorts CHOICE {
                     two SEQUENCE {
                        twoTX-CodebookSubsetRestriction BIT STRING (SIZE (6))
                     },
                     moreThanTwo SEQUENCE {
                        n1-n2 CHOICE {
                           two-one-TypeI-SinglePanel-Restriction        BIT STRING (SIZE (8)),
                           two-two-TypeI-SinglePanel-Restriction        BIT STRING (SIZE (64)),
                           four-one-TypeI-SinglePanel-Restriction       BIT STRING (SIZE (16)),
                           three-two-TypeI-SinglePanel-Restriction      BIT STRING (SIZE (96)),
                           six-one-TypeI-SinglePanel-Restriction        BIT STRING (SIZE (24)),
                           four-two-TypeI-SinglePanel-Restriction       BIT STRING (SIZE (128)),
                           eight-one-TypeI-SinglePanel-Restriction      BIT STRING (SIZE (32)),
                           four-three-TypeI-SinglePanel-Restriction     BIT STRING (SIZE (192)),
                           six-two-TypeI-SinglePanel-Restriction        BIT STRING (SIZE (192)),
                           twelve-one-TypeI-SinglePanel-Restriction     BIT STRING (SIZE (48)),
                           four-four-TypeI-SinglePanel-Restriction      BIT STRING (SIZE (256)),
                           eight-two-TypeI-SinglePanel-Restriction      BIT STRING (SIZE (256)),
                           sixteen-one-TypeI-SinglePanel-Restriction    BIT STRING (SIZE (64))
                     },
                     typeI-SinglePanel-codebookSubsetRestriction-i2     BIT STRING (SIZE (16))
                  }
               },
               typeI-SinglePanel-ri-Restriction BIT STRING (SIZE (8))
            },
            typeI-MultiPanel SEQUENCE {
                  ng-n1-n2 CHOICE {
                     two-two-one-TypeI-MultiPanel-Restriction          BIT STRING (SIZE (8)),
                     two-four-one-TypeI-MultiPanel-Restriction         BIT STRING (SIZE (16)),
                     four-two-one-TypeI-MultiPanel-Restriction         BIT STRING (SIZE (8)),
                     two-two-two-TypeI-MultiPanel-Restriction          BIT STRING (SIZE (64)),
                     two-eight-one-TypeI-MultiPanel-Restriction        BIT STRING (SIZE (32)),
                     four-four-one-TypeI-MultiPanel-Restriction        BIT STRING (SIZE (16)),
                     two-four-two-TypeI-MultiPanel-Restriction         BIT STRING (SIZE (128)),
                     four-two-two-TypeI-MultiPanel-Restriction         BIT STRING (SIZE (64))
                  },
                  ri-Restriction BIT STRING (SIZE (4))
               }
         },
         codebookMode INTEGER (1..2)
      },
      type2 SEQUENCE {
         subType CHOICE {
            typeII SEQUENCE {
               n1-n2-codebookSubsetRestriction CHOICE {
                  two-one               BIT STRING (SIZE (16)),
                  two-two               BIT STRING (SIZE (43)),
                  four-one              BIT STRING (SIZE (32)),
                  three-two             BIT STRING (SIZE (59)),
                  six-one               BIT STRING (SIZE (48)),
                  four-two              BIT STRING (SIZE (75)),
                  eight-one             BIT STRING (SIZE (64)),
                  four-three            BIT STRING (SIZE (107)),
                  six-two               BIT STRING (SIZE (107)),
                  twelve-one            BIT STRING (SIZE (96)),
                  four-four             BIT STRING (SIZE (139)),
                  eight-two             BIT STRING (SIZE (139)),
                  sixteen-one           BIT STRING (SIZE (128))
               },
               typeII-RI-Restriction    BIT STRING (SIZE (2))
            },
            typeII-PortSelection SEQUENCE {
               portSelectionSamplingSize              ENUMERATED {n1, n2, n3, n4} OPTIONAL, 
               typeII-PortSelectionRI-Restriction     BIT STRING (SIZE (2))
            }
         },
         phaseAlphabetSize                            ENUMERATED {n4, n8},
         subbandAmplitude                             BOOLEAN,
         numberOfBeams                                ENUMERATED {two, three, four}
      }
   }
}
                                                                

 

RRC Examples

Following is a simple example of CSI-RS allocation from 38.508-1.  You would have more details configurations from the same specification that I summarized in this note.

< Based on 38.508-1 Table 4.6.3-45: CSI-RS-ResourceMapping >

Reading a real configuration is a different skill from reading the specification, and it is the skill you actually need on the job. The specification tells you what every field can be; a real message tells you what somebody chose, and usually the interesting question is why they chose it.

A practical order to read any CSI-RS configuration you meet in the field :

  • Start at the resource, not the top. Find nrofPorts, cdm-Type and density, and use them to fix the row in the table. Everything else is easier once the row is known.
  • Then resolve the position. Read the bitmap and firstOFDMSymbolInTimeDomain, and work out the actual k and l values.
  • Then resolve the timing. Read periodicityAndOffset and convert it to a real interval – remembering it is counted in slots, not milliseconds.
  • Finally, look upwards. Find which resource set contains it, and which report configuration refers to that set. This is what tells you the purpose : a set with trs-Info is tracking, a set referenced by a cri-RI-PMI-CQI report is channel measurement.

NOTE : it is well worth cross-checking a configuration against the CSI-IM and ZP-CSI-RS entries in the same message. Those three are usually designed together, and seeing how they line up on the resource grid tells you more about the network's intent than any single IE does on its own.

 

TRS

FR1

FR2

CSI-RS-ResourceMapping ::=

SEQUENCE {

  frequencyDomainAllocation CHOICE   {

 

 

    row1

1000

 

 

    row4

 

 

010

    other

 

011110

 

  }

 

 

  nrofPorts 

p1

p8

p4

  firstOFDMSymbolInTimeDomain

4

3

13

  firstOFDMSymbolInTimeDomain2

Not present

 

 

  cdm-Type 

noCDM

fd-CDM2

fd-CDM2

  density CHOICE {

 

 

    one

 

 

 

    three

NULL

 

 

  }

 

 

  freqBand

CSI-FrequencyOccupation

 

 

}

 

 

NOTE see here for CSI-RS map see here for CSI-RS map  

 

< Based on 38.508-1 Table 4.6.3-33: CSI-FrequencyOccupation >

 

FR1_60

FR1_80

FR1_100

FR2_100

TRS

CSI-FrequencyOccupation ::= SEQUENCE {

 

 

 

 

 

  startingRB

0

0

0

0

0

  nrofRBs

160

216

272

64

52

}

How to Avoid Collision with Other Signals ?

According to what is explained above, it would be possible to allocate the CSI-RS at any symbol and in any slot, but in real situation where various other physical channels and signals running we cannot enjoy such a full degree of freedom for allocating CSI-RS.  In this aspect, I think I can list some tips that may helps.

This section is about a consequence of everything above, and it is the most practical part of the page. The flexibility that makes CSI-RS powerful also makes it dangerous : the specification will happily let you configure a CSI-RS in a location that is already spoken for, and nothing will warn you.

The reason collisions matter so much is worth stating explicitly. A CSI-RS does not politely share a resource element – it replaces whatever was there. So a badly placed CSI-RS does not produce an error; it produces damage somewhere else :

  • Overlap the SSB and you may disturb the very signal UEs rely on to synchronise and to measure RSRP.
  • Overlap CORESET/PDCCH and the UE may miss its scheduling grants – which then looks like a coverage problem rather than a configuration problem.
  • Overlap PDSCH DMRS and channel estimation degrades, so the data fails to decode even though the signal is strong.
  • Overlap PDSCH data without a matching ZP-CSI-RS and the transport block simply fails CRC, with every RF measurement still looking perfectly healthy.
  • Place it in an uplink symbol of a TDD pattern and it will not be transmitted at all.

Notice the common thread : in every one of these cases the radio looks fine and something else breaks. That indirectness is exactly why collision avoidance is worth doing carefully up front rather than debugging afterwards. The tips below are the practical checklist.

  • Avoid Symbols where SSB is transmitted
  • Avoid slots and symbols that are configured for Uplink in TDD UL-DL configuration
  • Avoid symbols where CORESET is configured
  • Avoid symbols where PDSCH DMRS is configured

NOTE : If you want to see the contents of full log with Amarisoft Log viewer, go to LogAnalysis section and click on 'Sample Log' in this tutorial of Amarisoft TechAcademy.

Example 1 >

As an example, let's assume a case as follows.

    SIB 1 :

     

          ssb-PositionsInBurst {

            inOneGroup 'FF'H

          },

          ssb-PeriodicityServingCell ms20,

          tdd-UL-DL-ConfigurationCommon {

            referenceSubcarrierSpacing kHz30,

            pattern1 {

              dl-UL-TransmissionPeriodicity ms5,

              nrofDownlinkSlots 7,

              nrofDownlinkSymbols 6,

              nrofUplinkSlots 2,

              nrofUplinkSymbols 4

            }

          },

First thing I want to suggest you to do is to draw a diagram and mark the configuration of ssb bitmap and tdd-UL-DL config and some additional symbols where CSI-RS is not allowed to be assigned as below.

Now you have a bunck of white spaces where you can allocate CSI-RS. Not so many white spaces, right ? Actually if you want to put the CSI-RS to another 5ms period where SSB is not transmitted, it would be much easier to configure, but in this example I intentionaly picked up tough situation. There can be so many different ways of configuring the CSI-RS, but you can determine any valid configuration as you want and mark it as shown below (this is just one example) and then populate the configuration into RRC message. It would be very error prone if you try configuring RRC without this kind of drawing beforehand.

NOTE : I have tested this configuration with Amarisoft Callbox (gNB+Core) and two different UE (Amarisoft UE simulator and a commericial UE).

Case 1 : I configured CSI for TRS at the different symbol number in slot 4 and 5. With this configuration, only Amarisoft UE simulator passed and commercial UE didn't pass (Radio Link broken right after RRC Setup).

Case 2 : I configured CSI for TRS at the same symbol number in slot 4 and 5 then both DUT (Amarisoft UEsimulator and Commerical UE) passed. I think both configuration is compliant to 3GPP and I personally think it is due to UE implementation of the commercial UE that failed at case 1).

Reference

The material below goes beyond what this page covers, and it is worth knowing what each source is good for. The 3GPP specifications are the authority for the tables and the exact field definitions – 38.211 for sequence generation and resource mapping, 38.214 for the measurement and CSI-IM behaviour, and 38.331 for every RRC parameter mentioned here. The papers and articles are more useful for the reasoning : why interference measurement is designed the way it is, and how these signals behave in real deployments rather than on paper.