Main Content

nrWavegenPUSCHConfig

PUSCH configuration parameters for 5G waveform generation

Since R2021a

Description

The nrWavegenPUSCHConfig 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]. Use this object to set the PUSCH property of the nrULCarrierConfig object when configuring 5G uplink waveform generation.

This object defines several properties of the PUSCH, including the modulation scheme, layer mapping, transform precoding, target code rate, and time-domain and frequency-domain allocation. The object also contains properties of the associated physical reference signals, such as the demodulation reference signal (DM-RS) and the phase tracking reference signal (PT-RS).

The default nrWavegenPUSCHConfig 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, transmission in all slots, and a single-symbol DM-RS type 1. The default object also disables frequency hopping, transform precoding, the PT-RS, and the uplink control information (UCI). This configuration corresponds to a full resource allocation with respect to the default nrWavegenBWPConfig 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 = nrWavegenPUSCHConfig creates a default PUSCH configuration object for 5G waveform generation.

example

pusch = nrWavegenPUSCHConfig(Name,Value) specifies properties using one or more name-value arguments. Enclose each property in quotes. For example, 'NumLayers',4 specifies 4 transmission layers.

Properties

expand all

Channel Configuration

Enable the PUSCH in 5G waveform generation, specified as one of these values.

  • 1 (true) — Enable the PUSCH.

  • 0 (false) — Disable the PUSCH.

Data Types: double | logical

Name of the PUSCH configuration, specified as a character array or string scalar. Use this property to set a description to the PUSCH configuration.

Data Types: char | string

Power scaling of the PUSCH in dB, specified as a real-valued scalar. Use this property to scale the power of the PUSCH in the generated 5G waveform.

Data Types: double

ID of the bandwidth part (BWP) containing the configured PUSCH, specified as a nonnegative integer. Use this property to associate this PUSCH configuration with one of the BWP configurations specified by the BandwidthParts property of the nrULCarrierConfig 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 SchemeNumber 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

Slot allocation in a PUSCH period, specified as a nonnegative integer or a row vector of nonnegative integers. This property specifies the slot positions of the PUSCH by using 0-based indexing and values that are less than the value of the Period property. The object ignores slot allocation values that are greater than the period.

Data Types: double

PUSCH allocation period in slots, specified as a nonnegative integer or []. An empty period indicates no repetition.

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'2N/ATables 6.3.1.5-25 to 6.3.1.5-36
'codebook3'4N/ATables 6.3.1.5-37 to 6.3.1.5-46
'codebook4'8N/ATable 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 RBSetIndex and InterlaceIndex properties 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, 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

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

Uplink shared channel (UL-SCH) encoding of the transport blocks, specified as one of these values.

  • 1 (true) — Enable transport block encoding.

  • 0 (false) — Disable transport block encoding.

Data Types: double | logical

Target code rate, specified as a numeric scalar or a 1-by-2 numeric vector of values in the range (0, 1). The default value corresponds to 526/1024. If you specify this property as a scalar, the object applies scalar expansion when processing two transport blocks (NumLayers > 4). To specify different target code rates for each transport block, specify this property as a vector.

Dependencies

To enable this property, set the Coding property to 1 (true).

Data Types: double

Rate matching overhead, specified as 0, 6, 12, or 18.

Data Types: double

Redundancy version sequence, specified as a nonnegative integer, a vector of nonnegative integers, or a two-element cell array containing unique nonnegative integers. When the sequence is a two-element cell array, the second value applies only to a second codeword (NumLayers > 4).

Dependencies

To enable this property, set the Coding property to 1 (true).

Data Types: double

Source of contents for the transport blocks, specified as one of these options.

  • 'PN9-ITU', 'PN9', 'PN11', 'PN15', or 'PN23'

  • Two-element cell array consisting of one of the character vectors from the previous list and a random numeric seed (for example, {'PN9',7})

  • Binary-valued vector

If you do not specify a random seed, all shift registers are initialized with an active state.

Data Types: double | cell | string | char

UCI on PUSCH Configuration

Hybrid automatic repeat request acknowledgment (HARQ-ACK) for UCI on the PUSCH, specified as one of these values.

  • 0 (false) — Disable HARQ-ACK transmission.

  • 1 (true) — Enable HARQ-ACK transmission.

Dependencies

To enable this property, set the Coding property to 1 (true).

Data Types: logical | double

