MultistaticConfig::default().guard_interval_us was 5_000 us (5 ms) with a comment claiming "well within the 50 ms TDMA cycle". That is wrong: on an N-slot TDM schedule node k transmits in slot k, so two nodes are separated by the slot offset, not clock jitter. A real 2-node mesh (slots 0/1) measured an 18,194 us spread, so every real frame set exceeded the 5 ms guard and fuse() silently fell back to per-node sum/dedup -- multistatic fusion never ran on hardware. - Raise default hard guard to 60 ms (full 50 ms TDMA cycle + 20% jitter headroom, derived from the slot model and documented in the field doc). - Raise soft guard to 20 ms (just above the observed 18.2 ms 2-slot spread). - Add MultistaticConfig::for_tdm_schedule(total_slots, slot_duration_us). - Keep the honest per-node fallback for genuinely-mismatched frames. Tests (fail on the old 5 ms default): - fuse_real_tdm_spread_18194us_fuses_with_default_guard - configurable_guard_rejects_too_large_spread - for_tdm_schedule_invariants Co-Authored-By: claude-flow <ruv@ruv.net> |
||
|---|---|---|
| .. | ||
| benches | ||
| src | ||
| tests | ||
| Cargo.toml | ||
| README.md | ||
README.md
wifi-densepose-signal
State-of-the-art WiFi CSI signal processing for human pose estimation.
Overview
wifi-densepose-signal implements six peer-reviewed signal processing algorithms that extract
human motion features from raw WiFi Channel State Information (CSI). Each algorithm is traced
back to its original publication and integrated with the
ruvector family of crates for high-performance
graph and attention operations.
Algorithms
| Algorithm | Module | Reference |
|---|---|---|
| Conjugate Multiplication | csi_ratio |
SpotFi, SIGCOMM 2015 |
| Hampel Filter | hampel |
WiGest, 2015 |
| Fresnel Zone Model | fresnel |
FarSense, MobiCom 2019 |
| CSI Spectrogram | spectrogram |
Common in WiFi sensing literature since 2018 |
| Subcarrier Selection | subcarrier_selection |
WiDance, MobiCom 2017 |
| Body Velocity Profile (BVP) | bvp |
Widar 3.0, MobiSys 2019 |
Features
- CSI preprocessing -- Noise removal, windowing, normalization via
CsiProcessor. - Phase sanitization -- Unwrapping, outlier removal, and smoothing via
PhaseSanitizer. - Feature extraction -- Amplitude, phase, correlation, Doppler, and PSD features.
- Motion detection -- Human presence detection with confidence scoring via
MotionDetector. - ruvector integration -- Graph min-cut (person matching), attention mechanisms (antenna and spatial attention), and sparse solvers (subcarrier interpolation).
Quick Start
use wifi_densepose_signal::{
CsiProcessor, CsiProcessorConfig,
PhaseSanitizer, PhaseSanitizerConfig,
MotionDetector,
};
// Configure and create a CSI processor
let config = CsiProcessorConfig::builder()
.sampling_rate(1000.0)
.window_size(256)
.overlap(0.5)
.noise_threshold(-30.0)
.build();
let processor = CsiProcessor::new(config);
Architecture
wifi-densepose-signal/src/
lib.rs -- Re-exports, SignalError, prelude
bvp.rs -- Body Velocity Profile (Widar 3.0)
csi_processor.rs -- Core preprocessing pipeline
csi_ratio.rs -- Conjugate multiplication (SpotFi)
features.rs -- Amplitude/phase/Doppler/PSD feature extraction
fresnel.rs -- Fresnel zone diffraction model
hampel.rs -- Hampel outlier filter
motion.rs -- Motion and human presence detection
phase_sanitizer.rs -- Phase unwrapping and sanitization
spectrogram.rs -- Time-frequency CSI spectrograms
subcarrier_selection.rs -- Variance-based subcarrier selection
Related Crates
| Crate | Role |
|---|---|
wifi-densepose-core |
Foundation types and traits |
ruvector-mincut |
Graph min-cut for person matching |
ruvector-attn-mincut |
Attention-weighted min-cut |
ruvector-attention |
Spatial attention for CSI |
ruvector-solver |
Sparse interpolation solver |
License
MIT OR Apache-2.0