one_ring_corr_mat#

sionna.phy.channel.one_ring_corr_mat(phi_deg: torch.Tensor, num_ant: int, d_h: float = 0.5, sigma_phi_deg: float = 15.0, precision: str | None = None, device: str | None = None) torch.Tensor[source]#

Generates covariance matrices from the one-ring model

This function generates approximate covariance matrices for the so-called one-ring model (Eq. 2.24) [BHS2017]. A uniform linear array (ULA) with uniform antenna spacing is assumed. The elements of the covariance matrices are computed as:

\[\mathbf{R}_{\ell,m} = \exp\left( j2\pi d_\text{H} (\ell -m)\sin(\varphi) \right) \exp\left( -\frac{\sigma_\varphi^2}{2} \left( 2\pi d_\text{H}(\ell -m)\cos(\varphi) \right)^2 \right)\]

for \(\ell,m = 1,\dots, M\), where \(M\) is the number of antennas, \(\varphi\) is the angle of arrival, \(d_\text{H}\) is the antenna spacing in multiples of the wavelength, and \(\sigma^2_\varphi\) is the angular standard deviation.

Parameters:
  • phi_deg (torch.Tensor) – Azimuth angles (deg) of arrival, shape [n_0, …, n_k]

  • num_ant (int) – Number of antennas

  • d_h (float) – Antenna spacing in multiples of the wavelength. Defaults to 0.5.

  • sigma_phi_deg (float) – Angular standard deviation (deg). Values greater than 15 should not be used as the approximation becomes invalid. Defaults to 15.0.

  • precision (str | None) – Precision used for internal calculations and outputs. If set to None, precision is used.

  • device (str | None) – Device for computation. If None, device is used.

Outputs:

R – [n_0, …, n_k, num_ant, num_ant], torch.complex. Covariance matrices.

Examples

import torch
from sionna.phy.channel import one_ring_corr_mat

# Single covariance matrix
R = one_ring_corr_mat(torch.tensor(45.0), 4)
print(R.shape)
# torch.Size([4, 4])

# Batch of covariance matrices
R = one_ring_corr_mat(torch.rand(2, 3) * 180 - 90, 4)
print(R.shape)
# torch.Size([2, 3, 4, 4])