Engee documentation

EngeeComms.OFDMDemodulatorBaseband

Demodulation using the OFDM method.

Library

EngeeComms

Block

OFDM Demodulator

Description

System object EngeeComms.OFDMDemodulatorBaseband demodulates the input signal using the orthogonal frequency division of channels with multiplexing (OFDM) in the time domain and outputs subcarriers based on OFDM parameters.

For more information, see OFDM Modulator. The output is a broadband representation of the input signal for the system object. EngeeComms.OFDMModulatorBaseband.

To demodulate the OFDM signal, follow these steps:

  1. Create an object EngeeComms.OFDMDemodulatorBaseband and set its properties.

  2. Call the object with arguments as if it were a function. To learn more about how system objects work, see Engee System Objects.

Syntax

Creation

  • ofdmDemod = EngeeComms.OFDMDemodulatorBasband() — creates an OFDM demodulator that demodulates the input signal using the orthogonal frequency division demodulation method, with default property values.

    Example:

    ofdmDemod = EngeeComms.OFDMDemodulatorBaseband()
  • ofdmDemod = EngeeComms.OFDMDemodulatorBaseband(Name=Value) — creates an OFDM demodulator with the specified properties in the form of a pair Name=Value, where Name — the name of the property, and Value — the appropriate value. You can specify multiple pairs «name-value» the order of the pairs does not matter. Unspecified properties retain their default values.

    Example:

    ofdmDemod = EngeeComms.OFDMDemodulatorBaseband(FFTLength=64)

Using

  • Y = ofdmDemod(X) — demodulates the time domain input signal using the OFDM method and returns the demodulated OFDM baseband signal.

  • [Y,pilot] = ofdmDemod(X) — divides the pilot signal into subcarriers specified in the value of the PilotCarrierIndices property. To use this syntax, set the PilotOutputPort property to true.

Arguments

Input arguments

X — OFDM-Modulated broadband input signal

+ the matrix

Details

OFDM is a modulated broadband signal defined as a matrix

  • is the oversampling coefficient determined by the OversamplingFactor property.

  • — the length of the cyclic prefix for all characters.

    • — the length of the cyclic prefix, determined by the CyclicPrefixLength property.

    • If CyclicPrefixLength is a scalar, .

    • If CyclicPrefixLength is a vector of strings, .

  • — the number of subcarriers determined by the FFTLength parameter.

  • — the number of characters defined by the NumberOfOFDMSymbols parameter.

  • — the number of receiving antennas, determined by the parameter NumberOfReceiveAntennas.

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Bool

Support for complex numbers

Yes

Output arguments

Y — demodulated output signal

+ the matrix | 3D array

Details

Demodulated output signal returned as a matrix or array on on the same type of data as the input signal. The output signal is reduced to a matrix if equally 1.

  • — the number of subcarriers of data.

  • — the number of characters defined by the NumSymbols. property.

  • — the number of receiving antennas, determined by the numreceiveantennas property.

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Bool

Support for complex numbers

Yes

pilot — pilot signal

+ 3D array | 4D array

Details

A pilot signal returned with the same data type as the input signal. Set as:

  • 3D array size on on when the PilotCarrierIndices property is a vector or a matrix.

  • 4D array size on on on when the PilotCarrierIndices property is a three-dimensional array.

where: * — the number of pilot subcarriers in each symbol, determined by size(PilotCarrierIndices,1). * — the number of characters defined by the NumSymbols property. * — the number of receiving antennas, determined by the numreceiveantennas property. * – the number of transmitting antennas.

Dependencies

To use this argument, set the PilotOutputPort property to true.

Features

FFTLength — number of FFT points

+ 64 (default) | a positive integer

Details

The number of fast Fourier transform (FFT) points, specified as a positive integer scalar. The length of the FFT should be and is equivalent to the number of subcarriers.

NumGuardBandCarriers — the number of subcarriers allocated to the left and right guard bands

+ [6; 5] (default) | a 2-by-1 integer vector

Details

The number of subcarriers allocated for the left and right protective strips, set as an integer vector of 2 by 1.

The number of subcarriers of the left and right protective strips, , must be within , where — the total number of subcarriers in the OFDM signal, determined by the FFTLength property.

RemoveDCCarrier — exclude or enable a zero-frequency subcarrier

+ false or 0 (default) | true or 1

Details

Option to remove the zero DC subcarrier, set as numeric or logical 0 (false) or 1 (true). The zero-frequency subcarrier is located in the center of the frequency band and has an index value:

  • If the value is even number.

  • If the value is the odd one.

— this is the total number of subcarriers in the OFDM signal, determined by the FFTLength property.

PilotOutputPort — output of pilot subcarriers

+ false or 0 (default) | true or 1

Details

Pilot subcarrier output option, set as numeric or logical 0 (false) or 1 (true).

  • 0 (false) — pilot information may be present, but remains embedded in the output.

  • 1 (true) — the block separates subcarriers specified by the PilotSubcarrierIndices property from the output data and outputs a demodulated pilot signal in the pilot argument.

PilotCarrierIndices — location indexes of pilot subcarriers

+ [12; 26; 40; 54] ( by default) | column vector | the matrix | 3D array

Details

