Wi-Fi CSI 选 80MHz 还是 40MHz:分辨率、子载波,以及一个真实的坑
2026-10-11 · 约 2 分钟
搭 Wi-Fi CSI 时最重要的一个决定是信道带宽:它决定每次测量能拿到多少频率信息——而且我们踩到的坑证明,它还可能直接把某个客户端搞成不可用。
1. 带宽到底买到了什么
| 带宽 | 子载波数(本硬件实测) | 距离分辨单元(c/2B) | 说明 |
|---|---|---|---|
| 20MHz | 64(HE20)/ ESP32 上 30–64 | ≈7.5 m | 粗,但稳 |
| 40MHz | 约为 80MHz 的一半 | ≈3.75 m | 折中 |
| 80MHz | 256(实测) | ≈1.875 m | 分辨率最好,需要干净的频谱 |
子载波数随芯片与固件而变:请从自己抓包里统计
data_num,不要照抄别人的数字。
带宽不改变的两件事:
- 多普勒/时间分辨率:取决于测量率(我们实测约 95 条/秒,对行走与呼吸都够);
- 多径丰富度:取决于环境,而不是带宽。
广告位(上线后接入 AdSense/Ezoic)
2. 很少有人提的取舍:老客户端
我们的 Mac(2013 年的 Broadcom 网卡)只协商 40MHz。把它放进 80MHz 的 BSS,AP 对该客户端的发送速率会周期性塌到
VHT-MCS0 1SS(物理层 13.5Mbps,实际下行 7–10Mbps),而上行一直正常。
同一客户端、同一房间,只改射频带宽(空闲 60 秒后连续 6 次内网下载)——这是 E 级一手证据,原始抓包与脚本均已公开 [1] [2]:
| 射频设置 | 下行结果 |
|---|---|
| HE80(客户端以 40MHz 接入 80MHz BSS) | 7.4 / 7.3 / 9.3 / 9.5 / 9.6 / 9.6 Mbps |
| HE40(客户端原生带宽) | 384 / 375 / 328 / 416 / 411 / 419 Mbps |
这不是信号问题(RSSI 一直在 −40dBm 左右,客户端在"快状态"下能收 400Mbps),而是"窄带客户端在宽带 BSS 内"的速率控制/空口处理缺陷。
3. 怎么两头都要
| 目标 | 做法 |
|---|---|
| 追求最高 CSI 分辨率 | 射频跑 80MHz,把只支持 40MHz 的老客户端赶到别的射频/AP |
| 老客户端必须能用 | 射频跑 40MHz,接受子载波减半 |
| 分时使用 | 用脚本切换(wifi-htmode HE80 ↔ HE40,约 30 秒,不用重启) |
| 同时满足 | 两块射频/两台 AP:一块 80MHz 做感知,一块 40MHz(或 2.4G)留给老设备 |
4. 自己复现验证
# 客户端是否卡住?
iw dev <ap> station dump | grep -E "Station|tx bitrate|rx bitrate"
# tx bitrate = AP→客户端(会塌陷的方向)
# rx bitrate = 客户端→AP(通常正常)
# 用内网流量测试,不要用公网下载(公网会引入你无法控制的第二个变量)
请同时记录物理层速率和实际吞吐:塌陷期间 12 秒传输移动了 12.4MB,而 AP 发出 12.87MB——几乎没有重传浪费,只是速率极低、空口大量空闲。
相关:mt76 速率控制深度分析 · OpenWrt 空闲后变慢 · 复现教程
参考与数据来源
本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。
- E 级 · 本项目实测
本项目 10 分钟实测抓包(57,293 条 / 600.0 s,SHA-256 00373f83…95e2)
Router CSI Lab · 2026
csi.okwujun.pw/zh/datasets/ · 核实: 分片重组逐字节校验通过(2026-10-11) - E 级 · 本项目实测
Router CSI Toolkit — 采集/分析/守护脚本(MIT)
Router CSI Lab · 2026
csi.okwujun.pw/zh/tools/ · 核实: 仓库打包含 SHA-256,脚本在真机运行