Learned LEO-NTN Doppler Prediction and Beam Handover#

Goal#

Train a causal portable tracker from six noisy Doppler/azimuth observations. At a fixed one-second horizon, the model predicts future Doppler and scores one of nine fixed beam sectors. Future state and the correct next beam are captured separately and never enter runtime inference.

The paired comparison contains hold-last, linear extrapolation, the learned tracker, and a simulation-future-state oracle.

CLI training summary#

(
  set -euo pipefail
  ROOT="$(git rev-parse --show-toplevel)"
  BUNDLE="$ROOT/.noema/training_exports/leo_ntn_tracking"
  cd "$ROOT"

  uv sync --extra onnx
  uv run --project "$ROOT" --extra onnx noema differentiable export \
    "$ROOT/recipes/leo_ntn_doppler_beam_tracking.yaml" \
    --training-plan "$ROOT/demo_trainings/leo_ntn_tracking_mlp/training_plan.yaml" \
    --out "$BUNDLE" --force
  uv run --project "$ROOT" --extra onnx python \
    "$ROOT/demo_trainings/prepare_example.py" leo-ntn-tracking "$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 Tracker. Capture track_features from data.problem and future_state from data.truth. The default plan uses 4,096 disjoint records across five observation-SNR settings.

2. Train and return the tracker#

The starter jointly minimizes normalized future-Doppler error and next-beam cross entropy. Validation data selects the checkpoint. Its ONNX output contains one Doppler estimate followed by nine beam logits; Noema performs the same deterministic argmax projection for every run.

3. Compare causal handover rules#

The generated campaign reports both Doppler MAE and beam-handover accuracy at the same fixed horizon. Hold-last and linear extrapolation see exactly the same history as the learned model. The oracle consumes future simulator state and is only an upper bound.

Completed benchmark result#

The completed paired campaign contains 24 runs: four causal handover rules, two held-out SNRs, and three fresh track/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 tracker has higher mean next-beam accuracy than hold-last at 0 dB (0.719 versus 0.635), while hold-last is slightly better at 15 dB (0.911 versus 0.896). Linear extrapolation is weaker at both points; the future-state oracle is 1.0 by construction. This is a mixed result, not a universal learned-tracker win.

Paired benchmark summary#

SNR (dB)

Method

Role

Mean Beam accuracy

Mean Doppler MAE (Hz)

Primary 95% CI low

Primary 95% CI high

0

Hold last observation

baseline

0.635416666667

39884.9576071

0.478549119222

0.792284214111

0

Linear Doppler/angle extrapolation

baseline

0.203125

141720.374735

0.10043108425

0.30581891575

0

True future state

oracle

1

0

1

1

0

Learned causal tracker

candidate

0.71875

3345.04196172

0.651521051095

0.785978948905

15

Hold last observation

baseline

0.911458333333

7148.88633108

0.889048683698

0.933867982968

15

Linear Doppler/angle extrapolation

baseline

0.739583333333

25198.6066006

0.627535085159

0.851631581508

15

True future state

oracle

1

0

1

1

15

Learned causal tracker

candidate

0.895833333333

1359.41611798

0.851014034063

0.940652632603

Download the run-level projection, chart data, or provenance manifest.

This bounded kinematic generator is not an orbital propagator, ephemeris product, 3GPP NTN channel model, link budget, beam-management protocol, or conformance test.