Antenna Patterns
We refer the user to the section “Far Field of a Transmitting Antenna” for various useful
definitions and background on antenna modeling. An
AntennaPattern
can be single- or
dual-polarized and might have for each polarization direction a possibly
different pattern. One can think of a dual-polarized pattern as two colocated
linearly polarized antennas.
Mathematically, an antenna pattern is defined as a function
- class sionna.rt.AntennaPattern[source]
Abstract class for antenna patterns
Any instance of this class must implement the
patterns
property which returns a list of one or two antenna patterns for single- or dual-polarized antennas, respectively.- compute_gain(polarization_direction=0, num_samples=1000, verbose=True)[source]
Computes directivity, gain, and radiation efficiency of the antenna pattern of one of the polarization directions
Given a function
describing an antenna pattern (14), this function computes the directivity , gain , and radiation efficiency (see (12)).- Parameters:
polarization_direction (
int
) – Polarization direction (0 | 1)num_samples (
int
) – Number of discretization steps for numerical integrationverbose (
bool
) – If True, the results are pretty printed.
- Return type:
typing.Tuple
[drjit.cuda.ad.Float
,drjit.cuda.ad.Float
,drjit.cuda.ad.Float
]- Returns:
Directivity
, gain , and radiation efficiency
Example
from sionna.rt import PlanarArray array = PlanarArray(num_rows=1, num_cols=1, pattern="tr38901", polarization="V") d, g, eta = array.antenna_pattern.compute_gain();
Directivity [dB]: 9.825768560205825 Gain [dB]: 7.99998570013805 Efficiency [%]: 65.67826867103577
- property patterns
List of antenna patterns for one or two polarization directions. The pattern of a specific polarization direction can be also accessed by indexing the antenna pattern instance.
- Type:
List
[Callable
[[mitsuba.Float
,mitsuba.Float
],Tuple
[mitsuba.Complex2f
,mitsuba.Complex2f
]]]
- show(polarization_direction=0)[source]
Visualizes the antenna gain of the antenna pattern of one of the polarization directions
This function visualizes the directional antenna gain with the help of three figures showing the vertical and horizontal cuts as well as a three-dimensional visualization.
- Parameters:
polarization_direction (
int
) – Polarization direction (0 | 1)- Return type:
typing.Tuple
[matplotlib.figure.Figure
,matplotlib.figure.Figure
,matplotlib.figure.Figure
]- Returns:
Vertical cut, horizontal cut, and 3D visualization of the antenna gain
Example
from sionna.rt import PlanarArray array = PlanarArray(num_rows=1, num_cols=1, pattern="dipole", polarization="V") array.antenna_pattern.show()
- class sionna.rt.PolarizedAntennaPattern(*, v_pattern, polarization, polarization_model='tr38901_2')[source]
Transforms a vertically polarized antenna pattern function into an arbitray single- or dual-polarized antenna pattern based on a polarization and polarization model
- Parameters:
v_pattern (
typing.Callable
[[drjit.cuda.ad.Float
,drjit.cuda.ad.Float
],drjit.cuda.ad.Complex2f
]) – Vertically polarized antenna pattern functionpolarization (
str
) – Name of registered polarization (“V” | “H” | “VH” | “cross”)polarization_model (
str
) – Name of registered polarization model (“tr38901_1” | “tr38901_2”)
- compute_gain(polarization_direction=0, num_samples=1000, verbose=True)
Computes directivity, gain, and radiation efficiency of the antenna pattern of one of the polarization directions
Given a function
describing an antenna pattern (14), this function computes the directivity , gain , and radiation efficiency (see (12)).- Parameters:
polarization_direction (
int
) – Polarization direction (0 | 1)num_samples (
int
) – Number of discretization steps for numerical integrationverbose (
bool
) – If True, the results are pretty printed.
- Return type:
typing.Tuple
[drjit.cuda.ad.Float
,drjit.cuda.ad.Float
,drjit.cuda.ad.Float
]- Returns:
Directivity
, gain , and radiation efficiency
Example
from sionna.rt import PlanarArray array = PlanarArray(num_rows=1, num_cols=1, pattern="tr38901", polarization="V") d, g, eta = array.antenna_pattern.compute_gain();
Directivity [dB]: 9.825768560205825 Gain [dB]: 7.99998570013805 Efficiency [%]: 65.67826867103577
- property patterns
List of antenna patterns for one or two polarization directions. The pattern of a specific polarization direction can be also accessed by indexing the antenna pattern instance.
- Type:
List
[Callable
[[mitsuba.Float
,mitsuba.Float
],Tuple
[mitsuba.Complex2f
,mitsuba.Complex2f
]]]
- show(polarization_direction=0)
Visualizes the antenna gain of the antenna pattern of one of the polarization directions
This function visualizes the directional antenna gain with the help of three figures showing the vertical and horizontal cuts as well as a three-dimensional visualization.
- Parameters:
polarization_direction (
int
) – Polarization direction (0 | 1)- Return type:
typing.Tuple
[matplotlib.figure.Figure
,matplotlib.figure.Figure
,matplotlib.figure.Figure
]- Returns:
Vertical cut, horizontal cut, and 3D visualization of the antenna gain
Example
from sionna.rt import PlanarArray array = PlanarArray(num_rows=1, num_cols=1, pattern="dipole", polarization="V") array.antenna_pattern.show()
Vertically Polarized Antenna Pattern Functions
- sionna.rt.antenna_pattern.v_iso_pattern(theta, phi)[source]
Vertically polarized isotropic antenna pattern function
- Parameters:
theta (
drjit.cuda.ad.Float
) – Elevation angle [rad]phi (
drjit.cuda.ad.Float
) – Elevation angle [rad]
- Return type:
drjit.cuda.ad.Complex2f
- sionna.rt.antenna_pattern.v_dipole_pattern(theta, phi)[source]
Vertically polarized short dipole antenna pattern function from (Eq. 4-26a) [Balanis97]
- Parameters:
theta (
drjit.cuda.ad.Float
) – Elevation angle [rad]phi (
drjit.cuda.ad.Float
) – Elevation angle [rad]
- Return type:
drjit.cuda.ad.Complex2f
- sionna.rt.antenna_pattern.v_hw_dipole_pattern(theta, phi)[source]
Vertically polarized half-wavelength dipole antenna pattern function from (Eq. 4-84) [Balanis97]
- Parameters:
theta (
drjit.cuda.ad.Float
) – Elevation angle [rad]phi (
drjit.cuda.ad.Float
) – Elevation angle [rad]
- Return type:
drjit.cuda.ad.Complex2f
- sionna.rt.antenna_pattern.v_tr38901_pattern(theta, phi)[source]
Vertically polarized antenna pattern function from 3GPP TR 38.901 (Table 7.3-1) [TR38901]
- Parameters:
theta (
drjit.cuda.ad.Float
) – Elevation angle [rad]phi (
drjit.cuda.ad.Float
) – Elevation angle [rad]
- Return type:
drjit.cuda.ad.Complex2f
Polarization Models
- sionna.rt.antenna_pattern.polarization_model_tr38901_1(c_theta_tilde, theta, phi, slant_angle)[source]
Model-1 for polarized antennas from 3GPP TR 38.901 [TR38901]
Transforms a vertically polarized antenna pattern
into a linearly polarized pattern whose direction is specified by a slant angle . For example, and correspond to vertical and horizontal polarization, respectively, and to a pair of cross polarized antenna elements.The transformed antenna pattern is given by (7.3-3) [TR38901]:
- Parameters:
c_theta_tilde (
drjit.cuda.ad.Complex2f
) – Vertically polarized zenith patterntheta (
drjit.cuda.ad.Float
) – Zenith angles [rad]phi (
drjit.cuda.ad.Float
) – Azimuth angles [rad]slant_angle (
drjit.cuda.ad.Float
) – Slant angle of the linear polarization [rad]. A slant angle of zero means vertical polarization.
- Return type:
typing.Tuple
[drjit.cuda.ad.Complex2f
,drjit.cuda.ad.Complex2f
]- Returns:
Zenith (
) and azimuth ( ) pattern
- sionna.rt.antenna_pattern.polarization_model_tr38901_2(c_theta_tilde, theta, phi, slant_angle)[source]
Model-2 for polarized antennas from 3GPP TR 38.901 [TR38901]
Transforms a vertically polarized antenna pattern
into a linearly polarized pattern whose direction is specified by a slant angle . For example, and correspond to vertical and horizontal polarization, respectively, and to a pair of cross polarized antenna elements.The transformed antenna pattern is given by (7.3-4/5) [TR38901]:
- Parameters:
c_theta_tilde (
drjit.cuda.ad.Complex2f
) – Vertically polarized zenith patterntheta (
drjit.cuda.ad.Float
) – Zenith angles [rad]phi (
drjit.cuda.ad.Float
) – Azimuth angles [-pi, pi) [rad]slant_angle (
drjit.cuda.ad.Float
) – Slant angle of the linear polarization [rad]. A slant angle of zero means vertical polarization.
- Return type:
typing.Tuple
[drjit.cuda.ad.Complex2f
,drjit.cuda.ad.Complex2f
]- Returns:
Zenith (
) and azimuth ( ) pattern
Utility Functions
- sionna.rt.antenna_pattern.antenna_pattern_to_world_implicit(pattern, to_world, k_world, direction)[source]
Evaluates an antenna pattern for a given direction and returns it in the world implicit basis
For a given direction in the world frame, this function first obtains the local zenith and azimuth angles
and of the antenna. Then, the antenna pattern is evaluated to obtain the complex-valued zenith and azimuth patterns and , respectively. Both are then transformed into the real-valued vectorsThe final output is obtained by applying a to-world rotation matrix
to both vectors before they are stacked:The parameter direction indicates the direction of propagation of the transverse wave with respect to the antenna, i.e., away from the antenna (direction = “out”) or towards the antenna (direction = “in”). If the wave propagates towards the antenna, then the evaluated antenna pattern is rotated to be represented in the world frame.
- Parameters:
pattern (
typing.Callable
[[drjit.cuda.ad.Float
,drjit.cuda.ad.Float
],typing.Tuple
[drjit.cuda.ad.Complex2f
,drjit.cuda.ad.Complex2f
]]) – Antenna patternto_world (
drjit.cuda.ad.Matrix3f
) – To-world rotation matrixk_world (
mitsuba.Vector3f
) – Direction in which to evaluate the antenna pattern in the world framedirection (
str
) – Direction of propagation with respect to the antenna (“in” | “out”)
- Return type:
mitsuba.Vector4f
- Returns:
Antenna pattern in the world implicit basis as a real-valued vector
- sionna.rt.antenna_pattern.complex2real_antenna_pattern(c_theta, c_phi)[source]
Converts a complex-valued antenna pattern to a real-valued representation
- Parameters:
c_theta (
drjit.cuda.ad.Complex2f
) – Zenith antenna patternc_phi (
drjit.cuda.ad.Complex2f
) – Azimuth antenna pattern
- Return type:
typing.Tuple
[mitsuba.Vector2f
,mitsuba.Vector2f
]- Returns:
Tuple of the real and imaginary parts of the zenith and azimuth antenna patterns
- sionna.rt.register_antenna_pattern(name, pattern_factory)[source]
Registers a new factory method for an antenna pattern
- Parameters:
name (
str
) – Name of the factory methodpattern_factory (
typing.Callable
[...
,sionna.rt.antenna_pattern.AntennaPattern
]) – A factory method returning an instance ofAntennaPattern
- sionna.rt.register_polarization(name, slant_angles)[source]
Registers a new polarization
A polarization is defined as a list of one or two slant angles that will be applied to a vertically polarized antenna pattern function to create the desired polarization directions.
- Parameters:
name (
str
) – Name of the polarizationslant_angles (
typing.List
[float
]) – List of one or two slant angles
- sionna.rt.register_polarization_model(name, model)[source]
Registers a new polarization model
A polarization model uses a slant angle to transform a vertically polarized antenna pattern into an arbitrarily rotated linearly polarized antenna pattern
- Parameters:
name (
str
) – Name of the polarization modelmodel (
typing.Callable
[[drjit.cuda.ad.Complex2f
,drjit.cuda.ad.Float
,drjit.cuda.ad.Float
,drjit.cuda.ad.Float
],typing.Tuple
[drjit.cuda.ad.Complex2f
,drjit.cuda.ad.Complex2f
]]) – Polarization model
- References: