Files
ruvnet--RuView/examples/research-sota/r12_pabs_results.json
T
rUv 9cd1b8ce2a research(R12 PABS): NEGATIVE -> POSITIVE — 1161x detection lift via R6.1 forward model (#722)
R12 (tick 5) was a NEGATIVE result: naive SVD-spectrum cosine distance
detected structure changes at 0.69x the natural drift floor (= undetectable).
R12 explicitly identified the revision: 'PABS over Fresnel basis'.

R6.1 (tick 18) shipped the multi-scatterer Fresnel forward operator.
This tick implements PABS on top of it.

PABS = ||y_observed - y_predicted||^2 / ||y_observed||^2

Benchmark (5 m link, 2.4 GHz, subject + 4 wall reflectors expected):

| Scenario                       | PABS / drift  | SVD (R12) / drift |
|--------------------------------|---------------:|------------------:|
| Empty room (subject missing)   |      7,362x   |               65x |
| Subject as expected (sanity)   |          0x   |                0x |
| +1 new furniture               |         84x   |               11x |
| +1 unexpected human            |      1,161x   |               11x |
| Subject moved 10 cm            |     21,966x   |               90x |
| Natural drift (5% wall shift)  |          1x   |                1x |

PABS detects unexpected human at 1161x natural drift; R12 SVD detected
at 11x. ~100x lift purely from physics-grounded prediction vs naive
statistical eigenshift.

R12 NEGATIVE -> POSITIVE. The meta-lesson: a research loop that catalogues
NEGATIVE results creates a backlog of revisitable work that pays off
when later tools become available. R12 -> R12 PABS is the worked example.

R13 cannot be similarly revisited -- its 5 dB shortfall is a hard
physics floor, not a missing model.

The subject-moved-10cm caveat: PABS detects ANY mismatch between
expected and observed scene. Real production PABS needs a pose-aware
forward model that updates from pose_tracker.rs in real-time. The
actual detection signal is PABS-after-pose-update. ~50-100 LOC Rust
glue, catalogued as R12.1 follow-up.

Composes:
- R6.1 unblocked this implementation
- R7 gets precise per-link consistency: residual small on all links =
  no structure; spike on one = local structure OR compromised link;
  mincut disambiguates
- R11 enables maritime container-tamper / hatch-seal apps
- R14 gets V0 security feature (intruder detection w/o biometric storage)
- ADR-029 needs to reference PABS as structure-detection primitive
- R10 PABS-vs-canopy works if forest modelled or learned

Honest scope:
- Pose-PABS closed loop not yet built
- Synthetic data only; real-world drift floor needs measurement
- Population-prior body; per-subject would tighten residual
- Single time-frame; real pipeline needs temporal averaging

Coordination: ticks/tick-19.md, no PROGRESS.md edit.
2026-05-22 03:49:41 -04:00

60 lines
1.5 KiB
JSON

{
"model": "PABS = ||y_observed - y_predicted||^2 / ||y_observed||^2",
"forward_operator_source": "R6.1 multi-scatterer additive Fresnel",
"expected_scene": {
"subject_pos": [
2.5,
2.75
],
"wall_reflectors": 4
},
"link": {
"tx": [
0.0,
2.5
],
"rx": [
5.0,
2.5
],
"freq_ghz": 2.4
},
"scenarios": {
"A_empty_room": {
"description": "no occupant",
"pabs": 4.170183705070839,
"svd_distance": 0.5965843005537784
},
"B_subject_expected": {
"description": "subject where expected",
"pabs": 0.0,
"svd_distance": 0.0
},
"C_added_furniture": {
"description": "+1 new structural element",
"pabs": 0.04744306789447172,
"svd_distance": 0.1011460778806426
},
"D_unexpected_person": {
"description": "+1 unexpected human",
"pabs": 0.6575620431155754,
"svd_distance": 0.09866444424036849
},
"E_natural_drift": {
"description": "5%% wall reflectivity drift",
"pabs": 0.0005664412950287771,
"svd_distance": 0.009233808950251039
},
"F_subject_moved": {
"description": "subject shifted 10 cm",
"pabs": 12.442629346878062,
"svd_distance": 0.8354632981416396
}
},
"verdict": {
"pabs_signal_to_drift": 1160.8652986399395,
"pabs_furniture_to_drift": 83.75637212689702,
"svd_signal_to_drift": 10.685129481446127,
"svd_furniture_to_drift": 10.953884623949552
}
}