Live demo: playback of a real 256-subcarrier CSI heatmap

2026-10-11 · 2 min read

This playback uses a real capture (GL-MT6000 / MT7986, 5 GHz HE80, 256 subcarriers, 60 s), downsampled in the browser (348 frames x 64 subcarriers) so it plays smoothly. The raw data and capture method are published [1] [2].

time →vertical axis: subcarriers (low at bottom)
green: per-measurement motion metricblue: playback position

How to read it

Amplitude view (default)

Doppler / time-frequency view

The green curve below is shown in both views: it is the motion metric (mean absolute change between consecutive measurements), a cheap "is anything moving?" signal.

Where this data comes from

Item Value
Capture device GL.iNet GL-MT6000 (MT7986A + MT7976), OpenWrt + mt76 CSI
Band / width 5 GHz / HE80 / ch44
Subcarriers / chains 256 / 2 Tx x 4 Rx
Measurement rate ≈5.8 /s (→ Doppler observable up to 0–2.87 Hz)
Raw data 60 s capture (see the dataset page)
In the browser amplitude 348 frames x 64 subcarriers; Doppler 348 frames x 32 frequency bins (same timeline, background-subtracted + percentile-normalised)

Reproduce it yourself: router CSI guide · Python pipeline

References and data sources

Every external claim carries a source and an evidence grade (grading scheme). Grade E marks first-party, reproducible measurements from this project.

  1. Grade E · first-party measurement This project's 10-minute raw capture (57,293 records / 600.0 s, SHA-256 00373f83…95e2)
    Router CSI Lab · 2026
    csi.okwujun.pw/zh/datasets/ · verified: Reassembled chunks verified byte-identical (2026-10-11)
  2. Grade E · first-party measurement Router CSI Lab — GL-MT6000 (MT7986) Wi-Fi CSI dataset, 10 s sample + 10 min capture
    Router CSI Lab · 2026
    csi.okwujun.pw/zh/datasets/ · verified: CC BY 4.0, SHA-256 published; DOI (Zenodo) pending