[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
from radar.components.response import FrequencyResponse
import polars as pl
from radar.utils.typing.constants import DataHeader
Create Element
And show its beam pattern
[2]:
beam_width = 5
beam_width_tuple = (
Angle(beam_width, PhaseUnit.DEGREE),
Angle(beam_width, PhaseUnit.DEGREE),
)
az_bound = 90
el_bound = 90
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.Isotropic()
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,
)
Define Array Structure
[3]:
cf = Frequency(1, FrequencyUnit.GIGAHERTZ)
distance = convert.cf_to_min_dist(cf)
geometry = geometry.Grid(10, 10, distance)
Define Array
using the specificed geometry and element
[4]:
arr = Array(antenna_element, geometry)
Investigate Array Geometry
[5]:
arr.plot.geometry()
Investigate Array Beam Pattern
Image
[6]:
arr.plot.beam(
DirectionDomain.ANGLE,
PhaseUnit.DEGREE,
AmplitudeDomain.Gain,
AmplitudeUnit.DECIBEL,
FigureType.IMAGE,
freq,
)
Surface
[7]:
arr.plot.beam(
DirectionDomain.ANGLE,
PhaseUnit.DEGREE,
AmplitudeDomain.Gain,
AmplitudeUnit.DECIBEL,
FigureType.SURFACE,
freq,
(Angle(20, PhaseUnit.DEGREE), Angle(20, PhaseUnit.DEGREE)),
)
Array Factor as a Function of Frequency
[8]:
f1 = Frequency(0.1, FrequencyUnit.MEGAHERTZ)
f2 = Frequency(5, FrequencyUnit.GIGAHERTZ)
df = pl.DataFrame(
{DataHeader.FREQ_GAIN_DB: [0, 0], DataHeader.FREQ_FREQS: [f1.Hz, f2.Hz]}
)
f_resp = FrequencyResponse(df=df)
antenna_element = Element(element_pattern, az_bound_tuple, el_bound_tuple, f_resp, 1)
arr = Array(antenna_element, geometry)
[9]:
arr.plot.beam(
DirectionDomain.ANGLE,
PhaseUnit.DEGREE,
AmplitudeDomain.AntennaFactor,
AmplitudeUnit.DECIBEL,
FigureType.SURFACE,
Frequency(0.1, FrequencyUnit.GIGAHERTZ),
)
[10]:
arr.plot.beam(
DirectionDomain.ANGLE,
PhaseUnit.DEGREE,
AmplitudeDomain.AntennaFactor,
AmplitudeUnit.DECIBEL,
FigureType.SURFACE,
Frequency(1, FrequencyUnit.GIGAHERTZ),
)
[11]:
arr.plot.beam(
DirectionDomain.ANGLE,
PhaseUnit.DEGREE,
AmplitudeDomain.AntennaFactor,
AmplitudeUnit.DECIBEL,
FigureType.SURFACE,
Frequency(5, FrequencyUnit.GIGAHERTZ),
)