Frequency Domain Models
In order to simplify computation and model design, the frequency domain models only consider a single frequency of interest, useful for narrow band performance evaluations.
- lyceanem.models.frequency_domain.aperture_projection(aperture, environment=None, wavelength=1.0, az_range=None, elev_range=None, farfield_distance=2.0)[source]
Using the aperture provided and any blocking structures, predict the maximum directivity envelope of the aperture. This will initially just cover all the triangles of a provided solid, but eventually I will include a filter list.
- Parameters:
aperture (
meshio.Mesh) – triangle mesh of the desired apertureenvironment (
lyceanem.base_classes.structures) – thelyceanem.base_classes.structuresclass should contain all the environment for scattering, providing the blocking for the rayswavelength (float) – the wavelength of interest in metres
az_range (numpy.ndarray of float) – the azimuth range desired for the farfield pattern in degrees
elev_range (numpy.ndarray of float) – the elevation range desired for the farfield pattern in degrees
- Returns:
directivity_envelope (numpy.ndarray of float) – The predicted maximum directivity envelope for the provided aperture at the wavelength of interest
pcd (
meshio.Mesh) – a point cloud colored according to the projected area, normalised to the total projected area of the aperture.
- lyceanem.models.frequency_domain.calculate_farfield(aperture_coords, antenna_solid, desired_E_axis, az_range=None, el_range=None, scatter_points=None, wavelength=1.0, farfield_distance=2.0, scattering=0, elements=False, los=True, project_vectors=False, cuda=False, antenna_axes=array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]), alpha=0.0, beta=6.283185307179586)[source]
Based upon the aperture coordinates and solids, predict the farfield for the antenna.
- Parameters:
aperture_coords (
meshio.Mesh) – aperture coordinates, from a single point to a mesh sampling across and aperture or surfaceantenna_solid (
lyceanem.base_classes.structures) – the class should contain all the environment for scattering, providing the blocking for the raysdesired_E_axis (numpy.ndarray of floats) – 1*3 numpy array of the desired excitation vector
az_range (numpy.ndarray of floats) – the desired azimuth planes in degrees
el_range (numpy.ndarray of floats) – the desired elevation planes in degrees
scatter_points (
meshio.Mesh) – the environment scattering points, defaults to [None]wavelength (float) – wavelength of interest in meters, defaults to [1]
farfield_distance (float) – the distance to evaluate the antenna pattern, defaults to [2]
scattering (int) – the number of scatters required, if this is set to 0, then only line of sight propagation is considered, defaults to [0]
elements (bool) – whether the sources and sinks should be considered as elements of a phased array, or a fixed phase aperture like a horn or reflector
los (bool) – The line of sight component can be ignored by setting los to [False], defaults to [True]
project_vectors (bool) – should the excitation vector/vectors be projected to be conformal with the surface of the source coordinates
cuda (bool) – Choice of Cuda or Numba engine, will use Cuda if True
- Returns:
etheta (numpy.ndarray of complex) – The Etheta farfield component
ephi (numpy.ndarray of complex) – The EPhi farfield component
- lyceanem.models.frequency_domain.calculate_scattering(aperture_coords, sink_coords, antenna_solid, desired_E_axis, scatter_points=None, wavelength=1.0, scattering=0, elements=False, los=True, project_vectors=False, antenna_axes=array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]), multiE=False, alpha=0.0, beta=6.283185307179586, cuda=False, acceleration_structure=None, chunks=1, permittivity=8.8541878176e-12, permeability=1.25663706212e-06)[source]
calculating the scattering from the provided source coordinates, to the provided sink coordinates in the environment. This can be used to generate point to point scattering parameters or full scattering networks.
- Parameters:
aperture_coords (
meshio.Mesh) – source coordinatessink_coords (
meshio.Mesh) – sink coordinatesantenna_solid (
lyceanem.base_classes.structures) – the class should contain all the environment for scattering, providing the blocking for the raysdesired_E_axis (numpy.ndarray of float) – the desired excitation vector, can be a 1*3 array or a n*3 array if multiple different exciations are desired in one lauch
scatter_points (
meshio.Mesh) – the scattering points in the environment. Defaults to [None], in which case scattering points will be generated from the antenna_solid. If no scattering should be considered then set scattering to [0].wavelength (float) – the wavelength of interest in metres
scattering (int) – the number of reflections to be considered, defaults to [0], but up to 2 can be considered. The higher this number to greater to computational effort, and for most situations 1 should be ample.
elements (bool) – whether the sources and sinks should be considered as elements of a phased array, or a fixed phase aperture like a horn or reflector
los (bool) – The line of sight component can be ignored by setting los to [False], defaults to [True]
project_vectors (bool)
cuda (bool) – Choice of Cuda or Numba engine, will use Cuda if True
acceleration_structure (None) – if no acceleration structure is provided, then the function will default to the tiled raycasting method. To pass acceleration structure construct one prior to calling this function
chunks (int) – chunks is the number of chunks to split the raycasting into, defaults to 1, if gpu is going to run out of memory an error will be reported, and this number should be increased before retrying.
- Returns:
Ex (numpy.ndarray of complex) – The x-directed electric field components
Ey (numpy.ndarray of complex) – The y-directed electric field components
Ez (numpy.ndarray of complex) – The z-directed electric field components