Main Content

comm.OSTBCCombiner

Combine inputs using orthogonal space-time block code

Description

The comm.OSTBCCombiner System object™ combines the input signal (from all of the receive antennas) and the channel estimate signal to extract the soft information of the symbols encoded by an orthogonal space-time block code (OSTBC). The input channel estimate does not need to be constant and can vary each time you run the object. The combining algorithm uses only the estimate for the first symbol period per codeword block. A multiple-input multiple-output (MIMO) communications system applies symbol demodulation or decoding after the OSTBC combining process.

To combine an input symbol sequence using OSTBC:

  1. Create the comm.OSTBCCombiner object 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 What Are System Objects?

Creation

Description

ostbccomb = comm.OSTBCCombiner creates an OSTBC combiner System object, ostbccomb. This object combines the input signal (from all of the receive antennas) with the channel estimate signal to extract the soft information of the symbols encoded by an OSTBC.

ostbccomb = comm.OSTBCCombiner(N,M) creates an OSTBC combiner object with the NumTransmitAntennas property set to N and the NumReceiveAntennas property set to M.

example

ostbccomb = comm.OSTBCCombiner(___,Name=Value) creates an OSTBC combiner object using any of the previous syntaxes and sets properties using one or more name-value arguments. For example, SymbolRate=1/2 sets the symbol rate of the code to 1/2.

Properties

expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Number of transmit antennas, specified as 2, 3, or 4.

Data Types: double

Symbol rate of the code, specified as 3/4 or 1/2.

Dependencies

To enable this property, set the NumTransmitAntennas property to a value greater than 2. When you set NumTransmitAntennas to 2, the symbol rate is 1.

Data Types: double

Number of receive antennas, specified as an integer in the range [1, 8].

Data Types: double

Fixed-Point Properties

Method for rounding of fixed-point numeric values, specified as "Ceiling", "Convergent", "Floor", "Nearest", "Round", "Simplest", or "Zero".

Action when fixed-point numeric values overflow, specified as "Wrap" or "Saturate". This property specifies the action to be taken in the case of an overflow. Overflow occurs when the magnitude of a fixed-point calculation result does not fit into the range of the data type and scaling that stores the result.

Data type of the product, specified as "Full precision" or "Custom".

Fixed-point data type of the product, specified as a scaled numerictype (Fixed-Point Designer) object with a signedness of Auto.

Dependencies

To enable this property, set the ProductDataType property to "Custom".

Data type of the accumulator, specified as "Full precision", "Same as product", or "Custom".

Fixed-point data type of the accumulator, specified as a scaled numerictype (Fixed-Point Designer) object with a signedness of Auto.

Dependencies

To enable this property, set the AccumulatorDataType property to "Custom".

Data type of the energy product, specified as "Full precision", "Same as product", or "Custom". This property sets the data type of the complex product in the denominator to calculate the total energy in the MIMO channel.

Fixed-point data type of the energy product, specified as a scaled numerictype (Fixed-Point Designer) object with a signedness of Auto.

Dependencies

To enable this property, set the EnergyProductDataType property to "Custom".

Data type of the energy accumulator, specified as "Full precision", "Same as energy product", "Same as accumulator", or "Custom". This property sets the data type of the summation in the denominator to calculate the total energy in the MIMO channel.

Fixed-point data type of the energy accumulator, specified as a scaled numerictype (Fixed-Point Designer) object with a signedness of Auto.

Dependencies

To enable this property, set the EnergyAccumulatorDataType property to "Custom".

Data type of division, specified as "Same as accumulator" or "Custom". This property sets the data type at the output of the division operation. The setting normalizes diversity combining by the total energy in the MIMO channel.

Fixed-point data type of division, specified as a scaled numerictype (Fixed-Point Designer) object with a signedness of Auto.

Dependencies

To enable this property, set the DivisionDataType property to "Custom".

Usage

Description

example

Y = ostbccomb(X,cest) applies OSTBC combining to the OSTBC-encoded data, X, and the channel estimate, cest, and extracts the symbols encoded by an OSTBC.

Input Arguments

expand all

Received data, specified as a complex-valued column vector, matrix, or 3-D array of data type double, single, or signed fixed point with power-of-two slope and zero bias. The received data can be a T/SymbolRate-by-NumReceiveAntennas matrix or F-by-T/SymbolRate-by-NumReceiveAntennas 3-D array. The time domain length, T/SymbolRate, must be a multiple of the codeword block length. T is the output symbol sequence length in the time domain. Specifically, when you set the NumTransmitAntennas property to 2, T/SymbolRate must be a multiple of two. When you set the NumTransmitAntennas property greater than 2, T/SymbolRate must be a multiple of four. F is an optional dimension (typically frequency domain) over which the combining calculation is independent. Specify F as a positive integer.

Data Types: single | double | fi
Complex Number Support: Yes

Channel estimate, specified as a complex-valued matrix, 3-D array, or 4-D array of data type double, single, or signed fixed point with power-of-two slope and zero bias. The input channel estimate can remain constant or can vary during each codeword block transmission. The combining algorithm uses the estimate only for the first symbol period per codeword block. If the received data is a T/SymbolRate-by-NumReceiveAntennas matrix, the input channel estimate, cest, must be a 3-D array of size T/SymbolRate-by-NumTransmitAntennas-by-NumReceiveAntennas. If the received data is an F-by-T/SymbolRate-by-NumReceiveAntennas 3-D array, cest must be a 4-D array of size F-by-T/SymbolRate-by-NumTransmitAntennas-by-NumReceiveAntennas.

