Amarisoft

NR SA DMRS - PDSCH, Antenna Port

The purpose of this tutorial is to show you how to configure PDSCH DMRS and Antenna Port in DCI 1_1. PDSCH DMRS (DeModulation Reference Signal) is a kind of reference signal that is used for channel estimation and helps to decode PDSCH. The exact position is determined by following factors.

Theoretically, if you put more number of symbols for DMRS, you may get better decoding result (i.e, lower BLER), but the number of the RE (resource elements) for user data (PDSCH) is reduced since some of the symbols are used for DMRS. As a rule of thumb, in most of cases it is recommended to use two symbols for DMRS. If you use only one symbol for DMRS, it is highly likely to have high BLER. If you use more than two symbols for DMRS, you would sacrifice too much in terms of ideal (max) throughput.

Table of Contents

Introduction

The configuration of PDSCH DMRS (Physical Downlink Shared Channel DeModulation Reference Signal) and Antenna Port assignment in DCI 1_1 is a foundational aspect of 5G NR (New Radio) physical layer procedures, directly influencing data channel reliability and throughput. In 5G NR, the PDSCH serves as the primary channel for delivering user data, and its robust decoding relies heavily on accurate channel estimation, which is facilitated by DMRS. The DMRS are specialized reference signals embedded within the PDSCH transmission, enabling the receiving UE (User Equipment) to estimate the wireless channel and properly demodulate downlink data. The position and configuration of DMRS in time and frequency domains are dictated by multiple factors: RRC (Radio Resource Control) signaling, which establishes the overall DMRS configuration in the DMRS-DownlinkConfig, and dynamic parameters conveyed in DCI (Downlink Control Information), which may adjust aspects such as antenna port mapping and frequency offset at transmission time. The selection of DMRS symbol positions, types (Type 1 or Type 2), and the number of symbols allocated, directly impacts both channel estimation quality and the available capacity for user data, requiring careful balancing based on deployment scenarios and desired performance. Antenna port configuration further enables advanced MIMO (Multiple-Input Multiple-Output) schemes, enhancing spectral efficiency and reliability. Configuring these parameters correctly is critical for optimizing link-level performance, minimizing block error rate (BLER), and maximizing throughput, forming a vital part of physical layer optimization in modern 5G networks.

Summary of the Tutorial

This tutorial details procedures for low layer DMRS configuration and MIMO testing using Amarisoft callbox, focusing on TS 38.212 Table 7.3.1.2.2-1 and Table 7.3.1.2.2-2. The tests demonstrate how to set up and verify various DMRS patterns and MIMO schemes, including multiple subtests for different DMRS values.

General Notes on Test Methodology:

Test Setup

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

TestSetup Callbox UE 1sdr 01

Key Configuration Parameters

Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.

 

Test 1 : Table 7.3.1.2.2-1

The purpose of this test is to provide an example of how to configure a specific DMRS configuration for SISO/MIMO (from SISO up to 4x4 MIMO). In terms of 3GPP, this configuration is specified by TS 38.212 Table 7.3.1.2.2-1: Antenna port(s) (1000 + DMRS port), dmrs-Type=1, maxLength=1. According to the specification, there are multiple options of DMRS patterns to choose even for the same MIMO scheme. It means just setting the number of antenna may not be enough to specify MIMO scheme accurately. If you don't care much about the detailed DMRS pattern, you can just specify the number of antenna and let Callbox software to choose whatever DMRS pattern it likes. However if you are interested in controlling the details of MIMO configuration, this test would help.

Configuration

I have used gnb-sa-dmrs-7-3-1-2-2-1.cfg which is copied and modified from gnb-sa.cfg

NR SA DMRS PDSCH Config 01

I am using the default mme, ims config as shown below.

NR BWP Test1 Configuration 02

In gnb-sa-dmrs-7-3-1-2-2-1.cfg, it is configured as follows. I set N_ANTENNA_DL to 4 meaning that I want to use max 4x4 MIMO. This mean that the number of physical antenna is set to 4 but it does not necessarily mean that it is only for 4 layer and 4x4 MIMO.

