5G/NR - MIMO DL

 

 

 

Downlink MIMO Configuration

I assume that most of the readers are already familiar with the basic concept of MIMO from LTE MIMO. In 5G/NR, we will use a very special types of MIMO called Massive MIMO to implement both sptial multiplexing(MIMO) and BeamForming.

In this page, I will describe mostly about 3GPP details on how the MIMO is operated in NR.

How MIMO is configured ?

The major factors for MIMO configuration is the number of antenna and layers. In LTE, these factors are specified explicitely by RRC message (RRC Connection Setup or RRCConnectionSetupReconfiguration). However, in NR there is no explicit RRC parameter for the number of Antenna and the number of layers. In stead, both UE and gNB carries a few predefined tables defining the number of antenna port and layers.

Now you would have a few questions. Out of these multiple predefiend table, how a UE figure out which table to use ?

It is specified by the two dmrs related RRC parameters : dmrs-Type and maxLength. The mapping between the table and the RRC parameters is as follows.

< Antenna port(s) and number of layers >

dmrs-Type

maxLength

Bit Field Length in DCI

Table in 38.212

1

1

4

Table 7.3.1.2.2-1

1

2

5

Table 7.3.1.2.2-2

2

1

5

Table 7.3.1.2.2-3

2

2

6

Table 7.3.1.2.2-4

Now you would have another question. Once a specific table is selected, how UE can figure out which row in the table is being used for each transmission from gNB ?

UE figures it out from a field called Antenna port(s) and number of layers in DCI 1_1. The number of DMRS ports indicates the number of Antenna being used in the tables.

Now let's put the two halves on one timeline. The following diagram shows the over-the-air messages between the UE and the gNB, from the capability report to one PDSCH reception. The upper part happens once, when RRC configures the UE. The lower part repeats for every scheduled PDSCH, and that is where DCI selects the row of the table.

UE gNB RRC, once UECapabilityInformation maxNumberMIMO-LayersPDSCH, supported codebooks and CSI-RS resources RRCReconfiguration PDSCH-Config : DMRS-DownlinkConfig with dmrs-Type and maxLength, which selects the table PDSCH-ServingCellConfig : maxMIMO-Layers, CSI-MeasConfig : CSI-RS and CSI-ReportConfig RRCReconfigurationComplete Every scheduled PDSCH NZP CSI-RS measured with the codebook configured in CSI-ReportConfig CSI report on PUCCH or PUSCH RI, PMI and CQI : the rank the UE recommends gNB decides rank, precoder and MCS PDCCH : DCI 1_1 Antenna port(s) field, 4 to 6 bits, selects one row of the table the row gives the DMRS ports and the number of CDM groups without data PDSCH with DMRS on the indicated ports number of layers = number of DMRS ports HARQ-ACK on PUCCH or PUSCH

Figure 1. How NR MIMO is configured over the air. RRC fixes which antenna port table applies, once. DCI 1_1 then picks a row of that table for every PDSCH, and the row decides the DMRS ports and so the number of layers.

  • UECapabilityInformation : the UE reports how many PDSCH layers it supports, with maxNumberMIMO-LayersPDSCH, and which codebooks it supports.
  • RRCReconfiguration : DMRS-DownlinkConfig inside PDSCH-Config carries dmrs-Type and maxLength, which select one of the four tables. The maxMIMO-Layers field in PDSCH-ServingCellConfig caps the number of layers.
  • NZP CSI-RS and CSI report : the UE measures the channel and recommends a rank with RI, a precoder with PMI and a CQI. The gNB uses this as input, but it makes the final decision.
  • DCI 1_1 : the Antenna port(s) field is 4, 5 or 6 bits, depending on the table. Its value is the row index of the table.
  • PDSCH : the UE receives the DMRS on the ports given by the row, and the number of DMRS ports is the number of layers.

One thing you would notice is that no message carries the number of layers as a plain number. RRC only gives an upper limit with maxMIMO-Layers. The actual number of layers for each PDSCH is hidden in the DCI row, through the number of DMRS ports. This is why you have to decode the Antenna port(s) field against the right table to know the rank of a given PDSCH.

NOTE : You can visualize meaning of all of these table in this visualized tutorial.

MIMO Configuration Table : Antenna Port Configuration

Following table, extracted from 3GPP TS 38.212 Table 7.3.1.2.2-1, defines the mapping between different parameter values and their corresponding DMRS configurations for PDSCH transmission when one codeword is enabled (Codeword 0 is active, and Codeword 1 is disabled). It applies to Antenna port(s) (1000 + DMRS port), with dmrs-Type=1 and maxLength=1.

The table consists of three columns: Value, Number of DMRS CDM group(s) without data, and DMRS port(s).

  • The "Value" represents an index used in the system to configure DMRS parameters.
  • The "Number of DMRS CDM groups without data" defines how many CDM groups are allocated exclusively for DMRS, affecting channel estimation and spectral efficiency.
  • The "DMRS port(s)" column specifies the corresponding DMRS antenna ports assigned for transmission.

For lower values (0-1), only one CDM group is allocated, while from value 2 onwards, two CDM groups are assigned, increasing DMRS robustness. The DMRS ports change based on the value, ranging from a single port (e.g., 0 or 1) to multiple ports (e.g., 0-2). Values 12-15 are reserved and not used in this configuration.

