Main Content

nrPUSCHConfig

PUSCH configuration parameters

Description

The nrPUSCHConfig object sets physical uplink shared channel (PUSCH) configuration parameters, as defined in TS 38.211 Sections 6.3.1, 6.4.1.1, and 6.4.1.2 [1].This object bundles all the properties involved in the PUSCH processing chain, including scrambling, symbol modulation, layer mapping, transform precoding, MIMO precoding, and resource element mapping. The object also contains properties to determine the number of resources for the uplink control information (UCI) multiplexing and associated physical reference signals, such as demodulation reference signal (DM-RS) and phase tracking reference signal (PT-RS).

By default, the object configures the physical uplink shared channel with cyclic-prefix orthogonal frequency division multiplexing (CP-OFDM) occupying a 10 MHz bandwidth, at 15 kHz subcarrier spacing (52 resource blocks) and spanning over 14 OFDM symbols in a slot.

Creation

Description

pusch = nrPUSCHConfig creates a PUSCH configuration object with default properties.

example

pusch = nrPUSCHConfig(Name,Value) specifies properties using one or more name-value pair arguments. Enclose each property in quotes. For example, 'NSizeBWP',200,'NumLayers',4 specifies 200 physical resource blocks (PRB) in the bandwidth part (BWP) and 4 transmission layers. Unspecified properties take their default values.

Properties

expand all

Number of PRBs in bandwidth part (BWP), specified as an integer from 1 to 275. Use [] to set this property to the NSizeGrid property of the nrCarrierConfig object.

Data Types: double

Starting PRB index of BWP relative to common resource block 0 (CRB 0), specified as an integer from 0 to 2473. Use [] to set this property to the NStartGrid property of the nrCarrierConfig object.

Data Types: double

Modulation scheme, specified as 'QPSK', 'pi/2-BPSK', '16QAM', '64QAM', or '256QAM', a string scalar, or a character array.

Modulation SchemeNumber of Bits Per Symbol
'pi/2-BPSK'1
'QPSK'2
'16QAM'4
'64QAM'6
'256QAM'8

Data Types: char | string

Number of transmission layers, specified as 1, 2, 3, or 4.

Data Types: double

Mapping type of the physical shared channel, specified as 'A' or 'B'.

Data Types: char | string

OFDM symbol allocation of the physical shared channel, specified as a two-element vector of nonnegative integers. The first element of this property represents the start of symbol allocation (0-based). The second element represents the number of allocated OFDM symbols.

When this property is set to [] or second element in this two-element vector of nonnegative integers is 0, the symbol allocation is empty.

Data Types: double

Physical resource block (PRB) allocation of PUSCH within the BWP, specified as a vector of nonnegative integers from 0 to 274.

Data Types: double

Transform precoding flag, specified as one of these values.

  • 0 — The transform precoding is disabled and waveform type is cyclic-prefix orthogonal frequency division multiplexing (CP-OFDM).

  • 1 — The transform precoding is enabled and waveform type is discrete fourier transform spread orthogonal frequency division multiplexing (DFT-s-OFDM).

Data Types: double | logical

PUSCH transmission scheme, specified as 'nonCodebook' or 'codebook'.

Data Types: char | string

Number of antenna ports, specified as 1, 2, or 4. This value must be greater than or equal to the NumLayers property.

Dependencies

This property is applicable only when TransmissionScheme is set to 'codebook'.

Data Types: double

Transmitted precoding matrix indicator, specified as an integer from 0 to 27.

Dependencies

This property is applicable only when TransmissionScheme is set to 'codebook'.

Data Types: double

Frequency hopping for the physical uplink shared channel, specified as 'neither', 'intraSlot', or 'interSlot'.

Data Types: char | string

Starting PRB index of the second hop relative to the BWP, specified as an integer from 0 to 274.

Dependencies

This property is applicable only when FrequencyHopping is set to 'intraSlot', or 'interSlot'.

Data Types: double

Beta offset factor of the hybrid automatic repeat request acknowledgment (HARQ-ACK), specified as a positive integer. This property is used to determine the number of resources for multiplexing HARQ-ACK. The nominal value is one of the entry from the Table 9.3-1 of TS 38.213.

Data Types: double

Beta offset factor of the channel state information (CSI) part 1, specified as a positive integer. This property is used to determine the number of resources for multiplexing CSI part 1. The nominal value is one of the entry from the Table 9.3-2 of TS 38.213.

Data Types: double

Beta offset factor of the CSI part 2, specified as a positive integer. This property is used to determine the number of resources for multiplexing CSI part 2. The nominal value is one of the entry from the Table 9.3-2 of TS 38.213.

Data Types: double

Scaling factor to limit the number of the resource elements allocated for the uplink channel information (UCI) on the PUSCH, specified as a scalar in the range (0, 1). The nominal value is 0.5, 0.65, 0.8, or 1.

Data Types: double

Scrambling identity, specified as an integer from 0 to 1023. Use [] to set this property to the NCellID property of the nrCarrierConfig object.

Data Types: double

Radio network temporary identifier of the user equipment (UE), specified as an integer from 0 to 65,535.

Data Types: double

PUSCH demodulation reference signal (DM-RS) configuration parameters, specified as a nrPUSCHDMRSConfig configuration object. This property relates to the demodulation reference signal configuration and contains all properties of the specified nrPUSCHDMRSConfig object.

