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_sis 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)