nrPUSCHIndices
Syntax
Description
[
returns ind
,info
,ptrsInd
] = nrPUSCHIndices(carrier
,pusch
)ind
in matrix form, which contains 1-based physical uplink
shared channel (PUSCH) resource element (RE) indices, as defined in TS 38.211 Sections
6.3.1.6 and 6.3.1.7 [1]. The number of columns in
ind
is equal to the number of configured antenna ports.
carrier
specifies the carrier configuration parameters for a specific
OFDM numerology and pusch
specifies the PUSCH configuration. When you
enable transform precoding, the output ind
contains the combined
locations of the data and the phase tracking reference signal (PT-RS). The function also
returns the structural information, info
, and PT-RS RE indices,
ptrsInd
. The output info
contains information
about the associated physical reference signals, bit capacity, and symbol capacity.
ptrsInd
is a matrix of PT-RS REs within the carrier resource grid.
When you enable transform precoding, the output ptrsInd
represents the
projections of PT-RS locations prior to transform precoding onto the carrier resource
grid.
Examples
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');
Input Arguments
carrier
— Carrier configuration parameters
nrCarrierConfig
object
Carrier configuration parameters for a specific OFDM numerology, specified as an nrCarrierConfig
object. This function uses only these properties of the nrCarrierConfig
object.
pusch
— PUSCH configuration parameters
nrPUSCHConfig
object
PUSCH configuration parameters for a specific OFDM numerology, specified as an
nrPUSCHConfig
object. This function uses only these properties of the nrPUSCHConfig
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)
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: 'IndexStyle','subscript','IndexBase','0based'
specifies the
RE indexing form and base, respectively, of the output.
IndexStyle
— RE indexing form
'index'
(default) | 'subscript'
RE indexing form, specified as one of these values:
'index'
— The indices are in linear index form.'subscript'
— The indices are in [subcarrier, symbol, antenna] subscript row form.
Data Types: char
| string
IndexBase
— RE indexing base
'1based'
(default) | '0based'
RE indexing base, specified as one of these values:
'1based'
— The index counting starts from 1.'0based'
— The index counting starts from 0.
Data Types: char
| string
IndexOrientation
— Resource element indexing orientation
'carrier'
(default) | 'bwp'
Resource element indexing orientation, specified as the comma-separated pair
consisting of 'IndexOrientation'
and one of these values:
'carrier'
— Indices are referenced with respect to the carrier grid.'bwp'
— Indices are referenced with respect to the BWP.
Dependencies
This property is applicable only when TransformPrecoding
property of nrPUSCHConfig
object is set to
0
.
Data Types: char
| string
Output Arguments
ind
— PUSCH RE indices
N-by-P matrix | M-by-3 matrix
PUSCH RE indices, returned as one of these values.
N-by-P matrix — The function returns this type of value when you set
'IndexStyle'
to'index'
. The number of columns depends on theTransmissionScheme
property of thenrPUSCHConfig
object and is returned as one of these values.Number of transmission layers — When the transmission scheme is noncodebook
Number of antenna ports configured — When the transmission scheme is codebook
M-by-3 matrix — The function returns this type of value when you set
'IndexStyle'
to'subscript'
. The matrix rows correspond to the [subcarrier, symbol, antenna] subscripts based on the number of subcarriers, OFDM symbols, and number of antennas, respectively.
Depending on the value of 'IndexBase'
, the function returns
either 1-based or 0-based indices. Depending on the value of
'IndexOrientation'
, the function returns either carrier-oriented
indices or BWP-oriented indices.
Data Types: uint32
info
— PUSCH resource information
structure
PUSCH resource information, returned as a structure containing these fields.
Field | Description |
---|---|
G | Bit capacity of the PUSCH. This value must be equal to the length of the codeword from the uplink shared channel (UL-SCH) transport channel. |
Gd | Number of REs per layer or port |
DMRSSymbolSet | The OFDM symbol locations in a slot containing the demodulation reference signal (DM-RS). The symbols are 0-based. |
NREPerPRB | Number of REs per PRB allocated to the PUSCH |
PTRSSymbolSet | The OFDM symbol locations in a slot containing the phase tracking reference signal (PT-RS). The symbols are 0-based. |
| The PRBs allocated for PUSCH within the BWP |
ptrsInd
— PT-RS RE indices
N-by-P matrix | M-by-3 matrix
PT-RS RE indices, returned as one of these values.
N-by-P matrix — The function returns this type of value when you set
'IndexStyle'
to'index'
. The number of columns depends on theTransmissionScheme
property of thenrPUSCHConfig
object and is returned as one of these values.Number of transmission layers — When the transmission scheme is noncodebook
Number of antenna ports configured — When the transmission scheme is codebook
M-by-3 matrix — The function returns this type of value when you set
'IndexStyle'
to'subscript'
. The matrix rows correspond to the [subcarrier, symbol, antenna] subscripts based on the number of subcarriers, OFDM symbols, and number of antennas, respectively.
Depending on the value of 'IndexBase'
, the function returns
either 1-based or 0-based indices. Depending on the value of
'IndexOrientation'
, the function returns either carrier-oriented
indices or BWP-oriented indices.
Data Types: uint32
References
[1] 3GPP TS 38.211. “NR; Physical channels and modulation.” 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 Modulation
, NumLayers
, and NumAntennaPorts
object properties of the
pusch
input add support to eight antenna ports, up to eight layers,
and two codewords in PUSCH transmissions.
R2023b: Configure intracell guard bands
Use the IntraCellGuardBands
object property of the carrier
input
to specify intracell guard bands.
R2023b: Support for release 16 interlacing for operation in unlicensed spectrum (NR-U)
Use the Interlacing
, RBSetIndex
, and InterlaceIndex
properties of the pusch
input
argument to configure interlaced PUSCH transmissions.
R2023b: Return information about PRBs
The info
output argument also returns the PRBs allocated for PUSCH
within the BWP.
R2023a: C/C++ code generation updates
For C/C++ code generation, the limitation to specify name-value arguments as compile-time constants has been removed.
See Also
Functions
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)