phased-array-systems
Phased array antenna system design, optimization, and performance visualization for wireless communications and radar applications.
Documentation | Live Demo | Getting Started | API Reference
Why phased-array-systems?
- Model-Based Workflow: MBSE/MDAO approach from requirements through optimized designs
- Requirements-Driven: Every evaluation produces pass/fail with margins and traceability
- Trade-Space Exploration: constraint-aware DOE generation and Pareto analysis
- Multi-Objective Optimization: NSGA-II Pareto fronts (pymoo) plus scipy scalarized solvers
- Validated Physics: ITU-R P.676/P.838 propagation, NRL sea clutter, exact Swerling detection statistics, each tested against its published source
- Digital Beamforming Trades: element vs subarray vs analog digitization drives ADC count, data rate, compute, and power
- System Models: comms link budget, radar detection + search timeline, RF cascade, digital beamformer, thermal-coupled reliability
- Reproducible: config-driven workflow with seed control, provenance stamps, and checkpoint/resume
Workflow
Config (YAML/JSON) → Architecture + Scenario → DOE Generation → Batch Evaluation
↓ ↓
Requirements ───────────────────────────────────────────→ Verification
↓
Pareto Extraction
↓
Reports ← Visualization ← Optimization ←────────────┘
Features
- Requirements as first-class objects: every run produces pass/fail + margins with traceability
- Trade-space exploration: DOE (grid/random/LHS) with rejection sampling against architecture constraints, plus Pareto extraction, TOPSIS ranking, and hypervolume
- Multi-objective optimization: NSGA-II returns the nondominated set directly; scipy solvers (DE, dual annealing, L-BFGS-B) with normalized constraint penalties remain for scalarized runs
- Global sensitivity: Sobol S1/ST indices (SALib) alongside one-at-a-time sweeps
- Communications & Radar: link budgets with ITU-R P.676-13 line-by-line gaseous and P.838-3 rain attenuation; radar detection with exact Swerling 0-4 statistics, NRL sea clutter, analytic CFAR loss, and search-timeline revisit metrics
- Digital beamforming: digitization level (element/subarray/analog), jitter-aware ADC SNR, system dynamic range with array processing gain, beamformer data-rate and compute budgets
- RF cascade analysis: Friis noise figure, IIP3, SFDR, MDS for cascaded receiver chains
- TRM reliability: MTBF with Arrhenius derating driven by estimated junction temperature, availability, graceful degradation
- Validation suite: models checked against published references in CI (see the docs' validation table)
- Flat metrics dictionary: all models return a consistent flat dict for interchange
- Interactive reports: self-contained HTML with embedded plotly trade plots
- CLI and Python API: use from the command line or integrate into scripts
Installation
pip install phased-array-systems
# Multi-objective optimization + Sobol sensitivity (pymoo, SALib)
pip install "phased-array-systems[mdao]"
# Interactive plots and report embeds (plotly)
pip install "phased-array-systems[plotting]"
# Development dependencies
pip install "phased-array-systems[dev]"
Quick Start
Single Case Evaluation
from phased_array_systems import Architecture, ArrayConfig, RFChainConfig
from phased_array_systems import CommsLinkScenario, evaluate_case
# Define architecture
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, pa_efficiency=0.3),
)
# Define scenario
scenario = CommsLinkScenario(
freq_hz=10e9,
bandwidth_hz=10e6,
range_m=100e3,
required_snr_db=10.0,
)
# Evaluate
metrics = evaluate_case(arch, scenario)
print(f"EIRP: {metrics['eirp_dbw']:.1f} dBW")
print(f"Link Margin: {metrics['link_margin_db']:.1f} dB")
DOE Trade Study
from phased_array_systems import DesignSpace, generate_doe, BatchRunner, extract_pareto
# Define design space
space = (
DesignSpace()
.add_variable("array.nx", "int", low=4, high=16)
.add_variable("array.ny", "int", low=4, high=16)
.add_variable("rf.tx_power_w_per_elem", "float", low=0.5, high=3.0)
)
# Generate DOE
doe = generate_doe(space, method="lhs", n_samples=100, seed=42)
# Run batch evaluation
runner = BatchRunner(scenario)
results = runner.run(doe)
# Extract Pareto frontier
pareto = extract_pareto(results, [
("cost_usd", "minimize"),
("eirp_dbw", "maximize"),
])
Design Optimization
from phased_array_systems import optimize_design, DesignSpace, CommsLinkScenario
scenario = CommsLinkScenario(
freq_hz=10e9, bandwidth_hz=10e6, range_m=100e3, required_snr_db=10.0,
)
space = (
DesignSpace()
.add_variable("array.nx", "categorical", values=[4, 8, 16])
.add_variable("array.ny", "categorical", values=[4, 8, 16])
.add_variable("rf.tx_power_w_per_elem", "float", low=0.5, high=3.0)
)
result = optimize_design(
space=space, scenario=scenario,
objective="eirp_dbw", sense="maximize", method="de", seed=42,
)
print(f"Best EIRP: {result.best_metrics['eirp_dbw']:.1f} dBW")
Examples
See the examples/ directory:
01_comms_single_case.py- Single case evaluation02_comms_doe_trade.py- Full DOE trade study workflow03_radar_detection_trade.py- Radar detection analysis and trade study04_taper_trade_study.py- Amplitude taper comparison (SLL vs gain)05_optimization.py- Design optimization with constraint handling06_dbf_architecture_trade.py- Digital beamforming architecture trade (element vs subarray vs analog digitization)
Tutorial Notebooks
Try the interactive tutorials in Google Colab:
Package Structure
phased_array_systems/
├── architecture/ # Array, RF chain, cost configurations
├── scenarios/ # CommsLinkScenario, RadarDetectionScenario
├── requirements/ # Requirement definitions and verification
├── models/
│ ├── antenna/ # Phased array adapter and metrics
│ ├── comms/ # Link budget, propagation models
│ ├── radar/ # Radar equation, detection, integration
│ ├── rf/ # Cascaded RF chain analysis (NF, IIP3, SFDR)
│ ├── digital/ # ADC/DAC, bandwidth, scheduling models
│ └── swapc/ # Power and cost models
├── trades/ # DOE, batch runner, Pareto analysis
├── viz/ # Plotting utilities
└── io/ # Config loading, results export
Development
# Clone the repository
git clone https://github.com/jman4162/phased-array-systems.git
cd phased-array-systems
# Install in development mode
pip install -e ".[dev]"
# Run tests
pytest tests/ -v
# Run linting
ruff check .
CLI
# Single case evaluation
pasys run config.yaml
# DOE batch study (checkpoint every 10 cases; resume after interruption)
pasys doe config.yaml -n 100 --method lhs --cache results/cache.parquet --resume
# Scalarized optimization (differential evolution)
pasys optimize config.yaml --objective eirp_dbw --sense maximize
# Multi-objective Pareto front (NSGA-II; needs the [mdao] extra)
pasys optimize config.yaml --objective eirp_dbw --method nsga2 \
--objective2 cost_usd:minimize -o pareto.parquet
# Sensitivity: one-at-a-time or Sobol global indices
pasys sensitivity config.yaml --sens-method sobol --samples 256
# Extract Pareto frontier from DOE results
pasys pareto results.parquet -x cost_usd -y eirp_dbw --plot
# Generate report
pasys report results.parquet --format html
Documentation
Full documentation is available at jman4162.github.io/phased-array-systems:
- Getting Started - Installation and quickstart
- User Guide - Detailed usage guides
- Tutorials - Step-by-step walkthroughs
- API Reference - Complete API documentation
- Theory - Background equations and theory
Interactive Demo
Try the interactive Streamlit demo app featuring:
- Single Case Calculator: Evaluate array configurations with real-time metrics
- Trade Study: DOE generation with Pareto optimization
- RF Cascade Analyzer: Cascaded noise figure, gain, and linearity analysis
- Radar Detection: SNR calculation and detection probability curves
Run locally:
cd app
pip install -r requirements.txt
streamlit run streamlit_app.py
Citation
If you use phased-array-systems in academic work, please cite:
@software{phased_array_systems,
title = {phased-array-systems: Phased Array Antenna System Design and Optimization},
author = {John Hodge},
year = {2026},
url = {https://github.com/jman4162/phased-array-systems}
}
Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
License
MIT License - see LICENSE for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file phased_array_systems-0.13.0.tar.gz.
File metadata
- Download URL: phased_array_systems-0.13.0.tar.gz
- Upload date:
- Size: 405.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a99b682be9b30cf8f971f16136ec82fc54e27b942e8097031db9bd8bdbddb503
|
|
| MD5 |
7910bac94598612758c59625292ed6f5
|
|
| BLAKE2b-256 |
0929600579ad0f21482cb8d40bf1f4b7627e94174f9766968403d2c114b725d7
|
Provenance
The following attestation bundles were made for phased_array_systems-0.13.0.tar.gz:
Publisher:
publish.yml on jman4162/phased-array-systems
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
phased_array_systems-0.13.0.tar.gz -
Subject digest:
a99b682be9b30cf8f971f16136ec82fc54e27b942e8097031db9bd8bdbddb503 - Sigstore transparency entry: 2553245261
- Sigstore integration time:
-
Permalink:
jman4162/phased-array-systems@ebd355cef7d13437b30041923015044fa2ecab43 -
Branch / Tag:
refs/tags/v0.13.0 - Owner: https://github.com/jman4162
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ebd355cef7d13437b30041923015044fa2ecab43 -
Trigger Event:
release
-
Statement type:
File details
Details for the file phased_array_systems-0.13.0-py3-none-any.whl.
File metadata
- Download URL: phased_array_systems-0.13.0-py3-none-any.whl
- Upload date:
- Size: 171.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0cb4941ec19ac5eb7b9e69ae39973e8613e41f8b78169952089414b91fa8502
|
|
| MD5 |
8a6a0a9b3fa062e8e19197aae3991c53
|
|
| BLAKE2b-256 |
d3b13c0a1f38dce368533e097966d5eaae657f92d5be719a7b6023e122175ee5
|
Provenance
The following attestation bundles were made for phased_array_systems-0.13.0-py3-none-any.whl:
Publisher:
publish.yml on jman4162/phased-array-systems
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
phased_array_systems-0.13.0-py3-none-any.whl -
Subject digest:
e0cb4941ec19ac5eb7b9e69ae39973e8613e41f8b78169952089414b91fa8502 - Sigstore transparency entry: 2553245313
- Sigstore integration time:
-
Permalink:
jman4162/phased-array-systems@ebd355cef7d13437b30041923015044fa2ecab43 -
Branch / Tag:
refs/tags/v0.13.0 - Owner: https://github.com/jman4162
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ebd355cef7d13437b30041923015044fa2ecab43 -
Trigger Event:
release
-
Statement type: