Main Content

nrPUSCHDMRSConfig

PUSCH DM-RS configuration parameters

Since R2020a

Description

The nrPUSCHDMRSConfig object sets demodulation reference signal (DM-RS) configuration parameters for a physical uplink shared channel (PUSCH), as defined in TS 38.211 Section 6.4.1.1 [1].

The object defines the properties of PUSCH DM-RS symbols and indices generation and the resource elements pattern not used for data in DM-RS symbol locations. The read-only properties of this object provide the DM-RS subcarrier locations within a resource block (RB), code division multiplexing (CDM) groups, and time and frequency weights for DM-RS symbols. By default, the object specifies a single symbol DM-RS at symbol index 2 (0-based) with configuration type 1 and antenna port 0. Use this object when setting the DMRS property of the nrPUSCHConfig or nrWavegenPUSCHConfig objects.

Creation

Description

example

dmrs = nrPUSCHDMRSConfig creates a DM-RS configuration object for a PUSCH with default properties.

example

dmrs = nrPUSCHDMRSConfig(Name,Value) specifies properties using one or more name-value pair arguments. Enclose each property in quotes. For example, 'DMRSConfigurationType',1,'DMRSLength',2 specifies a double-symbol DM-RS with configuration type as 1. Unspecified properties take their default values.

Properties

expand all

DM-RS configuration type, specified as 1 or 2. This property is the higher-layer parameter dmrs-Type.

This property value must be 1 when nrPUSCHDMRSConfig is a property of nrPUSCHConfig with TransformPrecoding property set to 1.

Data Types: double

Position of first DM-RS OFDM symbol, provided by higher layer parameter dmrs-TypeA-Position, specified as 2 or 3.

This property is applicable when nrPUSCHDMRSConfig is a property of nrPUSCHConfig object with MappingType property value set to 'A'.

Data Types: double

Maximum number of DM-RS additional positions, specified as 0, 1, 2, or 3. This property is the higher layer parameter dmrs-AdditionalPosition.

This property value must be 0 or 1 when nrPUSCHDMRSConfig is a property of nrPUSCHConfig object with FrequencyHopping property set to 'intraSlot'.

Data Types: double

Number of consecutive front-loaded DM-RS OFDM symbols, specified as 1 (single-symbol DM-RS) or 2 (double-symbol DM-RS).

This property value must be 1 when nrPUSCHDMRSConfig is a property of nrPUSCHConfig object with FrequencyHopping property set to 'intraSlot'.

Data Types: double

DM-RS OFDM symbol locations that are 0-based, specified as one of these options.

  • Integer from 0 to 13 — For one DM-RS symbol

  • Vector of nonnegative integers from 0 to 13 — For multiple DM-RS symbols

Each input symbol location is assumed to be a single-symbol DM-RS within the physical shared channel symbol allocation.

The default value, [], corresponds to the DM-RS symbols locations as per TS 38.211 Table 6.4.1.1.3-3, 6.4.1.1.3-4, or 6.4.1.1.3-6 [1]. Setting this property overrides the corresponding DM-RS symbol locations in these standard lookup tables.

Data Types: double

DM-RS antenna port indices, specified as a vector of nonnegative integers from 0 to 23. The valid range of antenna port indices depends on the DM-RS configuration type, DM-RS symbol duration, and whether enhanced DM-RS multiplexing is enabled, as described in this table.

DMRSEnhancedR18 ValueDMRSLength ValueValid Range of Antenna Port Indices
DMRSConfigurationType=1DMRSConfigurationType=2
0 for basic multiplexing1 for single symbol[0, 3][0, 5]
2 for double symbol[0, 7][0, 11]
1 for enhanced multiplexing1 for single symbol

[0, 3] and [8, 11]

[0, 5] and [2, 17]

2 for double symbol[0, 15][0, 23]

This table corresponds to the PUSCH DM-RS antenna port values, as defined in TS 38.211 Table 6.4.1.1.3-5.

The default value, [], implies that the object automatically selects the first N valid port indices, where N is the number of layers that is specified by the NumLayers property of the nrPUSCHConfig or nrWavegenPUSCHConfig objects. For example, if NumLayers=6 and the valid port indices are in the range [0, 3] and [8, 11], then the object selects the 0, 1, 2, 3, 8, 9 port indices.

Data Types: double

DM-RS scrambling identities for CP-OFDM (NID0 and NID1), specified as one of these options.

  • 1-by-2 integer vector of values from 0 to 65,535 — The vector elements define NID0 and NID1.

  • Scalar integer from 0 to 65,535 — This option specifies equal values for both NID0 and NID1.

  • [] — Use this option to set the DM-RS scrambling identity to the physical layer cell identity, specified by the NCellID property of the carrier configuration.

Dependencies

This property applies when the TransformPrecoding property of the nrPUSCHConfig object is set to 0.

