whiten_channel#

sionna.phy.mimo.whiten_channel(y: torch.Tensor, h: torch.Tensor, s: torch.Tensor, return_s: bool = True) tuple[torch.Tensor, ...][source]#

Whitens a canonical MIMO channel.

Assume the canonical MIMO channel model

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

where \(\mathbf{y}\in\mathbb{C}^M(\mathbb{R}^M)\) is the received signal vector, \(\mathbf{x}\in\mathbb{C}^K(\mathbb{R}^K)\) is the vector of transmitted symbols, \(\mathbf{H}\in\mathbb{C}^{M\times K}(\mathbb{R}^{M\times K})\) is the known channel matrix, and \(\mathbf{n}\in\mathbb{C}^M(\mathbb{R}^M)\) is a noise vector with covariance matrix \(\mathbf{S}\in\mathbb{C}^{M\times M}(\mathbb{R}^{M\times M})\).

This function whitens this channel by multiplying \(\mathbf{y}\) and \(\mathbf{H}\) from the left by \(\mathbf{S}^{-\frac{1}{2}}=\mathbf{L}^{-1}\), where \(\mathbf{L}\in \mathbb{C}^{M\times M}\) is the Cholesky decomposition of \(\mathbf{S}\). Optionally, the whitened noise covariance matrix \(\mathbf{I}_M\) can be returned.

Parameters:
  • y (torch.Tensor) – […, M], torch.float or torch.complex. Received signals.

  • h (torch.Tensor) – […, M, K], torch.float or torch.complex. Channel matrices.

  • s (torch.Tensor) – […, M, M], torch.float or torch.complex. Noise covariance matrices.

  • return_s (bool) – bool, (default True). If True, the whitened covariance matrix is returned.

Outputs:
  • yw – […, M], torch.float or torch.complex. Whitened received signals.

  • hw – […, M, K], torch.float or torch.complex. Whitened channel matrices.

  • sw – […, M, M], torch.float or torch.complex. Whitened noise covariance matrices. Only returned if return_s is True.

Examples

y = torch.complex(torch.randn(4), torch.randn(4))
h = torch.complex(torch.randn(4, 2), torch.randn(4, 2))
s = torch.eye(4, dtype=torch.complex64) * 0.5
yw, hw, sw = whiten_channel(y, h, s)