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|
Encode and decode QPSK modulated data with OSTBC and calculate error.
Define system parameters.
numTx = 2; numRx = 1; Rs = 1e6; maxDopp = 30; numBits = 1024; SNR = 10;
Create a QPSK modulator System object. Set the BitInput to true and the SymbolMapping to Gray.
hMod = comm.QPSKModulator(... 'BitInput', true,... 'SymbolMapping', 'Gray');
Create a QPSK demodulator System object. Set the SymbolMapping to Gray and the BitOutput to true.
hDemod = comm.QPSKDemodulator(... 'SymbolMapping', 'Gray',... 'BitOutput', true);
Create the encoding System objects and define the number of transmit and receive antennas.
hOSTBCEnc = comm.OSTBCEncoder(... 'NumTransmitAntennas', numTx); hOSTBCComb = comm.OSTBCCombiner(... 'NumTransmitAntennas', numTx,... 'NumReceiveAntennas', numRx);
Create a MIMO Channel System object and define the channel characteristics.
hChan = comm.MIMOChannel(... 'SampleRate', Rs,... 'MaximumDopplerShift', maxDopp,... 'SpatialCorrelation', false,... 'NumTransmitAntennas', numTx,... 'NumReceiveAntennas', numRx,... 'PathGainsOutputPort', true);
Create an AWGN channel System object and define the channel characteristics.
hAWGN = comm.AWGNChannel(... 'NoiseMethod', 'Signal to noise ratio (SNR)',... 'SNR', SNR,... 'SignalPower', 1);
Generate a random stream of bits.
data = randi([0 1], numBits, 1);
Modulate the random by passing it to the QPSK modulator System object.
modData = step(hMod, data);
Encode the modulated data using OSTBC.
encData = step(hOSTBCEnc, modData);
Transmit through Rayleigh and AWGN channels.
[chanOut, pathGains] = step(hChan, encData); rxSignal = step(hAWGN, chanOut);
Decode and demodulate the received signal.
decData = step(hOSTBCComb, rxSignal, squeeze(pathGains)); receivedData = step(hDemod, decData);
Compute number of bit errors in received data.
errors = biterr(data, receivedData); fprintf(1, ['\nThere were %d errors in the received signal ' ... 'out of %d bits transmitted\n'], errors, length(data));
This object implements the algorithm, inputs, and outputs described on the OSTBC Combiner block reference page. The object properties correspond to the block parameters.