lmmse_matrix#

sionna.phy.mimo.lmmse_matrix(h: torch.Tensor, s: torch.Tensor | None = None, precision: Literal['single', 'double'] | None = None) torch.Tensor[source]#

MIMO LMMSE Equalization matrix.

This function computes the LMMSE equalization matrix for a MIMO link, assuming the following model:

\[\mathbf{y} = \mathbf{H}\mathbf{x} + \mathbf{n}\]

where \(\mathbf{y}\in\mathbb{C}^M\) is the received signal vector, \(\mathbf{x}\in\mathbb{C}^K\) is the vector of transmitted symbols, \(\mathbf{H}\in\mathbb{C}^{M\times K}\) is the known channel matrix, and \(\mathbf{n}\in\mathbb{C}^M\) is a noise vector. It is assumed that \(\mathbb{E}\left[\mathbf{x}\right]=\mathbb{E}\left[\mathbf{n}\right]=\mathbf{0}\), \(\mathbb{E}\left[\mathbf{x}\mathbf{x}^{\mathsf{H}}\right]=\mathbf{I}_K\) and \(\mathbb{E}\left[\mathbf{n}\mathbf{n}^{\mathsf{H}}\right]=\mathbf{S}\).

This function returns the LMMSE equalization matrix:

\[\mathbf{G} = \mathbf{H}^{\mathsf{H}} \left(\mathbf{H}\mathbf{H}^{\mathsf{H}} + \mathbf{S}\right)^{-1}.\]

If \(\mathbf{S}=\mathbf{I}_M\), a numerically more stable version of the equalization matrix is computed:

\[\mathbf{G} = \left(\mathbf{H}^{\mathsf{H}}\mathbf{H} + \mathbf{I}\right)^{-1}\mathbf{H}^{\mathsf{H}} .\]
Parameters:
  • h (torch.Tensor) – Channel matrices with shape […, M, K]

  • s (torch.Tensor | None) – Noise covariance matrices with shape […, M, M]. If None, the noise is assumed to be white with unit variance.

  • precision (Literal['single', 'double'] | None) – Precision used for internal calculations and outputs. If set to None, precision is used.

Outputs:

g – […, K, M], torch.complex. LMMSE equalization matrices.

Examples

h = torch.complex(torch.randn(4, 2), torch.randn(4, 2))
g = lmmse_matrix(h)
# g.shape = torch.Size([2, 4])