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.
For
    operation with shared spectrum channel access for frequency range 1 (FR1), set the Interlacing property to true, then use the
        RBSetIndex and InterlaceIndex object properties to specify the allocated frequency
    resources. (since R2023b)
Creation
Description
pusch = nrPUSCHConfig
pusch = nrPUSCHConfig(Name,Value)'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
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, a
            string array, or a cell array of character vectors. This modulation scheme specifies the
            modulation type of the codewords and the number of bits used per modulation symbol. For
            one codeword, specify the modulation scheme as a character vector or string scalar. If
            two codewords are present (NumLayers > 4), the same modulation
            scheme applies to both codewords or you can specify different modulation schemes for
            each codeword by using a string array or a cell array of character vectors.
| Modulation Scheme | Number of Bits Per Symbol | 
|---|---|
| 'pi/2-BPSK' | 1 | 
| 'QPSK' | 2 | 
| '16QAM' | 4 | 
| '64QAM' | 6 | 
| '256QAM' | 8 | 
Example: {'QPSK','16QAM'} or ["QPSK","16QAM"]
            specifies different modulation schemes for two codewords.
Data Types: char | string | cell
Number of transmission layers, specified as an integer from 1 to 8.
- For one codeword, specify an integer from 1 to 4. 
- For two codewords, specify an integer from 5 to 8. (since R2024a) 
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.
Dependencies
To enable this property, set the Interlacing property to
                    0 (false).
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,
                4, or 8. This value must be greater than or
            equal to the NumLayers property.
Dependencies
To enable this property, set TransmissionScheme to
                    'codebook'.
Data Types: double
Transmitted precoding matrix indicator, specified as an integer from 0 to 304 (since R2024a). Set this
                                                  property based on the
                                                  NumLayers,
                                                  NumAntennaPorts, and
                                                  CodebookType property values,
                                                  as defined in TS 38.211 Tables 6.3.1.5-1 to
                                                  6.3.1.5-47.
Dependencies
To enable this property, set the TransmissionScheme property to
                    'codebook'.
Data Types: double
Since R2024a
Codebook type, specified as 'codebook1_ng1n4n1',
                'codebook1_ng1n2n2', 'codebook2',
                'codebook3', or 'codebook4'. This property
            together with the NumLayers and TPMI object
            properties specify the precoding matrix W from TS 38.211 Tables
            6.3.1.5-9 to 6.3.1.5-47 for codebook transmissions with 8 antenna ports. 
Use this table to identify which codebook type to use for a specific number of antenna groups (Ng) and a specific table from TS 38.211. For a single antenna group (Ng=1), the table also shows the geometrical distribution of the antenna ports in each antenna group [N1 N2]. N1 is the number of antenna ports in the horizontal direction and N2 is the number of antenna ports in the vertical direction.
| CodebookType  | Ng | [N1 N2] | Tables from TS 38.211 | 
|---|---|---|---|
| 'codebook1_ng1n4n1' | 1 | [4 1] | Tables 6.3.1.5-9 to 6.3.1.5-16 | 
| 'codebook1_ng1n2n2' | 1 | [2 2] | Tables 6.3.1.5-17 to 6.3.1.5-24 | 
| 'codebook2' | 2 | N/A | Tables 6.3.1.5-25 to 6.3.1.5-36 | 
| 'codebook3' | 4 | N/A | Tables 6.3.1.5-37 to 6.3.1.5-46 | 
| 'codebook4' | 8 | N/A | Table 6.3.1.5-47 | 
Data Types: char | string
Frequency hopping for the physical uplink shared channel, specified as
                'neither', 'intraSlot', or
                'interSlot'.
Dependencies
To enable this property, set the Interlacing property to
                    0 (false).
Data Types: char | string
Starting PRB index of the second hop relative to the BWP, specified as an integer from 0 to 274.
Dependencies
To enable this property, set the FrequencyHopping property to
          'intraSlot' or 'interSlot' and set the
          Interlacing property to 0
          (false).
Data Types: double
Since R2023b
Interlaced resource allocation, specified as one of these values.
- 0(- false) — Disable interlaced resource allocation.
- 1(- true) — Enable interlaced resource allocation. Use the- RBSetIndexand- InterlaceIndexproperties to configure the frequency resource allocation.
This property implements the useInterlacePUCCH-PUSCH higher-layer parameter.
Data Types: double | logical
Since R2023b
Indices of RB sets between intracell guard bands (0-based), specified as a vector of nonnegative integers. Use this property to specify the indices of the RB sets in an interlaced resource allocation.
Dependencies
To enable this property, set the Interlacing property to
                    1 (true).
