At the first half of the week, I finished the doxygen documentation for the already implemented MIMO modules. I have now completed all milestones of the first coding period, including:
- Diversity Combining
- Alamouti’s Code
- Differential STBC
- QA tests
- In-tree top-level documentation
I am therefore ready for the first evaluation which starts next week on June 11. In the evaluation period, the mentors evaluate their students progress and students evaluate their mentors. Here is a list of questions that may be asked.
Looking at the second coding period, we are now moving on from the spatial diversity techniques to the second way of exploiting multiple antennas: Spatial multiplexing.
Our premise is the transmission of M independent symbols per time slot over M transmit antennas. An easy way to do so offers parallel encoding which simply demultiplexes the data stream into M parallel streams. One of the Bell Labs Layered Space Time (BLAST) architectures does exactly that: Encoding serial data into a vertical vector which gives the algorithm its name: Vertical-BLAST or short V-BLAST .
The task of the V-BLAST encoder is pretty simple: At each time slot, take a sequence of M complex input symbols and distribute them to M output ports.
For the realization of this block, I use the gr::sync_decimator class of GNU Radio with a decimation rate of M. This is equal to the use of a ‘general’ block with the following properties:
- Constructor: set_output_multiple(M)
- Forecast: ninput_items = noutput_items*M
- Produced: noutput_items
- Consumed: noutput_items*M
It is important to understand the difference between serial encoding and parallel encoding in terms of spatial multiplexing to use this block properly and to be aware of its performance differences. Without any additional coding or interleaving, the implemented V-BLAST encoder is actually just a demultiplexer. A complete MIMO encoder, however, must also take the channel coding into account, which produces a codeword of length n out of a data word of length k.
In the case of serial encoding, the channel encoder first produces a codeword of length n before the codeword is distributed among the M transmitting antennas. To achieve full diversity gain, the codeword must be distributed among all TX and RX antennas! This requires a codeword length of M*N for N receiving antennas. Because the decoding complexity grows exponentially with the codeword length, this scheme gets infeasible for a high number of TX and/or RX antennas. 
A more practical, because simpler, way is parallel encoding, where the data is demultiplexed, before each branch is encoded respectively. This results in shorter codewords and therefore a significantly simplified complexity at the encoder and decoder. The trade off is a reduced diversity order of N instead of M*N.
The choice between one of the encoding schemes is the job of the system designer. However for both schemes, the implemented V-BLAST encoder (which is actually just the demultiplexer) can be used.
I finished the V-BLAST encoder this week. Next week, I am directly starting with the evaluation phase. After that, I want to deal with the decoding of the V-BLAST signal.
 Andrea Goldsmith. 2005. Wireless Communications. Cambridge University Press, New York, NY, USA.