Antenna Descriptions

Inheritance diagram of hermespy.core.antennas.Antenna, hermespy.core.antennas.IdealAntenna, hermespy.core.antennas.PatchAntenna, hermespy.core.antennas.Dipole
Inheritance diagram of hermespy.core.antennas.AntennaArrayBase, hermespy.core.antennas.AntennaArrayState, hermespy.core.antennas.AntennaArray, hermespy.core.antennas.UniformArray, hermespy.core.antennas.CustomAntennaArray
class Antenna(mode=AntennaMode.DUPLEX, pose=None)[source]

Bases: ABC, Transformable

Base class for the model of a single antenna element within an antenna array.

Parameters:
  • mode (AntennaMode) – Antenna’s mode of operation. By default, a full duplex antenna is assumed.

  • pose (Transformation | None) – The antenna’s position and orientation with respect to its array.

classmethod Deserialize_Antenna(process)[source]
Return type:

tuple[AntennaMode, Transformation]

abstract copy()[source]

Create a deep copy of the antenna.

Return type:

TypeVar(AT, bound= Antenna)

Returns:

A deep copy of the antenna.

global_characteristics(global_direction)[source]

Query the antenna’s polarization characteristics towards a certain direction of interest.

Parameters:

global_direction (Direction) – Cartesian direction unit vector of interest.

Return type:

ndarray

Returns:

Two-dimensional numpy vector representing the antenna’s polarization components.

abstract local_characteristics(azimuth, elevation)[source]

Generate a single sample of the antenna’s characteristics.

The polarization is characterized by the angle-dependant field vector

\[\begin{split}\mathbf{F}(\phi, \theta) = \begin{pmatrix} F_{\mathrm{H}}(\phi, \theta) \\ F_{\mathrm{V}}(\phi, \theta) \\ \end{pmatrix}\end{split}\]

denoting the horizontal and vertical field components. The directional antenna gain can be computed from the polarization vector magnitude

\[\begin{split}A(\phi, \theta) &= \lVert \mathbf{F}(\phi, \theta) \rVert \\ &= \sqrt{ F_{\mathrm{H}}(\phi, \theta)^2 + F_{\mathrm{V}}(\phi, \theta)^2 }\end{split}\]
Parameters:
  • azimuth (float) – Considered horizontal wave angle in radians \(\phi\).

  • elevation – Considered vertical wave angle in radians \(\theta\).

Return type:

ndarray

Returns:

Two dimensional numpy array denoting the horizontal and vertical ploarization components of the antenna response vector.

plot_gain(angle_resolution=180)[source]

Visualize the antenna gain depending on the angles of interest.

Parameters:

angle_resolution (int) – Resolution of the polarization visualization.

Return type:

Figure

Returns:

The created matplotlib figure.

Raises:

ValueError – If angle_resolution is smaller than one.

plot_polarization(angle_resolution=180)[source]

Visualize the antenna polarization depending on the angles of interest.

Parameters:

angle_resolution (int) – Resolution of the polarization visualization.

Return type:

Figure

Returns:

The created matplotlib figure.

Raises:

ValueError – If angle_resolution is smaller than one.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

property mode: AntennaMode[source]

Antenna’s mode of operation.

class IdealAntenna(mode=AntennaMode.DUPLEX, pose=None)[source]

Bases: Antenna, Serializable

Theoretic model of an ideal antenna.

Ideal Antenna Gain

Ideal Antenna Characteristics

The assumed characteristic is

\[\begin{split}\mathbf{F}(\phi, \theta) = \begin{pmatrix} \sqrt{2} \\ \sqrt{2} \\ \end{pmatrix}\end{split}\]

resulting in unit gain in every direction.

Parameters:
  • mode (AntennaMode) – Antenna’s mode of operation. By default, a full duplex antenna is assumed.

  • pose (Transformation | None) – The antenna’s position and orientation with respect to its array.

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

IdealAntenna

Returns:

The deserialized object.

copy()[source]

Create a deep copy of the antenna.

Return type:

IdealAntenna

Returns:

A deep copy of the antenna.

