Contenido principal

ofdmPilotConfig

Specify pilot locations and pilot symbols for OFDM systems

Since R2026a

Description

The ofdmPilotConfig object specifies the pilot location and pilot symbol configuration for OFDM systems. Use this object to construct pilot symbol patterns for user-defined OFDM systems and provide pilot symbol information to the ofdmChannelEstimate function.

Creation

Description

pilotcfg = ofdmPilotConfig creates an ofdmPiltoConfig object that specifies the pilot locations and the pilot symbol configuration for a MIMO-OFDM system.

example

pilotcfg = ofdmPilotConfig(Name=Value) sets one or more properties using name-value arguments. For example, FFTLength=64 sets the total number of subcarriers to 64.

example

pilotcfg = ofdmPilotConfig(fftlen,numGuardBandCarriers,numSym,numTxStreams) configures the output object by setting the:

The syntax also sets the StreamGroups, PilotLocations, and PilotSymbols property using the given input values. For this syntax, the number of transmit streams must be a nonnegative integer power of 2. For more information, see Computing Pilot Cluster Locations from FFT Length and Transmit Streams and Choosing Pilot Symbols for Pilot Locations.

example

Properties

expand all

FFT length for OFDM symbols, specified as a real positive integer scalar.

Data Types: double

Number of subcarriers allocated to left and right guard bands, specified as 2-by-1 integer vector. The sum of the two numbers must be less than the FFTLength property.

The first element is the lower guard band and the second element is the upper guard band.

Data Types: double

Number of OFDM symbols in the OFDM grid, specified as a positive integer scalar.

The default value 14 means that the OFDM frame has 14 OFDM symbols.

Data Types: double

Number of transmit streams, specified as a positive integer scalar. If the value is equal to 2, the OFDM system has two transmit streams.

Data Types: double

Streams that transmit at the same OFDM subcarriers and the same OFDM symbols, specified as a nonempty cell array of vectors. Each transmit stream must appear in exactly one group and you must include all streams.

Three transmit streams can be divided into two stream groups {[1 2], [3]}. Streams 1 and 2 transmit on the same subcarriers and symbols. These streams must be orthogonal to avoid interference with each other. Stream 3 is separate

Data Types: double

Pilot locations for each pilot cluster in each stream group, specified as a nonempty cell array with each cell that contains a 3-D array defining pilot clusters for one stream group. To specify pilot locations based on rectangular patterns, use the ofdmPilotGrid function.

  • The number of elements in PilotLocations must be equal to the number of elements in StreamGroups.

  • For each stream group g, the PilotLocations{g} is an M(g)-by-2-by-N(g) array where:

    • M(g) is the number of pilot symbols per cluster for stream group g. This value must be greater than or equal to the number of streams groups.

    • 2 is the number of columns.

      • Column 1 = subcarrier index

      • Column 2 = OFDM symbol index

    • N(g) is the number of cluster for group g.

  • For the g-th stream group:

    • PilotLocations{g}(:,1,:) — First column of the 3-D array stores the subcarrier indices of all pilots.

    • PilotLocations{g}(:,2,:) — Second column of the 3-D array stores the symbol indices of all pilots.

  • Subcarrier indices are integers in the range NumGuardBandCarriers(1) + 1:FFTLengthNumGuardBandCarrier(2).

  • Symbol indices are integers in the range 1:NumSymbols.

By default, the PilotLocations property places pilot symbols in two OFDM symbols and spreads them evenly across subcarriers. 7:4:59 sets the subcarrier indices. Pilot symbols are placed at subcarriers 7,11,15,…,59, spaced by 4 subcarriers. ones(1,14) are the pilot symbol indices for the first set. All these pilot symbols are in OFDM symbol 1. 14*ones(1,14) are the symbol indices for the second set. All these pilots symbols are in OFDM symbol 14. reshape(...,1,2,28) organizes the values into a 3-D array of one cluster group, two columns (subcarrier index and symbol index), and 28 pilot positions

Data Types: cell

Pilot symbol values for each stream group, specified as a nonempty cell array of 3-D array of complex numbers.

  • The number of elements in the pilot symbols must be equal to the number of elements in the stream groups.

  • In the 3-D array:

    • size(PilotLocations{g},1) — The first dimension is the number of pilot symbols per cluster. This value must match the number of pilot positions in PilotLocations{g}.

    • size(PilotSymbols{g},2) — The second dimension is the number of streams in the group. Each pilot position has only one value for each stream.

    • size(PilotSymbols{g},3) — The third dimension is the number of clusters. This value must match the number of clusters in PilotLocations{g}.

  • For each cluster n, the matrix of pilot symbols (PilotSymbols{g}(:,:,n)) must have full rank. Full rank means that pilots for all streams in that cluster must be orthogonal, so the receiver can separate them when estimating the channel.

  • PilotSymbols{g}(m,:,n) —These values are the pilot symbol values for the m-th pilot position in the n-th cluster for all streams in the group g .

In the default value, {reshape(pskmod(comm.PNSequence(SamplesPerFrame=56).step(),4,pi/4,'InputType','bit'),1,1,28)} shows one stream group with 28 clusters and 1 pilot symbol per cluster. These 28 pilot symbols are derived from QPSK-modulated binary inputs.

Output Arguments

expand all

Pilot configuration object for an OFDM system, returned as an ofdmPilotConfig object.

Object Functions

expand all