< 38.212 - Table 7.3.1.2.2-1: Antenna port(s) (1000 + DMRS port), dmrs-Type=1, maxLength=1 >

    Interpretation of this table in terms of MIMO are as follows.

    NOTE : Interpretation of 'Number of front-load symbols' column are stated in 38.214 5.1.6.2 as below :

      the UE may be configured with the maximum number of front-loaded DM-RS symbols for PDSCH by higher layer parameter maxLength given by DMRS-DownlinkConfig..

      • if maxLength is set to 'len1', single-symbol DM-RS can be scheduled for the UE by DCI, and the UE can be configured with a number of additional DM-RS for PDSCH by higher layer parameter dmrs-AdditionalPosition, which can be set to 'pos0', 'pos1', 'pos2' or 'pos3'.
      • if maxLength is set to 'len2', both single-symbol DM-RS and double symbol DM-RS can be scheduled for the UE by DCI, and the UE can be configured with a number of additional DM-RS for PDSCH by higher layer parameter dmrs-AdditionalPosition, which can be set to 'pos0' or 'pos1'.

    NOTE : Interpretation of "Number of CDM groups without data" : The "Number of CDM groups without data" in the table refers to the number of Code Division Multiplexing (CDM) groups that are allocated only for DMRS (Demodulation Reference Signals) and do not carry any actual PDSCH data.

      What is CDM group ? :In 5G NR, DMRS symbols are mapped to resource elements (REs) using CDM (Code Division Multiplexing). CDM allows multiple DMRS symbols to be transmitted simultaneously within the same time and frequency resources by using different orthogonal cover codes.

      • A CDM group consists of DMRS symbols that are mutually orthogonal, meaning they do not interfere with each other.
      • Each CDM group can carry either DMRS or PDSCH data.
      • "Number of CDM groups without data" represents how many of these groups are reserved only for DMRS and do not carry data.

      How Does CDM group Affect Transmission?

      • A higher number of CDM groups without data means that more resources are allocated to DMRS, improving channel estimation accuracy but reducing spectral efficiency (since fewer resources are available for PDSCH data).
      • A lower number of CDM groups without data means fewer DMRS resources are used, improving data throughput but potentially reducing channel estimation quality.

Following table, extracted from 3GPP TS 38.212 Table 7.3.1.2.2-2, defines the PDSCH DMRS (Demodulation Reference Signal) antenna port mapping and configurations for different values when dmrs-Type=1 and maxLength=2.

  • The table is divided into two main sections:
    • One Codeword (Codeword 0 enabled, Codeword 1 disabled)
    • Two Codewords (Both Codeword 0 and Codeword 1 enabled)
  • For One Codeword, the table provides three key parameters for each value:
    • Number of DMRS CDM groups without data: Determines how many CDM groups are allocated solely for DMRS, affecting channel estimation quality and spectral efficiency.
    • DMRS port(s): Indicates the assigned antenna port(s) for DMRS transmission.
    • Number of front-load symbols: Specifies how many DMRS symbols are placed at the beginning of the transmission for early channel estimation.
  • For Two Codewords, the structure is similar but allows for multi-layer MIMO transmission:
    • The number of CDM groups without data is set to 2 for all entries.
    • The DMRS ports expand to multiple antennas, supporting spatial multiplexing.
    • The number of front-load symbols is always 2, ensuring sufficient channel estimation across both codewords.

< 38.212 - Table 7.3.1.2.2-2: Antenna port(s) (1000 + DMRS port), dmrs-Type=1, maxLength=2 >

Following table, extracted from 3GPP TS 38.212 Table 7.3.1.2.2-3, defines the PDSCH DMRS (Demodulation Reference Signal) antenna port mapping and configurations for dmrs-Type=2 and maxLength=1.

  • The table is divided into two sections:
    • One Codeword (Codeword 0 enabled, Codeword 1 disabled)
    • Two Codewords (Both Codeword 0 and Codeword 1 enabled)
  • For One Codeword, the table provides:
    • Number of DMRS CDM groups without data, which determines the number of CDM groups reserved for DMRS and not used for PDSCH data.
    • DMRS port(s), which indicates the assigned DMRS antenna port(s).
    • The values range from 0 to 23, with 24-31 being reserved.
  • For Two Codewords, the table specifies:
    • The number of DMRS CDM groups without data, which is fixed at 3 for valid entries.
    • The DMRS port(s), which expands to support multiple antenna ports (spatial multiplexing).
    • Values 2-31 are reserved, limiting the available configurations.

This table is critical for configuring PDSCH DMRS in 5G NR, particularly when using Type-2 DMRS, which supports higher flexibility in MIMO transmission and better channel estimation performance in high-mobility scenarios.

< 38.212 - Table 7.3.1.2.2-3: Antenna port(s) (1000 + DMRS port), dmrs-Type=2, maxLength=1 >

Following table, extracted from 3GPP TS 38.212 Table 7.3.1.2.2-4, specifies the PDSCH DMRS (Demodulation Reference Signal) antenna port mapping and configurations for dmrs-Type=2 and maxLength=2.

  • The table is divided into two sections:
    • One Codeword (Codeword 0 enabled, Codeword 1 disabled)
    • Two Codewords (Both Codeword 0 and Codeword 1 enabled)
  • For One Codeword, the parameters defined are:
    • Number of DMRS CDM groups without data: The number of CDM groups allocated exclusively for DMRS, which impacts spectral efficiency and channel estimation.
    • DMRS port(s): Specifies the antenna ports assigned to DMRS.
    • Number of front-load symbols: Defines how many DMRS symbols are positioned at the beginning of the slot to assist in early channel estimation.
  • For Two Codewords, the parameters include:
    • Number of DMRS CDM groups without data: Set to 2 or 3 based on the value.
    • DMRS port(s): Expands to multiple antenna ports to support spatial multiplexing in MIMO scenarios.
    • Number of front-load symbols: Fixed at 1 or 2, ensuring robust channel estimation for both codewords.
    • Reserved values (e.g., 6-63 for Two Codewords and 58-63 for One Codeword) indicate configurations that are not defined for use.

This table is crucial in configuring PDSCH DMRS in 5G NR, particularly in scenarios requiring high spectral efficiency and robust channel estimation, such as MIMO deployments and high-mobility conditions.

< 38.212 - Table 7.3.1.2.2-4: Antenna port(s) (1000 + DMRS port), dmrs-Type=2, maxLength=2 >

Example : RRC IEs for Table Selection and DCI for Port Selection

The section How MIMO is configured ? says that RRC picks the table and DCI picks the row. This section puts both halves on one configuration, so the path from a setup message to a resource grid runs end to end. I have used dmrs-Type=2 with maxLength=2 for the example. A simpler setting is easier to read, but it hides the two defaults that cause most of the confusion.

Two IEs carry the RRC half. The first is PDSCH-Config, which holds one DMRS configuration per PDSCH mapping type. The second is DMRS-DownlinkConfig, which holds dmrs-Type and maxLength themselves.

Following is based on 38.331 v19.4.0 (Release 19)

