Week 07 – MIMO-OFDM

This week, I started with the last big milestone for this summer: The integration of the MIMO algorithms into an OFDM transceiver system.

In the first part of this article I want to describes the requirements and how I imagine the out coming result of this MIMO-OFDM transmitter. This includes intensive thoughts about the transceiver’s structure. After that, I want to present my detailed step-by-step plan of how I want to approach this project.

MIMO-OFDM transceiver structure

The final goal is a ready-to-use flowgraph in GNU Radio companion (GRC) as shown in figure 1.

Figure 1: MIMO-OFDM transceiver in GRC

The hierarchical blocks of the OFDM receiver and transmitter get an additional parameter, stating SISO as default option, but also listing MIMO possibilities. If a specific MIMO configuration is selected, the hierarchical block gets restructured and MIMO specific blocks are added.

The OFDM system provides frequency flat sub-channels. To preserve this quality, the MIMO algorithms must be applied to each parallel sub-carrier stream independently. To avoid the use of one separate MIMO encoder for each sub-carrier data stream, one vector-wise working MIMO encoder is placed before the OFDM modulator. The multiplexing from stream to vector-wise processing is applied in a hierarchical python block ‘MIMO encoder’ which also selects the appropriate C++ block for the required MIMO algorithm. This vector-wise structuring keeps the MIMO blocks flexible for other modulation schemes than OFDM. A MIMO integration to single carrier schemes, which is not part of this project, could use the hierarchical MIMO block by simply adjusting the vector length to 1.

Figure 2: OFDM TX structure after MIMO inclusion

Figure 2 shows the structure of the OFDM transmitter after the insertion of the MIMO encoder block. Green blocks are already existing in the GNU Radio module gr-digital. The only structural changes are the replacement of the preamble insertion block with the MIMO encoder and the multiple OFDM modulators instead of only one. Note that some of the shown blocks are working vector wise. The creation of the preamble, both for OFDM synchronization and MIMO detection, is included in the hierarchical MIMO encoding block.

The structure of the MIMO-OFDM receiver is shown in figure 3. For the synchronization in time and frequency, the already implemented Schmidl & Cox algorithm can be applied on a superposition of the received signals. The OFDM demodulation is subsequently applied before the signals enter the MIMO demodulator. The OFDM demodulation block includes the MIMO decoding algorithm and the channel estimation.

Figure 3: OFDM RX structure after MIMO inclusion

Step-by-step plan

The description of the MIMO-OFDM system in the previous section shows, that it is a complex system which needs a very detailed segmentation in sub-tasks to get realized. I spent a lot of time this week, thinking of a reasonable plan for this last milestone of my GSoC:

  • Channel estimation: The estimation of the MIMO channel is included in the hierarchical MIMO decoder block and is located after the synchronization. It is a very important part of this project due to the fact that most of the MIMO algorithms strongly depend on a high quality channel state information (CSI). At the end of this week, I already started with the implementation of a channel estimator in C++. I want to use a Maximum-Likelihood estimator. As an orthogonal training sequence I want to use use an FFT matrix as suggested in [1]. I am going to implement the FFT matrix as a default option but other sequences can also be chosen via input arguments.
  • Hierarchical python block: After finishing the channel estimator, I have realized all elements to build up the hierarchical python blocks ‘MIMO encoder‘ and ‘MIMO decoder’. The include the selected MIMO algorithm, the pilot generator/channel estimator and the de-/multiplexer.
  • OFDM setup: Before I am going to fully integrate the produced MIMI hierarchical blocks into the system, I want to build up the existing OFDM transceiver and make some partial test to erase any possible errors before the integration.
  • MIMO integration: The final step is the integration of the MIMO hierarchical blocks into the OFDM hierarchical block and restructuring the latter. This could be the work of 5 lines of code, but I am pretty sure that some ‘real-live’ over-the-air problems will occur that I have to solve.
  • Loopback Test: A simulative and over-the-air loopback test are finally going to validate the transceiver.


Next week, I want to finish the channel estimation. If there is time left, I am going to implement the hierarchical python block, which should not take much time. I am approximately 1-2 weeks ahead of my proposed timeline for GSoC, but I think I need that additional time as a puffer for any ‘real-live’ problems that will occur at the over-the-air transmission.


[1] Qinfang Sun, D. C. Cox, H. C. Huang and A. Lozano, “Estimation of continuous flat fading MIMO channels,” in IEEE Transactions on Wireless Communications, vol. 1, no. 4, pp. 549-553, Oct 2002. doi: 10.1109/TWC.2002.804178


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s