Generate PUSCH DM-RS symbols
returns a matrix containing demodulation reference signal (DM-RS) symbols of physical uplink
shared channel (PUSCH), as defined in TS 38.211 Section 6.4.1.1.1 [1]. sym
= nrPUSCHDMRS(carrier
,pusch
)carrier
specifies the carrier configuration parameters for a specific OFDM numerology.
pusch
specifies the PUSCH configuration parameters.
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 physical uplink shared channel (PUSCH) configuration object with specified properties. When transform precoding is set to 0, the waveform type is cyclic-prefix orthogonal frequency division multiplexing (CP-OFDM).
pusch = nrPUSCHConfig;
pusch.TransformPrecoding = 0;
pusch.TransmissionScheme = 'codebook';
pusch.NumAntennaPorts = 4;
pusch.TPMI = 0;
Configure PUSCH demodulation reference signal (DM-RS) with specified parameters.
pusch.DMRS.DMRSAdditionalPosition = 1; pusch.DMRS.DMRSTypeAPosition = 2; pusch.DMRS.DMRSPortSet = 2; pusch.DMRS.NIDNSCID = 10; pusch.DMRS.NSCID = 1;
Generate DM-RS symbols associated with PUSCH of single
data type.
sym = nrPUSCHDMRS(carrier,pusch,'OutputDataType','single')
sym = 624x4 single matrix
-0.3536 - 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.3536 - 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
-0.3536 + 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
-0.3536 - 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
-0.3536 + 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.3536 - 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
-0.3536 - 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.3536 + 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.3536 - 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.3536 - 0.3536i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
⋮
Create a carrier configuration with 30 kHz subcarrier spacing and 5 MHz transmission bandwidth.
carrier = nrCarrierConfig; carrier.SubcarrierSpacing = 30; carrier.NSizeGrid = 11;
Create a physical uplink shared channel (PUSCH) configuration object with specified properties. When transform precoding is set to 1, the waveform type is discrete fourier transform spread orthogonal frequency division multiplexing (DFT-s-OFDM).
pusch = nrPUSCHConfig;
pusch.NSizeBWP = 9;
pusch.NStartBWP = 1;
pusch.PRBSet = 0:3;
pusch.TransformPrecoding = 1;
pusch.FrequencyHopping = 'intraSlot';
pusch.SecondHopStartPRB = 5;
Create a PUSCH demodulation reference signal (DM-RS) object with specified properties.
dmrs = nrPUSCHDMRSConfig; dmrs.DMRSAdditionalPosition = 1; dmrs.DMRSTypeAPosition = 2; dmrs.DMRSPortSet = 3; dmrs.GroupHopping = 1; dmrs.SequenceHopping = 0; dmrs.NRSID = 10;
Assign the PUSCH DM-RS configuration object to DMRS property of PUSCH configuration object.
pusch.DMRS = dmrs;
Generate PUSCH DM-RS symbols and indices for the specified carrier, PUSCH configuration, and output formatting name-value
pair argument.
sym = nrPUSCHDMRS(carrier,pusch,'OutputDataType','single')
sym = 96x1 single column vector
-0.7071 - 0.7071i
-0.7071 - 0.7071i
-0.7071 - 0.7071i
0.7071 - 0.7071i
-0.7071 - 0.7071i
-0.7071 - 0.7071i
-0.7071 - 0.7071i
0.7071 - 0.7071i
0.7071 + 0.7071i
-0.7071 + 0.7071i
⋮
ind = nrPUSCHDMRSIndices(carrier,pusch,'IndexBase','0based','IndexOrientation','bwp')
ind = 96x1 uint32 column vector
217
219
221
223
225
227
229
231
233
235
⋮
Create a bandwidth part (BWP) grid, and then map the DM-RS symbols on the grid.
bwp = complex(zeros([pusch.NSizeBWP*12 carrier.SymbolsPerSlot pusch.NumLayers]));
bwp(ind+1) = sym; % Map the DM-RS symbols
Map the BWP to the carrier resource grid, and then display the carrier grid.
grid = complex(zeros([carrier.NSizeGrid*12 carrier.SymbolsPerSlot pusch.NumLayers])); % Create carrier resource grid offset = pusch.NStartBWP-carrier.NStartGrid; % BWP start location in the carrier grid grid(offset*12+1:(offset+pusch.NSizeBWP)*12,:,:) = bwp; imagesc(abs(grid(:,:,1))); axis xy; xlabel('OFDM Symbols'); ylabel('Subcarriers'); title('PUSCH DM-RS Resource Elements in the Carrier Resource Grid');
carrier
— Carrier configuration parametersnrCarrierConfig
objectCarrier configuration parameters for a specific OFDM numerology, specified as an nrCarrierConfig
object. This function uses only these properties of the nrCarrierConfig
object.
Property Field | Values | Description |
---|---|---|
NCellID | 1 (default), integer from 0 to 1007 | Physical layer cell identity |
SubcarrierSpacing | 15 (default), 30, 60, 120, 240 | Subcarrier spacing in kHz |
CyclicPrefix | 'normal' (default), 'extended' | Cyclic prefix length, specified as one of these options.
For the numerologies specified in TS 38.211 Section 4.2, extended cyclic prefix length applies only for 60 kHz subcarrier spacing. |
NSizeGrid | 52 (default), integer from 1 to 275 | Number of resource blocks in the carrier resource grid |
NStartGrid | 0 (default), integer from 0 to 2199 | Start of carrier resource grid relative to common resource block 0 (CRB 0) |
NSlot | 0 (default), nonnegative integer scalar | Slot number. You can set |
pusch
— PUSCH configuration parametersnrPUSCHConfig
objectPUSCH configuration parameters, specified as an nrPUSCHConfig
object. This
function uses only these properties of the nrPUSCHConfig
object.
Property Field | Values | Description |
---|---|---|
NSizeBWP |
| Size of the bandwidth part (BWP) in terms of number of physical
resource blocks (PRBs). The default value of |
NStartBWP |
| Starting PRB index of BWP relative to CRB 0. The default value of
|
NumLayers | 1 (default), integer from 1 to 4 | Number of transmission layers |
MappingType | 'A' (default), 'B' | Mapping type of PUSCH |
SymbolAllocation | [0 14] (default), two-element vector of nonnegative integers | OFDM symbols allocated for PUSCH |
PRBSet | [0:51] (default), vector of nonnegative integers from 0 to 274 | PRBs allocated for PUSCH within the BWP |
TransformPrecoding | 0 (default), 1 | Transform precoding flag, specified as one of these values.
|
TransmissionScheme |
| PUSCH transmission scheme |
TPMI | 0 (default), integer from 0 to 27 | Transmitted precoding matrix indicator. This property is applicable
when |
NumAntennaPorts | 1 (default), 2, or 4 | Number of antenna ports. The value must be greater than or equal to
|
FrequencyHopping |
| Frequency hopping configuration for PUSCH |
SecondHopStartPRB | 1 (default), integer from 0 to 274 | Starting PRB index of second hop relative to BWP |
DMRS |
|
For more information, see |
datatype
— Data type for generated DM-RS symbols'double'
(default) | 'single'
Data type for the generated DM-RS symbols, specified as 'double'
or 'single'
.
Data Types: char
| string
sym
— DM-RS symbolsDM-RS symbols, returned as a complex matrix. The number of columns correspond to the number of antenna ports configured.
Data Types: single
| double
Complex Number Support: Yes
[1] 3GPP TS 38.211. “NR; Physical channels and modulation.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
Usage notes and limitations:
Names
and values in name-value pair arguments must be compile-time constants. For example, to specify
single
data type for the output, include
{coder.Constant('OutputDataType'),coder.Constant('single')}
in the
-args
value of the codegen
function. For more
information, see the coder.Constant
(MATLAB Coder) class.
You have a modified version of this example. Do you want to open this example with your edits?