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).

The default nrPUSCHConfig object configures a single-layer PUSCH with cyclic-prefix orthogonal frequency division multiplexing (CP-OFDM), mapping type A, QPSK modulation, a resource allocation of 52 resource blocks and 14 OFDM symbols in a slot, and single-symbol DM-RS type 1. This configuration corresponds to a full resource allocation with respect to the default nrCarrierConfig object.

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

Channel Configuration

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 you set this property to [] or the second element of the vector to 0, no symbol is allocated for the channel.

Data Types: double

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

Data Types: double

Transform precoding, specified as one of these values.

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

  • 1 (true) — Enable transform precoding. The 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

To enable this property, set the TransmissionScheme property 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

PUSCH scrambling identity, specified as [] or an integer from 0 to 1023.

  • If the higher layer parameter dataScramblingIdentityPUSCH is configured, NID must be an integer from 0 to 1023.

  • If the higher layer parameter dataScramblingIdentityPUSCH is not configured, NID must be an integer from 0 to 1007.

When you specify this property as [], the object sets the PUSCH scrambling identity to the physical layer cell identity, specified by the NCellID property of the carrier.

Data Types: double

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

Data Types: double

UCI on PUSCH Configuration

Beta offset factor of the HARQ-ACK, specified as a positive integer. This property determines 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 determines 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 determines 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 UCI on the PUSCH, specified as a scalar between 0 and 1. The nominal value is 0.5, 0.65, 0.8, or 1.

Data Types: double

Reference Signals Configuration

PUSCH DM-RS configuration parameters, specified as an nrPUSCHDMRSConfig configuration object.

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

  • 0 (false) — Disable the PT-RS configuration.

  • 1 (true) — Enable the PT-RS configuration.

Data Types: double | logical

PUSCH phase tracking reference signal (PT-RS) configuration, specified as an nrPUSCHPTRSConfig configuration 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). Enable phase tracking reference signal (PT-RS).

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

Generate PUSCH indices and PT-RS indices in subscript form.

[ind,info,ptrsInd] = nrPUSCHIndices(carrier,pusch,'IndexStyle','subscript')
ind = 31096x3 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: 7774
               Gd: 7774
        NREPerPRB: 156
    DMRSSymbolSet: 2
    PTRSSymbolSet: [0 1 3 4 5 6 7 8 9 10 11 12 13]

ptrsInd = 1352x3 uint32 matrix

    13     1     1
    37     1     1
    61     1     1
    85     1     1
   109     1     1
   133     1     1
   157     1     1
   181     1     1
   205     1     1
   229     1     1
      ⋮

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');

Figure contains an axes. The axes with title PUSCH Resource Elements in Carrier Resource Grid contains an object of type image.

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