Data Types: double

DM-RS scrambling identity for DFT-s-OFDM, specified as one of these options.

  • Integer from 0 to 1007 — If NRSID is the higher-layer parameter nPUSCH-Identity.

  • [] — Use this option to set NRSID automatically.

    • If you set the DMRSUplinkTransformPrecodingR16 property to 1 and the Modulation property of the PUSCH configuration object to 'pi/2-BPSK', the object sets NRSID to one of the NID values defined by the NIDNSCID property.

    • If you set the DMRSUplinkTransformPrecodingR16 property to 0 or the Modulation property of the PUSCH configuration object to a value that is different than 'pi/2-BPSK', the object sets NRSID to the NCellID property value of the nrCarrierConfig object.

Dependencies

This property applies when the TransformPrecoding property of the nrPUSCHConfig object is set to 1.

Data Types: double

DM-RS scrambling initialization for CP-OFDM, specified as 0 or 1.

Dependencies

This property applies when the TransformPrecoding property of the nrPUSCHConfig object is set to 0.

Data Types: double

Group hopping configuration, specified as one of these options.

  • 0 — Group hopping is disabled.

  • 1 — Group hopping is enabled.

Dependencies

This property applies when the TransformPrecoding property of the nrPUSCHConfig object is set to 1 and SequenceHopping is set to 0.

Data Types: logical | double

Sequence hopping configuration, specified as one of these options.

  • 0SequenceHopping is disabled.

  • 1SequenceHopping is enabled.

Dependencies

This property applies when the TransformPrecoding property of the nrPUSCHConfig object is set to 1 and GroupHopping is set to 0.

Data Types: logical | double

Number of DM-RS CDM groups without data, specified as 1, 2, or 3.

Each value indicates a different set of CDM group numbers, according to TS 38.214 Section 6.2.2 [2].

  • 1 — CDM group number 0

  • 2 — CDM group numbers 0 and 1

  • 3 — CDM group numbers 0, 1, and 2

When TransformPrecoding property of the nrPUSCHConfig object is set to 1, this property value must be 2.

Data Types: double

Release 16 low peak-to-average-power ratio (PAPR) DM-RS sequence, specified as one of these logical values.

  • 0 (false) — Disable the use of low PAPR DM-RS.

  • 1 (true) — Enable the use of low PAPR DM-RS. The DM-RS sequence generation depends on the DM-RS antenna port indices (DMRSPortSet) as well as the scrambling initialization (NSCID).

Dependencies

This property applies when the TransformPrecoding property of the nrPUSCHConfig object is set to 0.

Data Types: double

Release 16 low PAPR DM-RS sequence for DFT-s-OFDM, specified as one of these logical values.

  • 0 (false) — Disable the use of low PAPR DM-RS for DFT-s-OFDM. The DM-RS sequence generation uses type 1 low PAPR sequences.

  • 1 (true) — Enable the use of low PAPR DM-RS for DFT-s-OFDM. The DM-RS sequence generation uses type 2 low PAPR sequences.

Dependencies

This property applies when the TransformPrecoding property of the nrPUSCHConfig object is set to 1 and the Modulation property is set to 'pi/2-BPSK'.

Data Types: double

This property is read-only.

CDM group numbers corresponding to each DM-RS port, specified as one of these options.

  • Integer from 0 to 2 — When DMRSPortSet property is a scalar, specifying single DM-RS antenna port.

  • Row vector of integers from 0 to 2 — When DMRSPortSet property is a vector, specifying multiple DM-RS antenna ports. Each element corresponds to a CDM group number for that port.

Value of this property depends on the DMRSConfigurationType according to TS 38.211 Table 6.4.1.1.3-1 or 6.4.1.1.3-2 [1].

Data Types: double

This property is read-only.

Delta shifts corresponding to each CDM group, specified as one of these options.

  • Integer from the set {0, 1, 2, 4} — When DMRSPortSet property is a scalar, specifying single DM-RS antenna port.

  • Row vector of integers from the set {0, 1, 2, 4} — When DMRSPortSet property is a vector, specifying multiple DM-RS antenna ports. Each element corresponds to the delta shift to be applied for that port.

Value of this property depends on the DMRSConfigurationType according to TS 38.211 Table 6.4.1.1.3-1 or 6.4.1.1.3-2 [1].

Data Types: double

This property is read-only.

Frequency weights for the DM-RS symbols, specified as one of these options.

  • Column vector of integers — When DMRSPortSet property is a scalar, specifying single DM-RS antenna port.

  • Matrix of integers — When DMRSPortSet property is a vector, specifying multiple DM-RS antenna ports. Each column corresponds to the weights for that port.

Value of this property depends on the DMRSConfigurationType according to TS 38.211 Table 6.4.1.1.3-1 or 6.4.1.1.3-2 [1].

