nrPUSCHConfig
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
creates a PUSCH
configuration object with default properties.pusch
= nrPUSCHConfig
specifies properties using one or more name-value pair arguments. Enclose each property in
quotes. For example, 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
NSizeBWP
— Number of PRBs in BWP
[]
(default) | integer from 1 to 275
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
NStartBWP
— Starting PRB index of BWP relative to CRB 0
[]
(default) | integer from 0 to 2473
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
— Modulation scheme
'QPSK'
(default) | 'pi/2-BPSK'
| '16QAM'
| '64QAM'
| '256QAM'
| string scalar | string array (since R2024a) | cell array of character vectors (since R2024a)
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
NumLayers
— Number of transmission layers
1
(default) | integer from 1 to 8
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
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
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
NumAntennaPorts
— Number of antenna ports
1
(default) | 2
| 4
| 8
(since R2024a)
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
TPMI
— Transmitted precoding matrix indicator
0
(default) | integer from 0 to 304
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
CodebookType
— Codebook type
'codebook1_ng1n4n1'
(default) | 'codebook1_ng1n2n2'
| 'codebook2'
| 'codebook3'
| 'codebook4'
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
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
UCI on PUSCH Configuration
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 entry from the Table 9.3-1 of TS 38.213.
Data Types: double
BetaOffsetCSI1
— Beta offset factor of CSI part 1
6.25
(default) | positive real-valued scalar
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
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 entry from the Table 9.3-2 of TS 38.213.
Data Types: 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
nrPUSCHDMRSConfig
object with default
properties (default) | nrPUSCHDMRSConfig
object
PUSCH DM-RS configuration parameters, specified as an nrPUSCHDMRSConfig
configuration object.
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 phase tracking reference signal (PT-RS) configuration, specified as an
nrPUSCHPTRSConfig
configuration object.
Read-Only Properties
NumCodewords
— Number of codewords
1
| 2
Since R2024a
This property is read-only.
Number of codewords, returned as one of these values:
1
— IfNumLayers
is an integer from 1 to 42
— IfNumLayers
is an integer from 5 to 8
Data Types: double
Examples
Create PUSCH Configuration Object
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: [1x1 nrPUSCHDMRSConfig] EnablePTRS: 1 PTRS: [1x1 nrPUSCHPTRSConfig] Read-only properties: NumCodewords: 1
Generate PUSCH Indices and PT-RS Indices for Codebook-Based Transmission
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]
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 = 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
⋮
Generate PUSCH Symbols and Indices
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]
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 = 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™.
Version History
Introduced in R2020aR2024a: Release 18 support for eight antenna ports, up to eight layers, and two codewords
The 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 |
R2023b: 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.
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)