This blog post delivers a short summary of the work that was done during the GSoC’18 program. If you want a more detailed description of my plans, approaches and individual results during the project, you can:
- Read the full proposal for this project.
- Read my weekly posts on this blog.
- Visit the GitHub repository and see all my commits during the time of GSoC’18 (April 23 – August 14) or just dive right into the code.
Summary
The goal of this project was the introduction of a basic Multiple Input Multiple Output (MIMO) capability to the GNU Radio core. For this purpose I planned to implement a set of very popular MIMO algorithms and finally provide an exemplary use case for the algorithms by making the OFDM transceiver of GNU Radio MIMO capable.
To put this plan into action, I achieved the following milestones during GSoC’18:
- Implement a Diversity Combining block with Selection Combining (SC) and Maximum-ratio combining (MRC) in C++. Add QA tests in python.
- The code was developed in the separate branch ‘diversity_combining‘.
- The code got merged to master based on this pull request after a review of the mentors.
- Implement an Alamouti encoder and decoder block in C++. Add QA tests in python.
- The code was developed in the separate branch ‘alamouti‘.
- The code got merged to master based on this pull request.
- The block was generalized (from scalar to vector items) later in the project. The changes were also merged to master with this pull request.
- Implement a differential 2xN Space-Time Block-Code (Alamouti-like) scheme with encoder and decoder block in C++. Add QA test in python.
- The code was developed in the separate branch ‘diff_stbc‘.
- The code got merged to master based on this pull request.
- Implement the Vertical – Bell Laboratories Layered Space-Time (V-BLAST) transmitter architecture in a MIMO encoder block in C++. Implement an appropriate decoder block, realized with 2 different approaches: Zero Forcing equalization (ZF) and Minimum Mean Squared Error equalization (MMSE).
- The code was developed in the separate branch ‘vblast‘.
- The code got merged to master based on this pull request.
- Write an in-tree top-level documentation for the doxygen page of GNU Radio.
- The documentation includes the following content:
- Theoretical introduction to the general concept of MIMO.
- Mathematical explanation of each MIMO algorithm.
- Tutorial of how to use the MIMO encoder and decoder blocks.
- The documentation was written in the separate branch ‘MIMO_docu‘.
- The code got merged to master based on this pull request.
- The documentation includes the following content:
- Embed the generally written spatial multiplexing blocks into a particular system: The OFDM transceiver of the GNU Radio module gr-digital. The MIMO-OFDM transceiver shall serve as an example for how to use the MIMO capabilities in a real communications system.
- The MIMO-OFDM milestone includes the following sub-tasks:
- Implement a hierarchical MIMO encoder and decoder block in python. The major work was done in theses commits for the encoder and decoder block.
- Integrate the MIMO encoder into the OFDM transmitter. The major integration was done in this commit.
- Integrate the MIMO decoder into the OFDM receiver. Because of too many changes, the MIMO-OFDM receiver is written in a separate hierarchical block. The synchronization for the MIMO-OFDM receiver block is not yet fully tested and the receiver block is therefore not ready for merging, yet.
- Add QA test in python for the whole MIMO-OFDM transceiver. This is done in form of a loopback test. The loopback system is passing the test.
- Implement a general data-aided MIMO channel estimation. The code was developed in the separate branch ‘channel_estimation‘. The code got merged to master based on this pull request.
- Perform an over-the-air test. This task is not yet done, because the testing of the MIMO-OFDM synchronization is not finished.
- The code for the MIMO-OFDM system was written in the separate branch ‘mimo_hier_block‘.
- Due to the unfinished test of the MIMO-OFDM synchronization, the branch is not merged into master, yet.
- The MIMO-OFDM milestone includes the following sub-tasks:
Summarizing, I completed all milestones for the MIMO algorithms successfully. Regarding the last unfinished milestone, there is still work that needs to be done. The core goal of integrating the introduced MIMO capability into a given communications system was achieved, which is proven by the QA loopback test. However, before the MIMO-OFDM transceiver can be merged into the core of GNU Radio (and may be used by many developers), additional testing of the transceiver, as well over-the-air, needs to be done to validate the functionality of the transceiver in non-simulative environments.
Personally, the Google Summer of Code 2018 was a very exciting and joyful experience for me. I want to thank my mentors Felix Wunsch and Marcus Müller for their mentorship of this project and their excellent support during the summer.
I care very much about the completion of an over-the-air running MIMO-OFDM transceiver. Therefore, I am planning to continue working on this project and with GNU Radio after GSoC!
Best
Luca