PDSCH-Config ::=                        SEQUENCE {
    dataScramblingIdentityPDSCH             INTEGER (0..1023)                                                   OPTIONAL,   -- Need S
    dmrs-DownlinkForPDSCH-MappingTypeA      SetupRelease { DMRS-DownlinkConfig }                                OPTIONAL,   -- Need M
    dmrs-DownlinkForPDSCH-MappingTypeB      SetupRelease { DMRS-DownlinkConfig }                                OPTIONAL,   -- Need M
    -- other fields omitted
    maxNrofCodeWordsScheduledByDCI          ENUMERATED {n1, n2}                                                 OPTIONAL,   -- Need R
    -- other fields omitted
}

Mapping type A and mapping type B carry separate DMRS configurations, and the mapping type of the scheduled PDSCH chooses between them. Only dmrs-Type, dmrs-AdditionalPosition and maxLength may be set differently for the two. The field maxNrofCodeWordsScheduledByDCI sits in the same IE. It decides whether the one codeword half or the two codeword half of the table applies. It also changes the number of MCS, NDI and RV fields in the DCI from one set to two.

Following is based on 38.331 v19.4.0 (Release 19)

DMRS-DownlinkConfig ::=             SEQUENCE {
    dmrs-Type                           ENUMERATED {type2}                                                      OPTIONAL,   -- Need S
    dmrs-AdditionalPosition             ENUMERATED {pos0, pos1, pos3}                                           OPTIONAL,   -- Need S
    maxLength                           ENUMERATED {len2}                                                       OPTIONAL,   -- Need S
    scramblingID0                       INTEGER (0..65535)                                                      OPTIONAL,   -- Need S
    scramblingID1                       INTEGER (0..65535)                                                      OPTIONAL,   -- Need S
    phaseTrackingRS                     SetupRelease { PTRS-DownlinkConfig  }                                   OPTIONAL,   -- Need M
    ...,
    [[
    dmrs-Downlink-r16               ENUMERATED {enabled}                                                        OPTIONAL    -- Need R
    ]],
    [[
    dmrs-TypeEnh-r18                ENUMERATED {enabled}                                                        OPTIONAL    -- Need R
    ]]
}

Two things in this listing are easy to miss, and both matter for table selection. The field dmrs-Type has one value only, type2, and it is optional. When it is absent the UE uses DMRS type 1, so type 1 is never signalled on its own. The field maxLength behaves the same way. Its only value is len2, and an absent field means len1.

That is why a UE on the simplest configuration receives neither field. It still knows it is reading Table 7.3.1.2.2-1, because both defaults apply. A network that wants Table 7.3.1.2.2-4 has to send both fields, as the example does.

< RRC settings used in this example >

IE

Field

Value

What it decides

PDSCH-Config

dmrs-DownlinkForPDSCH-MappingTypeA

setup

the DMRS configuration used by a mapping type A PDSCH

DMRS-DownlinkConfig

dmrs-Type

type2

DMRS type 2, so three CDM groups fit in a resource block

DMRS-DownlinkConfig

maxLength

len2

the front-load DMRS may use two OFDM symbols

PDSCH-Config

maxNrofCodeWordsScheduledByDCI

n1

the one codeword half of the table applies

result

38.212 Table 7.3.1.2.2-4

6 bits

the width of the antenna port field in DCI

The table is fixed once the setup message is applied. From then on the DCI supplies the row. The field is Antenna port(s) and number of layers in DCI format 1_1, and its width follows from the same two RRC parameters. The UE therefore knows the width of the field before it decodes anything in it.

38.212 clause 7.3.1.2.2 gives that field a width of 4, 5, 6, 7 or 8 bits. The four tables on this page cover the first three widths. Six bits give 64 code points, and values 58 to 63 of Table 7.3.1.2.2-4 are reserved.

One point is worth being exact about. DCI format 1_1 carries a single field for all of this, and the full field list is on the DCI Format 1_1 page. The number of CDM groups without data, the port list and the number of front-load symbols are not separate fields. They are columns of the selected table, and the UE reads them off the row that the code point points at. The table below separates the one transmitted value from the three looked up beside it.

< One DCI field, and the table row it resolves to >

Where the value comes from

Item

Value

Meaning

DCI format 1_1, the only field involved

Antenna port(s) and number of layers, 6 bits

'101101'

value 45, so row 45 of Table 7.3.1.2.2-4 applies

38.212 Table 7.3.1.2.2-4, row 45

Number of DMRS CDM group(s) without data

3

CDM groups 0, 1 and 2 all carry DMRS and no PDSCH

38.212 Table 7.3.1.2.2-4, row 45

DMRS port(s)

0, 1, 6, 7

antenna ports 1000, 1001, 1006 and 1007

38.212 Table 7.3.1.2.2-4, row 45

Number of front-load symbols

2

the DMRS occupies two adjacent OFDM symbols

result

number of layers

4

four DMRS ports on a single codeword

The row is now resolved into a picture. Value 45 reserves all three CDM groups, assigns ports 1000, 1001, 1006 and 1007, and runs the front-load DMRS over two symbols. The value = 45 entry of DMRS Pattern : Table 7.3.1.2.2-4 draws exactly that. Ports 1006 and 1007 share a CDM group with ports 1000 and 1001, and the cover code across the two symbols separates them.

That walk-through covers one row of one table. Seven rows cover the rest. Three of the four tables have a one codeword half and a two codeword half, and the two halves number their values independently, so each of those tables needs two examples.

< One example per table, and per half where a table has two >

38.212 Table

dmrs-Type

maxLength

maxNrofCodeWords-
ScheduledByDCI

CDM group(s) without data

DMRS port(s)

Front-load symbols

Antenna port(s) field
carried in DCI

7.3.1.2.2-1

absent

absent

n1

2

0-3

1

'1010' = 10

7.3.1.2.2-2

absent

len2

n1

2

0,1

2

'10100' = 20

7.3.1.2.2-2

absent

len2

n2

2

0-7

2

'00011' = 3

7.3.1.2.2-3

type2

absent

n1

3

3-5

1

'10101' = 21

7.3.1.2.2-3

type2

absent

n2

3

0-5

1

'00001' = 1

7.3.1.2.2-4

type2

len2

n1

3

0,1,6,7

2

'101101' = 45

7.3.1.2.2-4

type2

len2

n2

2

0,1,2,3,6,7,8,9

2

'000101' = 5

