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) 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} = e^{\frac{2\pi n_h m_v}{N_h O_h}} e^{\frac{2\pi n_h m_h}{N_v O_v}}\]

where \(n_v=0,\dots,N_v-1\), \(n_h=0,\dots,N_h-1\), \(m_v=0,\dots,N_v O_v\), \(m_h=0,\dots,N_h O_h\), \(N\) is the number of antennas num_ant and \(O_v,O_h\) are the oversampling factor 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:

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

where \(\otimes\) denotes the Kronecker product and \(c^{m_v},c^{m_h}\) are the ULA DFT beams computed as in grid_of_beams_dft_ula().

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.

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