Learned Near-Field XL-MIMO Range-Angle Focusing#
Goal#
Train a portable range-angle estimator for a controlled 28 GHz spherical-wave scenario. The runtime model receives one noisy phase-referenced coherent-pilot observation from a 32-element half-wavelength array. The declared 0.5–5 m interval lies approximately within this aperture’s radiative near-field region; true range and angle remain separate offline targets.
The paired comparison contains far-field steering search, polar range-angle codebook search, the returned learned estimator, and true-position focusing as an explicitly labeled simulation oracle.
CLI training summary#
(
set -euo pipefail
ROOT="$(git rev-parse --show-toplevel)"
BUNDLE="$ROOT/.noema/training_exports/near_field_xl_mimo"
cd "$ROOT"
uv sync --extra onnx
uv run --project "$ROOT" --extra onnx noema differentiable export \
"$ROOT/recipes/near_field_xl_mimo_focusing.yaml" \
--training-plan "$ROOT/demo_trainings/near_field_range_angle_mlp/training_plan.yaml" \
--out "$BUNDLE" --force
uv run --project "$ROOT" --extra onnx python \
"$ROOT/demo_trainings/prepare_example.py" near-field-range-angle "$BUNDLE" \
--project-root "$ROOT"
uv run --project "$ROOT" --extra onnx noema dataset-capture run \
"$BUNDLE/capture_train_recipe.yaml" --out "$BUNDLE/data/train" --force
uv run --project "$ROOT" --extra onnx noema dataset-capture run \
"$BUNDLE/capture_validation_recipe.yaml" --out "$BUNDLE/data/validation" --force
uv run --project "$ROOT" --extra onnx noema dataset-capture run \
"$BUNDLE/capture_test_recipe.yaml" --out "$BUNDLE/data/test" --force
cd "$BUNDLE"
uv run --project "$ROOT" --extra onnx python validate_contract.py
uv run --project "$ROOT" --extra onnx python train_demo.py
uv run --project "$ROOT" --extra onnx python evaluate_demo.py
cd "$BUNDLE/reference_training"
uv run --project "$ROOT" --extra onnx python build_benchmark.py
cd "$ROOT"
uv run --project "$ROOT" --extra onnx noema benchmark validate \
"$BUNDLE/reference_training/benchmark_pack.yaml"
uv run --project "$ROOT" --extra onnx noema benchmark run \
"$BUNDLE/reference_training/benchmark_pack.yaml"
)
1. Export and capture#
Select Train/replace for Estimator. Capture array_observation from data.problem and
range_angle from data.truth. The default plan uses 4,096 disjoint records over 0–20 dB.
2. Train and return the estimator#
The starter searches a dense spherical-wave bank over the declared 0.5–5 m and ±55° region, then
fits a bounded residual head for sub-grid and low-SNR corrections from the full coherent array.
Both paths are packaged in one portable ONNX component. Model selection uses validation loss only.
The ABI accepts array_ri[batch, antenna, 2] and returns range_angle[batch, 2].
3. Compare estimation and focusing#
The generated paired campaign reports range RMSE, angle RMSE, and normalized focusing gain. The far-field baseline deliberately ignores spherical-wave range curvature. The polar codebook searches the declared range-angle grid, while true-position focusing uses evaluator truth and is not an implementable receiver.
Completed benchmark result#
The completed paired campaign contains 24 runs: four focusing rules, two held-out SNRs, and three fresh target/noise seeds. Points are means over the three seeds; bands are two-sided Student-t 95% confidence intervals.
Note
Three paired seeds make this a compact workflow result, not a publication-strength population claim.
The learned estimator reaches 0.958 normalized focusing gain at 0 dB and 0.979 at 15 dB. The two coarser classical searches remain around 0.88–0.90, while the simulation-only true-position oracle is 1.0. The gain comes mainly from the denser physics-based search; the learned residual supplies bounded sub-grid correction rather than replacing the propagation model.
SNR (dB) |
Method |
Role |
Mean Normalized focusing gain |
Mean Range RMSE (m) |
Mean Angle RMSE (degree) |
Primary 95% CI low |
Primary 95% CI high |
|---|---|---|---|---|---|---|---|
0 |
Far-field steering search |
baseline |
0.887805938721 |
1.24112034822 |
0.480918891229 |
0.857989143473 |
0.917622733968 |
0 |
Polar range-angle codebook |
baseline |
0.884192347527 |
1.32858076437 |
0.788399283452 |
0.863331780025 |
0.905052915028 |
0 |
True-position focusing |
oracle |
1 |
0 |
0 |
1 |
1 |
0 |
Physics-informed learned estimator |
candidate |
0.958070596059 |
1.2103106285 |
0.42828154379 |
0.948619006755 |
0.967522185363 |
15 |
Far-field steering search |
baseline |
0.902786771457 |
1.24112034822 |
0.185407599994 |
0.88512045795 |
0.920453084963 |
15 |
Polar range-angle codebook |
baseline |
0.904617687066 |
0.542011835582 |
0.731084762374 |
0.886757977583 |
0.922477396549 |
15 |
True-position focusing |
oracle |
1 |
0 |
0 |
1 |
1 |
15 |
Physics-informed learned estimator |
candidate |
0.979071935018 |
0.450755043676 |
0.287153639773 |
0.973025898867 |
0.985117971169 |
Download the run-level projection, chart data, or provenance manifest.
This narrowband, single-user synthetic protocol omits beam squint, mutual coupling, blockage, calibration error, wideband delay, and multi-user interference.