docs/research/sota-2026-05-22/R10-through-foliage-wildlife.md
Status: physics + per-species gait taxonomy landed · 2026-05-22
Wildlife conservation runs on stale, expensive data: camera traps, scat-DNA surveys, point counts. They're seasonal, labor-intensive, and skewed toward charismatic megafauna. WiFi CSI at 2.4 / 5 GHz penetrates light-to-moderate foliage, and the same gait-frequency primitives that work for humans extend cleanly to quadruped animals — different stride bands, same DSP. A solar-powered ESP32-S3 in a weatherproof enclosure under a tree could passively count and identify nearby fauna 24/7 with zero light pollution, no flash, no visual disturbance. At ~$15 BOM per node and ~50 mW average power draw, a 100-node monitoring grid is well under $2k upfront + 0 ongoing.
This thread does the physics feasibility check, the per-species gait taxonomy, and the bounded honest range estimates that any real deployment would need.
Vegetation attenuation is modelled as A_v(d) = A_max · (1 − e^(−γd)) · √f:
| Foliage density | A_max | γ |
|---|---|---|
| Sparse (orchard, savanna) | 20 dB | 0.10 m⁻¹ |
| Moderate (suburban tree cover) | 35 dB | 0.20 m⁻¹ |
| Dense (rainforest canopy) | 50 dB | 0.35 m⁻¹ |
Combined with free-space path loss (FSPL = 32.45 + 20·log10(f·d) for f in GHz, d in m) and an ESP32-S3 link budget:
Tx power (FCC max): +20 dBm
Tx antenna (PCB): +2 dBi
Rx antenna (PCB): +2 dBi
Rx sensitivity (HT20 MCS0): -97 dBm
─────
Total link budget: 121 dB
SNR margin for CSI DSP: 10 dB
Usable budget: 111 dB
examples/research-sota/r10_foliage_attenuation.py solves for the distance at which FSPL + foliage_attenuation = 111 dB:
| Frequency | Sparse | Moderate | Dense |
|---|---|---|---|
| 2.4 GHz | 99.6 m | 12.0 m | 4.1 m |
| 5 GHz | 19.9 m | 5.2 m | 2.1 m |
The 2.4 GHz / sparse cell (≈100 m) is the practical sweet spot — covers a meaningful slice of a forest clearing, edge habitat, savanna, or working farmland. 5 GHz is essentially useless past 20 m once foliage thickens.
For comparison, a typical camera trap covers ~10 m (PIR-trigger range). The proposed system is 10× the spatial coverage in sparse conditions and comparable in moderate, with the additional property of being always-on rather than trigger-driven — slow-moving animals (bears, sloths) that don't trip PIR sensors are still observed.
Biomechanics literature (Schmitt 2003, Heglund 1988, Gambaryan 1974) gives canonical stride frequencies. The DSP bandpass that the existing wifi-densepose-signal::vital_signs already uses for human breathing/heart-rate maps cleanly onto these:
| Species | Stride frequency (Hz) | DSP filter |
|---|---|---|
| Bear, sloth, wild boar | 0.5 – 1.5 | low-band |
| Human walking | 1.2 – 2.5 | mid-band |
| Elk, raccoon, wolf | 1.5 – 3.5 | mid-band |
| Deer | 1.8 – 4.0 | mid-band |
| Fox | 2.0 – 4.5 | mid-band |
| Squirrel | 4.0 – 10.0 | upper-band |
| Mouse, songbird | 5.0 – 15.0 | upper-band |
The bands overlap, so frequency alone isn't a clean classifier — but combined with temporal pattern (deer have a 4-beat asymmetric gait, wolves a 4-beat symmetric, bears a 4-beat alternating-pair) and body-size envelope (large vs small Doppler shift), per-species classification is plausible from CSI alone.
For full classification we need labelled wildlife CSI data, which doesn't exist anywhere in the repo or 2026 published SOTA. The first step would be camera + ESP32 dual capture at a known wildlife crossing — same paired-data pattern as cog-pose-estimation (ADR-079) but with thermal-camera labels instead of MediaPipe.
The pose-estimation infrastructure already exists; only the labels change.
Even without species classification:
cog-person-count v0.0.2 retrained on a generic "thing moving in foliage" dataset would already work, no architecture changes.wifi-densepose-wifiscan's BSSID-list approach degrades gracefully when there are zero APs (and therefore zero RSSI fingerprints) in a remote forest. (Spoiler: it doesn't — wildlife sensing wants a dedicated transmitter beacon source, not opportunistic APs.)cog-* packaging, different model, different data, identical deployment story. Could ship as cog-wildlife once labelled data exists.