Source code for stonesoup.sensor.radar.beam_shape

from abc import abstractmethod

import numpy as np

from ...base import Property, Base


[docs] class BeamShape(Base): """Base class for beam shape""" peak_power: float = Property(doc="peak power of the main lobe in Watts")
[docs] @abstractmethod def beam_power(self, azimuth, elevation, beam_width, **kwargs): """beam power sent in the direction of the target. azimuth = elevation = 0 for center of beam""" raise NotImplementedError
[docs] class Beam2DGaussian(BeamShape): r"""The beam is in the shape of a 2D gaussian in the azimuth and elevation. The width at half the maxima is the beam width. It is described by: .. math:: P = P_p\exp \left( 0.5 \times \left(\left(\frac{2.35\,az}{B_w}\right) ^2 +\left(\frac{2.35\,el}{B_w}\right)^2 \right) \right) where :math:`az` and :math:`el` are the azimuth and elevation angles away from the centre. :math:`B_w` is the beam width and :math:`P_p` is the peak power. """ # Full width half maximum FWHM = 2 * np.sqrt(2 * np.log(2))
[docs] def beam_power(self, azimuth, elevation, beam_width, **kwargs): """ Parameters ---------- azimuth : `float` The angle of the target away from the boresight of the radar in azimuth elevation : `float` The angle of the target away from the boresight of the radar in elevation beam_width: `float` The width of the radar beam Returns ------- `float` the power directed towards the target """ return self.peak_power * np.exp( -0.5 * ((azimuth/beam_width*self.FWHM)**2 + (elevation/beam_width*self.FWHM)**2))