local_characteristics(azimuth, elevation)[source]

Generate a single sample of the antenna’s characteristics.

The polarization is characterized by the angle-dependant field vector

\[\begin{split}\mathbf{F}(\phi, \theta) = \begin{pmatrix} F_{\mathrm{H}}(\phi, \theta) \\ F_{\mathrm{V}}(\phi, \theta) \\ \end{pmatrix}\end{split}\]

denoting the horizontal and vertical field components. The directional antenna gain can be computed from the polarization vector magnitude

\[\begin{split}A(\phi, \theta) &= \lVert \mathbf{F}(\phi, \theta) \rVert \\ &= \sqrt{ F_{\mathrm{H}}(\phi, \theta)^2 + F_{\mathrm{V}}(\phi, \theta)^2 }\end{split}\]
Parameters:
  • azimuth (float) – Considered horizontal wave angle in radians \(\phi\).

  • elevation (float) – Considered vertical wave angle in radians \(\theta\).

Return type:

ndarray

Returns:

Two dimensional numpy array denoting the horizontal and vertical ploarization components of the antenna response vector.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

class LinearAntenna(mode=AntennaMode.DUPLEX, slant=0.0, pose=None)[source]

Bases: Antenna, Serializable

Model of a linearly polarized ideal antenna.

The assumed characteristic is

\[\begin{split}\mathbf{F}(\theta, \phi, \zeta) = \begin{pmatrix} \cos (\zeta) \\ \sin (\zeta) \\ \end{pmatrix}\end{split}\]

with \(zeta = 0\) resulting in vertical polarization and \(zeta = \pi / 2\) resulting in horizontal polarization.

Initialize a new linear antenna.

Parameters:
  • mode (AntennaMode) – Antenna’s mode of operation. By default, a full duplex antenna is assumed.

  • mode – Antenna’s mode of operation. By default, a full duplex antenna is assumed.

  • slant (float) – Slant of the antenna in radians.

  • pose (Transformation | None) – Pose of the antenna.

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

LinearAntenna

Returns:

The deserialized object.

copy()[source]

Create a deep copy of the antenna.

Return type:

LinearAntenna

Returns:

A deep copy of the antenna.

local_characteristics(azimuth, zenith)[source]

Generate a single sample of the antenna’s characteristics.

The polarization is characterized by the angle-dependant field vector

\[\begin{split}\mathbf{F}(\phi, \theta) = \begin{pmatrix} F_{\mathrm{H}}(\phi, \theta) \\ F_{\mathrm{V}}(\phi, \theta) \\ \end{pmatrix}\end{split}\]

denoting the horizontal and vertical field components. The directional antenna gain can be computed from the polarization vector magnitude

\[\begin{split}A(\phi, \theta) &= \lVert \mathbf{F}(\phi, \theta) \rVert \\ &= \sqrt{ F_{\mathrm{H}}(\phi, \theta)^2 + F_{\mathrm{V}}(\phi, \theta)^2 }\end{split}\]
Parameters:
  • azimuth (float) – Considered horizontal wave angle in radians \(\phi\).

  • elevation – Considered vertical wave angle in radians \(\theta\).

Return type:

ndarray

Returns:

Two dimensional numpy array denoting the horizontal and vertical ploarization components of the antenna response vector.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

property slant: float[source]

Slant of the antenna in radians.

class PatchAntenna(mode=AntennaMode.DUPLEX, pose=None)[source]

Bases: Antenna, Serializable

Realistic model of a vertically polarized patch antenna.

Patch Antenna Gain

Patch Antenna Characteristics

Refer to Jaeckel et al.[1] for further information.

Parameters:
  • mode (AntennaMode) – Antenna’s mode of operation. By default, a full duplex antenna is assumed.

  • pose (Transformation | None) – The antenna’s position and orientation with respect to its array.

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

PatchAntenna

Returns:

The deserialized object.

copy()[source]

Create a deep copy of the antenna.

Return type:

PatchAntenna

Returns:

A deep copy of the antenna.

local_characteristics(azimuth, elevation)[source]

