Antenna Configuration#
- class Antenna(pose=None)#
Bases:
Transformable
,Serializable
Model of a single antenna.
A set of antenna models defines an antenna array model.
- Parameters:
pose (Transformation, optional) – The antenna’s position and orientation with respect to its array.
- yaml_tag: Optional[str] = 'Antenna'#
YAML serialization tag.
- property array: AntennaArray | None#
Array this antenna belongs to.
- Returns:
The array this antenna belong to. None if this antenna is considered floating.
- Return type:
Optional[AntennaArray]
- transmit(signal)#
Transmit a signal over this antenna.
The transmission may be distorted by the antennas impulse response / frequency characteristics.
- receive(signal)#
Receive a signal over this antenna.
The reception may be distorted by the antennas impulse response / frequency characteristics.
- abstract local_characteristics(azimuth, elevation)#
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.
- global_characteristics(global_direction)#
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.
- plot_polarization(angle_resolution=180)#
Visualize the antenna polarization depending on the angles of interest.
- Parameters:
angle_resolution (int, optional) – Resolution of the polarization visualization.
- Return type:
Figure
- Returns:
The created matplotlib figure.
- Raises:
ValueError – If angle_resolution is smaller than one.
- plot_gain(angle_resolution=180)#
Visualize the antenna gain depending on the angles of interest.
- Parameters:
angle_resolution (int, optional) – Resolution of the polarization visualization.
- Return type:
Figure
- Returns:
The created matplotlib figure.
- Raises:
ValueError – If angle_resolution is smaller than one.
- class IdealAntenna(pose=None)#
Bases:
Antenna
Theoretic model of an ideal antenna.
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:
pose (Transformation, optional) – The antenna’s position and orientation with respect to its array.
- yaml_tag: Optional[str] = 'IdealAntenna'#
YAML serialization tag
- local_characteristics(azimuth, elevation)#
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.
- class LinearAntenna(slant=0.0, pose=None)#
Bases:
Antenna
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:
slant (float) – Slant of the antenna in radians.
pose (Transformation, optional) – Pose of the antenna.
- yaml_tag: Optional[str] = 'LinearAntenna'#
YAML serialization tag.
- property slant: float#
Slant of the antenna in radians.
- local_characteristics(azimuth, zenith)#
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.
- class PatchAntenna(pose=None)#
Bases:
Antenna
Realistic model of a vertically polarized patch antenna.
Patch Antenna Characteristics#
Refer to Jaeckel et al.[1] for further information.
- Parameters:
pose (Transformation, optional) – The antenna’s position and orientation with respect to its array.
- yaml_tag: Optional[str] = 'PatchAntenna'#
YAML serialization tag
- local_characteristics(azimuth, elevation)#
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.
- class Dipole(pose=None)#
Bases:
Antenna
Model of vertically polarized half-wavelength dipole antenna.
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:
pose (Transformation, optional) – The antenna’s position and orientation with respect to its array.
- yaml_tag: Optional[str] = 'DipoleAntenna'#
YAML serialization tag
- local_characteristics(azimuth, elevation)#
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.
- class AntennaArrayBase(pose=None)#
Bases:
Transformable
Base class of a model of a set of antennas.
- Parameters:
pose (Transformation, optional) – Transformation of the transformable with respect to its reference frame. By default, no transformation is considered, i.e.
Transformation.No()
- abstract property num_antennas: int#
Number of antenna elements within this array.
- Returns:
Number of antenna elements.
- Return type:
int
- property num_transmit_antennas: int#
Number of transmitting antenna elements within this array.
Returns: Number of transmitting elements.
- property num_receive_antennas: int#
Number of receiving antenna elements within this array.
Returns: Number of receiving elements.
- abstract property antennas: List[Antenna]#
All individual antenna elements within this array.
Returns: List of antennas.
- property topology: ndarray#
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.
- Return type:
np.ndarray
- characteristics(arg_0, frame='local')#
- Return type:
ndarray
- plot_topology()#
Plot a scatter representation of the array topology.
- Returns:
The created figure.
- Return type:
plt.Figure
- cartesian_phase_response(carrier_frequency, position, frame='local')#
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 (np.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.
- 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.
- cartesian_array_response(carrier_frequency, position, frame='local')#
Sensor array charactersitcis 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 (np.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.
- 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.
- horizontal_phase_response(carrier_frequency, azimuth, elevation)#
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.
- Returns:
The sensor array response vector \(\mathbf{a}\). A one-dimensional, complex-valued numpy array modeling the phase responses of each antenna element.
- Return type:
np.ndarray
- spherical_phase_response(carrier_frequency, azimuth, zenith)#
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.
- Returns:
The sensor array response vector \(\mathbf{a}\). A one-dimensional, complex-valued numpy array modeling the phase responses of each antenna element.
- Return type:
np.ndarray
- class UniformArray(antenna, spacing, dimensions, pose=None)#
Bases:
AntennaArrayBase
,Serializable
Model of a Uniform Antenna Array.
- Parameters:
antenna (Type[Antenna] | Antenna) – The anntenna model this uniform array assumes.
spacing (float) – Spacing between the antenna elements in m.
dimensions (Sequence[int]) – The number of antennas in x-, y-, and z-dimension.
pose (Tranformation, optional) – The anntena array’s transformation with respect to its device.
- yaml_tag: Optional[str] = 'UniformArray'#
YAML serialization tag.
- property_blacklist: Set[str] = {'topology'}#
Set of properties to be ignored during serialization.
- property spacing: float#
Spacing between the antenna elements.
- Returns:
Spacing in m.
- Return type:
float
- Raises:
ValueError – If spacing is less or equal to zero.
- property num_antennas: int#
Number of antenna elements within this array.
- Returns:
Number of antenna elements.
- Return type:
int
- property dimensions: Tuple[int, ...]#
Number of antennas in x-, y-, and z-dimension.
Returns: Number of antennas in each direction.
- class AntennaArray(antennas=None, pose=None)#
Bases:
AntennaArrayBase
,Serializable
Model of a set of arbitrary antennas.
- Parameters:
antennas (List[Antenna], optional) – Antenna models of each array element.
pose (Transformation, optional) – The anntena array’s transformation with respect to its device.
- Raises:
ValueError – If the argument lists contain an unequal amount of objects.
- yaml_tag: Optional[str] = 'CustomArray'#
YAML serialization tag.
- property antennas: List[Antenna]#
Antennas within this array.
- Returns:
List of antenna elements.
- Return type:
List[Antenna]
- property num_antennas: int#
Number of antenna elements within this array.
- Returns:
Number of antenna elements.
- Return type:
int