Number of HARQ-ACK bits in the UCI on the PUSCH, specified as an integer from 0 to 1706.

Dependencies

To enable this property, set the Coding and EnableACK properties to 1 (true).

Data Types: double

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 entries from the Table 9.3-1 of TS 38.213.

Dependencies

To enable this property, set the Coding and EnableACK properties to 1 (true) and the NumACKBits property to a positive value.

Data Types: double

Source of HARQ-ACK contents, specified as one of these options.

  • 'PN9-ITU', 'PN9', 'PN11', 'PN15', or 'PN23'

  • Two-element cell array consisting of one of the character vectors from the previous list and a random numeric seed (for example, {'PN9',7})

  • Binary-valued vector

If you do not specify a random seed, all shift registers are initialized with an active state.

Dependencies

To enable this property, set the Coding and EnableACK properties to 1 (true) and the NumACKBits property to a positive value.

Data Types: double

Channel-state information (CSI) part 1 for the UCI on the PUSCH, specified as one of these options.

  • 0 (false) — Disable the CSI part 1 transmission on the PUSCH.

  • 1 (true) — Enable the CSI part 1 transmission on the PUSCH.

Dependencies

To enable this property, set the Coding property to 1 (true).

Data Types: logical | double

Number of CSI part 1 bits for the UCI on the PUSCH, specified as an integer from 0 to 1706.

Dependencies

To enable this property, set the Coding and EnableCSI1 properties to 1 (true).

Data Types: double

Beta offset factor of 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 entries from the Table 9.3-2 of TS 38.213.

Dependencies

To enable this property, set the Coding and EnableCSI1 properties to 1 (true) and the NumCSI1Bits property to a positive value.

Data Types: double

Source of CSI part 1 contents, specified as one of these options.

  • 'PN9-ITU', 'PN9', 'PN11', 'PN15', or 'PN23'

  • Two-element cell array consisting of one of the character vectors from the previous list and a random numeric seed (for example, {'PN9',7}).

  • Binary-valued vector

If you do not specify a random seed, all shift registers are initialized with an active state.

Dependencies

To enable this property, set the Coding and EnableCSI1 properties to 1 (true) and the NumCSI1Bits property to a positive value.

Data Types: double

CSI part 2 for the UCI on the PUSCH, specified as one of these values.

  • 0 (false) — Disable the CSI part 2 transmission on the PUSCH.

  • 1 (true) — Enable the CSI part 2 transmission on the PUSCH.

Dependencies

To enable this property, set the Coding and EnableCSI1 properties to 1 (true) and the NumCSI1Bits property to a positive value.

Data Types: logical | double

Number of CSI part 2 bits for the UCI on the PUSCH, specified as an integer from 0 to 1706.

Dependencies

To enable this property, set the Coding, EnableCSI1, and EnableCSI2 properties to 1 (true) and the NumCSI1Bits property to a positive value.

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 entries from the Table 9.3-2 of TS 38.213.

Dependencies

To enable this property, set the Coding, EnableCSI1, and EnableCSI2 properties to 1 (true) and the NumCSI1Bits and NumCSI2Bits properties to a positive value.

Data Types: double

Source of CSI part 2 contents, specified as one of these options.

  • 'PN9-ITU', 'PN9', 'PN11', 'PN15', or 'PN23'

  • Two-element cell array consisting of one of the character vectors from the previous list and a random numeric seed (for example, {'PN9',7}).

  • Binary-valued vector

If you do not specify a random seed, all shift registers are initialized with an active state.

Dependencies

To enable this property, set the Coding, EnableCSI1, and EnableCSI2 properties to 1 (true) and the NumCSI1Bits and NumCSI2Bits properties to a positive value.

Data Types: double

Configured grant transmissions in UCI (CG-UCI) on the PUSCH, specified as one of these values.

  • 0 (false) — Disable CG-UCI transmission on the PUSCH.

  • 1 (true) — Enable CG-UCI transmission on the PUSCH.

Dependencies

To enable this property, set the Coding property to 1 (true).

Data Types: logical | double

Number of CG-UCI bits on PUSCH, specified as 0 or an integer from 7 to 1706. Setting this property to 0 disables the CG-UCI.

Dependencies

To enable this property, set the Coding and EnableCGUCI properties to 1 (true).

Data Types: double