Generate a single sample of the antenna’s characteristics.

The polarization is characterized by the angle-dependant field vector

\[\begin{split}\mathbf{F}(\phi, \theta) = \begin{pmatrix} F_{\mathrm{H}}(\phi, \theta) \\ F_{\mathrm{V}}(\phi, \theta) \\ \end{pmatrix}\end{split}\]

denoting the horizontal and vertical field components. The directional antenna gain can be computed from the polarization vector magnitude

\[\begin{split}A(\phi, \theta) &= \lVert \mathbf{F}(\phi, \theta) \rVert \\ &= \sqrt{ F_{\mathrm{H}}(\phi, \theta)^2 + F_{\mathrm{V}}(\phi, \theta)^2 }\end{split}\]
Parameters:
  • azimuth (float) – Considered horizontal wave angle in radians \(\phi\).

  • elevation (float) – Considered vertical wave angle in radians \(\theta\).

Return type:

ndarray

Returns:

Two dimensional numpy array denoting the horizontal and vertical ploarization components of the antenna response vector.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

class Dipole(mode=AntennaMode.DUPLEX, pose=None)[source]

Bases: Antenna, Serializable

Model of vertically polarized half-wavelength dipole antenna.

Dipole Antenna Gain

Dipole Antenna Characteristics

The assumed characteristic is

\[\begin{split}F_\mathrm{V}(\phi, \theta) &= \frac{ \cos( \frac{\pi}{2} \cos(\theta)) }{ \sin(\theta) } \\ F_\mathrm{H}(\phi, \theta) &= 0\end{split}\]
Parameters:
  • mode (AntennaMode) – Antenna’s mode of operation. By default, a full duplex antenna is assumed.

  • pose (Transformation | None) – The antenna’s position and orientation with respect to its array.

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

Dipole

Returns:

The deserialized object.

copy()[source]

Create a deep copy of the antenna.

Return type:

Dipole

Returns:

A deep copy of the antenna.

local_characteristics(azimuth, elevation)[source]

Generate a single sample of the antenna’s characteristics.

The polarization is characterized by the angle-dependant field vector

\[\begin{split}\mathbf{F}(\phi, \theta) = \begin{pmatrix} F_{\mathrm{H}}(\phi, \theta) \\ F_{\mathrm{V}}(\phi, \theta) \\ \end{pmatrix}\end{split}\]

denoting the horizontal and vertical field components. The directional antenna gain can be computed from the polarization vector magnitude

\[\begin{split}A(\phi, \theta) &= \lVert \mathbf{F}(\phi, \theta) \rVert \\ &= \sqrt{ F_{\mathrm{H}}(\phi, \theta)^2 + F_{\mathrm{V}}(\phi, \theta)^2 }\end{split}\]
Parameters:
  • azimuth (float) – Considered horizontal wave angle in radians \(\phi\).

  • elevation (float) – Considered vertical wave angle in radians \(\theta\).

Return type:

ndarray

Returns:

Two dimensional numpy array denoting the horizontal and vertical ploarization components of the antenna response vector.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

class AntennaArrayBase(pose=None)[source]

Bases: ABC, Transformable

Base class for all antenna array models.

Parameters:

pose (Transformation | None) – Transformation of the transformable with respect to its reference frame. By default, no transformation is considered.

cartesian_array_response(carrier_frequency, position, frame='local', mode=AntennaMode.DUPLEX)[source]

Sensor array characteristics towards an impinging point source within its far-field.

Parameters:
  • carrier_frequency (float) – Center frequency \(f_\mathrm{c}\) of the assumed transmitted signal in Hz.

  • position (ndarray) – Cartesian location \(\mathbf{t}\) of the impinging target.

  • frame (Literal['local', 'global']) – Coordinate system reference frame. global by default. local assumes position to be in the antenna array’s native coordiante system. global assumes position to be in the antenna array’s root coordinate system.

  • mode (AntennaMode) – Antenna mode of interest. DUPLEX by default, meaning that all antenna elements are considered.

Return type:

ndarray

Returns:

The sensor array response matrix \(\mathbf{A} \in \mathbb{C}^{M \times 2}\). A one-dimensional, complex-valued numpy matrix modeling the far-field charactersitics of each antenna element.

Raises:

ValueError – If position is not a cartesian vector.

cartesian_phase_response(carrier_frequency, position, frame='local', mode=AntennaMode.DUPLEX)[source]

Phase response of the sensor array towards an impinging point source within its far-field.

Assuming a point source at position \(\mathbf{t} \in \mathbb{R}^{3}\) within the sensor array’s far field, so that \(\lVert \mathbf{t} \rVert_2 \gg 0\), the \(m\)-th array element at position \(\mathbf{q}_m \in \mathbb{R}^{3}\) responds with a factor

\[a_{m} = e^{ \mathrm{j} \frac{2 \pi f_\mathrm{c}}{\mathrm{c}} \lVert \mathbf{t} - \mathbf{q}_{m} \rVert_2 }\]

to an electromagnetic waveform emitted with center frequency \(f_\mathrm{c}\). The full array response vector is the,refore

\[\mathbf{a} = \left[ a_1, a_2, \dots, a_{M} \right]^{\intercal} \in \mathbb{C}^{M} \mathrm{.}\]
Parameters:
  • carrier_frequency (float) – Center frequency \(f_\mathrm{c}\) of the assumed transmitted signal in Hz.

  • position (ndarray) – Cartesian location \(\mathbf{t}\) of the impinging target.

  • frame (Literal['local', 'global']) – Coordinate system reference frame. local by default. local assumes position to be in the antenna array’s native coordiante system. global assumes position to be in the antenna array’s root coordinate system.

  • mode (AntennaMode) – Antenna mode of interest. DUPLEX by default, meaning that all antenna elements are considered.

Return type:

ndarray

Returns:

The sensor array response vector \(\mathbf{a}\). A one-dimensional, complex-valued numpy array modeling the phase responses of each antenna element.

Raises:

ValueError – If position is not a cartesian vector.

characteristics(arg_0, mode, frame='local')[source]
Return type:

ndarray

horizontal_phase_response(carrier_frequency, azimuth, elevation, mode=AntennaMode.DUPLEX)[source]

Response of the sensor array towards an impinging point source within its far-field.

Assuming a far-field point source impinges onto the sensor array from horizontal angles of arrival azimuth \(\phi \in [0, 2\pi)\) and elevation \(\theta \in [-\pi, \pi]\), the wave vector

\[\begin{split}\mathbf{k}(\phi, \theta) = \frac{2 \pi f_\mathrm{c}}{\mathrm{c}} \begin{pmatrix} \cos( \phi ) \cos( \theta ) \\ \sin( \phi) \cos( \theta ) \\ \sin( \theta ) \end{pmatrix}\end{split}\]

defines the phase of a planar wave in horizontal coordinates. The \(m\)-th array element at position \(\mathbf{q}_m \in \mathbb{R}^{3}\) responds with a factor

\[a_{m}(\phi, \theta) = e^{\mathrm{j} \mathbf{k}^\intercal(\phi, \theta)\mathbf{q}_{m} }\]

to an electromagnetic waveform emitted with center frequency \(f_\mathrm{c}\). The full array response vector is therefore

\[\mathbf{a}(\phi, \theta) = \left[ a_1(\phi, \theta) , a_2(\phi, \theta) , \dots, a_{M}(\phi, \theta) \right]^{\intercal} \in \mathbb{C}^{M} \mathrm{.}\]
Parameters:
  • carrier_frequency (float) – Center frequency \(f_\mathrm{c}\) of the assumed transmitted signal in Hz.

  • azimuth (float) – Azimuth angle \(\phi\) in radians.

  • elevation (float) – Elevation angle \(\theta\) in radians.

  • mode (AntennaMode) – Antenna mode of interest. DUPLEX by default, meaning that all antenna elements are considered.

Return type:

ndarray

Returns:

The sensor array response vector \(\mathbf{a}\). A one-dimensional, complex-valued numpy array modeling the phase responses of each antenna element.

