Antenna Patterns

We refer the user to the section “Far Field of a Transmitting Antenna” for various usefuldefinitions and background on antenna modeling. AnAntennaPattern can be single- ordual-polarized and might have for each polarization direction a possiblydifferent pattern. One can think of a dual-polarized pattern as two colocatedlinearly polarized antennas.

Mathematically, an antenna pattern is defined as a function\(f:(\theta,\varphi)\mapsto (C_\theta(\theta, \varphi), C_\varphi(\theta, \varphi))\) that maps a pair of zenith and azimuth angles to zenith and azimuth pattern values.

classsionna.rt.AntennaPattern[source]

Abstract class for antenna patterns

Any instance of this class must implement thepatternsproperty which returns a list of one or two antenna patternsfor 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 antennapattern of one of the polarization directions

Given a function\(f:(\theta,\varphi)\mapsto (C_\theta(\theta, \varphi), C_\varphi(\theta, \varphi))\)describing an antenna pattern(14), this function computes thedirectivity\(D\), gain\(G\),and radiation efficiency\(\eta_\text{rad}=G/D\)(see(12)).

Parameters:
  • polarization_direction (int) – Polarization direction (0 | 1)

  • num_samples (int) – Number of discretization stepsfor numerical integration

  • verbose (bool) – IfTrue, the results are pretty printed.

Return type:

typing.Tuple[drjit.cuda.ad.Float,drjit.cuda.ad.Float,drjit.cuda.ad.Float]

Returns:

Directivity\(D\), gain\(G\), and radiation efficiency\(\eta_\text{rad}=G/D\)

Example

fromsionna.rtimportPlanarArrayarray=PlanarArray(num_rows=1,num_cols=1,pattern="tr38901",polarization="V")d,g,eta=array.antenna_pattern.compute_gain();
Directivity[dB]:9.825768560205825Gain[dB]:7.99998570013805Efficiency[%]:65.67826867103577
propertypatterns

List of antenna patterns for one or two polarization directions.The pattern of a specific polarization direction can be also accessed byindexing 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 oneof the polarization directions

This function visualizes the directional antenna gain with the helpof three figures showing the vertical and horizontal cuts as well as athree-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 ofthe antenna gain

Example

fromsionna.rtimportPlanarArrayarray=PlanarArray(num_rows=1,num_cols=1,pattern="dipole",polarization="V")array.antenna_pattern.show()
../../_images/pattern_vertical.png
../../_images/pattern_horizontal.png
../../_images/pattern_3d.png
classsionna.rt.PolarizedAntennaPattern(*,v_pattern,polarization,polarization_model='tr38901_2')[source]