The first four columns are the RRC settings. The next three are the contents of the selected row. The highlighted last column is the only value carried in DCI, and it is what selects that row.

Tables 7.3.1.2.2-1 and 7.3.1.2.2-3 have no front-load symbol column, because maxLength is absent for both and the value is therefore always 1. The column above states that fixed value, so the seven rows can be read side by side.

Table 7.3.1.2.2-1 has a one codeword half only. Four ports is its maximum, and a second codeword is used only above four layers, so a two codeword half would have nothing to hold. Value 10 is the largest configuration it offers. It reserves both CDM groups and assigns ports 1000 to 1003, which the reading of this table earlier on the page calls 4x4 MIMO. The value = 10 entry of DMRS Pattern : Table 7.3.1.2.2-1 draws those four ports on the even and the odd comb of a single symbol.

Table 7.3.1.2.2-2 adds the second front-load symbol, and a two codeword half comes with it. Value 20 in the one codeword half is a small configuration. It reserves two CDM groups, assigns ports 1000 and 1001, and spreads the DMRS over two symbols, as the value = 20 entry of DMRS Pattern : Table 7.3.1.2.2-2 shows. Value 3 in the two codeword half is the largest the table reaches. It assigns ports 1000 to 1007, which is eight layers divided between two codewords.

Table 7.3.1.2.2-3 returns to a single front-load symbol and changes the DMRS type to 2. Value 21 in the one codeword half reserves all three CDM groups and assigns ports 1003 to 1005, and the value = 21 entry of DMRS Pattern : Table 7.3.1.2.2-3 draws it. Value 1 in the two codeword half assigns ports 1000 to 1005, which is six layers. That half ends at value 1, so type 2 with one symbol offers two two codeword configurations and no more.

Table 7.3.1.2.2-4 is the only one of the four that reaches eight layers with DMRS type 2. Its one codeword example is value 45, decoded above. Value 5 in the two codeword half assigns ports 1000, 1001, 1002, 1003, 1006, 1007, 1008 and 1009. Two CDM groups are enough for those eight ports. The second front-load symbol supplies the separation that a third CDM group would otherwise have to provide.

One caution applies to every picture on this page. The four galleries draw the one codeword column, so a value in a gallery is the one codeword reading of that code point. The three two codeword rows in the table above have no matching picture. A code point means different things in the two halves, and maxNrofCodeWordsScheduledByDCI is what tells the UE which half to read.

Two later additions sit beside the four tables on this page, and each one redirects the UE to a different table. The first is dmrs-TypeEnh-r18, the last field of DMRS-DownlinkConfig. When it is configured the UE reads Tables 7.3.1.2.2-7 to 7.3.1.2.2-10 instead. The second applies when two TCI states are indicated for the PDSCH. In that case the UE reads the A variant of its table, from Table 7.3.1.2.2-1A to Table 7.3.1.2.2-4A.

The four tables shown on this page are therefore one case out of four. They apply when dmrs-TypeEnh is not configured and a single TCI state is indicated. 38.212 v19.4.0 writes the first half of that condition into the table titles themselves.

  • RRC selects the table and DCI selects the row : dmrs-Type and maxLength are semi-static, and they also fix the width of the antenna port field at 4, 5 or 6 bits. The field itself changes at every scheduling instant.
  • The two selecting fields are absent in the default case : dmrs-Type absent means type 1, and maxLength absent means len1, so Table 7.3.1.2.2-1 is reached by sending nothing.
  • maxNrofCodeWordsScheduledByDCI chooses the half of the table : the value n1 uses the one codeword columns. The value n2 uses the two codeword columns, and it adds a second set of MCS, NDI and RV fields.
  • One row carries three separate quantities : the number of CDM groups without data, the DMRS port list, and the number of front-load symbols all arrive in the same code point.
  • The same code point means two different things : value 3 selects the single port 1000 in the one codeword half of Table 7.3.1.2.2-2. The same value 3 selects ports 1000 to 1007 in the two codeword half.
  • Table 7.3.1.2.2-1 has no two codeword half : its four ports cannot carry more than four layers, and a second codeword is used only above four.

DMRS Pattern : Table 7.3.1.2.2-1

Table 7.3.1.2.2-1 tells you which DMRS ports are used. It does not tell you where those ports sit in the resource grid. That is what this section adds. Each picture below draws one row of the table as a slot, so the value carried in DCI becomes a pattern you can look at.

Every picture uses the same layout. The horizontal axis is the fourteen OFDM symbols of a slot. The vertical axis is the twelve subcarriers of one resource block. One grid is drawn per DMRS port, and the port number is written above it. A yellow resource element carries the DMRS of that port. A dark blue resource element belongs to another CDM group, and it carries no data. A green resource element is left for PDSCH.

This is where the column "Number of DMRS CDM group(s) without data" becomes visible. Value 2 and value 7 both assign ports 0 and 1. Value 2 reserves one CDM group, so no resource element is drawn dark blue. Value 7 reserves two CDM groups, so the odd subcarriers of the DMRS symbol turn dark blue. The UE never uses those positions, and PDSCH cannot use them either.

value = 0;

 

value = 1;

 

value = 2;

 

value = 3;

 

value = 4;

 

value = 5;

 

value = 6;

 

value = 7;

 

value = 8;

 

value = 9;

 

value = 10;

 

value = 11;

  • The DCI value selects a pattern, not only a port list : each row of Table 7.3.1.2.2-1 produces one DMRS layout. The receiver has to assume that layout before it can demodulate.
  • dmrs-Type=1 divides the subcarriers into two combs : CDM group 0 takes the even subcarriers and CDM group 1 takes the odd ones. One symbol therefore holds at most two groups.
  • maxLength=1 keeps every pattern inside a single symbol : that is the reason this table stops at four ports, from 1000 to 1003.
  • A reserved CDM group costs PDSCH resource elements : the dark blue positions carry no DMRS for this UE and no data. They protect the DMRS of another UE.
  • Values 12 to 15 have no picture : they are reserved in Table 7.3.1.2.2-1.

DMRS Pattern : Table 7.3.1.2.2-2

This section covers the same DMRS type as the previous one, with one change. The parameter maxLength is 2, so the DMRS may occupy two adjacent OFDM symbols instead of one. That single change doubles the number of ports the table can address. The pictures make the second symbol easy to spot.