Data Types: double

This property is read-only.

Time weights for to the DM-RS symbols, specified as one of these options.

  • Column vector of integers — When DMRSPortSet property is a scalar, specifying single DM-RS antenna port.

  • Matrix of integers — When DMRSPortSet property is a vector, specifying multiple DM-RS antenna ports. Each column corresponds to the weights for that port.

Value of this property depends on the DMRSConfigurationType according to TS 38.211 Table 6.4.1.1.3-1 or 6.4.1.1.3-2 [1].

Data Types: double

This property is read-only.

Subcarrier locations in an RB for each port, specified as one of these options.

  • Column vector of integers — When DMRSPortSet property is a scalar, specifying single DM-RS antenna port.

  • Matrix of integers — When DMRSPortSet property is a vector, specifying multiple DM-RS antenna ports. Each column corresponds to the subcarrier locations for that port.

Data Types: double

This property is read-only.

CDM arrangement for reference signals, specified as the comma-separated pair consisting of 'CDMLengths' and a two-element row vector of nonnegative integers [FD TD]. Array elements FD and TD specify the length of CDM despreading in the frequency domain (FD-CDM) and time domain (TD-CDM), respectively. A value of 1 for an element specifies no CDM.

Data Types: double

Since R2024a

Enhanced DM-RS multiplexing, specified as one of these logical values:

  • 0 (false) — Disable enhanced DM-RS multiplexing.

  • 1 (true) — Enable enhanced DM-RS multiplexing to extend the set of DM-RS antenna ports for multi-user multiple-input multiple-output (MU-MIMO) use.

This property together with the DMRSLength and DMRSConfigurationType properties define the valid range of antenna port indices, as described in this table.

DMRSEnhancedR18 ValueDMRSLength ValueValid Range of Antenna Port Indices
DMRSConfigurationType=1DMRSConfigurationType=2
0 for basic multiplexing1 for single symbol[0, 3][0, 5]
2 for double symbol[0, 7][0, 11]
1 for enhanced multiplexing1 for single symbol

[0, 3] and [8, 11]

[0, 5] and [2, 17]

2 for double symbol[0, 15][0, 23]

Data Types: double

Examples

collapse all

Create a physical uplink shared channel (PUSCH) specific demodulation reference signal (DM-RS) object, dmrs.

Specify a single-symbol DMRS with number of DM-RS additional positions as 3, sequence hopping as 1, and having antenna ports as 0 and 4.

dmrs = nrPUSCHDMRSConfig;
dmrs.DMRSLength = 1;
dmrs.DMRSAdditionalPosition = 3;
dmrs.SequenceHopping = 1;
dmrs.DMRSPortSet = [0 4];

View the corresponding dmrs properties.

disp(dmrs)
  nrPUSCHDMRSConfig with properties:

              DMRSConfigurationType: 1
                  DMRSTypeAPosition: 2
             DMRSAdditionalPosition: 3
                         DMRSLength: 1
                    CustomSymbolSet: []
                        DMRSPortSet: [0 4]
                           NIDNSCID: []
                              NSCID: 0
                       GroupHopping: 0
                    SequenceHopping: 1
                              NRSID: []
            NumCDMGroupsWithoutData: 2
                      DMRSUplinkR16: 0
    DMRSUplinkTransformPrecodingR16: 0
                    DMRSEnhancedR18: 0

   Read-only properties:
                          CDMGroups: [0 0]
                        DeltaShifts: [0 0]
                   FrequencyWeights: [2x2 double]
                        TimeWeights: [2x2 double]
            DMRSSubcarrierLocations: [6x2 double]
                         CDMLengths: [1 1]

Create a carrier configuration object with default properties. This object corresponds to a 10 MHz carrier with 15 kHz subcarrier spacing.

carrier = nrCarrierConfig;

Create a physical uplink shared channel (PUSCH) configuration object with specified properties. When transform precoding is set to 0, the waveform type is cyclic-prefix orthogonal frequency division multiplexing (CP-OFDM).

pusch = nrPUSCHConfig;
pusch.TransformPrecoding = 0;
pusch.TransmissionScheme = 'codebook';
pusch.NumAntennaPorts = 4;
pusch.TPMI = 0;

Configure PUSCH demodulation reference signal (DM-RS) with specified parameters.

pusch.DMRS.DMRSAdditionalPosition = 1;
pusch.DMRS.DMRSTypeAPosition = 2;
pusch.DMRS.DMRSPortSet = 2;
pusch.DMRS.NIDNSCID = 10;
pusch.DMRS.NSCID = 1;

Generate DM-RS symbols associated with PUSCH of single data type.

