For transmission schemes `'CDD'`

, `'SpatialMux'`

,
and `'MultiUser'`

, and degenerately `'Port0'`

,

Precoding involves multiplying a *P*-by-*v* precoding
matrix, * F*, by a *v*-by-*N*_{SYM} matrix,
representing *N*_{SYM} symbols
on each of *v* transmission layers. This multiplication
yields a *P*-by-*N*_{SYM} matrix,
representing *N*_{SYM} 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*-by-*v*.

For the `'TxDiversity'`

transmission scheme,

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

transmission scheme, *F* is
of size *P*^{ 2}-by-2*P*,
rather than *P*^{ 2}-by-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*-by-2*P* for the
transmit diversity scheme and *P*-by-*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,

For the `'TxDiversity'`

transmission scheme,

The deprecoding is performed, multiplying *F*^{ –1} by the transpose of
the input `symbols`

(`symbols`

is
size *P**N*_{SYM}-by-*P*,
so the transpose is a *P*-by-*P**N*_{SYM} matrix),
having first been reshaped into a 2*P*-by-*N*_{SYM} matrix.
This multiplication yields a 2*v*-by-*N*_{SYM},
matrix which is then split into two *v*-by-*N*_{SYM} matrices.
To recover the *v*-by-*N*_{SYM} matrix
of transmission layers multiply the second matrix by *j* and
add the two matrices together (thus recombining real and imaginary
parts).

For the other cases, specifically `'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*-by-*v*,
except in the case of `'TxDiversity'`

transmission
scheme with *P* = 4,
where it is of size *P*^{ 2}-by-(2*P* = 16)-by-8. The number of rows is always
greater than the number of columns in the matrix *F* is
size *m*-by-*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*Linear
Algebra and Its Application* [3], Chapter 3.4, Equation (56).