A 10-minute router CSI quality audit: 12.68 Hz average, 2.37 s maximum gap
By Wu Jun · Updated 2026-10-29 · Wi-Fi CSI, data quality, sampling rate, GL-MT6000, MT7986, time series · 5 min read
Most CSI tutorials quote an average packet or measurement rate. That number alone does not tell you whether the capture can be treated as a uniform time series. This audit reopens the public 10-minute GL-MT6000 capture and measures the time axis directly.
Evidence grade E: every number below comes from this project's published raw file and the audit script linked at the end. The capture has no person, breathing or fall-event ground truth, so the audit can establish acquisition quality, not sensing accuracy [1] [2].
Headline result
The file contains 57,293 chain records and 7,609 groups closed by chain_info bit 15 over 599.924 s.
After requiring 256 subcarriers and a non-zero I/Q block, 7,608 groups remain usable.
| Quantity | Measured |
|---|---|
| Source size / SHA-256 | 60,612,922 bytes / 527466ce…6a440 |
| Capture duration | 599.924 s |
| Chain records | 57,293 |
| Closed bit-15 groups | 7,609 |
| Usable 256-subcarrier groups | 7,608 |
| 8-chain / 4-chain usable groups | 6,714 / 894 |
| Quarantined 64-subcarrier group | 1 |
| Incomplete tail record | 1 |
| Median group-to-group interval | 41.019 ms |
| 95th / 99th percentile interval | 321.838 / 945.690 ms |
| Maximum interval | 2.373 s |
| Intervals longer than 1 s / 2 s / 5 s | 57 / 2 / 0 |
| RSSI minimum / mean / maximum | -48 / -31.30 / -26 dBm |
| SNR minimum / mean / maximum | 52 / 53.29 / 55 dB |

Distribution of 7,607 usable group-to-group intervals. The upper plot omits 57 intervals above 1 s so that the common burst structure remains visible; the lower plot shows the empirical CDF and long-gap boundary.
Average rate is not a sampling clock
Using closed groups divided by capture duration gives about 12.683 groups/s. The mean reciprocal interval over the usable series is about 12.680 Hz. Both are useful summaries, but neither means that a sample arrived every 78.9 ms.
The actual intervals are strongly bursty:
- half of all intervals are at or below 41 ms;
- 1,605 intervals exceed 50 ms;
- 224 exceed 500 ms;
- 57 exceed 1 s;
- two exceed 2 s, while none exceed 5 s.
This is why reporting only “12.68 Hz” is incomplete. A spectral estimator assumes a time origin for every sample. If the processing code ignores the long gaps, interpolation can turn missing packets into apparent low-frequency energy. That failure matters for respiration, heart rate and event detection because those methods look for small periodic changes in exactly that band.

Top: group interval on a logarithmic scale; middle: chain records per group; bottom: RSSI and SNR. The timing regime changes visibly around 370 s. The capture does not contain a synchronised traffic or client-state log, so this audit does not invent a cause for that change.
The visible regime change is another warning: a ten-minute file can contain more than one acquisition state. Pooling the whole file and then fitting one stationary spectrum may average across different traffic behaviour.
Four and eight chains are both real
The capture contains:
- 6,714 groups with eight chain records;
- 894 usable groups with four chain records;
- one 64-subcarrier transition group, quarantined by the quality gate;
- one final chain record that never received a bit-15 closing record.
The existence of 4-chain groups is not a parser accident. A reader who divides 57,293 records by eight gets roughly 7,162 and silently loses most four-chain measurements. Grouping on bit 15 instead gives 7,609 closed groups.
The full analysis pipeline later removes 25 zero-heavy groups and uses 7,583 measurements. That filtered analysis rate is about 12.64 Hz. It is a different denominator from the 7,609 closed groups, which is why this article states the filter rule explicitly instead of presenting every “CSI Hz” number as interchangeable.
Method
The audit uses these definitions:
- Record: one outer container entry containing a 24-byte CSI header and I/Q payload.
- Group: all records from the previous group boundary up to and including the record with bit 15 set.
- Group timestamp: outer timestamp of the first chain record in the group.
- Usable group: every record has exactly 256 subcarriers and at least one I/Q block is non-zero.
- Interval: difference between consecutive usable-group timestamps.
- Long gap: a positive interval above the stated threshold. Gap causes are not inferred.
The script does not smooth, interpolate or remove long gaps before calculating the statistics. That is intentional: the purpose is to expose the raw time-axis properties before an algorithm hides them.
Seven quality gates before modelling
- File integrity: verify the published part hashes and whole-file SHA-256.
- Record parsing: confirm there are no malformed payload lengths or unread tail bytes.
- Grouping: close a measurement on bit 15; never divide record count by a guessed chain count.
- Subcarrier shape: quarantine groups whose
data_numdiffers from the expected 256. - I/Q presence: reject a group when no chain contains a usable non-zero block.
- Time-axis audit: report n, duration, median, p95, p99, maximum and the count above the analysis threshold.
- Non-stationarity: plot timing and link quality over the whole capture; choose contiguous windows only after checking the plot.
These gates do not “clean” the data for free. They make each exclusion visible and reproducible.
What the capture supports
The evidence supports these limited statements:
- the capture contains continuous 256-subcarrier CSI for about ten minutes;
- both 4-chain and 8-chain groups occur;
- no interval exceeds 5 s;
- RSSI and SNR remain within the ranges shown above;
- the measurement stream has strong burstiness and a visible regime change.
It does not establish:
- that 12.68 Hz is a uniform sampling grid;
- that a breathing or heart-rate detector will generalise;
- that a fall can be detected from this file;
- that the observed timing regime change has a specific traffic or power-save cause.
The distinction follows the same boundary used by the CSI sensing literature: a method can be plausible in a controlled study, but the local hardware, timing, room and ground truth still need separate verification [3].
Reproduce or inspect the result
- Audit summary JSON
- Output checksums
- Python audit script
- Dataset and download instructions
- Parser walkthrough: eight parts to a heatmap
- Router CSI Toolkit
The source is the 10-minute public capture with DOI 10.5281/zenodo.23434789. The next step for a sensing experiment is not a larger classifier: it is a synchronised ground-truth log, a fixed traffic workload and an analysis window that respects the gaps shown above.
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
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
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 A · standard/review
WiFi Sensing with Channel State Information: A Survey
W. Ma, W. Zhou, X. Wang · ACM Computing Surveys · 2019
doi:10.1145/3310194 · citations 857 · verified: CrossRef API, 2026-10-11 · The field's most-cited CSI sensing survey (857 citations, verified via CrossRef). - 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.