GL-MT6000 Wi-Fi CSI dataset: samples, full capture and usage boundaries
By Wu Jun · Updated 2026-11-02 · Wi-Fi CSI, channel state information, Wi-Fi sensing, dataset, MT7986, OpenWrt · 7 min read
This page provides a downloadable, verifiable and reproducible router CSI dataset. Use the 10-second sample to validate a parser first, then use the full 10-minute capture to study timelines, chain selection, amplitude/phase processing and baseline algorithms.
The data comes from a GL.iNet GL-MT6000 (MT7986A + MT7976) running OpenWrt with mt76 CSI reporting [1]; the capture and analysis scripts are public [2]. This is experimental evidence, not proof of algorithm accuracy. The sections below state clearly what the data can and cannot support.
When checked on 2026-11-02, the Zenodo record reported 51 downloads and 44 views, including 41 unique views. These are platform counters, not proof of citation impact, endorsement or algorithm quality.
1. Files
| File | Size | Purpose |
|---|---|---|
| csi_sample_10s.bin | 322 KB | 10-second raw capture with 312 chain records |
| csi_sample_amplitude.csv | 16 KB | Amplitude summary for the first 200 records and first 8 subcarriers |
| csi_demo_60s_anonymized.bin | 2.8 MB | Source behind the browser demo: 2,777 chain records, 347 complete groups, one tail fragment |
| 60-second manifest | About 1 KB | Record/group counts, time span, RSSI/SNR and SHA-256 |
| Full 10-minute dataset (Zenodo) | About 58 MB | 8 parts + manifest + reassembly guide + two analysis figures |
manifest.json |
About 2 KB | Per-part and whole-file SHA-256; capture metadata |
analysis_heatmap.png |
About 300 KB | Amplitude heatmap |
analysis_motion.png |
About 160 KB | One-second rolling amplitude-motion metric |
Version DOI: https://doi.org/10.5281/zenodo.23434789. Concept DOI: https://doi.org/10.5281/zenodo.23434788. The version DOI identifies this exact release; the concept DOI is the stable citation across future versions.
2. Capture environment
| Item | Value |
|---|---|
| Router | GL.iNet GL-MT6000 (MT7986A + MT7976) |
| OS | OpenWrt SNAPSHOT / Linux 6.18 |
| Wi-Fi firmware | mt7986_wm.bin 2026-05-15, MD5 3ce21edabe201608e7bec0dd16898019 |
| Band / width / channel | 5 GHz / HE80 / ch44 |
| Subcarriers / chains | 256 subcarriers; tx 0–1 × rx 0–3 (8 chains) |
| Capture date | 2026-10-10 |
| Licence | CC BY 4.0 |
This is one measurement in a real home environment, not a multi-room, multi-subject or multi-device dataset. Changing the room, body position, firmware or client changes the channel conditions.
3. Data dictionary
Each record contains an outer container and an inner CSI payload:
outer: double file_ts (8, little endian)
uint16 length (2, little endian)
payload (length bytes)
inner: 24-byte v1 header
or 28-byte v2 header (24-byte v1 + uint32 sequence)
int16 I/Q interleaved
| Field | Type | Meaning |
|---|---|---|
file_ts |
float64 | Receiver-side file time; useful for aligning captures from different sessions |
ts |
uint32 | Device-side timestamp in microseconds |
ta |
6 bytes | Transmitter address; the public capture rewrites it to 02:00:00:00:00:01 |
rssi |
int8 | RSSI in dBm |
snr |
int8 | SNR reported by the device |
bw |
uint8 | Bandwidth code; do not treat it directly as a MHz value |
ch |
uint8 | Channel |
mode |
uint8 | Device mode and field code |
pad |
uint8 | Reserved in v1; sequence epoch in v2 |
data_num |
uint16 | Number of complex I/Q samples in this record |
tx / rx |
uint16 | Transmit and receive chain numbers |
chain_info |
uint16 | Bit 15 marks the final chain record of one measurement |
I/Q samples are little-endian <i2 pairs:
header_size = 28 if len(payload) >= 28 + data_num * 4 else 24
iq = np.frombuffer(payload, dtype="<i2", offset=header_size)
i, q = iq[0::2], iq[1::2]
amplitude = np.hypot(i, q)
phase = np.angle(i + 1j * q)
chain_info is not a chain count and is not a subcarrier index. It is the end-of-measurement marker. One
measurement may contain four or eight chain records.
4. Measured statistics
| Metric | Value |
|---|---|
| Outer records | 57,293 |
| Time span | 599.924 seconds |
| Mean chain-record rate | 95.5 records/s |
| Complete bit-15 measurement groups | 7,609 |
| Eight-chain / four-chain groups | 6,714 / 895 |
| Matrix after simple chain selection | About 7,608 × 256 |
| Measurements after anomaly filtering | 7,583 |
| Closed-group rate | About 12.68 Hz |
| Filtered analysis rate (7,583 groups) | About 12.64 Hz |
| Subcarrier records | 57,289 with 256 subcarriers; 4 with 64 |
| RSSI min / mean / max | −48 / −31.3 / −26 dBm |
| SNR min / mean / max | 52 / 53.29 / 55 |
| Gap p95 / maximum | 0.322 / 2.373 seconds |
| Gaps over 1 s / over 5 s on the usable 256-subcarrier timeline | 57 / 0 |
These values were computed by parsing the raw packet stream; they are not copied from an introductory description.
The line-by-line workflow is in the dataset parsing walkthrough.
The capture-quality audit adds a reproducible report for the time axis:
median group interval 41.019 ms, p95 321.838 ms, p99 945.690 ms, 57 intervals above 1 s and a 2.373 s maximum.
Its script, README and JSON can be run again locally.
The timestamp-gap spectral analysis then quantifies the effect on spectrum:
1,823 of 6,000 uniform 10 Hz points lie inside original intervals over 0.5 s, and a known 0.25 Hz control has
a 14.094% relative RMS interpolation error. The experiment provides no respiration or human ground truth.
The CSI chain-health audit checks whether the eight chains are equivalent: 6,714 groups
contain eight chains while 895 contain only four, and RSSI/SNR are identical across chains within every group.
Its analysis script, per-chain CSV and figure are public.
The CSI subcarrier-redundancy audit fixes tx0/rx0 and applies PCA
to 7,608 256-bin amplitude vectors: 6 components explain 90% of variance, and the median adjacent-bin
correlation is 0.901. The result describes amplitude correlation in these captures only; it does not
map array indices to physical frequencies.
5. Verify the full archive
- Download the eight parts and
manifest.jsonfrom Zenodo; - Reassemble the parts in filename order;
- Verify the whole-file SHA-256.
cat csi-10m.part-*.bin > csi_10m.bin
shasum -a 256 csi_10m.bin
# macOS: shasum; Linux also supports sha256sum
# expected:
# 527466ceb8b5f835e55ff348f02808736b947db39e7baac1f34e375de146a440
You can also compare each part with its sha256 entry in manifest.json. If the names match but a digest differs,
do not continue; download the affected part again first.
6. Minimum reproduction checks
Check both the file and parser output:
| Check | Expected |
|---|---|
| Sample record count | 312 |
| Full capture record count | 57,293 |
| Bit-15 group count | 7,609 |
| Time span | About 600 seconds |
| Tail record | One unterminated record |
| Subcarrier count | 256 for the overwhelming majority |
| Four-chain groups | 895; never assume every group has eight chains |
| Whole-file SHA-256 | Matches the manifest |
The parser must also handle 24/28-byte headers, little-endian I/Q, the v2 sequence field and bit-15 boundaries. Opening the file successfully once is not a sufficient validation.
7. What this dataset can and cannot support
Supported uses:
- validating the binary parser, reassembly and SHA-256;
- studying timestamps, chain selection, missing chains and anomalous groups;
- plotting a 256-subcarrier amplitude heatmap;
- establishing a low-frequency motion-versus-rest baseline;
- reproducing the statistics reported in this project;
- comparing outputs from different parsers on the same capture.
Not sufficient to prove:
- clinical or medical accuracy for respiration or heart rate, because no synchronised reference signal is included;
- fall-detection sensitivity, specificity or daily false-alarm rate;
- fine-grained distance, angle, body pose or identity;
- through-wall imaging;
- transferability to another room, router or person.
These are not defensive caveats. The public data lacks synchronised ground truth, subject labels and repeated measurements across environments. Those claims require new captures and reference instruments.
8. Privacy and licence
The public captures replace transmitter MAC addresses with 02:00:00:00:00:01; RSSI and I/Q values are unchanged.
The outer absolute Unix timestamp is also retained, so the current release is MAC-de-identified or pseudonymised
data, not guaranteed to be legally anonymous. Activity rhythms and within-session time linkage remain. See
Wi-Fi CSI privacy and dataset de-identification for the threat model and the
rules for a future time-shifted release.
The dataset is licensed under CC BY 4.0. Research and commercial use are permitted with attribution. Do not re-upload it as an unattributed "original" dataset.
Suggested citation:
Router CSI Lab. (2026). GL-MT6000 (MT7986) Wi-Fi CSI dataset — 10 minute capture, 80 MHz / 256 subcarriers [Data set]. Zenodo. https://doi.org/10.5281/zenodo.23434789
9. Versions and errata
- Current version: published on Zenodo on 2026-10-17;
- Page update: 2026-10-29, adding measurement groups, chain selection, the tail record and statistical boundaries;
- Added a 60-second browser-demo source on 2026-10-29: 347 complete groups and one tail fragment,
SHA-256
41c35d9d23e5c03ddd34ae97617e772fecdb55e8545156181828b060605a87a6; - If a part, field or statistic is wrong, publish a new Zenodo version and preserve the old DOI;
- Use the concept DOI for a citation spanning versions and the version DOI for exact reproduction.
10. Related documentation
- From eight parts to a heatmap: line-by-line code and expected output;
- Tools and scripts: downloadable analysis toolkit;
- CSI chain-health audit: missing chains, RSSI/SNR semantics and selection limits;
- GL-MT6000 reproduction guide: capture-side configuration;
- Methodology: the site's A–E evidence grading.
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.
- 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
doi:10.5281/zenodo.23434789 · verified: CC BY 4.0; SHA-256 published; Zenodo DOI 10.5281/zenodo.23434789 · The dataset has a Zenodo DOI (10.5281/zenodo.23434789) and can be cited directly. - Grade E · first-party measurement
Router CSI Toolkit — capture/analysis/watchdog scripts (MIT, public repository)
Router CSI Lab · 2026
github.com/jjjwu/router-csi-toolkit · verified: GitHub API verified the public repository, capture-quality preflight, successful CI and the v0.1.3 release on 2026-11-02; the archive SHA-256 is 59f144c0…adea7 · The public repository includes a dependency-free capture preflight; the browser checker uses the same container definition and evidence boundaries. - 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
okwujun.pw/en/datasets/ · verified: Reassembled chunks verified byte-identical (2026-10-11) · The local raw master has SHA-256 00373f83…95e2; the public de-identified derivative has SHA-256 527466ce…a440. They must not be confused. - Grade E · first-party measurement
CSI subcarrier redundancy and effective-dimensionality audit (script, metrics, PCA spectrum)
Router CSI Lab · 2026
okwujun.pw/en/csi-subcarrier-redundancy/ · verified: Rerun from the public 10-minute and 60-second captures with input SHA-256 527466ce…a440 and 41c35d9d…87a6; script, JSON, CSVs and figure are published together (2026-11-01) · This establishes correlation structure and effective dimensionality in these two amplitude captures only. It does not map array indices to physical frequencies or provide human ground truth.