The grids are read exactly as in the previous section. Values 0 to 11 use one front-load symbol, and their patterns keep the shape of Table 7.3.1.2.2-1. From value 12 onwards the number of front-load symbols is 2. In those pictures the marked resource elements run across two neighbouring OFDM symbols.

The second symbol is not a repetition of the first. Ports that share a CDM group are separated by an orthogonal cover code applied across the two symbols. That is how this table reaches ports 0 to 7 while still using only two combs. The cost is one more OFDM symbol taken from PDSCH in every allocation.

value = 0;

 

value = 1;

 

value = 2;

 

value = 3;

 

value = 4;

 

value = 5;

 

value = 6;

 

value = 7;

 

value = 8;

 

value = 9;

 

value = 10;

 

value = 11;

 

value = 12;

 

value = 13;

 

value = 14;

 

value = 15;

 

value = 16;

 

value = 17;

 

value = 18;

 

value = 19;

 

value = 20;

 

value = 21;

 

value = 22;

 

value = 23;

 

value = 24;

 

value = 25;

 

value = 26;

 

value = 27;

 

value = 28;

 

value = 29;

 

value = 30;

  • Two front-load symbols double the port count : ports 1000 to 1007 are addressable here, against 1000 to 1003 in Table 7.3.1.2.2-1.
  • The extra ports are separated in time, not in frequency : the comb structure of dmrs-Type=1 is unchanged. The second symbol carries the time domain cover code.
  • The value sets the DMRS duration as well as the ports : values 0 to 11 use one front-load symbol. Values 12 to 30 use two.
  • Two codewords are allowed for four values only : values 0 to 3 of the two codeword column carry five layers or more. Values 4 to 31 are reserved.
  • Value 31 has no picture : it is reserved in Table 7.3.1.2.2-2.

DMRS Pattern : Table 7.3.1.2.2-3

dmrs-Type changes from 1 to 2 in this section, and the frequency pattern changes with it. Type 2 does not use a comb. Each CDM group takes two adjacent subcarriers, and the pattern repeats every six subcarriers. Three CDM groups therefore fit in one resource block, where dmrs-Type=1 fits two.

The grids follow the same reading rules. What differs is where the yellow resource elements sit. A Type 2 port occupies two neighbouring subcarriers, leaves four, then occupies two again. Because a third CDM group fits alongside the other two, the column "Number of DMRS CDM group(s) without data" now reaches 3.

Value 21 is the clearest example in this section. It reserves all three CDM groups and assigns ports 3, 4 and 5. Ports 1004 and 1005 share one CDM group, and the two other groups appear dark blue in every grid. No resource element of that DMRS symbol is left for PDSCH.

value = 0;

 

value = 1;

 

value = 2;

 

value = 3;

 

value = 4;

 

value = 5;

 

value = 6;

 

value = 7;

 

value = 8;

 

value = 9;

 

value = 10;

 

value = 11;

 

value = 12;

 

value = 13;

 

value = 14;

 

value = 15;

 

value = 16;

 

value = 17;

 

value = 18;

 

value = 19;

 

value = 20;

 

value = 21;

 

value = 22;

 

value = 23;

  • Type 2 trades comb spacing for adjacency : a CDM group takes two adjacent subcarriers out of every six, rather than every second subcarrier.
  • Three CDM groups fit in one resource block : that is one more than dmrs-Type=1 allows, so six ports are reachable with a single symbol.
  • Type 2 spends fewer resource elements per port : a CDM group covers four resource elements per resource block, against six for dmrs-Type=1. Channel estimation therefore has fewer samples in frequency.
  • Reserving all three groups empties the DMRS symbol : no PDSCH resource element survives in that symbol. That is the highest overhead a single symbol configuration can reach.
  • Values 24 to 31 have no picture : they are reserved in Table 7.3.1.2.2-3.

DMRS Pattern : Table 7.3.1.2.2-4

This is the largest of the four tables, and it combines both extensions already described. The parameter dmrs-Type is 2, so three CDM groups fit in a resource block. The parameter maxLength is 2, so each group may run over two OFDM symbols. Together they raise the port count to twelve, and the DCI field to six bits.

The reading rules do not change. Yellow marks the DMRS of the port named above the grid. Dark blue marks a reserved CDM group. Green is left for PDSCH. Once the number of front-load symbols becomes 2, the marked resource elements cover two adjacent symbols.

Value 45 shows the result of combining them. Three CDM groups are reserved, and the assigned ports are 0, 1, 6 and 7. Ports 1006 and 1007 sit in the same CDM group as ports 1000 and 1001. The four are separated by the cover code across the two symbols, rather than by their position in frequency.

value = 0;

 

value = 1;

 

value = 2;

 

value = 3;

 

value = 4;

 

value = 5;

 

value = 6;

 

value = 7;

 

value = 8;

 

value = 9;

 

value = 10;

 

value = 11;

 

value = 12;

 

value = 13;

 

value = 14;

 

value = 15;

 

value = 16;

 

value = 17;

 

value = 18;

 

value = 19;

 

value = 20;

 

value = 21;

 

value = 22;

 

value = 23;

 

value = 24;

 

value = 25;

 

value = 26;

 

value = 27;

 

value = 28;

 

value = 29;

 

value = 30;

 

value = 31;

 

value = 32;

 

value = 33;

 

value = 34;

 

value = 35;

 

value = 36;

 

value = 37;

 

value = 38;

 

value = 39;

 

value = 40;

 

value = 41;

 

value = 42;

 

value = 43;

 

value = 44;

 

value = 45;

 

value = 46;

 

value = 47;

 

value = 48;

 

value = 49;

 

value = 50;

 

value = 51;

 

value = 52;

 

value = 53;

 

value = 54;

 

value = 55;

 

value = 56;

 

value = 57;

  • Twelve ports need both extensions at once : three CDM groups give six ports, and the second front-load symbol doubles that to twelve.
  • The upper six ports are code separated : ports 1006 to 1011 reuse the CDM groups of ports 1000 to 1005. They are separated by the time domain cover code.
  • This table costs six bits in DCI : the antenna port field grows from four bits for dmrs-Type=1 with maxLength=1 to six bits here.
  • Overhead reaches its maximum : two symbols with three reserved CDM groups remove two full OFDM symbols of PDSCH from the allocation.
  • Values 58 to 63 have no picture : they are reserved in Table 7.3.1.2.2-4.

