Main Content

nrOFDMModulate

Generate OFDM modulated waveform

Since R2020b

Description

[waveform,info] = nrOFDMModulate(carrier,grid) generates waveform, a time-domain waveform, by performing orthogonal frequency-division multiplexing (OFDM) modulation of carrier resource array grid for carrier configuration parameters carrier. The function also returns info, a structure containing OFDM information.

example

[waveform,info] = nrOFDMModulate(grid,scs,initialNSlot) modulates the carrier resource array with subcarrier spacing scs and initial slot number initialNSlot.

[waveform,info] = nrOFDMModulate(___,Name,Value) specifies options by using one or more name-value pair arguments in addition to the input arguments in any of the previous syntaxes.

example

Examples

collapse all

Generate a waveform by performing OFDM modulation of a resource array that contains sounding reference signals (SRSs). The resource array spans an entire frame.

Set carrier configuration parameters, specifying a subcarrier spacing of 30 kHz and 24 resource blocks (RBs) in the carrier resource array.

carrier = nrCarrierConfig('SubcarrierSpacing',30,'NSizeGrid',24);

Configure SRS parameters, setting the slot periodicity to 2 and the offset to zero.

srs = nrSRSConfig('SRSPeriod',[2 0]);

Get OFDM information for the specified carrier configuration.

info = nrOFDMInfo(carrier);

Produce the frame resource array by creating and concatenating individual slot resource arrays.

grid = [];
for nslot = 0:(info.SlotsPerFrame - 1)
    carrier.NSlot = nslot;
    slotGrid = nrResourceGrid(carrier);
    ind = nrSRSIndices(carrier,srs);
    sym = nrSRS(carrier,srs);
    slotGrid(ind) = sym;
    grid = [grid slotGrid];
end

Perform OFDM modulation on the resource array for the specified carrier configuration.

[waveform,info] = nrOFDMModulate(carrier,grid);

Generate a waveform by performing OFDM modulation of a resource array that contains physical downlink shared channel (PDSCH) demodulation reference signal (DM-RS) symbols.

Set carrier configuration parameters, specifying a subcarrier spacing of 60 kHz.

scs = 60;
carrier = nrCarrierConfig('SubcarrierSpacing',scs);

Generate PDSCH DM-RS symbols and indices.

p = 2;
pdsch = nrPDSCHConfig('NumLayers',p);
sym = nrPDSCHDMRS(carrier,pdsch);
ind = nrPDSCHDMRSIndices(carrier,pdsch);

Create a carrier resource array containing the PDSCH DM-RS symbols.

grid = nrResourceGrid(carrier,p);
grid(ind) = sym;

Generate an OFDM modulated waveform, specifying the subcarrier spacing, initial slot number, and cyclic prefix type. Display the OFDM information.

initialNSlot = carrier.NSlot;
cpl = 'extended';
[waveform,info] = nrOFDMModulate(grid,scs,initialNSlot,'CyclicPrefix',cpl);
disp(info)
                   Nfft: 1024
             SampleRate: 61440000
    CyclicPrefixLengths: [256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256 256]
          SymbolLengths: [1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 ... ] (1x48 double)
              Windowing: 36
           SymbolPhases: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
         SymbolsPerSlot: 12
       SlotsPerSubframe: 4
          SlotsPerFrame: 40

Generate a waveform by performing OFDM modulation of a resource array that contains PDSCH DM-RS symbols.

Set carrier configuration parameters, specifying 106 RBs in the carrier resource array.

carrier = nrCarrierConfig('NSizeGrid',106);

Configure PDSCH and generate the corresponding symbols and indices.

p = 4;
pdsch = nrPDSCHConfig('NumLayers',p);
sym = nrPDSCHDMRS(carrier,pdsch);
ind = nrPDSCHDMRSIndices(carrier,pdsch);

Create a carrier resource array and map the PDSCH symbols.

grid = nrResourceGrid(carrier,p,'OutputDataType','single');
grid(ind) = sym;

Generate OFDM modulated waveform, specifying the sample rate.

sr = 1e8;
[waveform,info] = nrOFDMModulate(carrier,grid,'SampleRate',sr);

Input Arguments

collapse all

Carrier configuration parameters for a specific OFDM numerology, specified as an nrCarrierConfig object. Only these object properties are relevant for this function.

Carrier resource array, specified as a complex-valued array of size K-by-N-by-P.

  • K is the number of subcarriers.

  • N is the number of OFDM symbols.

  • P is the number of transmit antennas.

Data Types: single | double
Complex Number Support: Yes

Subcarrier spacing in kHz, specified as 15, 30, 60, 120, 240, 480, or 960.

Data Types: double

Initial slot number, in 0-based form, specified as a nonnegative integer. The function selects the appropriate cyclic prefix lengths for OFDM modulation by using the value of initialNSlot mod S, where S is the number of slots per subframe.

Data Types: double

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: 'CyclicPrefix','extended' specifies extended cyclic prefix length.

