RTL8721Dx vs ESP32-S3 CSI comparison — RTL8721Dx has the only MEASURED throughput number
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 94.5k
- Forks
- 12.5k
- Avg merge
- 21h 27m
- Merged PRs (30d)
- 43
Description
Summary
Detailed comparative analysis of RuView's two real (non-simulated) hardware WiFi CSI implementations: the existing ESP32-S3 CSI node and the new RTL8721Dx (Realtek AmebaDplus) CSI node added this session (ADR-323, branch feat/rtl8721dx-csi-bringup, commit 72bfb5059).
Full report: https://gist.github.com/ruvnet/554751b1068c48f7ee210aa447cd4088
Headline findings
- Both are 1×1 SISO — neither has spatial diversity from a single chip; that requires multiple physical boards on either platform.
- RTL8721Dx has a genuinely passive CSI mode (
RTW_CSI_MODE_NORMAL, samples real AP beacons/data with zero injected traffic). ESP32's CSI capture always self-injects probe/NDP frames to guarantee reports (csi_collector.c:383-384) — there's no pure-passive equivalent. - The starkest asymmetry: measured performance. RTL8721Dx now has a MEASURED, repeatable real-hardware benchmark (
scripts/benchmark-rtl8721dx-csi.py): 14.67 fps baseline → 66.40 fps tuned. ESP32 CSI has never been benchmarked on real hardware in this repo — the "~20 Hz" / "20-100 Hz" figures in its docs are configuration values, not measurements, and ADR-028's own audit flags a separate "54,000 fps" claim elsewhere as unverified. - ESP32 is far more mature as a product: OTA, a 4-tier on-device DSP pipeline (up to WASM-based programmable sensing), TDM multi-node scheduling (ADR-029 — which directly solves a channel-contention problem the RTL8721Dx work hit and left unsolved this session), QEMU CI with fuzzing. RTL8721Dx is currently a raw CSI streamer with none of that.
- A real, vendor-independent bug was found in the process:
wifi-densepose-sensing-server --source autosilently never binds the UDP CSI receiver on any host machine that has its own WiFi adapter — affects ESP32 ingestion equally, not just Realtek.
Suggested follow-up
The most actionable next step: build an ESP32 equivalent of scripts/benchmark-rtl8721dx-csi.py and run it against real ESP32-S3 hardware, so the throughput comparison above stops being "one side was measured, one wasn't" and becomes a real apples-to-apples number.
Co-Authored-By: claude-flow ruv@ruv.net
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with scripts/benchmark-rtl8721dx-csi.py and the ESP32 CSI path noted at csi_collector.c:383-384. Build an equivalent benchmark for real ESP32-S3 hardware, then report a repeatable measured throughput number so the comparison is apples-to-apples.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- embedded-iot, performance
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100