Data Types: double
Since R2023b
Interlace indices in the interlaced resource allocation, specified as a vector of nonnegative integers with up to M elements. The vector element must be in the range [0, M – 1). M = 10 for 15 kHz subcarrier spacing and M = 5 for 30 kHz subcarrier spacing.
Dependencies
To enable this property, set the
                                                  Interlacing property to
                                                  1
                                                (true).
Data Types: double
PUSCH scrambling identity, specified as [] or an integer from 0 to
            1023. 
- If the higher layer parameter dataScramblingIdentityPUSCH is configured, - NIDmust be an integer from 0 to 1023.
- If the higher layer parameter dataScramblingIdentityPUSCH is not configured, - NIDmust 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
Random access preamble index, specified as one of these values.
- []— Use this value to specify that the scrambling initialization does not consider msgA on PUSCH.
- Integer from 0 to 63 — Use this value to initialize the scrambling sequence for msgA on PUSCH, as defined in Release 16 of TS 38.211 Section 6.3.1.1. 
Data Types: double
UCI on PUSCH Configuration
Beta offset factor of the HARQ-ACK, specified as a positive real-valued scalar. 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 real-valued scalar. 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 real-valued scalar. 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.
Read-Only Properties
Since R2024a
This property is read-only.
Number of codewords, returned as one of these values:
- 1— If- NumLayersis an integer from 1 to 4
- 2— If- NumLayersis an integer from 5 to 8
Data Types: double
Examples
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: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51]
    TransformPrecoding: 1
    TransmissionScheme: 'codebook'
       NumAntennaPorts: 2
                  TPMI: 0
          CodebookType: 'codebook1_ng1n4n1'
      FrequencyHopping: 'interSlot'
     SecondHopStartPRB: 1
           Interlacing: 0
         BetaOffsetACK: 20
        BetaOffsetCSI1: 6.2500
        BetaOffsetCSI2: 6.2500
            UCIScaling: 1
                   NID: 750
                  RNTI: 1
                NRAPID: []
                  DMRS: [1×1 nrPUSCHDMRSConfig]
            EnablePTRS: 1
                  PTRS: [1×1 nrPUSCHPTRSConfig]
   Read-only properties:
          NumCodewords: 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 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 = 31096×3 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
   11    1    1
   12    1    1
   14    1    1
   15    1    1
   16    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]
           PRBSet: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51]
ptrsInd = 1352×3 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
   253     1     1
   277     1     1
   301     1     1
   325     1     1
   349     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 = 864×1 uint32 column vector
   121
   122
   123
   124
   125
   126
   127
   128
   129
   130
   131
   132
   133
   134
   135
      ⋮
info = struct with fields:
                G: 3456
               Gd: 864
        NREPerPRB: 144
    DMRSSymbolSet: [2 7]
    PTRSSymbolSet: [1×0 double]
           PRBSet: [0 1 2 3 4 5]
Generate PUSCH symbols of data type single.
numDataBits = info.G; cws = randi([0 1],numDataBits,1); sym = nrPUSCH(carrier,pusch,cws,'OutputDataType','single')
sym = 864×1 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
  -1.6615 + 0.8395i
  -0.6967 + 0.3588i
   0.3627 + 0.5936i
  -0.2401 + 0.5499i
  -0.0810 - 0.7139i
      ⋮
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™.
Version History
Introduced in R2020aThe object adds support for eight antenna ports, up to eight layers, and two codewords PUSCH transmissions, as defined in Release 18 of TS 38.211 Section 6.3.1. Use the object properties and the corresponding values listed in this table to enable this support.
| Property | Value Summary for Eight Ports and Up to Eight Layers (since R2024a) | 
|---|---|
| NumLayers | 
 | 
| Modulation | One-element or two-element cell array | 
| NumAntennaPorts | 8 | 
| TPMI | Integer between 0 and 304, depending on the
                       | 
| CodebookType | Precoding matrices for codebook transmission with eight antenna ports | 
| NumCodewords(read-only) | The number of configured codewords corresponding to the specified number of layers | 
Use the Interlacing, RBSetIndex, and InterlaceIndex properties to configure interlaced PUSCH
        transmissions. Setting the Interlacing property to
          true disables the PRBSet and
          FrequencyHopping properties.
See Also
Functions
- nrPUSCH|- nrPUSCHDecode|- nrPUSCHIndices|- nrPUSCHDMRS|- nrPUSCHDMRSIndices|- nrPUSCHPTRS|- nrPUSCHPTRSIndices|- nrULSCHMultiplex|- nrULSCHDemultiplex|- nrULSCHInfo
Objects
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)