Skip to content

ntn-cho - TTE-aware Conditional Handover

TTE-aware conditional handover over a real LEO pass
TTE-aware conditional handover over a real LEO pass
A3 vs location vs time vs TTE-aware - handover count & ping-pong
A3 vs location vs time vs TTE-aware - handover count & ping-pong
Handover driven by measured serving SINR
Handover driven by measured serving SINR
ntn-cho module architecture
ntn-cho module architecture

ntn-cho is the ns3-ntn-toolkit module that implements 3GPP Release-17/18 conditional handover for LEO satellite non-terrestrial networks, adding a Time-to-Exit (TTE) estimator that admits a candidate beam only when it will stay in coverage long enough to be worth the switch. It ships the full NTN handover trigger set, from the Rel-17 normative CondEvents to the Rel-18 CondEventD2 and the TR 38.821-studied elevation and timing-advance mechanisms, with handover decisions falling out of live SGP4 orbital geometry and SINR measured off a real mmwave NR NTN PHY trace rather than hardcoded scripts.

Why it matters. In LEO constellations rapid beam-coverage change drives frequent, often premature handovers and ping-pong. ntn-cho is an open-source ns-3 module that pairs a 3GPP-aligned CHO state machine with a Time-to-Exit estimator so a target is armed only when it is both strong enough (signal quality above threshold) and stable long enough (longest D1-based TTE) to finish the handover, and it implements the complete Rel-17/18 NTN CondEvent trigger family with precise standards positioning.