plot_topology(mode=AntennaMode.DUPLEX)[source]

Plot a scatter representation of the array topology.

Parameters:

mode (AntennaMode) – Antenna mode of interest. DUPLEX by default, meaning that all antenna elements are considered.

Return type:

tuple[Figure, ndarray[tuple[int, int], dtype[Any]]]

Returns: The created figure.

spherical_phase_response(carrier_frequency, azimuth, zenith, mode=AntennaMode.DUPLEX)[source]

Response of the sensor array towards an impinging point source within its far-field.

Assuming a far-field point source impinges onto the sensor array from spherical angles of arrival azimuth \(\phi \in [0, 2\pi)\) and zenith \(\theta \in [0, \pi]\), the wave vector

\[\begin{split}\mathbf{k}(\phi, \theta) = \frac{2 \pi f_\mathrm{c}}{\mathrm{c}} \begin{pmatrix} \cos( \phi ) \sin( \theta ) \\ \sin( \phi) \sin( \theta ) \\ \cos( \theta ) \end{pmatrix}\end{split}\]

defines the phase of a planar wave in horizontal coordinates. The \(m\)-th array element at position \(\mathbf{q}_m \in \mathbb{R}^{3}\) responds with a factor

\[a_{m}(\phi, \theta) = e^{\mathrm{j} \mathbf{k}^\intercal(\phi, \theta)\mathbf{q}_{m} }\]

to an electromagnetic waveform emitted with center frequency \(f_\mathrm{c}\). The full array response vector is therefore

\[\mathbf{a}(\phi, \theta) = \left[ a_1(\phi, \theta) , a_2(\phi, \theta) , \dots, a_{M}(\phi, \theta) \right]^{\intercal} \in \mathbb{C}^{M} \mathrm{.}\]
Parameters:
  • carrier_frequency (float) – Center frequency \(f_\mathrm{c}\) of the assumed transmitted signal in Hz.

  • azimuth (float) – Azimuth angle \(\phi\) in radians.

  • zenith (float) – Zenith angle \(\theta\) in radians.

  • mode (AntennaMode) – Antenna mode of interest. DUPLEX by default, meaning that all antenna elements are considered.

Return type:

ndarray

Returns:

The sensor array response vector \(\mathbf{a}\). A one-dimensional, complex-valued numpy array modeling the phase responses of each antenna element.

abstract property antennas: Sequence[Antenna][source]

All individual antenna elements within this array.

property num_antennas: int[source]

Number of antenna elements within this array.

property num_receive_antennas: int[source]

Number of receiving antenna elements within this array.

property num_transmit_antennas: int[source]

Number of transmitting antenna elements within this array.

abstract property receive_antennas: Sequence[Antenna][source]

All receiving antenna elements within this array.

property receive_topology: ndarray[source]

Topology of receiving antenna elements.

Access the array topology as a \(M_{\mathrm{Rx}} \times 3\) matrix indicating the cartesian locations of each receiving antenna element within the local coordinate system.

Returns:

\(M_{\mathrm{Rx}} \times 3\) topology matrix, where \(M_{\mathrm{Rx}}\) is the number of antenna elements.

property topology: ndarray[source]

Sensor array topology.

Access the array topology as a \(M \times 3\) matrix indicating the cartesian locations of each antenna element within the local coordinate system.

Returns:

\(M \times 3\) topology matrix, where \(M\) is the number of antenna elements.

abstract property transmit_antennas: Sequence[Antenna][source]

All transmitting antenna elements within this array.

property transmit_topology: ndarray[source]

Topology of transmitting antenna elements.

Access the array topology as a \(M_{\mathrm{Tx}} \times 3\) matrix indicating the cartesian locations of each transmitting antenna element within the local coordinate system.

Returns:

\(M_{\mathrm{Tx}} \times 3\) topology matrix, where \(M_{\mathrm{Tx}}\) is the number of antenna elements.

class AntennaArrayState(antennas, global_pose)[source]

Bases: Sequence, AntennaArrayBase

Immutable state of an antenna array.

Returned by the state of an antenna array.