The location indexes of the pilot subcarriers, set as a column vector, matrix, or 3D array with integer values of elements in the range

,

where

  • — the total number of subcarriers in the OFDM signal, determined by the FFTLength property.

  • and — the left and right protective bands specified by the value of the NumberOfGuardBands property.

Pilot carrier indexes you can assign the same or different subcarriers for each symbol and for all transmitting antennas .

  • If the pilot indexes are the same for each symbol and the transmitting antenna, the parameter has the dimension on 1.

  • If the pilot indexes differ in characters, the parameter has the dimension on .

  • If the received signal is assigned a single symbol on several transmitting antennas, then the parameter has the dimension on 1 on .

  • If the indexes differ in the number of characters and transmitting antennas, the parameter has the dimension on on .

To minimize interference between transmissions to more than one transmitting antenna, the pilot indexes per symbol must be mutually different for all antennas.

Dependencies

To use this property, set the PilotOutputPort property to 1.

CyclicPrefixLength — length of the cyclic prefix

+ 16 (default) | a positive integer | vector string

Details

The length of the cyclic prefix for each OFDM character is set as a positive integer scalar or a string vector containing the number of OFDM character elements. When specifying the length of the cyclic prefix as:

  • Scalar — the length of the cyclic prefix is the same for all symbols across all antennas.

  • Vector string — the length of the cyclic prefix may vary between characters, but it does not vary between antennas.

OversamplingFactor — oversampling coefficient

+ 1 (default) | a positive integer

Details

The oversampling coefficient, set as a positive scalar. The oversampling coefficient must satisfy these constraints.:

  • The product of OversamplingFactor by FFTLength must be an integer.

  • The product of OversamplingFactor by CyclicPrefixLength must be an integer.

If OversamplingFactor is set as an irrational number, specify a fractional value. For example, with FFTLength 12 and OversamplingFactor 4/3 their product is equal to an integer 16. However, the rounding 4/3 before 1,333 when installing OversamplingFactor, it results in a non-integer product 15,9960, which leads to an error.
Типы данных

Float64

NumSymbols — number of OFDM characters

+ 1 (default) | a positive integer

Details

The number of OFDM symbols in the time-frequency grid, specified as a positive integer scalar.

Numreceiveantennas — number of receiving antennas

+ 1 (default) | a positive integer

Details

The number of receiving antennas for receiving the OFDM-modulated signal is set as a positive integer scalar less than or equal to 64.

Methods

Common to all system objects

step!

Run the system object operation algorithm

release!

Allow changing the value of a system object property

reset!

Resetting the internal states of a system object

Additional Info

Algorithms

OFDM demodulation

The orthogonal frequency division multiplexing (OFDM) method demodulates the OFDM input signal using the FFT operation, resulting in N parallel data streams.

The figure shows an OFDM demodulator consisting of a bank of N correlators with one correlator assigned to each OFDM subcarrier. A bank of correlators is followed by a parallel-sequential transformation.

ofdm demodulator 1

Subcarrier distribution, guard bands and guard intervals

Individual OFDM subcarriers are allocated as subcarriers of data, pilot or null.

As shown here, subcarriers are designated as subcarriers of data, DC, pilot, or protective band.

ofdm demodulator 2

  • Subcarriers of data transmit user data.

  • The pilot subcarriers are designed to evaluate the channel.

  • Zero-frequency subcarriers do not transmit any data. Subcarriers without data provide zero frequency to the central subcarrier and serve as buffers between OFDM resource blocks.

    • The subcarrier of the zero frequency is the center of the frequency band with the index

      If the value is even number.

      If the value is the odd one.

      — this is the total number of subcarriers in the OFDM signal.

    • The protection bands serve as a buffer between adjacent signals in adjacent frequency bands to reduce interference caused by spectral leakage.

Zero-frequency subcarriers allow you to simulate protective bands and the location of zero subcarriers for specific standards, such as various 802.11, LTE, WiMAX formats, or for custom distributions. The location of the zero subcarriers can be determined by assigning a vector of zero subcarrier indexes.

Similar to guard bands, guard intervals protect the integrity of transmitted signals in OFDM by reducing inter-character interference.

The purpose of protective intervals is similar to the purpose of protective strips. You can simulate guard intervals to ensure time separation between OFDM symbols. Guard intervals help to maintain inter-character orthogonality after the signal passes through channels with time variance. Guard intervals are created using cyclic prefixes. Inserting a cyclic prefix copies the last OFDM as the first part of the OFDM symbol.

ofdm demodulator 3

OFDM benefits from using cyclic prefix insertion as long as the time variance does not exceed the duration of the cyclic prefix.

Inserting a cyclic prefix results in a fractional decrease in user data throughput, since the cyclic prefix takes up bandwidth that could have been used for data transmission.

Literature

  1. Dahlman, E., S. Parkvall, and J. Skold. "4G LTE/LTE-Advanced for Mobile Broadband." London: Elsevier Ltd., 2011.

  2. Andrews, J. G., A. Ghosh, and R. Muhamed. "Fundamentals of WiMAX. Upper Saddle River," NJ: Prentice Hall, 2007.

  3. IEEE Standard 802.16-2017. "Part 16: Air Interface for Broadband Wireless Access Systems." March 2018.