NR SA DMRS PDSCH Config 02

In 3GPP specification, you would just specify a single value that are mapped to a set of property made up of dmrs type, dmrs max length, number of dmrs cdm group and dmrs port numbers. However in Amarisoft callbox, it does not allow you to use the single number value. You need to configure all of these parameters individually. The callbox (gNB) parameter related to this setting are dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports. Among this, dmrs_type and dmrs_max_len determines which table out of 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4 should be used.

This correspond to the value = 10 in 38.212 - Table 7.3.1.2.2-1

NR SA DMRS PDSCH Config 03

Perform the Test

First run the test and check on the number of physical antenna using cell phy command. (NOTE : The ANT parameter just indicates the number of physical antenna allocated for the test, it does not indicates the dynamic status of the antenna determined by DMRS pattern)

NR SA DMRS PDSCH Run 01

Then setup a call and make it sure that call connection is OK using t command.  

NR SA DMRS PDSCH Run 02

NOTE : This trace does not indicates the details of PDSCH / PUSCH configuration like how many layers are actually used. If you flow high data rate, you would notice on the number of layers being used from the throughput changes. But it would be the best to check with the log for the clear confirmation about the number of layers and DMRS pattern.

Log Analysis

Sample Log

First check RRC log and see if the configuration is done as you intended.  In this tutorial, I am checking RRC Setup for PDSCH DMRS Configuration. This parameter determines which table out of 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4  should be applied.

NR SA DMRS PDSCH Log 01

Now check on the maxMIMO-Layers in pdsch-ServingCellConfig. In this specific example, it is set to 4. Be aware that this indicates the maximum number of layer. It does not mean that 4 layers are used all the time. By changing DMRS pattern, gNB can change the number of layers dynamically.

NR SA DMRS PDSCH Log 02

Check DCI 1_1 and see if antenna_ports is set as intended. In this example, antenna_ports is set to 10. It means that dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports values specified in the configuration file indicates antenna_ports (DMRS value in 3GPP) to 10 which is 4x4 MIMO.

NR SA DMRS PDSCH Log 03

Sub Test 1 : Value = 0

This subtest is to show how to configure and verify of the value = 0 in 38.212 - Table 7.3.1.2.2-1

Configuratio is set as follows. I set N_ANTENNA_DL to 4 meaning that I want to use max 4x4 MIMO. This mean that the number of physical antenna is set to 4 but it does not necessarily mean that it is only for 4 layer and 4x4 MIMO.

NR SA DMRS PDSCH Test 01 SubTest 01 01

In 3GPP specification, you would just specify a single value that are mapped to a set of property made up of dmrs type, dmrs max length, number of dmrs cdm group and dmrs port numbers. However in Amarisoft callbox, it does not allow you to use the single number value. You need to configure all of these parameters individually. The callbox (gNB) parameter related to this setting are dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports. Among this, dmrs_type and dmrs_max_len determines which table out of 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4 should be used.

NR SA DMRS PDSCH Test 01 SubTest 01 02

Perform the test.

First run the test and check on the number of physical antenna using cell phy command. (NOTE : The ANT parameter just indicates the number of physical antenna allocated for the test, it does not indicates the dynamic status of the antenna determined by DMRS pattern)

NR SA DMRS PDSCH Test 01 SubTest 01 03

Then setup a call and make it sure that call connection is OK using t command.  

NR SA DMRS PDSCH Test 01 SubTest 01 04

NOTE : This trace does not indicates the details of PDSCH / PUSCH configuration like how many layers are actually used. If you flow high data rate, you would notice on the number of layers being used from the throughput changes. But it would be the best to check with the log for the clear confirmation about the number of layers and DMRS pattern.

Check DCI 1_1 and see if antenna_ports is set as intended. In this specific example, antenna_ports value is set to 0. You need to compare this value with the dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports and 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4

NR SA DMRS PDSCH Test 01 SubTest 01 05

Sub Test 2 : Value = 1

This subtest is to show how to configure and verify of the value = 1 in 38.212 - Table 7.3.1.2.2-1

