Downlink precoding of transmission layers

performs
precoding according to TS 36.211 [1],
Section 6.3.4. The `out`

= lteDLPrecode(`in`

,`ntxants`

,`txscheme`

,`codebook`

)`out`

matrix returned is identical
to the matrix returned by `ltePDSCH`

for
the same set of parameters. The overall operation of the precoder
is the transpose of the matrix defined in the specification. The symbols
for layers and antennas lie in columns rather than rows.

This function performs precoding of the matrix of layers, `in`

,
onto *P* antennas, using the transmission scheme
specified by `txscheme`

. For transmission scheme
precoding dependencies, see Algorithms.

For transmission schemes `'CDD'`

, `'SpatialMux'`

,
and `'MultiUser'`

, and degenerately `'Port0'`

,

Precoding involves multiplying a

*P*-by-*v*precoding matrix, denoted as*F*, by a*v*-by-*N*_{SYM}matrix, representing*N*_{SYM}symbols on each of*v*transmission layers, to yield a*P*-by-*N*_{SYM}matrix, consisting of*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*-by-2^{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, to yield a*P*-by-^{2}*N*_{SYM}matrix of precoded symbols, which is then reshaped into a*P*-by-*P**N*_{SYM}matrix for transmission. As*v*=*P*for the`'TxDiversity'`

transmission scheme, we can consider*F*be of size*P*-by-2^{2}*P*rather than*P*-by-2^{2}*v*.

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; it is rectangular with size*P*-by-*v*except for the`'TxDiversity'`

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

[1] 3GPP TS 36.211. “Evolved Universal Terrestrial Radio Access
(E-UTRA); Physical Channels and Modulation.” *3rd Generation
Partnership Project; Technical Specification Group Radio Access Network*.
URL: https://www.3gpp.org.

[2] 3GPP TS 36.213. “Evolved Universal Terrestrial Radio Access
(E-UTRA); Physical layer procedures.” *3rd Generation Partnership
Project; Technical Specification Group Radio Access Network*. URL: https://www.3gpp.org.