Beamforming
- lyceanem.electromagnetics.beamforming.EGCWeights(Etheta, Ephi, command_angles, polarization_switch='Etheta', az_range=array([-180., -160., -140., -120., -100., -80., -60., -40., -20., 0., 20., 40., 60., 80., 100., 120., 140., 160., 180.]), elev_range=array([-90., -80., -70., -60., -50., -40., -30., -20., -10., 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.]))[source]
calculate the equal gain combining weights for a given set of element coordinates, wavelength, and command angles (az,elev)
- lyceanem.electromagnetics.beamforming.MaximumDirectivityMap(Etheta, Ephi, source_coords, wavelength, az_range=array([-180., -160., -140., -120., -100., -80., -60., -40., -20., 0., 20., 40., 60., 80., 100., 120., 140., 160., 180.]), elev_range=array([-90., -80., -70., -60., -50., -40., -30., -20., -10., 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.]), az_index=None, elev_index=None, forming='Total', total_solid_angle=12.566370614359172, phase_resolution=24)[source]
Uses wavefront beamsteering, and equal gain combining algorithms to steer the antenna array to each possible command angle in the farfield, mapping out the maximum achieved directivity at the command angle for each command angle set.
- Parameters:
Etheta (3D numpy array) – The Etheta polarisation farfield patterns, arranged in terms of the number of elements, azimuth resolution, and elevation resolution
Ephi (3D numpy array) – The Ephi polarisation farfield patterns, arranged in terms of the number of elements, azimuth resolution, and elevation resolution
source_coords (
open3d.geometry.PointCloud
) – The source coordinates of each element, corresponding to the order of element patterns in Etheta and Ephi. Units should be mwavelength (float) – The wavelength of interest
az_range (1D numpy array of float) – The azimuth values for the farfield mesh, arranged from smallest to largest
elev_range (1D numpy array of float) – The elevation values for the farfield mesh, arranged from smallest to largest
az_index (1D array of int) – optional parameter, can be specified as an index of the azimuth values of interest via indexing, defaults to [None], which ensures all values are covered
elev_index (1D array of int) – optional parameter, can be specified as an index of the elevation values of interest via indexing, defaults to [None], which ensures all values are covered
forming (str) – Which polarisation should be beamformed, the default is [Total], beamforming the total directivity pattern, avoiding issues with elements which have a strongly $Etheta$ or $Ephi$ pattern. This can also be set to [Etheta] or [Ephi]
total_solid_angle (float) – the total solid angle covered by the farfield patterns, this defaults to $4pi$ for a full spherical pattern
phase_resolution (int) – the desired phase resolution of the beamforming architecture in bits. Default is [24], which means no practical truncation will occur. If beam mapping at a single resolution is required, then this can be set between 2 and 24. If multiple values are required, it may be more efficient to use
lyceanem.electromagnetics.beamforming.MaximumDirectivityMapDiscrete()
, which allows a 1D array of resolutions to be supplied, and produces a maximum directivity map for each.
- Returns:
directivity_map – The achieved maximum directivity map. At each point the directivity corresponds to the achieved directivity at that command angle. Arranged as elev axis, azimuth axis, Dtheta,Dphi,Dtot
- Return type:
3D numpy array of float
- lyceanem.electromagnetics.beamforming.MaximumDirectivityMapDiscrete(Etheta, Ephi, source_coords, wavelength, az_range=array([-180., -160., -140., -120., -100., -80., -60., -40., -20., 0., 20., 40., 60., 80., 100., 120., 140., 160., 180.]), elev_range=array([-180., -160., -140., -120., -100., -80., -60., -40., -20., 0., 20., 40., 60., 80., 100., 120., 140., 160., 180.]), az_index=None, elev_index=None, forming='Total', total_solid_angle=12.566370614359172, phase_resolution=array([24]))[source]
Uses wavefront beamsteering, and equal gain combining algorithms to steer the antenna array to each possible command angle in the farfield, mapping out the maximum achieved directivity at the command angle for each command angle set.
- Parameters:
Etheta (3D numpy array) – The $E heta$ polarisation farfield patterns, arranged in terms of the number of elements, azimuth resolution, and elevation resolution
Ephi (3D numpy array) – The $Ephi$ polarisation farfield patterns, arranged in terms of the number of elements, azimuth resolution, and elevation resolution
source_coords (
open3d.geometry.PointCloud
) – The source coordinates of each element, corresponding to the order of element patterns in $E heta$ and $Ephi$. Units should be mwavelength (float) – The wavelength of interest
az_res (int) – Azimuth resolution
elev_res (int) – Elevation resolution
az_range (1D numpy array of float) – The azimuth values for the farfield mesh, arranged from smallest to largest
elev_range (1D numpy array of float) – The elevation values for the farfield mesh, arranged from smallest to largest
forming (str) – Which polarisation should be beamformed, the default is [Total], beamforming the total directivity pattern, avoiding issues with elements which have a strongly $E heta$ or $Ephi$ pattern. This can also be set to [Etheta] or [Ephi]
total_solid_angle (float) – the total solid angle covered by the farfield patterns, this defaults to $4pi$ for a full spherical pattern
phase_resolution (1D numpy array of int) – the desired phase resolution of the beamforming architecture in bits. Default is [24], which means no practical truncation will occur. If beam mapping is desired at a single resolution is required, then this can be set between 2 and 24, if more than one resolution value is required, then a 1D array of values can be specified. resolutions to be supplied, and produces a maximum directivity map for each.
- Returns:
directivity_map – The achieved maximum directivity map (a 3D numpy array for each phase resolution) . For each phase resolution for each point the directivity corresponds to the achieved directivity at that command angle.
- Return type:
4D numpy array of float
- lyceanem.electromagnetics.beamforming.PatternPlot(data, az, elev, pattern_min=-40, plot_max=0.0, plottype='Polar', logtype='amplitude', ticknum=6, title_text=None)[source]
Plot the relavent 3D data in relative power (dB) or normalised directivity (dBi)
- Parameters:
data (2D array of floats or complex) – the data to plot
az (2D array of floats) – the azimuth angles for each datapoint in [data] in degrees
elev (2D array of floats) – the elevation angles for each datapoint in [data] in degrees
pattern_min (float) – the desired scale minimum in dB, default is [-40]
plot_max (float) – the desired scale maximum in dB, default is [0]
plottype (str) – the plot type, either [Polar], [Cartesian-Surf], or [Contour]. The default is [Polar]
logtype (str) – the type of data being considered, either [amplitude] or [power], to ensure the correct logarithm is used, default is [amplitude]
ticknum (int) – the number of ticks on the colorbar, default is [6]
title_text (str) – the graph title, defaults to [None]
- Return type:
None
- lyceanem.electromagnetics.beamforming.Steering_Efficiency(Dtheta, Dphi, Dtot, first_dimension_angle, second_dimension_angle, angular_coverage)[source]
Calculate Steering Efficiency for the provided pattern, in radians
- Parameters:
- Returns:
setheta (float) – steering efficiency in Dtheta
sephi (float) – steering efficiency in Dphi
setot (float) – steering efficiency in Dtotal
- lyceanem.electromagnetics.beamforming.WavefrontWeights(source_coords, steering_vector, wavelength)[source]
calculate the weights for a given set of element coordinates, wavelength, and steering vector (cartesian)
- lyceanem.electromagnetics.beamforming.directivity_transform(Etheta, Ephi, az_range=array([-180., -160., -140., -120., -100., -80., -60., -40., -20., 0., 20., 40., 60., 80., 100., 120., 140., 160., 180.]), elev_range=array([-90., -80., -70., -60., -50., -40., -30., -20., -10., 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.]), total_solid_angle=12.566370614359172)[source]
Directivity Transform for Etheta and Ephi
directivity is defined in terms of the power radiated in a specific direction, over the average radiated power power per unit solid angle
- Parameters:
- Returns:
Dtheta (numpy 2D array of floats) – The directivity pattern in Etheta
Dphi (numpy 2D array of floats) – The directivity pattern in Ephi
Dtot (numpy 2D array of floats) – The total directivity pattern
Dmax (numpy array of floats) – The maximum directivity in Dtheta,Dphi,Dtot