complex2real_covariance#

sionna.phy.mimo.complex2real_covariance(r: torch.Tensor) torch.Tensor[source]#

Transforms a complex-valued covariance matrix to its real-valued equivalent.

Assume a proper complex random variable \(\mathbf{z}\in\mathbb{C}^M\) [ProperRV] with covariance matrix \(\mathbf{R}= \in\mathbb{C}^{M\times M}\) and real and imaginary parts \(\mathbf{x}\in \mathbb{R}^M\) and \(\mathbf{y}\in \mathbb{R}^M\), respectively. This function transforms the given \(\mathbf{R}\) into the covariance matrix of the real-valued equivalent vector \(\tilde{\mathbf{z}}=\left[\mathbf{x}^{\mathsf{T}}, \mathbf{y}^{\mathsf{T}} \right ]^{\mathsf{T}}\in\mathbb{R}^{2M}\), which is computed as [CovProperRV]

\[\begin{split}\mathbb{E}\left[\tilde{\mathbf{z}}\tilde{\mathbf{z}}^{\mathsf{H}} \right] = \begin{pmatrix} \frac12\Re\{\mathbf{R}\} & -\frac12\Im\{\mathbf{R}\}\\ \frac12\Im\{\mathbf{R}\} & \frac12\Re\{\mathbf{R}\} \end{pmatrix}.\end{split}\]
Parameters:

r (torch.Tensor) – […, M, M], torch.complex. Complex-valued covariance matrix.

Outputs:

q – […, 2M, 2M], torch.float. Real-valued equivalent covariance matrix.

Examples

r = torch.complex(torch.eye(2), torch.zeros(2, 2))
rr = complex2real_covariance(r)
# rr.shape = torch.Size([4, 4])