ruview @ v1041
integrity
- size
- 55.2 MiB
- downloaded
- last checked
release notes
Automated release from CI pipeline
Changes: research(R8): RSSI-only person count retains 95% of full-CSI accuracy (#703)
Builds directly on R5's band-spread observation. If the count-task signal is spread across the WiFi band (R5: max/mean ratio 2.85× across 56 subcarriers), then RSSI — which is the integral of |H_k|^2 across the band — keeps most of the information. The naive prior (RSSI throws away 98% of CSI bytes) is misleading; the relevant metric is how much of the signal is in the integral, not how many bytes are in the representation.
Tested by aggregating each existing [56 × 20] CSI window down to a [20]-vector RSSI proxy (mean across subcarriers per frame), training a tiny MLP (Linear 20→32→8, 656 params, 5 KB) with vanilla NumPy SGD for 200 epochs on the same random 80/20 split as cog-person-count v0.0.2.
Result:
Full CSI v0.0.2 62.3% accuracy RSSI-only (this) 59.1% accuracy = 94.82% retained
Per-class is also markedly more balanced (RSSI: 59.5 / 58.6 ; full CSI: 86.2 / 34.3) — the tiny model on a low-dim input can't cheat by leaning on class 0 the way v0.0.2's larger model does at inference.
What this enables on a 10-year horizon: phones, laptops, smart speakers, smart TVs, smart lights — anything with WiFi reports RSSI and anything with a CPU can run a 656-param MLP. Person counting becomes a federated property of any room with WiFi, not a property of the ESP32-S3 fleet.
What this doesn't prove (called out explicitly in the research note):
- Single room, single operator, single 30-min recording
- 2-class problem (label distribution is {0, 1})
- Single random draw — needs K-fold + multi-room replication
Three follow-up experiments queued in R8-rssi-only-count.md §'What's next on this thread':
- Multi-room replication once #645 lands
- 3-class extension (0 / 1 / 2+) — measure the info-rate cliff
- Run on a non-ESP32 RSSI source (e.g. iw event on Linux laptop)
Files:
- examples/research-sota/r8_rssi_only_count.py — pure-NumPy, no framework deps. Trains + evals in 0.72 s on CPU.
- examples/research-sota/r8_rssi_only_results.json — full JSON dump for cross-tick reproducibility.
- docs/research/sota-2026-05-22/R8-rssi-only-count.md — method, measured numbers, interpretation, what doesn't work yet.
- docs/research/sota-2026-05-22/PROGRESS.md — updated index + Done log.
Coordination note: horizon-tracker is working on tools/ruview-mcp/
- tools/ruview-cli/ + ADR-104 — this commit deliberately stays out of those paths.
Docker Image:
ghcr.io/ruvnet/RuView:d9ca9b368489921f460abf7948921113c0636212
download
curl -fL -o v1041.zip https://ratatoskr.space/pkg/ruview/v1041.zip
printf '%s %s\n' '78d823c835541a217388baf5f2faefb7f829c31858459192e438fd7918733705' 'v1041.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v1041.zip"
$out = "v1041.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "78d823c835541a217388baf5f2faefb7f829c31858459192e438fd7918733705") { throw "sha256 mismatch" }
curl -fL -o v1041.tar.gz https://ratatoskr.space/pkg/ruview/v1041.tar.gz
printf '%s %s\n' 'ce12d5e19484a0b0c5bc14af2a657e920ff43163c46b6af1daca06db56d4462a' 'v1041.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v1041.tar.gz"
$out = "v1041.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "ce12d5e19484a0b0c5bc14af2a657e920ff43163c46b6af1daca06db56d4462a") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o v1041.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1041.zip
printf '%s %s\n' '78d823c835541a217388baf5f2faefb7f829c31858459192e438fd7918733705' 'v1041.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1041.zip"
$out = "v1041.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "78d823c835541a217388baf5f2faefb7f829c31858459192e438fd7918733705") { throw "sha256 mismatch" }
curl -fL -o v1041.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1041.tar.gz
printf '%s %s\n' 'ce12d5e19484a0b0c5bc14af2a657e920ff43163c46b6af1daca06db56d4462a' 'v1041.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1041.tar.gz"
$out = "v1041.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "ce12d5e19484a0b0c5bc14af2a657e920ff43163c46b6af1daca06db56d4462a") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v1041.zip | zip | 55.1 MiB |
blake3-24 cf4e72b84bad03736fda5793007c1362a189decdb999dd4f
sha256 78d823c835541a217388baf5f2faefb7f829c31858459192e438fd7918733705
sha1 e7f918e6fe6b6d362aacc2639185743c1aa51fa1
|
| v1041.tar.gz | tar.gz | 53.7 MiB |
blake3-24 60b7dfdaff466cc443ad1c80296715f814b0db3c4e39b758
sha256 ce12d5e19484a0b0c5bc14af2a657e920ff43163c46b6af1daca06db56d4462a
sha1 c7d6663d0df707b625463b989ab888b2aadd0fff
|
install
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v1041.tar.gz"],
integrity = "sha256-zhLV4ZSEoLDFvBSvKmV+kg/0MWPEa2rx2soG21bURio=",
strip_prefix = "ruview-v1041",
)
.url = "https://ratatoskr.space/pkg/ruview/v1041.tar.gz",
install via yggdrasil mesh
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1041.tar.gz"],
integrity = "sha256-zhLV4ZSEoLDFvBSvKmV+kg/0MWPEa2rx2soG21bURio=",
strip_prefix = "ruview-v1041",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1041.tar.gz",