Last week, I implemented a V-BLAST encoder which demultiplexes a data stream into M parallel streams that are simultaneously sent through the same channel. This was a really simple task which granted us a data rate increase of factor M without the need of a complex transmitter complexity.

This week, we have to ‘clean up the mess we made’ at the receiver, meaning that we have to demultiplex the parallel data streams again by separating the M parallel symbols which are sent from one transmitting antenna, respectively, to each of the N receiving antennas. For this task, we have N received signals, which all contain a different weighted sum of all the transmitted symbols. Furthermore, we assume channel knowledge in form of a NxM CSI matrix:

Each element h_nm describes the complex factor which is multiplied by the channel to the signal from TX antenna m to RX antenna n.

**Mathematically **spoken, the problem (**y** = **Hx**) is solvable: We have N linear independent equations and M variables (the elements of the transmission vector **x**). The linear independence of the equations is not coming from any explicit orthogonalization of the transmitted signals, but from a signal decorrelation that is achieved by the multipath propagation environment of the channel [1]. This gives hope!

**Inverting the Channel Matrix**

By simply solving the linear system

we can gain the coefficients of **x**. The only requirement for this operation is the invertibility of **H**. This leads to the demands:

**H must have full rank**: This requirement is satisfied by the fact that the magnitude of the elements of**H**are Rayleigh distributed. Assuming a discrete time and limited observation window, the magnitude of the channel coefficients almost surely (in mathematical terms) is not equal to zero. This leads to the statement that the rank of**H**is almost surely full in our assumed model.**H must be quadratic**: At this time, we did not state any relationship between M and N, yet. At first we can observe, that N ≥ M must be fulfilled to gain enough linear equations to solve the system. Most textbooks solve this issue by introducing the Moore-Penrose inverse (or pseudo inverse) which doesn’t require a quadratic matrix.

The calculation of the pseudo inverse**W**has a more complex calculation complexity. Instead of one inversion, it requires 2 adjunctions, 1 inversion and 2 more matrix multiplications. To avoid this increase of decoder complexity, I decided to stay with the inverse, therefore setting the number of receive antennas fixed to N=M. This, however, is not a restriction to the V-BLAST algorithm in general. For a NxM MIMO setup with N > M, the maximum increase of the data rate is min{M, N}. This data rate is limited by M for N ≥ M. The remaining N-M transmitter antennas are used to apply a diversity gain. This means for our system, that we have to reduce the number of streams at the receiver from N to M, by combining some streams with the diversity combining block, I introduced some weeks ago.

For the matrix inversion, I want to use the linear algebra template library Eigen. To avoid the production of additional dependencies for GNU Radio, I calculated the M=N=2 case by hand, leading to no dependencies at all. If a user wants to use more than 2 antennas, Eigen is required, though.

**Outlook**

I already implemented the case for 2 antennas. Next week I want to implement the general case for M=N antennas, using Eigen. After that, I want to add the Minimum Mean Square Error (MMSE) approach next to the current Zero Forcing (ZF) approach, where the channel matrix is not inverted completely, but instead an additional weighting with the SNR is applied, therefore optimizing an other performance criterion.

Luca

[1] Andrea Goldsmith. 2005. Wireless Communications. Cambridge University Press, New York, NY, USA.