Release 19 MIMO Phase 5

Everything above this point is about how one gNB maps DMRS ports to layers. So where does NR MIMO go next ? Release 19 continues the MIMO work item series as MIMO Phase 5. It does not touch the DMRS tables of this page. Instead, it pushes in three directions: bigger arrays, more than one transmission point, and a UE that takes more initiative.

The following table is the short version, with the RRC signaling that carries each item. The sub-sections below go through them one by one, and the last one moves from 5G to the upper mid-band study that leads into 6G.

 

Item

What it adds

Signaling

Up to 128 CSI-RS ports

New antenna layouts for Type I and enhanced Type II codebooks, up to 128 ports

CodebookConfig-r19, n1-n2-r19

CJT calibration report

The UE reports delay, frequency and phase offsets between TRPs for coherent joint transmission

CSI-ReportCJTC-r19

UE-initiated beam report

The UE starts a beam report itself when an event is detected

CSI-ReportUE-Initiated-r19

Asymmetric DL single-TRP and UL multi-TRP

An extra TRP that mainly receives uplink, with a pathloss offset for its power control

TCI-State pathlossOffset-r19, Pathloss Offset Update MAC CE

3Tx uplink

Codebook and non-codebook PUSCH with three transmit antennas

UE capabilities such as codebook-3TxPUSCH-SingleTRP-r19 and nonCodebook-3TxPUSCH-SingleTRP-r19

 

  • Phase 5 is about CSI, beams and uplink : the DMRS antenna port tables of this page stay as they are.
  • Every item comes with new -r19 RRC fields : the tiles below are quoted from 38.331 v19.4.0.
  • The array size grows toward the upper mid-band : 128 ports matter most where the antenna is physically small, at higher frequencies.

Up to 128 CSI-RS Ports

Why do we need more CSI-RS ports ? At a higher carrier frequency, each antenna element is smaller, so the same panel size holds more elements. To use them for digital beamforming, the gNB has to sound them, and the UE has to report a precoder for them. Before Release 19, the codebooks stopped at 32 ports.

Release 19 adds new antenna layouts in the n1-n2-r19 field. The number of CSI-RS ports is 2 x N1 x N2, because each antenna position has two polarizations. The following table converts each new value into ports.

 

n1-n2-r19 value

N1 x N2

CSI-RS ports, 2 x N1 x N2

eight-three

8 x 3

48

six-four

6 x 4

48

sixteen-two

16 x 2

64

eight-four

8 x 4

64

sixteen-four

16 x 4

128

eight-eight

8 x 8

128

 

The same six layouts appear in the Type I single-panel, the enhanced Type II and the Type II Doppler branches of CodebookConfig-r19. The Type I multi-panel branch has its own list, where the first number is the number of panels Ng. For example, four-eight-two means 4 panels of 8 x 2, which is again 128 ports in total.

Following is based on 38.331 v19.4.0 (Release 19)

CodebookConfig-r19  ::=                  CHOICE {
    codebookType                             CHOICE {
        type1                                    CHOICE {
            typeI-SinglePanel-r19                    SEQUENCE {
                codebookMode-r19                         ENUMERATED {modeA,modeB},
                typeI-SinglePanelRI-Restriction-r19      BIT STRING (SIZE (8)),
                n1-n2-r19                                ENUMERATED {eight-three, six-four, sixteen-two, eight-four, sixteen-four,
                                                                     eight-eight},
                typeI-CodebookSubsetRestriction-r19      TypeI-X1-X2-CBSR-r19                                    OPTIONAL,   -- Need R
                typeI-SoftScalingRank-r19                TypeI-X1-X2-SoftScalingRank-r19                         OPTIONAL    -- Need R
            },
            typeI-MultiPanel-r19                     SEQUENCE {
                ri-Restriction-r19                       BIT STRING (SIZE (4)),
                ng-n1-n2-cbsr-r19                        CHOICE {
                    two-four-three-r19                       BIT STRING (SIZE (192)),
                    two-six-two-r19                          BIT STRING (SIZE (192)),
                    two-eight-two-r19                        BIT STRING (SIZE (256)),
                    four-four-two-r19                        BIT STRING (SIZE (128)),
                    two-four-four-r19                        BIT STRING (SIZE (256)),
                    four-four-four-r19                       BIT STRING (SIZE (256)),
                    four-eight-two-r19                       BIT STRING (SIZE (256))
                }
            }
        },
        type2                                SEQUENCE {
            typeII                               CHOICE {
                etypeII-r19                          SEQUENCE {
                    paramCombination-r19                 INTEGER (1..8),
                    n1-n2-r19                            ENUMERATED {eight-three, six-four, sixteen-two, eight-four, sixteen-four,
                                                                         eight-eight},
                    typeII-CodebookSubsetRestriction-r19 TypeII-X1-X2-CBSR-r19                                   OPTIONAL    -- Need R
                },
                typeII-FePortSelection-r19           SEQUENCE {
                    paramCombination-r19                 INTEGER (1..7),
                    valueOfN-r19                         ENUMERATED {n2, n4}                          OPTIONAL  -- Need R
                },
                typeII-Doppler-r19                   SEQUENCE {
                    paramCombination-Doppler-r19         INTEGER (1..9),
                    td-dd-config-r19                     TD-DD-Config-r18,
                    predictionDelay-r19                  ENUMERATED {m0,n0,n1,n2},
                    n1-n2-r19                            ENUMERATED {eight-three, six-four, sixteen-two, eight-four, sixteen-four,
                                                                     eight-eight},
                    typeII-CodebookSubsetRestriction-r19 TypeII-X1-X2-CBSR-r19                                  OPTIONAL    -- Need R
                }
            },
            typeII-RI-Restriction-r19                BIT STRING (SIZE (4)),
            numberOfPMI-SubbandsPerCQI-Subband-r19   INTEGER(1..2)                                             OPTIONAL    -- Need R
        }
    },
    cri-TypeI-SinglePanel         SEQUENCE {
        cri-TypeI-SinglePanelRI-Restriction-r19  SEQUENCE (SIZE (1..8)) OF BIT STRING (SIZE (8))               OPTIONAL,   -- Need R
        cri-TypeI-SinglePanelN1-N2-CBSR-r19      CRI-TypeI-SinglePanelN1-N2-CBSR-List-r19                      OPTIONAL    -- Need R
    },
    cri-TypeII                    SEQUENCE {
        cri-TypeII-RI-Restriction-r19            SEQUENCE (SIZE (1..4)) OF BIT STRING (SIZE (4))               OPTIONAL,   -- Need R
        cri-TypeII-N1-N2-CBSR-r19                CRI-TypeII-N1-N2-CBSR-List-r19                                OPTIONAL    -- Need R
    }
}
  • 48, 64 and 128 ports are new : the n1-n2-r19 values are all larger than the earlier 32-port limit.
  • Both Type I and Type II get the new layouts : including the Release 18 Doppler codebook, now as typeII-Doppler-r19.
  • The cost moves to the UE and the overhead : more ports means more CSI-RS resources to measure and a larger PMI to report.

