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).
8.8 KiB
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 L0–L5 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:
- 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. - Backprojection reconstruction (
reconstruct.rs): the matched-filter inverse of (1) onto a 3D voxel grid, parallelized over voxels (rayon). - Point-cloud extraction (
pointcloud.rs): threshold + local-maximum extraction from the dense voxel image. - 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 intests/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'sFmcwRadarCubeadapter orGaussianMap. 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 (G1–G4) 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)
- Extend
ruview-unified::synth::room's image-method ray tracer to emit wideband stepped-frequency multi-position cubes (per ADR-278 §2.3), and wirewifi-densepose-sar::reconstructagainst that richer (multipath-aware) synthetic generator instead of the free-space-only model here. - A
ruview-unifiedintegration adapter convertingReflectivityImage/PointCloudPointoutput intoRfGaussian/GaussianMapprimitives (ADR-278 §2.4's stated integration contract). - Bistatic/MIMO measurement model.
- 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.io — cargo 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.