Configuratio is set as follows.  I set N_ANTENNA_DL to 4 meaning that I want to use max 4x4 MIMO. This mean that the number of physical antenna is set to 4 but it does not necessarily mean that it is only for 4 layer and 4x4 MIMO.

NR SA DMRS PDSCH Test 01 SubTest 01 01

In 3GPP specification, you would just specify a single value that are mapped to a set of property made up of dmrs type, dmrs max length, number of dmrs cdm group and dmrs port numbers. However in Amarisoft callbox, it does not allow you to use the single number value. You need to configure all of these parameters individually. The callbox (gNB) parameter related to this setting are dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports. Among this, dmrs_type and dmrs_max_len determines which table out of 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4 should be used.

NR SA DMRS PDSCH Test 01 SubTest 02 02

Perform the test.

First run the test and check on the number of physical antenna using cell phy command. (NOTE : The ANT parameter just indicates the number of physical antenna allocated for the test, it does not indicates the dynamic status of the antenna determined by DMRS pattern)

NR SA DMRS PDSCH Test 01 SubTest 01 03

Then setup a call and make it sure that call connection is OK using t command.  

NR SA DMRS PDSCH Test 01 SubTest 01 04

NOTE : This trace does not indicates the details of PDSCH / PUSCH configuration like how many layers are actually used. If you flow high data rate, you would notice on the number of layers being used from the throughput changes. But it would be the best to check with the log for the clear confirmation about the number of layers and DMRS pattern.

Check DCI 1_1 and see if antenna_ports is set as intended. In this specific example, antenna_ports value is set to 1. You need to compare this value with the dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports and 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4

NR SA DMRS PDSCH Test 01 SubTest 02 05

Sub Test 3 : Value = 2

This subtest is to show how to configure and verify of the value = 2 in 38.212 - Table 7.3.1.2.2-1

Configuratio is set as follows.  I set N_ANTENNA_DL to 4 meaning that I want to use max 4x4 MIMO. This mean that the number of physical antenna is set to 4 but it does not necessarily mean that it is only for 4 layer and 4x4 MIMO.

NR SA DMRS PDSCH Test 01 SubTest 01 01

In 3GPP specification, you would just specify a single value that are mapped to a set of property made up of dmrs type, dmrs max length, number of dmrs cdm group and dmrs port numbers. However in Amarisoft callbox, it does not allow you to use the single number value. You need to configure all of these parameters individually. The callbox (gNB) parameter related to this setting are dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports. Among this, dmrs_type and dmrs_max_len determines which table out of 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4 should be used.

NR SA DMRS PDSCH Test 01 SubTest 03 02

Perform the test.

First run the test and check on the number of physical antenna using cell phy command. (NOTE : The ANT parameter just indicates the number of physical antenna allocated for the test, it does not indicates the dynamic status of the antenna determined by DMRS pattern)

NR SA DMRS PDSCH Test 01 SubTest 01 03

Then setup a call and make it sure that call connection is OK using t command.  

NR SA DMRS PDSCH Test 01 SubTest 01 04

NOTE : This trace does not indicates the details of PDSCH / PUSCH configuration like how many layers are actually used. If you flow high data rate, you would notice on the number of layers being used from the throughput changes. But it would be the best to check with the log for the clear confirmation about the number of layers and DMRS pattern.

Check DCI 1_1 and see if antenna_ports is set as intended. In this specific example, antenna_ports value is set to 2. You need to compare this value with the dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports and 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4

NR SA DMRS PDSCH Test 01 SubTest 03 05

Sub Test 4 : Value = 7

This subtest is to show how to configure and verify of the value = 7 in 38.212 - Table 7.3.1.2.2-1

Configuratio is set as follows.  I set N_ANTENNA_DL to 4 meaning that I want to use max 4x4 MIMO. This mean that the number of physical antenna is set to 4 but it does not necessarily mean that it is only for 4 layer and 4x4 MIMO.

NR SA DMRS PDSCH Test 01 SubTest 01 01

