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:
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.
|clone||Create OSTBC combiner object with same property values|
|getNumInputs||Number of expected inputs to step method|
|getNumOutputs||Number of outputs from step method|
|isLocked||Locked status for input attributes and nontunable properties|
|release||Allow property value and input characteristics changes|
|step||Combine inputs using orthogonal space-time block code|
Determine the bit error rate for a QSPK 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.
Create a QPSK modulator System object™. Set the BitInput property to true and the SymbolMapping property to Gray.
hMod = comm.QPSKModulator(... 'BitInput',true,... 'SymbolMapping','Gray');
Create a corresponding QPSK demodulator System object. Set the SymbolMapping property to Gray and the BitOutput property to true.
hDemod = comm.QPSKDemodulator(... 'SymbolMapping','Gray',... 'BitOutput',true);
Create an OSTBC encoder and combiner pair, where the number of antennas is specifed in the system parameters.
hOSTBCEnc = comm.OSTBCEncoder(... 'NumTransmitAntennas',numTx); hOSTBCComb = comm.OSTBCCombiner(... 'NumTransmitAntennas',numTx,... 'NumReceiveAntennas',numRx);
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.
hChan = comm.MIMOChannel(... 'SampleRate',Rs,... 'PathDelays',tau,... 'AveragePathGains',pdb,... 'MaximumDopplerShift',maxDopp,... 'SpatialCorrelation',false,... 'NumTransmitAntennas',numTx,... 'NumReceiveAntennas',numRx,... 'PathGainsOutputPort',true);
Create an AWGN channel System object in which the noise method is specified as a signal-to-noise ratio.
hAWGN = comm.AWGNChannel(... 'NoiseMethod','Signal to noise ratio (SNR)',... 'SNR',SNR,... 'SignalPower',1);
Generate a random sequence of bits.
data = randi([0 1],numBits,1);
Apply QPSK modulation.
modData = step(hMod,data);
Encode the modulated data using the OSTBC encoder object.
encData = step(hOSTBCEnc,modData);
Transmit the encoded data through the MIMO channel and add white noise by using the step functions of the MIMO and AWGN channel objects, respectively.
[chanOut,pathGains] = step(hChan,encData); rxSignal = step(hAWGN,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 step function of the OSTBC combiner object. Demodulate the combined signal.
combinedData = step(hOSTBCComb,rxSignal,chEst); receivedData = step(hDemod,combinedData);
Compute the number of bit errors and the bit error rate.
[numErrors,ber] = biterr(data,receivedData)
numErrors = 11 ber = 9.1667e-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.