Data Types: single | double | fi
Complex Number Support: Yes

Output Arguments

expand all

Output data, returned as a complex-valued column vector or matrix. When the input X has double or single precision, the output, Y, has the same data type as the input. If X is a T/SymbolRate-by-NumReceiveAntennas matrix and cest is a T/SymbolRate-by-NumTransmitAntennas-by-NumReceiveAntennas 3-D array, the extracted symbol data, Y, is a column vector with T elements. If X is an F-by-T/SymbolRate-by-NumReceiveAntennas 3-D array and cest is an F-by-T/SymbolRate-by-NumTransmitAntennas-by-NumReceiveAntennas 4-D array, Y is an F-by-T matrix.

Data Types: single | double | fi

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:

release(obj)

expand all

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
cloneCreate duplicate System object
isLockedDetermine if System object is in use
resetReset internal states of System object

Examples

collapse all

Determine the bit error rate for a QPSK signal employing OSTBC encoding when transmitted through a 4-by-2 MIMO channel. This example assumes that the OSTBC encoder uses perfect channel estimation.

Define the system parameters.

numTx = 4;         % Number of transmit antennas
numRx = 2;         % Number of receive antennas
Rs = 1e6;          % Sampling rate (Hz)
tau = [0 2e-6];    % Path delays (sec)
pdb = [0 -10];     % Average path gains (dB)
maxDopp = 30;      % Maximum Doppler shift (Hz)
numBits = 12000;   % Number of bits
SNR = 6;           % Signal-to-noise ratio (dB)

Set the random number generator to its default state to ensure repeatable results.

rng default

Create an OSTBC encoder and combiner pair, where the number of antennas is specified in the system parameters.

hOSTBCEnc = comm.OSTBCEncoder(...
    NumTransmitAntennas=numTx);

hOSTBCComb = comm.OSTBCCombiner(...
    NumTransmitAntennas=numTx,...
    NumReceiveAntennas=numRx);

Create a flat 4-by-2 MIMO Channel System object, where the channel characteristics are set using name-value pairs. The path gains are made available to serve as a perfect channel estimate for the OSTBC combiner.

mimochan = comm.MIMOChannel(...
    SampleRate=Rs,...
    PathDelays=tau,...
    AveragePathGains=pdb,...
    MaximumDopplerShift=maxDopp,...
    SpatialCorrelationSpecification='None',...
    NumTransmitAntennas=numTx,...
    NumReceiveAntennas=numRx,...
    PathGainsOutputPort=true);

Generate a random sequence of bits.

data = randi([0 1],numBits,1);

Apply QPSK modulation.

modData = pskmod(data,4,InputType='bit');

Encode the modulated data using the OSTBC encoder object.

encData = hOSTBCEnc(modData);

Transmit the encoded data through the MIMO channel, and add white noise to it.

[chanOut,pathGains] = mimochan(encData);
rxSignal = awgn(chanOut,SNR);

Sum the pathGains array along the number of paths (second dimension) to form the channel estimate. Apply the squeeze function to make its dimensions conform with those of rxSignal.

chEst = squeeze(sum(pathGains,2));

Combine the received MIMO signal and its channel estimate using the OSTBC combiner object. Demodulate the combined signal.

combinedData = hOSTBCComb(rxSignal,chEst);
receivedData = pskdemod(combinedData,4,OutputType='bit');

Compute the number of bit errors and the bit error rate.

[numErrors,ber] = biterr(data,receivedData)
numErrors = 9
ber = 7.5000e-04

Algorithms

The OSTBC combiner supports five different OSTBC combining computation algorithms. Depending on the selection for SymbolRate and NumTransmitAntennas, you can select one of the algorithms shown in this table.

Transmit AntennaRateComputational Algorithm per Codeword Block Length
21

(s^1s^2)=1H2j=1M(h1,j*r1,j+h2,jr2,j*h2,*jr1,jh1,jr2,j*)

31/2

(s^1s^2)=1H2j=1M(h1,j*r1,j+h2,jr2,j*+h3,*jr3,jh2,*jr1,jh1,jr2,j*h3,jr4,j*)

33/4

(s^1s^2s^3)=1H2j=1M(h1,j*r1,j+h2,jr2,j*h3,jr3,j*h2,*jr1,jh1,jr2,j*h3,jr4,j*h3,j*r1,j+h1,jr3,j*+h2,jr4,j*)

41/2

(s^1s^2)=1H2j=1M(h1,j*r1,j+h2,jr2,j*+h3,j*3,jr3,j+h4,jr4,j*h2,*jr1,jh1,jr2,j*+h4,j*r3,jh3,jr4,j*)

43/4

(s^1s^2s^3)=1H2j=1M(h1,j*r1,j+h2,jr2,j*h3,jr3,j*h4*,jr4,jh2,*jr1jh1,jr2,j*+h4*,jr3,jh3,jr4,j*h3,*jr1j+h4,j*r2,j+h1,jr3,j*+h2,jr4,j*)

s^k represents the estimated kth symbol in the OSTBC codeword matrix. hij represents the estimate for the channel from the ith transmit antenna and the jth receive antenna. Values for i are in the range [1, N], where N is the number of transmit antennas. Values for j are in the range [1, M], where M is the number of receive antennas. rlj represents the lth symbol at the jth receive antenna per codeword block. The value of l can range from 1 to the codeword block length. H2 represents the summation of channel power per link, that is

H2=i=1Nj=1Mhij2.

Extended Capabilities

Version History

Introduced in R2012a