nrWavegenPUSCHConfig
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
creates a
default PUSCH configuration object for 5G waveform generation.pusch
= nrWavegenPUSCHConfig
specifies properties using one
or more name-value arguments. Enclose each property in quotes. For example,
pusch
= nrWavegenPUSCHConfig(Name,Value
)'NumLayers',4
specifies 4 transmission layers.
Properties
Channel Configuration
Enable
— Enable PUSCH
1
or true
(default) | 0
or false
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
Label
— Name of PUSCH configuration
'PUSCH1'
(default) | character array | string scalar
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
— Power scaling of PUSCH in dB
0
(default) | real-valued scalar
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
BandwidthPartID
— ID of BWP
1
(default) | nonnegative integer
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
— Modulation scheme
'QPSK'
(default) | 'pi/2-BPSK'
| '16QAM'
| '64QAM'
| '256QAM'
| string scalar
Modulation scheme, specified as 'QPSK'
,
'pi/2-BPSK'
, '16QAM'
,
'64QAM'
, or '256QAM'
, a string scalar, or a
character array.
Modulation Scheme | Number of Bits Per Symbol |
---|---|
'pi/2-BPSK' | 1 |
'QPSK' | 2 |
'16QAM' | 4 |
'64QAM' | 6 |
'256QAM' | 8 |
Data Types: char
| string
NumLayers
— Number of transmission layers
1
(default) | 2
| 3
| 4
Number of transmission layers, specified as 1
,
2
, 3
, or 4
.
Data Types: double
MappingType
— Mapping type
'A'
(default) | 'B'
Mapping type of the physical shared channel, specified as 'A'
or 'B'
.
Data Types: char
| string
SymbolAllocation
— OFDM symbol allocation
[0 14]
(default) | two-element vector of nonnegative integers
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
SlotAllocation
— Slot allocation in PUSCH period
[0:9]
(default) | nonnegative integer | row vector of nonnegative integers
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
Period
— PUSCH allocation period in slots
10
(default) | nonnegative integer | []
PUSCH allocation period in slots, specified as a nonnegative integer or
[]
. An empty period indicates no repetition.
Data Types: double
PRBSet
— PRB allocation
[0:51]
(default) | vector of integers from 0 to 274
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
TransformPrecoding
— Transform precoding
0
or false
(default) | 1
or true
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
TransmissionScheme
— PUSCH transmission scheme
'nonCodebook'
(default) | 'codebook'
PUSCH transmission scheme, specified as 'nonCodebook'
or 'codebook'
.
Data Types: char
| string
TPMI
— Transmitted precoding matrix indicator
0
(default) | integer from 0 to 27
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
FrequencyHopping
— Frequency hopping
'neither'
(default) | 'intraSlot'
| 'interSlot'
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
SecondHopStartPRB
— Starting PRB index of second hop
1
(default) | integer from 0 to 274
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
Interlacing
— Interlaced resource allocation
0
or false
(default) | 1
or true
Since R2023b
Interlaced resource allocation, specified as one of these values.
0
(false
) — Disable interlaced resource allocation.1
(true
) — Enable interlaced resource allocation. Use theRBSetIndex
andInterlaceIndex
properties to configure the frequency resource allocation.
This property implements the useInterlacePUCCH-PUSCH higher-layer parameter.
Data Types: double
| logical
RBSetIndex
— Indices of RB sets between intracell guard bands
0
(default) | vector of nonnegative integers
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
InterlaceIndex
— Interlace indices
0
(default) | vector of nonnegative integers
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
NID
— PUSCH scrambling identity
[]
(default) | integer from 0 to 1023
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
RNTI
— Radio network temporary identifier
1
(default) | integer from 0 to 65,535
Radio network temporary identifier of the user equipment (UE), specified as an integer from 0 to 65,535.
Data Types: double
NRAPID
— Random access preamble index
[]
(default) | integer from 0 to 63
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
Coding
— UL-SCH encoding of transport blocks
1
or true
(default) | 0
or false
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
TargetCodeRate
— Target code rate
0.5137
(default) | numeric scalar between 0 and 1
Target code rate, specified as a numeric scalar between 0 and 1. The default value corresponds to 526/1024.
Dependencies
To enable this property, set the Coding
property to 1
(true
).
Data Types: double
XOverhead
— Rate matching overhead
0
(default) | 6
| 12
| 18
Rate matching overhead, specified as 0
, 6
, 12
, or 18
.
Data Types: double
RVSequence
— Redundancy version sequence
[0 2 3 1]
(default) | nonnegative integer | vector of nonnegative integers
Redundancy version sequence, specified as a nonnegative integer or a vector of nonnegative integers.
Dependencies
To enable this property, set the Coding
property to 1
(true
).
Data Types: double
DataSource
— Source of contents for transport blocks
'PN9-ITU'
(default) | 'PN9'
| 'PN11'
| 'PN15'
| 'PN23'
| two-element cell array | binary-valued vector
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
EnableACK
— HARQ-ACK for UCI on PUSCH
0
or false
(default) | 1
or true
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
BetaOffsetACK
— Beta offset factor of HARQ-ACK
20
(default) | positive real-valued scalar
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
DataSourceACK
— Source of HARQ-ACK contents
'PN9-ITU'
(default) | 'PN9'
| 'PN11'
| 'PN15'
| 'PN23'
| two-element cell array | binary-valued vector
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
EnableCSI1
— CSI part 1 for UCI on PUSCH
0
or false
(default) | 1
or true
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
NumCSI1Bits
— Number of CSI part 1 bits for UCI on PUSCH
10
(default) | integer from 0 to 1706
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
BetaOffsetCSI1
— Beta offset factor of CSI part 1
6.25
(default) | positive real-valued scalar
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
DataSourceCSI1
— Source of CSI part 1 contents
'PN9-ITU'
(default) | 'PN9'
| 'PN11'
| 'PN15'
| 'PN23'
| two-element cell array | binary-valued vector
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
EnableCSI2
— CSI part 2 for UCI on PUSCH
0
or false
(default) | 1
or true
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
NumCSI2Bits
— Number of CSI part 2 bits for UCI on PUSCH
10
(default) | integer from 0 to 1706
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
BetaOffsetCSI2
— Beta offset factor of CSI part 2
6.25
(default) | positive real-valued scalar
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
DataSourceCSI2
— Source of CSI part 2 contents
'PN9-ITU'
(default) | 'PN9'
| 'PN11'
| 'PN15'
| 'PN23'
| two-element cell array | binary-valued vector
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
EnableCGUCI
— CG-UCI transmission on PUSCH
0
or false
(default) | 1
or true
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
NumCGUCIBits
— Number of CG-UCI bits on PUSCH
7
(default) | 0
| integer from 7 to 1706
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
BetaOffsetCGUCI
— Beta offset factor of CG-UCI
20
(default) | positive real-valued scalar
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
DataSourceCGUCI
— Source of CG-UCI contents
'PN9-ITU'
(default) | 'PN9'
| 'PN11'
| 'PN15'
| 'PN23'
| two-element cell array | binary-valued vector
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
EnableULSCH
— UL-SCH for UCI on PUSCH
1
or true
(default) | 0
or false
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:
Set the
EnableACK
property to1
(true
) and theNumACKBits
property to a positive value.Set the
EnableCSI1
property to1
(true
) and theNumCSI1Bits
property to a positive value.Set the
EnableCGUCI
property to1
(true
) and theNumCGUCIBits
property to a positive value.
Data Types: logical
| double
UCIScaling
— Scaling factor
1
(default) | scalar between 0 and 1
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
DMRS
— PUSCH DM-RS configuration parameters
default nrPUSCHDMRSConfig
object (default) | nrPUSCHDMRSConfig
object
PUSCH DM-RS configuration parameters, specified as an nrPUSCHDMRSConfig
configuration object.
DMRSPower
— Power scaling of PUSCH DM-RS in dB
0
(default) | real-valued scalar
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
EnablePTRS
— Enable PT-RS
0
or false
(default) | 1
or true
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
PTRS
— PUSCH PT-RS configuration parameters
default nrPUSCHPTRSConfig
object (default) | nrPUSCHPTRSConfig
object
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
.
PTRSPower
— Power scaling of PUSCH PT-RS in dB
0
(default) | real-valued scalar
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
Examples
Configure PUSCH for 5G Uplink Waveform Generation
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});
Configure Multiple PUSCH for 5G Uplink Waveform Generation
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 R2021aR2023b: Support for release 16 interlacing for operation in unlicensed spectrum (NR-U)
Use the Interlacing
, RBSetIndex
, and InterlaceIndex
properties to configure interlaced PUSCH
transmissions. Setting the Interlacing
property to
true
disables the PRBSet
and FrequencyHopping
properties.
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
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)