Cyclic prefix length, specified as the comma-separated pair consisting of 'CyclicPrefix' and one of these values:

  • 'normal' — Use this value to specify normal cyclic prefix. This option corresponds to 14 OFDM symbols in a slot.

  • 'extended' — Use this value to specify extended cyclic prefix. This option corresponds to 12 OFDM symbols in a slot. For the numerologies specified in TS 38.211 Section 4.2, the extended cyclic prefix length only applies to 60 kHz subcarrier spacing.

Note

If you specify the carrier input, use the CyclicPrefix property of the carrier input to specify the cyclic prefix length. You cannot use this name-value pair argument together with the carrier input.

Data Types: char | string

Number of fast Fourier transform (FFT) points, specified as the comma-separated pair consisting of 'Nfft' and a nonnegative integer greater than 127 or []. The value you specify must result in integer-valued cyclic prefix lengths and a maximum occupancy of 100%. The occupancy is defined as the value of (12 × NRB)/Nfft, where NRB is the number of resource blocks.

If you do not specify this input, or if you specify 'Nfft',[], the function sets an integer value greater than 127 as a default value for this input. The actual default value depends on other input values.

  • If you do not specify the SampleRate input, or if you specify 'SampleRate',[], the function sets Nfft satisfying these conditions.

    • Nfft is an integer power of 2.

    • Nfft results in a maximum occupancy of 85%.

  • If you specify the SampleRate input, the function sets Nfft satisfying these conditions.

    • Nfft results in integer-valued cyclic prefix lengths.

    • Nfft maximises the value of gcd (Nfft × SCS, SampleRate), where SCS is specified by the carrier.SubcarrierSpacing property or the scs input.

For more information, see Configure OFDM Sample Rate and FFT Size.

Data Types: double

Waveform sample rate, specified as the comma-separated pair consisting of 'SampleRate' and either a positive scalar or [].

If you do not specify this input, or if you specify 'SampleRate',[], then the function sets this input to the value of Nfft × SCS.

  • Nfft is the value of the 'Nfft' input.

  • SCS is the subcarrier spacing. Depending on the function syntax you use, SCS is specified by the carrier.SubcarrierSpacing property or the scs input.

For more information, see Configure OFDM Sample Rate and FFT Size.

Data Types: double

Number of time-domain samples over which the function applies raised cosine windowing and overlapping of OFDM symbols, specified as the comma-separated pair consisting of 'Windowing' and either a nonnegative integer or [].

If you do not specify this input, or if you specify 'Windowing',[], the function sets this input to the maximum value E that does not impact error vector magnitude (EVM) tests, as specified in TS 38.101-1 Annexes F.5.3 and F.5.4, TS 38.101-2 Annexes F.5.3 and F.5.4, and TS 38.104 Annexes B.5.2 and C.5.2. E is equal to value of floor((NCPW) × info.NfftNFFT, nominal), where NCP, W, and NFFT, nominal are the values in the table columns labeled "Cyclic prefix length", "EVM window length", and "FFT size", respectively.

Data Types: double

Carrier frequency in Hz, specified as the comma-separated pair consisting of 'CarrierFrequency' and a real number. This input corresponds to f0, defined in TS 38.211 Section 5.4.

Data Types: double

Output Arguments

collapse all

OFDM modulated waveform, returned as a complex-valued matrix of size T-by-P.

  • T is the number of time-domain samples in the waveform.

  • P is the number of transmit antennas.

Data Types: single | double
Complex Number Support: Yes

OFDM information, returned as a structure containing these fields.

FieldsValuesDescription
NfftPositive integerNumber of FFT points
SampleRatePositive scalarWaveform sample rate
CyclicPrefixLengths1-by-N vector of positive integers, where N is the number of OFDM symbols in a subframe.Cyclic prefix lengths of each OFDM symbol, in samples
SymbolLengths1-by-N vector of positive integersOFDM symbol lengths, in samples
WindowingPositive integerNumber of time-domain samples over which the function applies raised cosine windowing and overlapping of OFDM symbols
SymbolPhases1-by-N vector of scalars in the interval [-π, π]

Phase compensation of each OFDM symbol, in radians

The function applies this compensation during modulation to account for phase terms per OFDM symbol, as specified in TS 38.211 Section 5.4 [4]. The nrOFDMDemodulate function inverts this phase compensation during demodulation.

SymbolsPerSlotPositive integerNumber of OFDM symbols in a slot
SlotsPerSubframePositive integerNumber of slots in a 1 ms subframe
SlotsPerFramePositive integerNumber of slots in a 10 ms frame

Note

The number of samples in the CyclicPrefixLengths, SymbolLengths, and Windowing structure fields apply to the sample rate of the IFFT of size Nfft that is used during OFDM symbol construction. However, the IFFT sample rate can differ from the waveform sample rate when the SampleRate name-value argument specifies an arbitrary sample rate.

Data Types: struct

References

[1] 3GPP TS 38.101-1. “NR; User Equipment (UE) radio transmission and reception; Part 1: Range 1 Standalone.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

[2] 3GPP TS 38.101-2. “NR; User Equipment (UE) radio transmission and reception; Part 2: Range 2 Standalone.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

[3] 3GPP TS 38.104. “NR; Base Station (BS) radio transmission and reception.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

[4] 3GPP TS 38.211. “NR; Physical channels and modulation.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

Extended Capabilities

Version History

Introduced in R2020b

expand all