In 3GPP specification, you would just specify a single value that are mapped to a set of property made up of dmrs type, dmrs max length, number of dmrs cdm group and dmrs port numbers. However in Amarisoft callbox, it does not allow you to use the single number value. You need to configure all of these parameters individually. The callbox (gNB) parameter related to this setting are dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports. Among this, dmrs_type and dmrs_max_len determines which table out of 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4 should be used.

NR SA DMRS PDSCH Test 01 SubTest 04 02

Perform the test.

First run the test and check on the number of physical antenna using cell phy command. (NOTE : The ANT parameter just indicates the number of physical antenna allocated for the test, it does not indicates the dynamic status of the antenna determined by DMRS pattern)

NR SA DMRS PDSCH Test 01 SubTest 01 03

Then setup a call and make it sure that call connection is OK using t command.  

NR SA DMRS PDSCH Test 01 SubTest 01 04

NOTE : This trace does not indicates the details of PDSCH / PUSCH configuration like how many layers are actually used. If you flow high data rate, you would notice on the number of layers being used from the throughput changes. But it would be the best to check with the log for the clear confirmation about the number of layers and DMRS pattern.

Check DCI 1_1 and see if antenna_ports is set as intended. In this specific example, antenna_ports value is set to 7. You need to compare this value with the dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports and 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4

NR SA DMRS PDSCH Test 01 SubTest 04 05

Sub Test 5 : Value = 9

This subtest is to show how to configure and verify of the value = 9 in 38.212 - Table 7.3.1.2.2-1

Configuratio is set as follows.  I set N_ANTENNA_DL to 4 meaning that I want to use max 4x4 MIMO. This mean that the number of physical antenna is set to 4 but it does not necessarily mean that it is only for 4 layer and 4x4 MIMO.

NR SA DMRS PDSCH Test 01 SubTest 01 01

In 3GPP specification, you would just specify a single value that are mapped to a set of property made up of dmrs type, dmrs max length, number of dmrs cdm group and dmrs port numbers. However in Amarisoft callbox, it does not allow you to use the single number value. You need to configure all of these parameters individually. The callbox (gNB) parameter related to this setting are dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports. Among this, dmrs_type and dmrs_max_len determines which table out of 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4 should be used.

NR SA DMRS PDSCH Test 01 SubTest 05 02

Perform the test.

First run the test and check on the number of physical antenna using cell phy command. (NOTE : The ANT parameter just indicates the number of physical antenna allocated for the test, it does not indicates the dynamic status of the antenna determined by DMRS pattern)

NR SA DMRS PDSCH Test 01 SubTest 01 03

Then setup a call and make it sure that call connection is OK using t command.  

NR SA DMRS PDSCH Test 01 SubTest 01 04

NOTE : This trace does not indicates the details of PDSCH / PUSCH configuration like how many layers are actually used. If you flow high data rate, you would notice on the number of layers being used from the throughput changes. But it would be the best to check with the log for the clear confirmation about the number of layers and DMRS pattern.

Check DCI 1_1 and see if antenna_ports is set as intended. In this specific example, antenna_ports value is set to 9. You need to compare this value with the dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports and 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4

NR SA DMRS PDSCH Test 01 SubTest 05 05

Test 2 : Table 7.3.1.2.2-2

This test is to show how to configure DMRS patterns of  38.212 - Table 7.3.1.2.2-2 and verify it . You can configure different DMRS pattern value from the table by setting n_dmrs_cdm_groupds, dmrs_ports, dmrs_len

Configuration

I have used gnb-sa-dmrs-7-3-1-2-2-2.cfg which is copied and modified from gnb-sa.cfg

NR SA DMRS PDSCH Test 2 Config 01

I am using the default mme, ims config as shown below.

NR BWP Test1 Configuration 02

In gnb-sa-dmrs-7-3-1-2-2-2.cfg, it is configured as follows.   I set N_ANTENNA_DL to 4 meaning that I want to use max 4x4 MIMO. This mean that the number of physical antenna is set to 4 but it does not necessarily mean that it is only for 4 layer and 4x4 MIMO.

