Score an RF localisation challenge
Compare RSSI-only and motion-fused positions on a deterministic hidden test path using median and p90 error.

Radio Remi: I want you to predict the result, inspect each intermediate value, and keep the final claim inside the evidence.
Predict the reading, then compare it with the measurement.
Python 3 in your browser (JupyterLite)
Python · no installCompare RSSI-only and motion-fused positions on a deterministic hidden test path using median and p90 error.
Open the notebook in your browser and run each Python cell; no install or account is needed.
Three ways to run: use JupyterLite here with no install; run main.py locally from the downloadable lab folder; or open the same notebook in Google Colab.
Steps
Step 1
- Do
- Make a pre-lab prediction.
- You will see
- The notebook displays the prediction prompt before any score.
- Why it matters
- A fixed training set and a separate deterministic test path prevent the learner from tuning directly on every answer.

Step 1 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 2
- Do
- Inspect the fixed fingerprint map.
- You will see
- Sixteen labelled positions and four access-point RSSI values are printed.
- Why it matters
- A fingerprint compares a live vector with labelled survey vectors.

Step 2 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 3
- Do
- Estimate hidden positions with RSSI neighbours.
- You will see
- The first five RSSI-only predictions appear without their reference coordinates.
- Why it matters
- RSSI estimates loss, so one range-like value forms a broad ring rather than a point.

Step 3 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 4
- Do
- Add motion increments between fixes.
- You will see
- A fused path keeps relative motion between the sparse radio corrections.
- Why it matters
- A motion estimate can predict where a handset moved between radio observations.

Step 4 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 5
- Do
- Reveal and score the hidden path.
- You will see
- Median and p90 errors are printed for both methods.
- Why it matters
- The median describes a typical test point, while p90 exposes the long tail that affects alarms and hand-offs.

Step 5 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 6
- Do
- Stress one access-point bias.
- You will see
- A 6 dB bias increases at least one reported error percentile.
- Why it matters
- A smooth track may still be wrong if both inputs share a bias.

Step 6 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 7
- Do
- Complete the result card.
- You will see
- The result card states both percentiles and the fixture boundary.
- Why it matters
- These scores validate the supplied fixture only; a site survey must repeat them with measured anchors and real movement.

Step 7 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
Chapter checks
These questions refer to the chapter’s examples. Use the return links to review their answers.
Why report p90 position error beside the median?
Return to the chapter’s knowledge checkWhich method most directly depends on synchronized anchor clocks?
Return to the chapter’s knowledge check
Return to RF Localisation with RSSI, Time, Angle, UWB, and Sensor Fusion · Browse Labs