sym = nrPUSCHDMRS(carrier,pusch,'OutputDataType','single')
sym = 624x4 single matrix

  -0.3536 - 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.3536 - 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
  -0.3536 + 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
  -0.3536 - 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
  -0.3536 + 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.3536 - 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
  -0.3536 - 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.3536 + 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.3536 - 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.3536 - 0.3536i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
      ⋮

Create a carrier configuration object with default properties. This object corresponds to a 10 MHz carrier with 15 kHz subcarrier spacing.

carrier = nrCarrierConfig;

Create a physical uplink shared channel (PUSCH) configuration object with specified properties. When transform precoding is set to 0, the waveform type is cyclic-prefix orthogonal frequency division multiplexing (CP-OFDM).

pusch = nrPUSCHConfig;
pusch.TransformPrecoding = 0;
pusch.TransmissionScheme = 'codebook';
pusch.NumAntennaPorts = 4;
pusch.TPMI = 0;

Configure PUSCH demodulation reference signal (DM-RS) object with specified parameters.

pusch.DMRS.DMRSAdditionalPosition = 2;
pusch.DMRS.DMRSTypeAPosition = 2;
pusch.DMRS.DMRSPortSet = 3;
pusch.DMRS.NIDNSCID = 15;
pusch.DMRS.NSCID = 1;

Generate DM-RS indices associated to PUSCH of subscript indexing form.

ind = nrPUSCHDMRSIndices(carrier,pusch,'IndexStyle','subscript')
ind = 3744x3 uint32 matrix

    2    3    1
    4    3    1
    6    3    1
    8    3    1
   10    3    1
   12    3    1
   14    3    1
   16    3    1
   18    3    1
   20    3    1
      ⋮

Create a carrier configuration with 30 kHz subcarrier spacing and 5 MHz transmission bandwidth.

carrier = nrCarrierConfig;
carrier.SubcarrierSpacing = 30;
carrier.NSizeGrid = 11;

Create a physical uplink shared channel (PUSCH) configuration object with specified properties. When transform precoding is set to 1, the waveform type is discrete fourier transform spread orthogonal frequency division multiplexing (DFT-s-OFDM).

pusch = nrPUSCHConfig;
pusch.NSizeBWP = 9;
pusch.NStartBWP = 1;
pusch.PRBSet = 0:3;
pusch.TransformPrecoding = 1;
pusch.FrequencyHopping = 'intraSlot';
pusch.SecondHopStartPRB = 5;

Create a PUSCH demodulation reference signal (DM-RS) object with specified properties.

dmrs = nrPUSCHDMRSConfig;
dmrs.DMRSAdditionalPosition = 1;
dmrs.DMRSTypeAPosition = 2;
dmrs.DMRSPortSet = 3;
dmrs.GroupHopping = 1;
dmrs.SequenceHopping = 0;
dmrs.NRSID = 10;

Assign the PUSCH DM-RS configuration object to DMRS property of PUSCH configuration object.

pusch.DMRS = dmrs;

Generate PUSCH DM-RS symbols and indices for the specified carrier, PUSCH configuration, and output formatting name-value pair argument.

sym = nrPUSCHDMRS(carrier,pusch,'OutputDataType','single')
sym = 96x1 single column vector

  -0.7071 - 0.7071i
  -0.7071 - 0.7071i
  -0.7071 - 0.7071i
   0.7071 - 0.7071i
  -0.7071 - 0.7071i
  -0.7071 - 0.7071i
  -0.7071 - 0.7071i
   0.7071 - 0.7071i
   0.7071 + 0.7071i
  -0.7071 + 0.7071i
      ⋮

ind = nrPUSCHDMRSIndices(carrier,pusch,'IndexBase','0based','IndexOrientation','bwp')
ind = 96x1 uint32 column vector

   217
   219
   221
   223
   225
   227
   229
   231
   233
   235
      ⋮

Create a bandwidth part (BWP) grid, and then map the DM-RS symbols on the grid.

bwp = complex(zeros([pusch.NSizeBWP*12 carrier.SymbolsPerSlot pusch.NumLayers]));
bwp(ind+1) = sym; % Map the DM-RS symbols

Map the BWP to the carrier resource grid, and then display the carrier grid.

grid = complex(zeros([carrier.NSizeGrid*12 carrier.SymbolsPerSlot pusch.NumLayers])); % Create carrier resource grid
offset = pusch.NStartBWP-carrier.NStartGrid; % BWP start location in the carrier grid
grid(offset*12+1:(offset+pusch.NSizeBWP)*12,:,:) = bwp;
imagesc(abs(grid(:,:,1)));
axis xy;
xlabel('OFDM Symbols');
ylabel('Subcarriers');
title('PUSCH DM-RS Resource Elements in the Carrier Resource Grid');

References

[1] 3GPP TS 38.211. “NR; Physical channels and modulation.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

[2] 3GPP TS 38.214. “NR; Physical layer procedures for data.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2020a

expand all