PanelArray#

class sionna.phy.channel.tr38901.PanelArray(num_rows_per_panel: int, num_cols_per_panel: int, polarization: str, polarization_type: str, antenna_pattern: str, carrier_frequency: float, num_rows: int = 1, num_cols: int = 1, panel_vertical_spacing: float | None = None, panel_horizontal_spacing: float | None = None, element_vertical_spacing: float | None = None, element_horizontal_spacing: float | None = None, precision: str | None = None, device: str | None = None)[source]#

Bases: sionna.phy.object.Object

Antenna panel array following the [TR38901V1920] specification

This class is used to create models of the panel arrays used by the transmitters and receivers and that need to be specified when using the CDL, UMi, UMa, RMa, and InH, and InF models.

An array is made of num_rows \(\times\) num_cols panels, and every panel carries num_rows_per_panel \(\times\) num_cols_per_panel elements. All elements lie in the \(y-z\) plane of the local coordinate system and the array is centered on its origin. Element and panel spacings are specified in multiples of the wavelength that corresponds to carrier_frequency. For dual polarization, the two orthogonally polarized elements of a position are co-located.

../../../../_images/panel_array_geometry.svg

Fig. 13 Geometry of a panel array. The element spacings element_horizontal_spacing (\(d_\text{H}\)) and element_vertical_spacing (\(d_\text{V}\)) apply within a panel, whereas the panel spacings panel_horizontal_spacing (\(D_\text{H}\)) and panel_vertical_spacing (\(D_\text{V}\)) are measured between corresponding elements of adjacent panels. The local \(x\)-axis points out of the shown plane.#

Parameters:
  • num_rows_per_panel (int) – Number of rows of elements per panel

  • num_cols_per_panel (int) – Number of columns of elements per panel

  • polarization (str) – Polarization. One of "single" or "dual".

  • polarization_type (str) – Type of polarization. For single polarization, must be "V" or "H". For dual polarization, must be "VH" or "cross".

  • antenna_pattern (str) – Element radiation pattern. One of "omni", "38.901", or "38.901-handheld".

  • carrier_frequency (float) – Carrier frequency [Hz]

  • num_rows (int) – Number of rows of panels. Defaults to 1.

  • num_cols (int) – Number of columns of panels. Defaults to 1.

  • panel_vertical_spacing (float | None) – Vertical spacing of panels [multiples of wavelength]. Must be greater than the panel height. If set to None, it is set to the panel height + 0.5.

  • panel_horizontal_spacing (float | None) – Horizontal spacing of panels [in multiples of wavelength]. Must be greater than the panel width. If set to None, it is set to the panel width + 0.5.

  • element_vertical_spacing (float | None) – Element vertical spacing [multiple of wavelength]. Defaults to 0.5 if set to None.

  • element_horizontal_spacing (float | None) – Element horizontal spacing [multiple of wavelength]. Defaults to 0.5 if set to None.

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

  • device (str | None) – Device for computation (e.g., "cpu", "cuda:0"). If None, device is used.

Examples

from sionna.phy.channel.tr38901 import PanelArray

array = PanelArray(num_rows_per_panel=4,
                   num_cols_per_panel=4,
                   polarization='dual',
                   polarization_type='VH',
                   antenna_pattern='38.901',
                   carrier_frequency=3.5e9,
                   num_cols=2,
                   panel_horizontal_spacing=3.)
array.show()
../../../../_images/panel_array_show.png

Fig. 14 Output of show() for the array of the example above. The two panels of 4 \(\times\) 4 vertically and horizontally polarized elements are separated by three wavelengths, and the annotations are the port indices.#

Attributes

property ant_ind_pol1: torch.Tensor#

Indices of antenna elements with the first polarization direction

property ant_ind_pol2: torch.Tensor#

Indices of antenna elements with the second polarization direction. Only defined with dual polarization.

property ant_pol1: sionna.phy.channel.tr38901.antenna.AntennaElement#

Field of an antenna element with the first polarization direction

property ant_pol2: sionna.phy.channel.tr38901.antenna.AntennaElement#

Field of an antenna element with the second polarization direction. Only defined with dual polarization.

property ant_pos: torch.Tensor#

Positions of the antennas

property ant_pos_pol1: torch.Tensor#

Positions of the antenna elements with the first polarization direction

property ant_pos_pol2: torch.Tensor#

Positions of antenna elements with the second polarization direction. Only defined with dual polarization.

property element_horizontal_spacing: torch.Tensor#

Horizontal spacing between the antenna elements within a panel [multiple of wavelength]

property element_vertical_spacing: torch.Tensor#

Vertical spacing between the antenna elements within a panel [multiple of wavelength]

property num_ant: int#

Total number of antenna elements

property num_cols: int#

Number of columns of panels

property num_cols_per_panel: int#

Number of columns of elements per panel

property num_panels: int#

Number of panels

property num_panels_ant: int#

Number of antenna elements per panel

property num_rows: int#

Number of rows of panels

property num_rows_per_panel: int#

Number of rows of elements per panel

property panel_horizontal_spacing: torch.Tensor#

Horizontal spacing between the panels [multiple of wavelength]

property panel_vertical_spacing: torch.Tensor#

Vertical spacing between the panels [multiple of wavelength]

property polarization: str#

Polarization, either "single" or "dual".

property polarization_type: str#

Polarization type. "V" or "H" for single polarization. "VH" or "cross" for dual polarization.

Methods

show() → None[source]#

Show the panel array geometry

show_element_radiation_pattern() → None[source]#

Show the radiation field of antenna elements forming the panel