As I described in my last blog post, we changed the structure of the receiver.
This week, I intensively worked on the implementation of the additionally required signal processing blocks. All in all, the blocks are finished now, but there is still a lot of testing to be done. Generalizing the MIMO algorithms to a vector basis
Next to the new blocks, I had to generalize the MIMO decoder algorithms to a vector basis to use it in the OFDM system with a vector size equal to the FFT size. This is caused to the size of the input items of the respective blocks: The MIMO encoder is placed before the OFDM modulation which equals an FFT operation. The input data is therefore still a stream of complex samples and no vectors would be needed here. This situation changes, when we pass the data through the channel with a multi carrier system, like OFDM. Although each sub-carrier can be assumed as flat, the whole OFDM channel is still frequency selective, which means that each carrier has a different channel matrix. As I described last week, the MIMO-OFDM channel estimator measures these different channel matrices by estimating the CSI of the sub-carriers that carry pilot symbols and linear interpolates between the CSI for the remaining sub-carriers. The CSI for one FFT vector is therefore a 3-dimensional vector, including the dimensions sub-carrier, receive antenna, transmit antenna. We wouldn’t want to distribute this CSI tag from its vector to a CSI tag for each sample, because stream tags are not very efficient. This could become a pontential performance bottleneck, because we would finally have a CSI tag on each sample. Staying vectorized therefore reduces the number of tags about the factor of the occupied OFDM sub-carriers in comparison to a stream mode. Additionally, the vector based processing leads to a very compact and understandable integration of the MIMO coding into the OFDM system.
Regarding the MIMO-OFDM receiver, I finished all the required blocks to build up the MIMO receiver. I also did a loopback from the MIMO-OFDM transmitter to the receiver over a flat and constant channel. I generally get a data throughput and can therefore say, that the MIMO-OFDM transceiver somehow works. However, at some point, the data gets corrupted from time to time, executing the same test multiple times. I spend a lot of time with debugging this week, but I could not locate the bug, yet. I am assuming, that the error occurs, when the buffer sizes are scheduled different (in comparison to the test executions, which succeed).
Next week is the final week of GSoC 2018. I hope that I will find the bug in the receiver chain. After that I am going to do a final wrap up, so that we can merge the produced code back into GNU Radio’s gr-digital module.