Enable PT-RS, specified as one of these values.

  • 0 — Disable PT-RS configuration.

  • 1 — Enable PT-RS configuration.

Data Types: double | logical

PUSCH phase tracking reference signal (PT-RS) configuration, specified as a nrPUSCHPTRSConfig configuration object. This property relates to the phase tracking reference signal configuration and contains all properties of the specified nrPUSCHPTRSConfig object.

Examples

collapse all

Create a physical uplink shared channel configuration object with 'codebook' transmission scheme.

Specify the size of the bandwidth part as 52, scrambling identity as 750, frequency hopping as 'interslot', and number of antenna ports as 2. Enable transform precoding and PT-RS configuration.

pusch = nrPUSCHConfig;
pusch.NSizeBWP = 52;
pusch.NID = 750;
pusch.TransmissionScheme = 'codebook';
pusch.FrequencyHopping = 'interslot';
pusch.NumAntennaPorts = 2;
pusch.TransformPrecoding = 1;
pusch.EnablePTRS = 1;
disp(pusch)
  nrPUSCHConfig with properties:

              NSizeBWP: 52
             NStartBWP: []
            Modulation: 'QPSK'
             NumLayers: 1
           MappingType: 'A'
      SymbolAllocation: [0 14]
                PRBSet: [1x52 double]
    TransformPrecoding: 1
    TransmissionScheme: 'codebook'
       NumAntennaPorts: 2
                  TPMI: 0
      FrequencyHopping: 'interSlot'
     SecondHopStartPRB: 1
         BetaOffsetACK: 20
        BetaOffsetCSI1: 6.2500
        BetaOffsetCSI2: 6.2500
            UCIScaling: 1
                   NID: 750
                  RNTI: 1
                  DMRS: [1x1 nrPUSCHDMRSConfig]
            EnablePTRS: 1
                  PTRS: [1x1 nrPUSCHPTRSConfig]

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 PUSCH configuration object with codebook-based transmission. Set the number of antenna ports to 4, modulation scheme to pi/2-BPSK, transmitted precoding matrix indicator to 10, and transform precoding to 0. When transform precoding is 0, the waveform type is cyclic-prefix orthogonal frequency division multiplexing (CP-OFDM).

pusch = nrPUSCHConfig;
pusch.TransformPrecoding = 0;
pusch.Modulation = 'pi/2-BPSK';
pusch.TransmissionScheme = 'codebook';
pusch.NumAntennaPorts = 4;
pusch.TPMI = 10;

Generate PUSCH indices in subscript form.

[ind,info] = nrPUSCHIndices(carrier,pusch,'IndexStyle','subscript')
ind = 32448x3 uint32 matrix

    1    1    1
    2    1    1
    3    1    1
    4    1    1
    5    1    1
    6    1    1
    7    1    1
    8    1    1
    9    1    1
   10    1    1
      ⋮

info = struct with fields:
                G: 8112
               Gd: 8112
        NREPerPRB: 156
    DMRSSymbolSet: 2
    PTRSSymbolSet: [1x0 double]

Create a carrier configuration object with default properties. This object corresponds to 30 kHz of subcarrier spacing and 20 MHz transmission bandwidth.

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

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

pusch = nrPUSCHConfig;
pusch.NStartBWP = 10;
pusch.NSizeBWP = 41;
pusch.Modulation = '16QAM';
pusch.NID = []; % Set NID equal to the NCellID property of carrier.
pusch.PRBSet = 0:5;
pusch.TransformPrecoding = 1;
pusch.FrequencyHopping = 'intraSlot';
pusch.SecondHopStartPRB = 3;

Generate PUSCH indices, setting the index orientation with respect to the carrier grid.

[ind,info] = nrPUSCHIndices(carrier,pusch,'IndexOrientation','carrier')
ind = 864x1 uint32 column vector

   121
   122
   123
   124
   125
   126
   127
   128
   129
   130
      ⋮

info = struct with fields:
                G: 3456
               Gd: 864
        NREPerPRB: 144
    DMRSSymbolSet: [2 7]
    PTRSSymbolSet: [1x0 double]

Generate PUSCH symbols of data type single.

numDataBits = info.G;
cws = randi([0 1],numDataBits,1);
sym = nrPUSCH(carrier,pusch,cws,'OutputDataType','single')
sym = 864x1 single column vector

  -0.7454 + 0.2981i
   0.3406 - 0.2312i
  -0.1153 + 0.2756i
   1.1921 - 0.3658i
  -0.3968 - 0.0277i
  -0.8788 - 0.6493i
  -0.8737 + 0.8318i
  -0.5764 + 0.0269i
  -1.6638 + 0.0482i
  -1.0270 - 0.1347i
      ⋮

Plot the generated symbols and indices on the carrier resource grid.

grid = complex(zeros([carrier.NSizeGrid*12 carrier.SymbolsPerSlot pusch.NumLayers]));
grid(ind) = sym;
imagesc(abs(grid(:,:,1)));
axis xy;
xlabel('OFDM Symbols');
ylabel('Subcarriers');
title('PUSCH Resource Elements in 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.213. “NR; Physical layer procedures for control.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

Extended Capabilities

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

Introduced in R2020a