Transforms avertically polarized antenna pattern functioninto an arbitray single- or dual-polarized antenna patternbased 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 function

  • polarization (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 antennapattern of one of the polarization directions

Given a function\(f:(\theta,\varphi)\mapsto (C_\theta(\theta, \varphi), C_\varphi(\theta, \varphi))\)describing an antenna pattern(14), this function computes thedirectivity\(D\), gain\(G\),and radiation efficiency\(\eta_\text{rad}=G/D\)(see(12)).

Parameters:
  • polarization_direction (int) – Polarization direction (0 | 1)

  • num_samples (int) – Number of discretization stepsfor numerical integration

  • verbose (bool) – IfTrue, the results are pretty printed.

Return type:

typing.Tuple[drjit.cuda.ad.Float,drjit.cuda.ad.Float,drjit.cuda.ad.Float]

Returns:

Directivity\(D\), gain\(G\), and radiation efficiency\(\eta_\text{rad}=G/D\)

Example

fromsionna.rtimportPlanarArrayarray=PlanarArray(num_rows=1,num_cols=1,pattern="tr38901",polarization="V")d,g,eta=array.antenna_pattern.compute_gain();
Directivity[dB]:9.825768560205825Gain[dB]:7.99998570013805Efficiency[%]:65.67826867103577
propertypatterns

List of antenna patterns for one or two polarization directions.The pattern of a specific polarization direction can be also accessed byindexing 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 oneof the polarization directions

This function visualizes the directional antenna gain with the helpof three figures showing the vertical and horizontal cuts as well as athree-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 ofthe antenna gain

Example

fromsionna.rtimportPlanarArrayarray=PlanarArray(num_rows=1,num_cols=1,pattern="dipole",polarization="V")array.antenna_pattern.show()
../../_images/pattern_vertical.png
../../_images/pattern_horizontal.png
../../_images/pattern_3d.png

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 functionfrom (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 functionfrom (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 from3GPP 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\(\tilde{C}_\theta(\theta, \varphi)\)into a linearly polarized pattern whose directionis specified by a slant angle\(\zeta\). For example,\(\zeta=0\) and\(\zeta=\pi/2\) correspondto vertical and horizontal polarization, respectively,and\(\zeta=\pm \pi/4\) to a pair of cross polarizedantenna elements.

The transformed antenna pattern is given by (7.3-3)[TR38901]:

\[\begin{split}\begin{align} \begin{bmatrix} C_\theta(\theta, \varphi) \\ C_\varphi(\theta, \varphi) \end{bmatrix} &= \begin{bmatrix} \cos(\psi) \\ \sin(\psi) \end{bmatrix} \tilde{C}_\theta(\theta, \varphi)\\ \cos(\psi) &= \frac{\cos(\zeta)\sin(\theta)+\sin(\zeta)\sin(\varphi)\cos(\theta)}{\sqrt{1-\left(\cos(\zeta)\cos(\theta)-\sin(\zeta)\sin(\varphi)\sin(\theta)\right)^2}} \\ \sin(\psi) &= \frac{\sin(\zeta)\cos(\varphi)}{\sqrt{1-\left(\cos(\zeta)\cos(\theta)-\sin(\zeta)\sin(\varphi)\sin(\theta)\right)^2}}\end{align}\end{split}\]
Parameters:
  • c_theta_tilde (drjit.cuda.ad.Complex2f) – Vertically polarized zenith pattern\(\tilde{C}_\theta(\theta, \varphi)\)

  • theta (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 (\(C_\theta\)) and azimuth (\(C_\phi\)) 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\(\tilde{C}_\theta(\theta, \varphi)\)into a linearly polarized pattern whose directionis specified by a slant angle\(\zeta\). For example,\(\zeta=0\) and\(\zeta=\pi/2\) correspondto vertical and horizontal polarization, respectively,and\(\zeta=\pm \pi/4\) to a pair of cross polarizedantenna elements.

The transformed antenna pattern is given by (7.3-4/5)[TR38901]:

\[\begin{split}\begin{align} \begin{bmatrix} C_\theta(\theta, \varphi) \\ C_\varphi(\theta, \varphi) \end{bmatrix} &= \begin{bmatrix} \cos(\zeta) \\ \sin(\zeta) \end{bmatrix} \tilde{C}_\theta(\theta, \varphi)\end{align}\end{split}\]
Parameters:
  • c_theta_tilde (drjit.cuda.ad.Complex2f) – Vertically polarized zenith pattern\(\tilde{C}_\theta(\theta, \varphi)\)

  • theta (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 (\(C_\theta\)) and azimuth (\(C_\phi\)) 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 andreturns it in the world implicit basis

For a given direction in the world frame, this function first obtainsthe local zenith and azimuth angles\(\theta\) and\(\phi\) of the antenna. Then, the antenna patternis evaluated to obtain the complex-valued zenith and azimuth patterns\(C_\theta\) and\(C_\phi\), respectively. Both are thentransformed into the real-valued vectors

\[ \begin{align}\begin{aligned}\begin{split}\mathbf{f}_\text{real} = \begin{bmatrix} \Re\{C_\theta(\theta,\phi)\} \\ \Re\{C_\phi(\theta,\phi)\} \end{bmatrix}\end{split}\\\begin{split}\mathbf{f}_\text{imag} = \begin{bmatrix} \Im\{C_\theta(\theta,\phi)\} \\ \Im\{C_\phi(\theta,\phi)\} \end{bmatrix}.\end{split}\end{aligned}\end{align} \]

The final output is obtained by applying a to-world rotationmatrix\(\mathbf{W}\) to both vectors before they are stacked:

\[\begin{split}\mathbf{v}_\text{out} = \begin{bmatrix} \mathbf{W} \mathbf{f}_\text{real}\\ \mathbf{W} \mathbf{f}_\text{imag} \end{bmatrix}.\end{split}\]

The parameterdirection indicates the direction of propagation of thetransverse wave with respect to the antenna, i.e., away from the antenna(direction = “out”) or towards the antenna (direction = “in”). If thewave propagates towards the antenna, then the evaluated antenna patternis 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 pattern

  • to_world (drjit.cuda.ad.Matrix3f) – To-world rotation matrix

  • k_world (mitsuba.Vector3f) – Direction in which to evaluate the antenna pattern inthe world frame

  • direction (str) – Direction of propagation with respectto the antenna (“in” | “out”)

Return type:

mitsuba.Vector4f

Returns:

Antenna pattern in the world implicit basis as areal-valued vector

sionna.rt.antenna_pattern.complex2real_antenna_pattern(c_theta,c_phi)[source]

Converts a complex-valued antenna pattern toa real-valued representation

Parameters:
  • c_theta (drjit.cuda.ad.Complex2f) – Zenith antenna pattern

  • c_phi (drjit.cuda.ad.Complex2f) – Azimuth antenna pattern

Return type:

typing.Tuple[mitsuba.Vector2f,mitsuba.Vector2f]

Returns:

Tuple of the real and imaginaryparts 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:
sionna.rt.register_polarization(name,slant_angles)[source]

Registers a new polarization

A polarization is defined as a list of one or two slant anglesthat will be applied to a vertically polarized antenna patternfunction to create the desired polarization directions.

Parameters:
  • name (str) – Name of the polarization

  • slant_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 transforma vertically polarized antenna pattern into an arbitrarilyrotated linearly polarized antenna pattern

Parameters:
  • name (str) – Name of the polarization model

  • model (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:
[Balanis97](1,2)

A. Balanis, “Antenna Theory: Analysis and Design,” 2nd Edition, John Wiley & Sons, 1997.

[TR38901](1,2,3,4,5)

3GPP TR 38.901, “Study on channel model for frequencies from 0.5to 100 GHz”, Release 18.0