What it simulates

  • TTE-aware candidate selection. NtnChoAlgorithm admits a candidate if it has the longest D1-based Time-to-Exit and its signal quality exceeds a configured threshold, otherwise discards it, breaking ties on signal strength. The TTE itself is estimated by NtnTteEstimator via bisection root-finding on the D1 condition, per-candidate and in batch.
  • Full NTN trigger family. Rel-17 measurement-based A3 (TRIGGER_EVENT_A3), location-based D1 (TRIGGER_LOCATION_D1), and time-based T1 (TRIGGER_TIME_T1, a CondEventT1 window from the serving cell's remaining time-of-service); Rel-18 distance D2 (TRIGGER_LOCATION_D2) with moving ephemeris-derived reference locations; and the TR 38.821-studied TRIGGER_ELEVATION (serving elevation below floor, candidate above floor plus hysteresis) and TRIGGER_TIMING_ADVANCE classes. A combineWithA4 flag enforces the Rel-17 rule that T1/D1/D2 are configured together with the A4 measurement leg.
  • Forward-looking mechanisms. Rel-19 conditional LTM (TRIGGER_LTM_CONDITIONAL, L1-filtered measurements with a MAC-CE-style fast cell switch) and trajectory-predictive CHO (TRIGGER_TRAJECTORY_PREDICTIVE, forecast serving outage and maximum predicted time-of-stay), with optional RACH-less execution from ephemeris/GNSS TA pre-compensation. GetMechanismStats() reports LTM switches, PCHO triggers, RACH-less vs RACH executions, and per-handover interruption.
  • CHO state machine. The standardized automaton CHO_IDLE → CHO_PREPARED → CHO_CONDITION_MONITORING → CHO_EXECUTING → CHO_COMPLETED, with ChoConfig carrying per-class parameters (t1WindowDuration, elevationMinDeg/elevationHystDeg, orbitAltitudeKm, taServingMax/taAdvantage, LTM/PCHO knobs, and rachLess + rachDuration/choExecutionDelay).
  • Real measured radio. The real-stack examples run on an actual mmwave NR NTN cell via NtnRealStackHelper (SpectrumPhy + MAC + HARQ + RLC/PDCP + RRC + EPC) over SGP4 Walker satellite orbits, with serving SINR measured off the mmwave PHY trace and candidate SINR ephemeris-predicted from the real Friis slant-range ratio. Doppler is signed, flipping from positive to negative across a LEO pass.
  • TR 38.811 UE mobility. NtnTr38811MobilityModel makes the seven TR 38.811 §6.1.1.1 UE classes (handheld static/pedestrian, vehicular, HST, maritime, aviation, fixed IoT) a real ns-3 MobilityModel in ECEF, so per-class motion drives the radio stack, Doppler, and the TTE estimator directly.
  • Supporting models. NtnOrbitPredictor (SGP4-based visibility and best-beam prediction), NtnMeasurementModel (RSRP/SINR/D1/D2 from TR 38.811 channel scenarios), and the optional NtnAiInterface ns3-ai shared-memory bridge exposing a candidate-cell observation/action space for AI-driven decisions.

Standards & references

  • 3GPP Rel-17. Normative NTN CondEvents: event A3 baseline, CondEventD1 (location-based), and CondEventT1 (time-based, ephemeris-scheduled), with the rule that T1/D1/D2 are configured together with the A4 measurement leg.
  • 3GPP Rel-18. CondEventD2 (distance with moving, ephemeris-derived reference locations), TS 38.331 §5.5.4.15a.
  • 3GPP TR 38.821 §6. Elevation-based and timing-advance-based handover mechanisms (studied, not standardized CondEvents); the LEO-600 reference point (~1932 km slant at 10° elevation) used by the elevation trigger.
  • 3GPP TR 38.811 §6.1.1.1. NTN UE mobility classes and NTN channel scenarios for the measurement model.
  • 3GPP Rel-19 (forward-looking). Conditional LTM with L1-filtered measurements and MAC-CE-style fast cell switch.
  • Validation. The ntn-standards-validation suite checks SGP4 propagation against Keplerian theory (orbital radius, speed sqrt(mu/a), quarter-period arc at 550 km / 53°), the zenith-pass Doppler envelope, ENU pass geometry, and the spherical-Earth elevation/slant relation.

Use cases

  • Algorithm comparison. Benchmark TTE-aware selection against A3, location, and time triggers on handover count, ping-pong rate, and interruption over a full Walker constellation (ntn-cho-full-constellation).
  • Trigger-class study. Exercise all nine mechanisms (A3 / D1 / T1 / D2 / elevation / TA / TTE-aware / LTM / PCHO) on a real measured cell as a serving satellite passes zenith and an in-plane neighbour approaches (ntn-cho-handover-traffic).
  • RACH-less execution. Measure the interruption reduction from ephemeris/GNSS TA pre-compensation against RACH-based execution (--rachLess=1).
  • Trajectory-predictive handover. Trigger on forecast serving outage and maximum predicted time-of-stay rather than reactive measurement (--trigger=pcho).
  • TTE estimator tuning. Sweep the TTE minimum and signal-quality threshold to trade handover frequency against premature-switch failures.
  • Realistic mobility generation. Spawn one UE per TR 38.811 class and inspect per-class trajectories for radio and Doppler studies (ntn-realistic-mobility-demo).

Run it

# Real-stack flagship: TTE-aware / LTM / PCHO on measured mmwave SINR over real SGP4 orbits
./ns3 run "ntn-cho-real-stack --duration=60 --trigger=pcho --rachLess=1"

# Trigger-class study on a real measured cell (try elevation, d2, t1, a3, ta, ltm)
./ns3 run "ntn-cho-handover-traffic --simSeconds=60 --trigger=elevation"

# Full Walker constellation: compare a3 / location / time / tte-aware
./ns3 run "ntn-cho-full-constellation --algorithm=tte-aware --numUes=50 --outputDir=/tmp/ntn-full"

Test suites: ./test.py -s ntn-cho (CHO algorithm, state machine, measurement model) and ./test.py -s ntn-standards-validation (mobility architecture vs orbital theory and published NTN figures).

Reference paper

Muhammad Uzair. Time-to-Exit-Aware Conditional Handover for LEO Non-Terrestrial Networks. IEEE Transactions on Aerospace and Electronic Systems (under review).

See Papers for the arXiv preprint.

Source

  • README
  • Visualisation: contrib/ntn-cho/visualization/public/index.html - full CesiumJS 1.119 viewer with KPI cards