MIMO channel block diagonalized weights

`[`

returns precoding weights, `wp`

,`wc`

]
= blkdiagbfweights(`chanmat`

,`ns`

)`wp`

, and combining weights,
`wc`

, derived from the channel response matrices contained in
a MATLAB^{®} cell array `chanmat`

.

You can specify multiple user channels by putting each channel in a

`chanmat`

cell.`chanmat`

`{k}`

represents the*k*^{th}channel from the transmitter to the user.For a single frequency, specify the channel cell as a matrix.

For multiply frequencies, specify the channel cell as a three-dimensional array where the rows represent different

*subcarriers*.

Specify multiple subchannels per channel using the

`ns`

argument. Subchannels represent different data streams.`ns`

specifies the number of subchannels for each user channel. Multiply the data streams by the precoding weights,`wp`

.

The precoding and combining weights diagonalize the channel into
independent subchannels so that for the
*k*^{th}user, the matrix
`wp*chanmat{k}*wc{k}`

is diagonal for each
*subcarrier*.

[1] Heath, Robert W., et al. “An
Overview of Signal Processing Techniques for Millimeter Wave MIMO Systems.”
*IEEE Journal of Selected Topics in Signal Processing*, vol.
10, no. 3, Apr. 2016, pp. 436–53. DOI.org (Crossref), doi:10.1109/JSTSP.2016.2523924.
Bibliography

[2] Tse, D. and P. Viswanath,
*Fundamentals of Wireless Communications*, Cambridge: Cambridge
University Press, 2005.

[3] Paulraj, A.
*Introduction to Space-Time Wireless Communications*,
Cambridge: Cambridge University Press, 2003.

[4] Spencer, Q.H., et al.
"Zero-Forcing Methods for Downlink Spatial Multiplexing in Multiuser MIMO Channels."
*IEEE Transactions on Signal Processing*, Vol. 52, No. 2,
February 2004, pp. 461-471. DOI.org (Crossref),
doi:10.1109/TSP.2003.821107.