Antenna Models API¶
Antenna array adapter and metrics extraction.
Overview¶
from phased_array_systems.models.antenna import (
PhasedArrayAdapter,
compute_beamwidth,
compute_scan_loss,
compute_sidelobe_level,
)
The antenna module provides an adapter to the phased-array-modeling package for detailed antenna pattern computations.
Classes¶
PhasedArrayAdapter
¶
Adapter for phased-array-modeling library.
Provides a consistent interface for computing antenna pattern metrics using the phased-array-modeling library, with fallback to analytical approximations when the library is not available.
| ATTRIBUTE | DESCRIPTION |
|---|---|
name |
Model block name for identification
TYPE:
|
use_analytical_fallback |
If True, use analytical approximations when phased-array-modeling is not available
|
Initialize the adapter.
| PARAMETER | DESCRIPTION |
|---|---|
use_analytical_fallback
|
Use analytical methods if PAM unavailable
TYPE:
|
Source code in src/phased_array_systems/models/antenna/adapter.py
evaluate
¶
evaluate(arch: Architecture, scenario: Scenario, context: dict[str, Any]) -> MetricsDict
Evaluate antenna performance metrics.
| PARAMETER | DESCRIPTION |
|---|---|
arch
|
Architecture configuration
TYPE:
|
scenario
|
Scenario with frequency and scan angle info
TYPE:
|
context
|
Additional context (unused)
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
MetricsDict
|
Dictionary with antenna metrics: - g_peak_db: Peak array gain (dB) - beamwidth_az_deg: Azimuth beamwidth (degrees) - beamwidth_el_deg: Elevation beamwidth (degrees) - sll_db: Peak sidelobe level (dB, negative) - scan_loss_db: Scan loss at operating angle (dB) - directivity_db: Array directivity (dB) - n_elements: Number of array elements |
Source code in src/phased_array_systems/models/antenna/adapter.py
Functions¶
compute_beamwidth
¶
compute_beamwidth(pattern_db: NDArray[floating], angles_deg: NDArray[floating], level_db: float = -3.0) -> float
Compute beamwidth at specified level below peak.
| PARAMETER | DESCRIPTION |
|---|---|
pattern_db
|
Pattern magnitude in dB
TYPE:
|
angles_deg
|
Corresponding angles in degrees
TYPE:
|
level_db
|
Level below peak to measure (default -3 dB)
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
float
|
Beamwidth in degrees, or NaN if not found |
Source code in src/phased_array_systems/models/antenna/metrics.py
compute_scan_loss
¶
Compute scan loss for a phased array at given scan angle.
| PARAMETER | DESCRIPTION |
|---|---|
scan_angle_deg
|
Scan angle from boresight (degrees)
TYPE:
|
model
|
Scan loss model ("cosine" or "cosine_squared")
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
float
|
Scan loss in dB (positive value representing loss) |
Source code in src/phased_array_systems/models/antenna/metrics.py
compute_sidelobe_level
¶
compute_sidelobe_level(pattern_db: NDArray[floating], angles_deg: NDArray[floating], main_lobe_width_deg: float | None = None) -> float
Compute peak sidelobe level relative to main beam.
| PARAMETER | DESCRIPTION |
|---|---|
pattern_db
|
Pattern magnitude in dB
TYPE:
|
angles_deg
|
Corresponding angles in degrees
TYPE:
|
main_lobe_width_deg
|
Width of main lobe to exclude (auto-detected if None)
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
float
|
Peak sidelobe level in dB (negative value) |
Source code in src/phased_array_systems/models/antenna/metrics.py
Output Metrics¶
| Metric | Units | Description |
|---|---|---|
g_peak_db |
dB | Peak antenna gain |
beamwidth_az_deg |
degrees | 3 dB beamwidth in azimuth |
beamwidth_el_deg |
degrees | 3 dB beamwidth in elevation |
sll_db |
dB | Peak sidelobe level |
scan_loss_db |
dB | Gain reduction due to scan |
directivity_db |
dB | Antenna directivity |
n_elements |
- | Total element count |
Usage Examples¶
Using the Adapter¶
from phased_array_systems.models.antenna import PhasedArrayAdapter
from phased_array_systems.architecture import Architecture, ArrayConfig, RFChainConfig
arch = Architecture(
array=ArrayConfig(nx=8, ny=8, dx_lambda=0.5, dy_lambda=0.5),
rf=RFChainConfig(tx_power_w_per_elem=1.0),
)
adapter = PhasedArrayAdapter()
metrics = adapter.evaluate(arch, scenario, context={})
print(f"Peak Gain: {metrics['g_peak_db']:.1f} dB")
print(f"Beamwidth: {metrics['beamwidth_az_deg']:.1f}° x {metrics['beamwidth_el_deg']:.1f}°")
With Scan Angle¶
from phased_array_systems.scenarios import CommsLinkScenario
scenario = CommsLinkScenario(
freq_hz=10e9,
bandwidth_hz=10e6,
range_m=100e3,
required_snr_db=10.0,
scan_angle_deg=30.0, # 30° off boresight
)
metrics = adapter.evaluate(arch, scenario, context={})
print(f"Scan Loss: {metrics['scan_loss_db']:.1f} dB")
Gain Approximation¶
When the full antenna adapter is not used, gain is approximated:
Where \(d_x, d_y\) are element spacings in wavelengths.
This approximation is used in the link budget model when antenna metrics aren't pre-computed.