Beta offset factor of the CG-UCI, specified as a positive real-valued scalar. This property determines the number of resources for multiplexing CG-UCI.

Dependencies

To enable this property, set the Coding and EnableCGUCI properties to 1 (true) and the NumCGUCIBits property to a positive value. If the EnableACK property is also set to 1 (true) and the NumACKBits property is set to a positive value, the object uses the BetaOffsetACK property value as the beta offset factor for the CG-UCI instead.

Data Types: double

Source of CG-UCI, specified as one of these options.

  • 'PN9-ITU', 'PN9', 'PN11', 'PN15', or 'PN23'

  • Two-element cell array consisting of one of the character vectors from the previous list and a random numeric seed (for example, {'PN9',7}).

  • Binary-valued vector

If you do not specify a random seed, all shift registers are initialized with an active state.

Dependencies

To enable this property, set the Coding and EnableCGUCI properties to 1 (true) and the NumCGUCIBits property to a positive value.

Data Types: double

UL-SCH transmission on the slots used for the UCI on the PUSCH, specified as one of these values.

  • 1 (true) — Enable UL-SCH and UCI multiplexing on the PUSCH.

  • 0 (false) — Disable UL-SCH and UCI multiplexing on the PUSCH.

Dependencies

To enable this property, set the Coding property to 1 (true) and one of these property combinations:

Data Types: logical | 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.

Power scaling of the PUSCH DM-RS in dB, specified as a real-valued scalar. Use this property to scale the power of the PUSCH DM-RS in the generated 5G waveform. This scaling is additional to the PUSCH-wide power scaling specified by the Power property.

Data Types: double

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 PT-RS configuration, specified as an nrPUSCHPTRSConfig configuration object. This property relates to the PT-RS configuration and contains all properties of the specified nrPUSCHPTRSConfig object.

Dependencies

To enable this property, set the EnablePTRS property to 1.

Power scaling of the PUSCH PT-RS in dB, specified as a real-valued scalar. Use this property to scale the power of the PUSCH PT-RS in the generated 5G waveform. This scaling is additional to the PUSCH-wide power scaling specified by the Power property. The object ignores this property value when you set the TransformPrecoding property to 1 (true).

Dependencies

To enable this property, set the EnablePTRS property to 1 (true).

Data Types: double

Read-Only Properties

Since R2024a

This property is read-only.

Number of codewords, returned as one of these values:

  • 1 — If NumLayers is an integer from 1 to 4

  • 2 — If NumLayers is an integer from 5 to 8

Data Types: double

Examples

collapse all

Create a PUSCH configuration object for 5G waveform generation with the specified property values.

pusch = nrWavegenPUSCHConfig( ...
    'BandwidthPartID',0, ...
    'Modulation','16QAM', ...
    'TargetCodeRate',658/1024, ...
    'SymbolAllocation',[0 7], ...
    'SlotAllocation',[0 2], ...
    'Period',3, ...
    'PRBSet',[0:20], ...
    'EnablePTRS',true);

Create an uplink carrier configuration object, specifying the previously defined PUSCH configuration.

cfg = nrULCarrierConfig('PUSCH',{pusch});

Create two SCS carrier configuration objects with mixed numerologies.

carrier1 = nrSCSCarrierConfig('SubcarrierSpacing',15);
carrier2 = nrSCSCarrierConfig('SubcarrierSpacing',30);

Create two BWP configuration objects, one for each of the SCS carriers.

bwp1 = nrWavegenBWPConfig('BandwidthPartID',0,'SubcarrierSpacing',15);
bwp2 = nrWavegenBWPConfig('BandwidthPartID',1,'SubcarrierSpacing',30);

Create two PUSCH configuration objects for 5G waveform generation, specifying a unique UE and one of the BWP configurations for each PUSCH.

pusch1 = nrWavegenPUSCHConfig('RNTI',1,'BandwidthPartID',0,'Modulation','QPSK');
pusch2 = nrWavegenPUSCHConfig('RNTI',2,'BandwidthPartID',1,'Modulation','16QAM');

Create an uplink carrier configuration object, specifying the previously defined configurations.

cfg = nrULCarrierConfig( ...
    'SCSCarriers',{carrier1,carrier2}, ...
    'BandwidthParts',{bwp1,bwp2}, ...
    'PUSCH',{pusch1,pusch2});

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 R2021a

expand all

See Also

Functions

Objects