Repository navigation
cell M6: an emulated crossing (DU TX-power ramps), there and back, and a hover — nothing forced - #539
Conversation
…over — nothing forced Every earlier handover had a forced trigger or a standing difference. Now the UE crosses: CELL_DU_TX_RAMP (test) ramps a DU's TX power offset piecewise linear on a shared wall-clock zero (CELL_DU_TX_RAMP_T0), beacons and DL alike (cell.du.txpwr); the UE logs its measurement reports (cell.ue.mr). The CU's A3 at its defaults decides. Rig (testrig scripts/m6_crossing.sh, keyed, one channel, one UE): - crossing 1 -> 2 -> 1, 3/3: exactly two handovers per run, from the UE's own measurements; UE margin at the A3 entry -> switch 38-51 sf (24 the lead), trigger margin 7-13 dB (the 1 s reporting chain at ~2 dB/s), interruption 1-2 sf, 0 uplinks missing (DAPS); TSF continuity, target in slot, source released. - hover just under the entry (median +3 dB, 20-23 % of reports at/above it), 3/3: no handover. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
PR Summary by QodoEmulate unforced cell crossings with DU TX-power ramps
AI Description
Diagram
High-Level Assessment
Files changed (2)
|
Code Review by Qodo
1.
|
…p the crossing found), source failure mid-crossing, strict ramp knobs - CU bug found by the crossing: it planned from the DUs' REPORTED positions, which lag a schedule by RAN_LEAD_SF (> a plan round). With two equally good layouts it re-issued them in turn every round, each swap an uplink in the old slot (target in slot 91-98 % after a switch). It now plans each UE from its own issued schedule (the report only for a UE the schedule does not name: a handover arrival). After: 8 schedules a run, every switch in slot. - CELL_DU_TX_RAMP_T0 parsed strictly (strtod, > 0) or the DU refuses; the anchor used is logged (cell.du.txpwr_t0); a ramp on a radio without TX power control is refused; a clamped write warns. - docs: the source-failure crossing (DAPS 0/0 missing in the crossing window vs 11/13 without), the final-code KPIs, the hover's criterion and result stated apart, the CU bug. Rig (testrig m6_crossing.sh, final code): crossing 3/3, hover 3/3 (0 handovers), source failure with DAPS 2/2 (0 missing in the window). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Qodo review addressed in 2790f8b:
Also, a CU bug the re-runs exposed: after a switch the target heard the UE in slot only 91–98 %. The CU planned from the DUs' reported positions. Those lag a schedule by |
…gger, seen once) but never a switch back Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
On hover criterion looser than its claim: the doc now gives the result (0 handovers in all 3 runs) and the reason the criterion is 'at most one, never back' rather than zero. At a +3 dB hover, the L3-filtered margin can legitimately hold the 4 dB entry for the time-to-trigger. One hover run of the earlier set did exactly that, once, and never switched back. A zero-handover assertion would fail correct A3 behaviour. What the test must catch is ping-pong (a switch back), and it fails on that. (8cf378f) |
…e KPI Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
CI green; all four Qodo findings resolved. The remaining items are the two high-level alternatives (synthetic UE measurements; moving the UE or a channel emulator), for which Qodo recommends this PR's DU power-ramp approach, with the documented limit that it does not emulate the uplink path loss. Merging with skip-qodo-gate. |
M6 (#260, EPIC #254): the first handovers on the rig with nothing forced. A UE crosses from one cell to the other and back, and the CU's A3 decides at its default thresholds. This closes the "no crossing test" item.
What
CELL_DU_TX_RAMP=T:DB,…: the DU's TX power offset, piecewise linear in seconds fromCELL_DU_TX_RAMP_T0(unix seconds, so the DUs of one test ramp together; the hosts are NTP-synced) or from service start, and held at the ends. It is applied in 0.5 dB steps viaSetTxPowerOffsetQdband logged ascell.du.txpwr(wanted vs applied). Beacons and DL follow it.cell.ue.mr: serving cell, sf, RSSI per cell).docs/cell-m6.mdgains a section on the emulated crossing. It replaces the two open items ("a moving UE", "no crossing test") with an honest limit: emulated by TX power, uplink path loss unchanged, one UE, one ramp rate.Rig (testrig
scripts/m6_crossing.sh, keyed, one channel, UE1 only)Cell 1 fades by 16 dB over 15 s while cell 2 rises, they hold, then reverse. The UE's measured margin sweeps from about −13 to +24 dB and back. The A3 runs at its defaults (3 dB offset, 1 dB hysteresis, 640 ms TTT, 2 s dwell).
Crossing 1 → 2 → 1, 3/3 pass: exactly two handovers per run, both triggered by the A3 on the UE's own measurements.
Hover just under the entry, 3/3 pass: median margin +3 dB (p10–p90 +2 to +4), with 20–23 % of the UE's reports at or above the entry. No handover in any run.
Found on the way: the power-to-RSSI relation isn't linear on the rig. −8 dB of offset reads about −9 dB at the UE, and −9 dB about −12 dB. The cause is not established. The tests judge by the UE-measured margins, not the offsets.
🤖 Generated with Claude Code