Parameters:
  • antennas (Sequence[Antenna]) – Phyiscal antenna elements within this array state.

  • global_pose (Transformation) – Global pose of the represented antenna array.

select_subarray(indices, mode=AntennaMode.DUPLEX)[source]

Select a subset of the antenna array state, given a sequence of port indices.

Depending on the selected AntennaMode, the provided indices refer to ports only transmitting, receiving, or both.

Parameters:
  • indices (int | slice | Sequence[int]) – Index or slice of the antenna ports to be considered.

  • mode (AntennaMode) – The modes of the ports to be selected.

Return type:

AntennaArrayState

Returns: The subset of the antenna array state.

property antennas: list[Antenna][source]

All individual antenna elements within this array.

property receive_antennas: Sequence[Antenna][source]

All receiving antenna elements within this array.

property transmit_antennas: Sequence[Antenna][source]

All transmitting antenna elements within this array.

class AntennaArray(pose=None)[source]

Bases: AntennaArrayBase, Generic[AT]

Base class of a model of a set of antennas.

Parameters:

pose (Transformation | None) – The antenna array’s position and orientation with respect to its device. If not specified, the same orientation and position as the device is assumed.

state(base_pose)[source]

Return the current state of the antenna array.

Parameters:

base_pose (Transformation) – Assumed pose of the antenna array’s base coordinate frame.

Return type:

AntennaArrayState

Returns: The current immutable state of the antenna array.

abstract property antennas: list[AT][source]

All individual antenna elements within this array.

property num_receive_antennas: int[source]

Number of receiving antenna elements within this array.

property num_transmit_antennas: int[source]

Number of transmitting antenna elements within this array.

property receive_antennas: list[AT][source]

Receiving antennas within this array.

property transmit_antennas: list[AT][source]

Transmitting antennas within this array.

class UniformArray(element, spacing, dimensions, pose=None)[source]

Bases: Generic[AT], AntennaArray[AT], Serializable

Model of a Uniform Antenna Array.

Parameters:
  • element (Type[TypeVar(AT, bound= Antenna)] | TypeVar(AT, bound= Antenna)) – The antenna element uniformly repeated across the array.

  • spacing (float) – Spacing between the elements in m.

  • dimensions (Sequence[int]) – The number of elements in x-, y-, and z-dimension.

  • pose (Transformation | None) – The anntena array’s transformation with respect to its device.

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

UniformArray

Returns:

The deserialized object.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

property antennas: list[AT][source]

All individual antenna elements within this array.

property dimensions: tuple[int, ...][source]

Number of antennas in x-, y-, and z-dimension.

property num_antennas: int[source]

Number of antenna elements within this array.

property spacing: float[source]

Spacing between the antenna elements.

Returns: Spacing in m.

Raises:

ValueError – If spacing is less or equal to zero.

class CustomAntennaArray(antennas=None, pose=None)[source]

Bases: Generic[AT], AntennaArray[AT], Serializable

Model of a set of arbitrary antennas.

Parameters:
  • antennas (Sequence[TypeVar(AT, bound= Antenna)] | None) – Sequence of antenna elements available within this array. If not specified, an empty array is assumed.

  • pose (Transformation | None) – The anntena array’s transformation with respect to its device.

Raises:

ValueError – If the argument lists contain an unequal amount of objects.

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

CustomAntennaArray

Returns:

The deserialized object.

add_antenna(antenna)[source]

Add a new antenna element to this array.

Parameters:

antenna (TypeVar(AT, bound= Antenna)) – The antenna element to be added.

Return type:

None

Returns: The newly created port.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

property antennas: list[AT][source]

All individual antenna elements within this array.

class AntennaMode(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: SerializableEnum

Mode of operation of the antenna.

DUPLEX = 2[source]

Transmit-receive antenna

RX = 1[source]

Receive-only antenna

TX = 0[source]

Transmit-only antenna

class AT[source]

Type of antenna.

alias of TypeVar(‘AT’, bound=Antenna)

class AAT[source]

Type of antenna array.

alias of TypeVar(‘AAT’, bound=AntennaArray)