Files
ruvnet--RuView/docs/adr/ADR-287-coherent-wideband-rf-tomography-crate.md
T
ruv e4695d8c68 fix: renumber wifi-densepose-sar's ADR from 283 to 287 (number collision)
ADR-283 was already taken by ADR-283-ruview-community-metaharness-flywheel.md,
merged to main before this branch's work started -- picked without checking
against main's actual current ADR list. Renumbered to ADR-287, the next free
slot after ADR-286 (the wifi-densepose-sar-harness ADR, no collision there).

Updated every reference across the crate (Cargo.toml description, lib.rs/
geometry.rs/measurement.rs/pointcloud.rs/reconstruct.rs/resolution.rs doc
comments, tests/physics_validation.rs), its README, the tutorial doc,
CHANGELOG.md, and the workspace Cargo.toml's member comment. 25 tests still
pass after the rename (doc-comment-only changes, no logic touched).
2026-07-31 00:34:35 -04:00

8.8 KiB
Raw Blame History

ADR-287: wifi-densepose-sar — coherent wideband RF tomography research crate

Field Value
Status Accepted — implemented (P1), published
Date 2026-07-30
Parent ADR-278 (radar inverse rendering research program), ADR-282 (mandatory L0L5 evidence ladder)
Relates to ADR-273/274 (ruview-unified's FmcwRadarCube adapter, the eventual integration point), ADR-275 (GaussianMap, ditto), ADR-286 (wifi-densepose-sar-harness, the MetaHarness minted for this crate)
Published wifi-densepose-sar v0.3.1 on crates.io (2026-07-31)

0. PROOF discipline

Every accuracy number this crate produces is SYNTHETIC / evidence level L0 (ADR-282): generated by the crate's own forward simulator (measurement::simulate_measurement), scored against its own known ground truth (ScatteringTarget positions). Nothing here has been validated against real wideband RF hardware, and the crate contains no such hardware integration.

1. Context

A YC-backed company, Applied Electrodynamics ("WaveSight"), publicly launched a handheld "camera that can see through walls" using undisclosed radio-imaging technology. Comparing it against this repo's capabilities surfaced a real gap: wifi-densepose-signal::ruvsense::tomography implements radio tomographic imaging (Wilson & Patwari 2010) — RSS-based shadowing attenuation on a fixed-link topology, no coherent phase, no multi-frequency stepping, no synthetic aperture. It is a different technique from what a SAR-style through-wall imager needs: coherent, wideband, multi-position backprojection.

ruview-unified's FmcwRadarCube adapter (ADR-274) already normalizes wideband radar cubes into range profiles per position, and ADR-278 already names a radar-cube-output extension of the ADR-276 synthetic world generator as the intended sandbox for any future radar-inverse research. Neither, before this ADR, contained an actual backprojection reconstruction kernel — the primitive every candidate technique (matched-filter SAR, GPR imaging, RISE/DiffRadar-style inversion) is built on.

2. Decision

Ship wifi-densepose-sar as a standalone leaf crate (the nvsim pattern: pure Rust, deterministic ChaCha20 seeding, zero coupling to wifi-densepose-hardware or any real ingestion path) implementing:

  1. Forward measurement model (measurement.rs): simulates the complex, stepped-frequency returns a monostatic synthetic-aperture radar would record from known point scatterers — y_{m,k} = Σ_j σ_j/R_{m,j}² · exp(-i·4π·f_k·R_{m,j}/c) + noise.
  2. Backprojection reconstruction (reconstruct.rs): the matched-filter inverse of (1) onto a 3D voxel grid, parallelized over voxels (rayon).
  3. Point-cloud extraction (pointcloud.rs): threshold + local-maximum extraction from the dense voxel image.
  4. Closed-form resolution/coherence formulas (resolution.rs): ΔR = c/2B (range resolution), δ_CR ≈ λR/2L (cross-range/synthetic-aperture resolution), Δp ≤ λ/8 (antenna-pose coherence budget, derived from a quarter-wavelength round-trip-path tolerance) — checked against the reconstruction's actual behavior in tests/physics_validation.rs, not merely documented.

This is deliberately scoped one level below ADR-278's RISE/DiffRadar/GeRaF reproduction program: it is the bare measurement-model + backprojection primitive, not a reproduction of any specific published system, and not a claim about Applied Electrodynamics' undisclosed product (their waveform, antenna count, bandwidth, and algorithm are unknown; this crate applies the same well-established SAR/GPR physics — see Skolnik, Radar Handbook — to synthetic data).

3. What this explicitly is NOT

  • Not a hardware driver. No VNA/SDR/wideband-RF-frontend code exists anywhere in this crate or was added to wifi-densepose-hardware.
  • Not wired into ruview-unified's FmcwRadarCube adapter or GaussianMap. That integration is real future work (§5), deliberately deferred so the reconstruction physics validates in isolation first — the same staging ADR-278 §2.3 already prescribes ("sandbox-first... before hardware").
  • Not a reproduction of RISE, DiffRadar, or GeRaF. ADR-278's gates (G1G4) are untouched by this ADR.
  • Not a real-world through-wall imaging performance claim. The forward model is free-space propagation only — no multipath, no per-material attenuation, no antenna gain pattern, no receiver noise figure. Real-world performance depends on all of these.

4. Simplifications (honesty boundary)

  • Monostatic, not MIMO. A single antenna acts as both transmitter and receiver at each synthetic-aperture position (the standard stripmap-SAR simplification), not a multi-element MIMO array. Extending to bistatic/MIMO (m, n) transmitter/receiver pairs is straightforward given the existing measurement-model structure but not implemented.
  • Isotropic antenna, no gain pattern. Every antenna position radiates/receives equally in all directions.
  • Free-space propagation only. No multipath, no material transmission/reflection/attenuation (contrast ruview-unified::synth::room's Fresnel material model, which is narrowband-CW and not yet extended to wideband — a natural follow-up, §5).
  • 1/R² two-way amplitude falloff, no calibration. Real receivers have finite dynamic range, noise figures, and require calibration against a known reference target; none of that is modeled.

5. Follow-up (not in this ADR's scope)

  1. Extend ruview-unified::synth::room's image-method ray tracer to emit wideband stepped-frequency multi-position cubes (per ADR-278 §2.3), and wire wifi-densepose-sar::reconstruct against that richer (multipath-aware) synthetic generator instead of the free-space-only model here.
  2. A ruview-unified integration adapter converting ReflectivityImage/PointCloudPoint output into RfGaussian/GaussianMap primitives (ADR-278 §2.4's stated integration contract).
  3. Bistatic/MIMO measurement model.
  4. Any of ADR-278's actual gated reproductions (RISE first), if and when that program proceeds — this crate would be a component, not a substitute.

6. Consequences

  • The workspace gains a real (if intentionally scoped-down) coherent-imaging primitive where before there was none — useful groundwork for ADR-278 if that research program proceeds, and a direct, honest answer to "could this repo build a WaveSight-like device" (no, not without the hardware program described in the motivating comparison; yes, this is the reconstruction-algorithm groundwork such a program would need).
  • Zero risk to the existing wifi-densepose-signal::ruvsense::tomography (RSS-based RTI) code path or any production pipeline — this crate is not referenced by any of them.
  • 25 tests (22 unit + 3 integration physics-validation), 0 failed, clippy-clean. Criterion bench: MEASURED 512/4096/32768-voxel backprojection reconstruction throughput (see crate README for the numbers as last recorded). The incremental-phasor-rotation optimization (§7) cut reconstruction time ~4.4-4.5x, proven equivalent to the direct per-frequency computation it replaced.

7. Follow-up optimization: incremental phasor rotation (2026-07-30, MEASURED)

focus_at_point originally called Complex64::from_polar (one sin/cos pair) per (pose, frequency) term. Since FrequencySweep::frequencies produces evenly-spaced frequencies by construction, the per-term phase is an arithmetic progression in the frequency index — so the phasor can be evaluated once per pose and advanced by a fixed complex-multiply step per frequency, replacing K trig evaluations with 2. focus_at_point's signature changed from a raw &[f64] frequency slice to &FrequencySweep, making the evenly-spaced-frequencies precondition this optimization depends on a type-level invariant rather than a caller-observed one.

MEASURED (criterion regression detection, p < 0.001): ~4.4-4.5x faster across 512/4096/32768-voxel grids. Proven equivalent, not just faster: reconstruct::tests::backprojection_incremental_rotation_matches_direct_per_frequency_computation checks the optimized path against an independently reimplemented direct per-frequency reference, across four sweep sizes (including the n_steps=1 degenerate case) and both on-target and off-target evaluation points, to <1e-9 relative error.

8. Published (2026-07-31)

wifi-densepose-sar v0.3.1 is live on crates.iocargo add wifi-densepose-sar resolves it from any Rust project. A MetaHarness minted for this crate (ADR-286, wifi-densepose-sar-harness) is published to npm alongside it. Publishing happened after this ADR's implementation and §7 optimization landed; no code changed as part of publishing itself.