CJT Calibration Report

Coherent joint transmission, CJT, sends the same layers from several TRPs at once, and the signals add up coherently at the UE. This only works if the TRPs are aligned in time, frequency and phase. Real TRPs are never perfectly aligned, so Release 19 lets the UE measure the misalignment and report it.

For inter-TRP delay, frequency and phase calibration, each TRP transmits its own CSI-RS. The UE measures them and estimates the inter-TRP delay offset, frequency offset and phase offset. The report is carried on a PUSCH. In ASN.1, CSI-ReportCJTC-r19 configures this report. The field names follow the quantities, with Dd for the delay and FO for the frequency offset in the related capability names.

Following is based on 38.331 v19.4.0 (Release 19)

CSI-ReportCJTC-r19 ::=              SEQUENCE {
    associatedSRS-ResourceSet-r19       SEQUENCE {
        srs-ResourceSetId-r19               SRS-ResourceSetId,
        srs-ResourceId-r19                  SRS-ResourceId,
        referenceAntennaPort-r19            INTEGER (1..8)                                                   OPTIONAL     -- Need R
    }                                                                                                        OPTIONAL,    -- Need R
    linkedCJTC-Report-r19                   CSI-ReportConfigId                                               OPTIONAL,    -- Need R
    valueOfAD-r19                           ENUMERATED {dot5, one}                                           OPTIONAL,    -- Need R
    valueOfMD-r19                           ENUMERATED {n32, n64, n128, n256}                                OPTIONAL,    -- Need R
    valueOfAFO-r19                          ENUMERATED {zeroDot1, zeroDot2}                                  OPTIONAL,    -- Need R
    valueOfMFO-r19                          ENUMERATED {n16, n32, n256 }                                     OPTIONAL,    -- Need R
    valueOfMPhi-r19                         ENUMERATED {n16, n32}                                            OPTIONAL,    -- Need R
    subbandSizeCJTC-r19                     ENUMERATED {n1, n2, n4, n8, n16, wideband}                       OPTIONAL,    -- Need R
    nrofSubbandsPO-r19                      SEQUENCE (SIZE (1..16)) OF INTEGER (1..275)                      OPTIONAL     -- Need R
}

The value fields, such as valueOfAD-r19 and valueOfMFO-r19, set the parameters that 38.214 uses to quantize the reported offsets. I have not gone through those formulas for this page, so take the field-by-field meaning from 38.214 rather than from the names. The associatedSRS-ResourceSet-r19 field links the report to an SRS resource, which suggests that the uplink sounding takes part in the calibration as well.

  • CJT needs aligned TRPs : the report gives the network the delay, frequency and phase offsets to correct.
  • One CSI-RS per TRP : the UE compares them to estimate the offsets between the TRPs.
  • The report rides on PUSCH : it is not a small PUCCH report.

UE-initiated Beam Report

Until Release 18, the network decides when the UE reports beams, periodically or by trigger. Then a fast beam change between two reports is detected late. Release 19 lets the UE start the report itself when it sees an event, which shortens the reaction time.

Upon detection of an event, the UE transmits a UE Initiated Report Indicator, UEIRI, in a PUCCH resource. In Mode A, the UE then sends the beam report on a PUSCH indicated by a DCI. In Mode B, the UE sends the beam report on a configured PUSCH resource, which is the configured grant referenced by modeB-r19. CSI-ReportUE-Initiated-r19 holds the event type, the mode, the number of reported RS and the PUCCH resource for the indicator.

Following is based on 38.331 v19.4.0 (Release 19)

CSI-ReportUE-Initiated-r19 ::=         SEQUENCE {
    eventTypeUE-Initiated-r19              CHOICE {
        event1-r19                             SEQUENCE {
            event1Threshold-r19                    RSRP-Range,
            ...
        },
        event2-r19                             SEQUENCE {
            eventThreshold-r19                     INTEGER (0..31),
            conditionFulfillmentIndicator-r19      ENUMERATED {enabled}                                         OPTIONAL,    -- Need R
            ...
        },
        event7-r19                             SEQUENCE {
            eventThreshold-r19                     INTEGER (0..31),
            valueOfQ-r19                           INTEGER (1..8),
            conditionFulfillmentIndicator-r19      ENUMERATED {enabled}                                         OPTIONAL,    -- Need R
            ...
       }
    },
    reportTransmissionMode-r19               CHOICE {
        modeA-r19                                SEQUENCE {
            reportSlotOffsetList-r19                 SEQUENCE (SIZE (1..maxNrofUL-Allocations-r16)) OF INTEGER (0..128)
        },
        modeB-r19                                SEQUENCE {
            pusch-ResourceListOfModeB-r19            SEQUENCE (SIZE (1..maxNrofBWPs)) OF PUSCH-ResourceOfModeB-r19,
            minimumPucch-PuschOffset-r19 ENUMERATED {sym0, sym1, sym2, sym4, sym8, sym16, sym32, sym64, sym128, sym256,
                                                     sym512}
        }
    },
    nrofReportedRS-UE-Initiated-r19          ENUMERATED {n1, n2, n3, n4},
    tci-ServCellIndex-r19                    ServCellIndex                                                        OPTIONAL,    -- Need R
    currentBeamReport-r19                    ENUMERATED {enabled}                                                 OPTIONAL,    -- Need R
    eventCountWindow-r19                     SEQUENCE {
        eventInstanceCount-r19                   INTEGER (2..16),
        eventDetectionTimeWindow-r19             ENUMERATED {ms4, ms5, ms8, ms10, ms16, ms20, ms40, ms80, ms160, ms320, ms640, ms1280}
    }                                                                                                             OPTIONAL,    -- Need R
    ue-InitiatedResourceConfig-r19           SEQUENCE {
        pucch-Cell-r19                           ENUMERATED {spCell, pucch-Scell},
        ue-InitiatedResourceList-r19                   SEQUENCE (SIZE (1..maxNrofBWPs)) OF UE-InitiatedResource-r19,
    ...
    },
...
}
  • Two steps, indicator then report : the UEIRI on PUCCH announces the report, and the report itself goes on PUSCH.
  • Mode A waits for a DCI, Mode B does not : Mode B uses a configured grant, so it is faster but reserves resources.
  • Events are counted in a window : eventCountWindow-r19 can require several detections before the UE reacts.

