grid_of_beams_dft#

sionna.phy.mimo.grid_of_beams_dft(num_ant_v: int, num_ant_h: int, oversmpl_v: int = 1, oversmpl_h: int = 1, precision: Literal['single', 'double'] | None = None, device: str | None = None) torch.Tensor[source]#

Computes the Discrete Fourier Transform (DFT) Grid of Beam (GoB) coefficients for a uniform rectangular array (URA).

GoB indices are arranged over a 2D grid indexed by \((m_v,m_h)\). The coefficient of the beam with index \((m_v,m_h)\) applied to the antenna located at row \(n_v\) and column \(n_h\) of the rectangular array is expressed as:

\[c_{n_v,n_h}^{m_v,m_h} = \frac{1}{\sqrt{N_vN_h}} e^{j\frac{2\pi n_v m_v}{N_v O_v}} e^{j\frac{2\pi n_h m_h}{N_h O_h}}\]

where \(n_v=0,\dots,N_v-1\), \(n_h=0,\dots,N_h-1\), \(m_v=0,\dots,N_v O_v-1\), \(m_h=0,\dots,N_h O_h-1\), \(N_v,N_h\) are the numbers of antennas num_ant_v, num_ant_h, and \(O_v,O_h\) are the oversampling factors oversmpl_v, oversmpl_h in the vertical and horizontal direction, respectively.

We can rewrite more concisely the matrix coefficients \(c^{m_v,m_h}\) as follows:

\[\mathbf{c}^{m_v,m_h} = \mathbf{c}_h^{m_h} \otimes \mathbf{c}_v^{m_v}\]

where \(\otimes\) denotes the Kronecker product, \(\mathbf{c}_v^{m_v}\) and \(\mathbf{c}_h^{m_h}\) are the vertical and horizontal ULA DFT beams, respectively, and the ordering follows column-wise flattening of the rectangular array.

Such a DFT GoB is, e.g., defined in Section 5.2.2.2.1 [3GPPTS38214].

Parameters:
  • num_ant_v (int) – Number of antenna rows (i.e., in vertical direction)

  • num_ant_h (int) – Number of antenna columns (i.e., in horizontal direction)

  • oversmpl_v (int) – Oversampling factor in vertical direction

  • oversmpl_h (int) – Oversampling factor in horizontal direction

  • precision (Literal['single', 'double'] | 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:

gob – [num_ant_v x oversmpl_v, num_ant_h x oversmpl_h, num_ant_v x num_ant_h], torch.complex. The elements \([m_v,m_h,:]\) contain the antenna coefficients of the DFT beam with index pair \((m_v,m_h)\).

Examples

gob = grid_of_beams_dft(num_ant_v=4, num_ant_h=8)
# gob.shape = torch.Size([4, 8, 32])