NR SA DMRS PDSCH Test 2 Config 02

In 3GPP specification, you would just specify a single value that are mapped to a set of property made up of dmrs type, dmrs max length, number of dmrs cdm group and dmrs port numbers. However in Amarisoft callbox, it does not allow you to use the single number value. You need to configure all of these parameters individually. The callbox (gNB) parameter related to this setting are dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports. Among this, dmrs_type and dmrs_max_len determines which table out of 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4 should be used.

NR SA DMRS PDSCH Test 2 Config 03

Perform the Test

First run the test and check on the number of physical antenna using cell phy command. (NOTE : The ANT parameter just indicates the number of physical antenna allocated for the test, it does not indicates the dynamic status of the antenna determined by DMRS pattern)

NR SA DMRS PDSCH Run 01

Then setup a call and make it sure that call connection is OK using t command.  

NR SA DMRS PDSCH Run 02

NOTE : This trace does not indicates the details of PDSCH / PUSCH configuration like how many layers are actually used. If you flow high data rate, you would notice on the number of layers being used from the throughput changes. But it would be the best to check with the log for the clear confirmation about the number of layers and DMRS pattern.

Log Analysis

Sample Log

First check RRC log and see if the configuration is done as you intended.  In this tutorial, I am checking RRC Setup for PDSCH DMRS Configuration. This parameter determines which table out of 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4  should be applied.

NR SA DMRS PDSCH Test 2 Log 01

Check DCI 1_1 and see if antenna_ports is set as intended. In this specific example, antenna_ports value is set to 28. You need to compare this value with the dmrs_type, dmrs_max_len, n_layer, n_dmrs_cdm_groups and dmrs_ports and 38.212 - Table 7.3.1.2.2-1 through Table 7.3.1.2.2-4

NR SA DMRS PDSCH Test 2 Log 02

RRC / NAS Signaling

MIB(SA)

: This is MIB message sent by gNB (NOTE :  MIB message is not logged in Amarisoft gNB log, but some of the MIB contents are printed as a meta data at the beginiing of the log file as shown here)

 

MIB ::= SEQUENCE {

    ...

    dmrs-TypeA-Position                 ENUMERATED {pos2, pos3},

   ...

}

 

RrcSetup(SA)

: This is the RrcSetup message sent by gNB  to configure NR SA. (NOTE : You would see some IEs that has a specific assigned vale here, but consider it as just an example value. Those values should vary depending on test requirement)

 

{

  message c1: rrcSetup: {

    rrc-TransactionIdentifier 0,

    criticalExtensions rrcSetup: {

      radioBearerConfig {

        ...

      },

      masterCellGroup {

        cellGroupId 0,

        rlc-BearerToAddModList {

          ...

        },

        mac-CellGroupConfig {

          ...

        },

        physicalCellGroupConfig {

          pdsch-HARQ-ACK-Codebook dynamic

        },

        spCellConfig {

          spCellConfigDedicated {

            initialDownlinkBWP {

              pdcch-Config setup: {

                ...

              },

              pdsch-Config setup: {

                dmrs-DownlinkForPDSCH-MappingTypeA setup: {

                  dmrs-AdditionalPosition pos1

                },

                ...

            },

            firstActiveDownlinkBWP-Id 0,

            uplinkConfig {

              initialUplinkBWP {

                pucch-Config setup: {

                  ...

                },

                pusch-Config setup: {

                  txConfig codebook,

                  dmrs-UplinkForPUSCH-MappingTypeA setup: {

                    dmrs-AdditionalPosition pos1,

                    transformPrecodingDisabled {

                    }

                  },

                  ...

                },

                srs-Config setup: {

                ...

              },

              firstActiveUplinkBWP-Id 0,

              pusch-ServingCellConfig setup: {

              }

            },

            pdcch-ServingCellConfig setup: {

            },

            pdsch-ServingCellConfig setup: {

              ...

            },

            csi-MeasConfig setup: {

              ...

                }

              }

            },

            tag-Id 0