Asymmetric DL Single-TRP and UL Multi-TRP

Downlink and uplink do not have the same coverage. The gNB transmits with high power, but the UE has only around 23 dBm. So a deployment can add a TRP that mainly helps the uplink, close to the users. Then you may ask how the UE sets its uplink power toward a TRP that sends little or no downlink to measure.

The following diagram shows this asymmetric case. The macro TRP carries the downlink. The UL TRP receives the uplink, and it may reduce or even disable its own downlink transmission.

Macro TRP DL and UL UL TRP DL reduced or disabled UE DL : PDCCH, PDSCH and the pathloss reference RS UL : PUSCH, PUCCH, SRS UL toward the macro TRP pathloss toward UL TRP = pathloss measured on the macro DL reference signal + pathlossOffset of the TCI state

Figure 2. Asymmetric DL single-TRP and UL multi-TRP. The UE measures pathloss on the downlink it can see, and an RRC or MAC CE pathloss offset per UL TCI state corrects it for the TRP that actually receives the uplink.

  • Macro TRP : sends the downlink, including the reference signal the UE uses for pathloss measurement.
  • UL TRP : receives PUSCH, PUCCH and SRS, and may send little or no downlink of its own.
  • Pathloss offset : RRC configures one per UL or joint TCI state, and the Pathloss Offset Update MAC CE changes it dynamically.
  • PRACH too : a PDCCH order can indicate the pathloss offset for a PRACH toward the UL TRP.

In ASN.1, the offset is a new field in TCI-State, next to the Release 18 tag-Id-ptr-r18 that selects one of two timing advance groups. The range is -12 dB to 60 dB in 4 dB steps. In addition, up to two closed loop power control adjustment states can be configured for SRS, separate from the ones used for PUSCH.

Following is based on 38.331 v19.4.0 (Release 19)

TCI-State ::=                       SEQUENCE {
    tci-StateId                         TCI-StateId,
    qcl-Type1                           QCL-Info,
    qcl-Type2                           QCL-Info                                                    OPTIONAL,   -- Need R
    ...,
    [[
    additionalPCI-r17                   AdditionalPCIIndex-r17                                      OPTIONAL,   -- Need R
    pathlossReferenceRS-Id-r17          PathlossReferenceRS-Id-r17                                  OPTIONAL,   -- Cond JointTCI1
    ul-powerControl-r17                 Uplink-powerControlId-r17                                   OPTIONAL    -- Cond JointTCI
    ]],
    [[
    tag-Id-ptr-r18                      ENUMERATED {n0,n1}                                          OPTIONAL    -- Cond 2TA
    ]],
    [[
    pathlossOffset-r19                  ENUMERATED {
                                            dB-12, dB-8, dB-4, dB0, dB4, dB8,
                                            dB12, dB16, dB20, dB24, dB28, dB32, dB36,
                                            dB40, dB44, dB48, dB52, dB56, dB60}                     OPTIONAL    -- Cond JointTCI
    ]]
}
  • The offset is mostly positive : dB-12 to dB60 allows the UL TRP to be much closer or much farther than the macro, in 4 dB steps.
  • Two TAGs come from Release 18 : tag-Id-ptr-r18 already lets each UL TCI state use its own timing advance.
  • The offset belongs to the beam : it is attached to the TCI state, so it changes together with the beam indication.

Toward the Upper Mid-band and 6G

Most of Phase 5 makes more sense when you think about the frequency range that comes next. Larger arrays, more ports and more TRPs help most at frequencies where each element is small and the uplink is weak. This is exactly the situation of the upper mid-band, roughly 7 to 24 GHz, which is a strong candidate range for 6G spectrum.

Release 19 prepared this range on the modelling side. At TSG RAN #102, the study item Study on channel modelling enhancements for 7-24GHz for NR was approved, in RP-234018. Its findings went into TR 38.901, the channel model used for nearly all link and system level simulations. Several parameter values in TR 38.901 are now marked as updated by this study. The study also added the suburban macro, SMa, scenario, with a model up to 24 GHz.

TR 38.901 v19.5.0 also carries near-field channel modeling, with a spherical wavefront, and spatial non-stationarity, where the power varies element by element across a large array. These matter for the very large arrays that 128-port codebooks assume. Far-field and stationary-channel assumptions start to fail when the array is large compared with the distance to the UE.

  • Phase 5 targets the arrays of the upper mid-band : the 128-port codebooks fit panels with many small elements.
  • The 7-24 GHz study updated TR 38.901 : updated parameters and the new SMa scenario come from it.
  • Large arrays need new channel physics : near-field and spatial non-stationarity models are now in TR 38.901.
  • This is the bridge to 6G : see the 6G section for where these bands and arrays go next.

Reference

[1] 38.331 v19.4.0 : NR - Radio Resource Control (RRC) protocol specification

[2] 38.212 v19.4.0 : NR - Multiplexing and channel coding

[3] 38.300 v19.4.0 : NR and NG-RAN Overall description. Source for the multi-TRP CJT calibration, the asymmetric DL single-TRP and UL multi-TRP operation and the UE-initiated beam reporting described in the Release 19 section.

[4] 38.901 v19.5.0 : Study on channel model for frequencies from 0.5 to 100 GHz. Source for the Release 19 7-24 GHz channel modelling study, the SMa scenario and the near-field and spatial non-stationarity models.