Main Content


Combine inputs using orthogonal space-time block code


The OSTBCCombiner 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 OSTBC. The input channel estimate does not need to be constant and can vary at each call to the step method. The combining algorithm uses only the estimate for the first symbol period per codeword block. A symbol demodulator or decoder would follow the Combiner object in a MIMO communications system.

To combine input signals and extract the soft information of the symbols encoded by an OSTBC:

  1. Define and set up your OSTBC combiner object. See Construction.

  2. Call step to Combine inputs using an orthogonal space-time block code according to the properties of comm.OSTBCCombiner. The behavior of step is specific to each object in the toolbox.


Starting in R2016b, instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.


H = comm.OSTBCCombiner creates an orthogonal space-time block code (OSTBC) combiner System object, H. 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.

H = comm.OSTBCCombiner(Name,Value) creates an OSTBC Combiner object, H, with each specified property set to the specified value. You can specify additional name-value pair arguments in any order as (Name1,Value1,...,NameN,ValueN).

H = comm.OSTBCCombiner(N,M,Name,Value) creates an OSTBC Combiner object, H. This object has the NumTransmitAntennas property set to N, the NumReceiveAntennas property set to N, and the other specified properties set to the specified values.



Number of transmit antennas

Specify the number of antennas at the transmitter as 2 | 3 | 4. The default is 2.


Symbol rate of code

Specify the symbol rate of the code as 3/4 | 1/2. The default is 3/4. This property applies when the NumTransmitAntennas property is greater than 2. For 2 transmit antennas, the symbol rate defaults to 1.


Number of receive antennas

Specify the number of antennas at the receiver as a double-precision, real, scalar integer value from 1 to 8. The default is 1.

 Fixed-Point Properties


stepCombine inputs using orthogonal space-time block code
Common to All System Objects

Allow System object property value changes


collapse all

Determine the bit error rate for a QPSK signal employing OSTBC encoding when transmitted through a 4x2 MIMO channel. Perfect channel estimation is assumed to be used by the OSTBC combiner.

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(...

hOSTBCComb = comm.OSTBCCombiner(...

Create a flat 4x2 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(...

Create an AWGN channel System object in which the noise method is specified as a signal-to-noise ratio.

awgnchan = comm.AWGNChannel( ...
    NoiseMethod='Signal to noise ratio (SNR)',...

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 by using the MIMO and AWGN channel objects, respectively.

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

Sum the pathGains array along the number of paths (2nd 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 = 6
ber = 5.0000e-04


This object implements the algorithm, inputs, and outputs described on the OSTBC Combiner block reference page. The object properties correspond to the block parameters.

Extended Capabilities

Version History

Introduced in R2012a