Monopulse Processing For Array

[1]:
%load_ext autoreload
%autoreload 2

from radar.components import geometry
from radar.utils.calculate import convert
from radar.utils.typing.enums import FrequencyUnit
from radar.utils.typing.units import Frequency

from radar.components import Element
from radar.utils.calculate import pattern
from radar.utils.typing import (
    PhaseUnit,
    DirectionDomain,
    FigureType,
    AmplitudeDomain,
    Angle,
    AmplitudeUnit,
)

from radar.components.array import Array

import polars as pl

from radar.utils.typing.constants import DataHeader

Create An Antenna Array With 2 Elements

Create Element

[2]:
az_bound = 60
el_bound = 60
az_bound_tuple = (Angle(-az_bound, PhaseUnit.DEGREE), Angle(az_bound, PhaseUnit.DEGREE))
el_bound_tuple = (Angle(-el_bound, PhaseUnit.DEGREE), Angle(el_bound, PhaseUnit.DEGREE))


element_pattern = pattern.Cosine(4)
freq = Frequency(1, FrequencyUnit.GIGAHERTZ)

antenna_element = Element(element_pattern, az_bound_tuple, el_bound_tuple, freq, 1)

antenna_element.plot.beam(
    DirectionDomain.ANGLE,
    PhaseUnit.DEGREE,
    AmplitudeDomain.Gain,
    AmplitudeUnit.DECIBEL,
    FigureType.IMAGE,
    freq,
)

Create Geometry

[3]:
from radar.utils.typing.enums import ArrayOrientation

cf = Frequency(1, FrequencyUnit.GIGAHERTZ)
distance = convert.cf_to_min_dist(cf)
geometry = geometry.Linear(2, ArrayOrientation.AZIMUTH, distance)
geometry.plot.geometry()

Create Array

[4]:
arr = Array(antenna_element, geometry)

arr.plot.beam(
    DirectionDomain.ANGLE,
    PhaseUnit.DEGREE,
    AmplitudeDomain.Gain,
    AmplitudeUnit.DECIBEL,
    FigureType.IMAGE,
    freq,
)

Calculate Monopulse

[5]:
# where true is sum, where false is diff
condition = pl.col(DataHeader.X_POS_M) >= 0.0

arr.plot.monopulse(
    DirectionDomain.ANGLE,
    PhaseUnit.DEGREE,
    AmplitudeUnit.DECIBEL,
    FigureType.SURFACE,
    freq,
    condition,
)