Technical: the pipeline in detail
Channel state. Captured through nexmon_csi on the Pi’s bcm43455c0 radio. With a single antenna the chain uses amplitude only: guard-subcarrier removal, per-frame gain normalisation, a Hampel filter, live-subcarrier selection, fractional deviation and PCA. Presence compares a 10 s window against the calibrated empty room at an 8-sigma threshold. Heart rate (48-120 bpm) is always reported as low confidence.
Fusion. Evidence combines in bounded log-odds with each source capped at ±2.5, an 8 s evidence half-life, a prior of 0.15 and an alert threshold of 0.75. An explain call lists each sensor’s signed vote, including disagreements.
Radio tomographic imaging. ESP32 nodes beacon over ESP-NOW and report received signal strength. The image solves y = Wx + n with Tikhonov regularisation, and an alpha-beta tracker follows people, also accepting LD2450 radar targets. A mesh of N nodes gives N(N-1)/2 links: 20 nodes make 190.
RF monitoring. SDR sweeps learn a 300 s site baseline, then flag new emitters with an adaptive noise floor, a 16 dB threshold with hysteresis and persistence checks. A dedicated detector watches GNSS L1 for jamming.