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

  1. Download the eight parts and manifest.json from Zenodo;
  2. Reassemble the parts in filename order;
  3. 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:

Not sufficient to prove:

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

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 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.
  2. 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.
  3. 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.
  4. 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.