validateValidate contents of ofdmPilotConfig object
pilotSignalReturns pilot symbols and linear indices of pilot locations
plotPlot pilot locations in 3-D

Examples

collapse all

  1. Specify an OFDM pilot configuration using default values.

    pilotcfg = ofdmPilotConfig
    
    pilotcfg = 
    
      ofdmPilotConfig with properties:
    
                   FFTLength: 64
        NumGuardBandCarriers: [2×1 double]
                  NumSymbols: 14
          NumTransmitStreams: 1
                StreamGroups: {[1]}
              PilotLocations: {[1×2×28 double]}
                PilotSymbols: {[1×1×28 double]}
  2. Plot the configuration.

    plot(pilotcfg)
    

  1. Create an OFDM system with 64-subcarriers and two transmit streams.

    fftlen = 64;                % FFT length (number of subcarriers)
    numGuardCarriers = [6; 5];  % Number of guard band carriers (lower; upper)
    numSym = 14;                % Number of OFDM symbols
    numTxStreams = 2;    % Number of transmit streams
    pilotcfg = ofdmPilotConfig(fftlen,numGuardCarriers,numSym,numTxStreams)
    
    pilotcfg = 
    
      ofdmPilotConfig with properties:
    
                   FFTLength: 64
        NumGuardBandCarriers: [2×1 double]
                  NumSymbols: 14
          NumTransmitStreams: 2
                StreamGroups: {[1 2]}
              PilotLocations: {[2×2×52 double]}
                PilotSymbols: {[2×2×52 double]}
    
    
    • StreamGroups: {[1 2]} value shows that both streams are grouped together. At each pilot location, both streams transmit pilot symbols at the same time and frequency, but with different orthogonal values.

    • PilotLocations: {[2-by-2-by-52 double]} is a 3-D array showing the placement of pilot symbols. First dimension is the number pilot locations per cluster. Each location is a [subcarrier;symbol} pair. Second dimension is always 2 representing a two-element coordinate where one coordinate is the subcarrier index and the other coordinate is OFDM the symbol index. Third dimension is the number of clusters.

    • PilotSymbols: 2-by-2-by-52 double is a 3-D array of the actual pilot values. First dimension is the number of pilot symbols per cluster. Second dimension is the number of streams per group. Third dimension is the number of clusters. Each cluster has a 2-by-2 matrix of complex pilot values. Each column corresponds to a stream, and each row to a pilot in the cluster. These are chosen so that, in each cluster, the pilots sent by the two streams are orthogonal.

  2. Plot the pilot symbol locations.

    plot(pilotcfg)
    

    This 3-D plot shows the placement of pilot symbols for the MIMO-OFDM system.

    • Subcarrier Indices: Represents the frequency bins (subcarriers) used in the MIMO-OFDM system. Each tick is a subcarrier index.

    • OFDM Symbols: Represents the time dimension where each tick is an OFDM symbol index from 1 to 14.

    • Transmit Streams: Represents the transmit stream (or antenna). There are two streams, labeled 1 and 2.

    • Each colored cube represents a single pilot symbol, a known complex value transmitted at a specific subcarrier (frequency), OFDM symbol (time), and transmit stream (spatial layer).

    • Each color corresponds to a cluster of pilots. All cubes of the same color belong to the same cluster, which means they are used together for channel estimation at the receiver.

    • The cubes are arranged in a regular, repeating pattern across subcarriers and OFDM symbols. For each transmit stream (1 and 2), the cubes are stacked at the same (subcarrier, symbol) positions, but at different heights (streams).

  1. Create the pilot configuration object.

    pilotcfg = ofdmPilotConfig( ...
        FFTLength = 64, ...
        NumGuardBandCarriers = [6;5], ...
        NumSymbols = 14, ...
        NumTransmitStreams = 4, ...
        StreamGroups={[1 2],[3 4]} );
    
  2. Create pilot locations for each stream group.

    pilotLocations1 = ofdmPilotGrid([1 2], [1 2], [7 31 57], [1 7 13]); % 2x2 (4) pilots each for 9 clusters
    pilotLocations2 = ofdmPilotGrid([1 2], 1, [19 44], [4 10]);         % 2x1 (2) pilots each for 4 clusters
    
  3. Check the number of clusters for each group.

    numClusters1 = size(pilotLocations1, 3);
    numClusters2 = size(pilotLocations2, 3);
    
  4. Create pilot symbols for each group. The number of pilot symbols must match number of clusters).

    pilotSymbols1 = randn(size(pilotLocations1,1), numel(pilotcfg.StreamGroups{1}), numClusters1);
    pilotSymbols2 = randn(size(pilotLocations2,1), numel(pilotcfg.StreamGroups{2}), numClusters2);
    
  5. Assign to the configuration object.

    pilotcfg.PilotLocations = {pilotLocations1, pilotLocations2};
    pilotcfg.PilotSymbols   = {pilotSymbols1, pilotSymbols2};
    
  6. Validate and plot the configuration.

    validate(pilotcfg)
    plot(pilotcfg);
    

Algorithms

expand all

References

[1] Van de Beek, J.-J., O. Edfors, M. Sandell, S. K. Wilson, and P. O. Borjesson. “On Channel Estimation in OFDM Systems." Vehicular Technology Conference, IEEE 45th, Volume 2, IEEE, 1995.

Extended Capabilities

expand all

Version History

Introduced in R2026a