Files
ruvnet--RuView/v2/crates/wifi-densepose-sar/benches/backprojection_bench.rs
T
ruv d781f20e1a feat(wifi-densepose-sar): coherent wideband RF tomography research crate (ADR-283)
New standalone leaf crate implementing the synthetic-aperture-radar
reconstruction primitive a handheld through-wall RF imaging device
would need: a stepped-frequency multi-position complex forward
measurement simulator, delay-and-sum backprojection reconstruction,
point-cloud extraction, and closed-form range/cross-range resolution
+ antenna-pose coherence-budget formulas checked against the
reconstruction's actual behavior in tests/physics_validation.rs.

Motivated by comparing this repo against Applied Electrodynamics'
"WaveSight" launch. Scoped explicitly below ADR-278's RISE/DiffRadar/
GeRaF reproduction gates: this is the bare measurement-model +
backprojection primitive, not a reproduction of any published system
or a claim about real hardware capability. Every number is
SYNTHETIC/L0 (ADR-282) -- no wideband RF hardware backs this crate.

24 tests (21 unit + 3 integration), 0 failed, clippy-clean. Adds a
tutorial walkthrough and MEASURED backprojection benchmark numbers.
2026-07-30 17:52:31 -04:00

39 lines
1.5 KiB
Rust

//! Criterion benchmark for the backprojection reconstruction kernel.
//! `cargo bench -p wifi-densepose-sar` reports MEASURED throughput --
//! see the crate README for the last recorded numbers.
#![allow(missing_docs)]
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
use wifi_densepose_sar::geometry::linear_aperture;
use wifi_densepose_sar::measurement::{simulate_measurement, FrequencySweep, ScatteringTarget};
use wifi_densepose_sar::reconstruct::{backproject, VoxelGrid};
use wifi_densepose_sar::Point3;
fn backprojection_benchmark(c: &mut Criterion) {
let poses = linear_aperture(Point3::new(-0.5, 0.0, 0.0), Point3::new(0.5, 0.0, 0.0), 21);
let sweep = FrequencySweep::new(2.0e9, 6.0e9, 32);
let targets = vec![
ScatteringTarget::new(Point3::new(0.0, 2.0, 0.0), 1.0),
ScatteringTarget::new(Point3::new(0.3, 1.8, 0.1), 0.6),
];
let measurement = simulate_measurement(&poses, &sweep, &targets, 0.01, 7);
let mut group = c.benchmark_group("backproject");
for &voxels_per_axis in &[8usize, 16, 32] {
let grid = VoxelGrid::new(
Point3::new(-0.5, 1.5, -0.5),
1.0 / voxels_per_axis as f64,
voxels_per_axis,
voxels_per_axis,
voxels_per_axis,
);
group.bench_with_input(BenchmarkId::from_parameter(grid.len()), &grid, |b, grid| {
b.iter(|| backproject(&measurement, &poses, &sweep, grid));
});
}
group.finish();
}
criterion_group!(benches, backprojection_benchmark);
criterion_main!(benches);