For transmission schemes `'CDD'`

, `'SpatialMux'`

,
and `'MultiUser'`

, and degenerately `'Port0'`

,
precoding involves multiplying a *P* × *v* precoding
matrix, * F*, by a *v* × *M* matrix,
representing *M* symbols on each of *v* transmission
layers. This multiplication yields a *P* × *M* matrix,
representing *M* precoded symbols on each of *P* antenna
ports. Depending on the transmission scheme, the precoding matrix
can be composed of multiple matrices multiplied together. But the
size of the product, *F*, is always *P* × *v*.

For the `'TxDiversity'`

transmission scheme,
a *P*^{2} × 2*v* precoding
matrix, *F*, is multiplied by a 2*v* × *M* matrix,
formed by splitting the real and imaginary components of a *v* × *M* matrix
of symbols on layers. This multiplication yields a *P*^{2} × *M* matrix
of precoded symbols, which is then reshaped into a *P* × *PM* matrix
for transmission. Since *v* is *P* for
the `'TxDiversity'`

transmission scheme, *F* is
of size *P*^{2} × 2*P*,
rather than *P*^{2} ×
2*v*.

When *v* is *P* in `'CDD'`

, `'SpatialMux'`

,
and `'MultiUser'`

transmission schemes, and when *P* and *v* are
2 in the `'TxDiversity'`

transmission scheme, the
precoding matrix, *F*, is square. Its size is 2*P* ×
2*P* for the transmit diversity scheme and *P* × *P* otherwise.
In this case, the deprecoder takes the matrix inversion of the precoding
matrix to yield the deprecoding matrix *F*^{–1}.
The matrix inversion is computed using LU decomposition with partial
pivoting (row exchange):

Perform LU decomposition *P*_{x}F = *LU*.

Solve *LY* = *I* using
forward substitution.

Solve *UX* = *Y* using
back substitution.

*F*^{-1} = *XP*_{x}.

The degenerate case of the `'Port0'`

transmission
scheme falls into this category, with *P* = *v* =
1.

For the `'CDD'`

, `'SpatialMux'`

,
and `'MultiUser'`

transmission schemes, the deprecoding
is then performed by multiplying *F*^{-1} by
the transpose of the input `symbols`

(`symbols`

is
size *M* × *P*, so its transpose
is size *P* × *M*). This multiplication
recovers the *v* × *M* (equals *P* × *M*)
matrix of transmission layers. For the `'TxDiversity'`

transmission
scheme, the deprecoding is performed, multiplying *F*^{-1} by
the transpose of the input `symbols`

(`symbols`

is
size *PM* × *P*, so its transpose
is size *P* × *PM*), having
first been reshaped into a 2*P* × *M* matrix.
This multiplication yields a 2*v* × *M*,
matrix which is then split into two *v* × *M* matrices.
The second matrix is multiplied by *j* and then the
two matrices are added together (thus recombining real and imaginary
parts) to recover the *v* × *M* matrix
of transmission layers.

For the other cases that is `'CDD'`

, `'SpatialMux'`

,
and `'MultiUser'`

transmission schemes with *v* ≠ *P* and
the `'TxDiversity'`

transmission scheme with *P* =
4, the precoding matrix *F* is not square. Instead,
the matrix is rectangular with size *P* × *v*,
except in the case of `'TxDiversity'`

transmission
scheme with *P* = 4, where it is of size *P*^{2} ×
2*P* = 16 × 8. The number of rows is always
greater than the number of columns that is the matrix *F* is
size *m* × *n* with *m* > *n*.

In this case, the deprecoder takes the matrix pseudo-inversion
of the precoding matrix to yield the deprecoding matrix *F*^{+}.
The matrix pseudo-inversion is computed as follows.

Perform LU decomposition *P*_{x}F = *LU*.

Remove the last *m* − *n* rows
of *U* to give $$\overline{U}$$.

Remove the last *m* − *n* columns
of *L* to give $$\overline{L}$$.

$$X={\overline{U}}^{H}{\left(\overline{U}{\overline{U}}^{H}\right)}^{-1}{\left({\overline{L}}^{H}\overline{L}\right)}^{-1}{\overline{L}}^{H}$$ (the
matrix inversions are carried out as in the previous steps).

*F*^{+} = *XP*_{x}

The application of the deprecoding matrix *F*^{+} is
the same process as described for deprecoding the square matrix case
with *F*^{+} in place of *F*^{–1}.

This method of pseudo-inversion is based on [3], chapter 3.4, equation (56),.