树莓派做 Wi-Fi CSI:采集机、分析主机、Pi 5 兼容与容量规划
作者 Wu Jun · 更新于 2026-10-29 · 约 6 分钟
“树莓派能做 CSI 吗?”没有一个统一答案。它可以是:
- Nexmon CSI 采集机:树莓派自己的 Broadcom Wi-Fi 芯片被固件补丁接管,直接输出 CSI;
- 路由器 CSI 的分析主机:MT6000 等路由器采集,树莓派只接收 UDP、存储、分析和提供 API。
两条路线的硬件要求、风险和容量完全不同。先选角色,再买卡、装系统。
0. 一分钟选型
| 目标 | 推荐角色 | 原因 |
|---|---|---|
| 研究不同信道、带宽、帧类型和发送端 | A:Nexmon 采集机 | 固件层参数灵活,但会接管 Wi-Fi 接口 |
| 已有 MT6000,希望 7×24 全屋运行 | B:分析主机 | 路由器负责采集,树莓派不碰射频固件 |
| 复现论文或使用 CSIKit/csiread 现成格式 | A 或 B | A 是常见公开数据源;B 可直接分析本站数据 |
| 想同时把树莓派当家庭 AP、SSH 入口和 CSI 接收器 | 不建议混用 | NetworkManager/固件/接口角色会冲突 |
| 只是先验证算法 | B 更省事 | 下载本站数据集即可,不必先买树莓派 |
1. 角色 A:树莓派就是 CSI 采集设备
官方支持矩阵把 bcm43455c0 的典型设备列为 Raspberry Pi 3B+、4B 和 5
[1];这是逐帧 CSI 提取平台,并已有同行评审论文说明其方法
[2]。
但“型号在支持表里”只是第一步。实际风险包括:
- 固件与内核组合错误,编译或联网失败;
- 采集时 NetworkManager 会释放
wlan0,无线 SSH 随之中断; - Pi 5 必须使用非 16K 页内核;
- 现代化
Makefile.rpi要求nexutil使用USE_VENDOR_CMD=1编译; - 回退失败时,需要备用 SD 卡或读卡器恢复。
这些步骤和精确检查表已集中写在 Nexmon CSI 实战指南,这里不重复复制易过期命令。
1.1 采集前必须准备的六件东西
| 项目 | 原因 |
|---|---|
| 独立实验 SD 卡 | 固件与系统包会被修改 |
| 整卡镜像 | 比逐项卸载更可靠的回退 |
| 有线网络或串口 | unmanage 后不能依赖板载 Wi-Fi |
| 固定信道发送端 | CSI 按收到匹配帧触发 |
| 稳定电源与散热 | 编译和长时间 capture 的边界条件 |
| 实验记录模板 | 固定芯片、固件、内核、信道和带宽信息 |
2. 角色 A 的数据质量
Nexmon 的 80MHz 包不是“256 个都可用于算法的子载波”,而是包含保护带与空子载波的槽位。官方 README 列出 了不同模式下的无效索引;分析前必须移除或屏蔽。
另外,80MHz 接收机可能收到只占 20MHz 的帧。看到大量接近零的子载波时,应先检查发送端实际带宽和帧类型, 不要先怀疑接收板坏了。
推荐验收顺序:
# 先抓 10 秒;包数为 0 或内容不可解析时不要直接录 10 分钟
sudo tcpdump -i wlan0 dst port 5500 -w csi-10s.pcap
sudo tcpdump -r csi-10s.pcap | wc -l
# 再用 CSIKit 或 csiread 解码并统计有效子载波、包间隔和芯片格式
解析工具可参考 CSIKit [3] 与 csiread [4]。至少记录:抓包时长、UDP 包数、
CSI 槽位数、有效子载波比例、p95/最大包间隔、发送端带宽和 MAC 过滤条件。
3. 角色 B:树莓派做路由器 CSI 的分析主机
这通常比把树莓派改造成采集机稳得多:
MT6000 / 路由器 树莓派
CSI daemon -- UDP/LAN --> csi_capture.py / tcpdump
|
+-- 原始 bin/pcap
+-- Python 特征
+-- MQTT / REST
+-- 热图 / Home Assistant
树莓派不接触路由器 Wi-Fi 固件,只负责网络服务。即使分析程序崩溃,家庭网络与 CSI 采集端仍可独立恢复。
3.1 真实数据量先算清楚
不要用“Wi-Fi 是千兆”来估算存储。应统计实际 record 或 UDP 包:
bytes/s ≈ records/s × bytes/record + IP/UDP/pcap overhead
本站公开的 MT6000 10 分钟文件给出可核验量级:57,293 条链记录,整包 60,612,922 字节 [5],约等于:
60,612,922 / 599.924 ≈ 101KB/s
60,612,922 / 10min ≈ 347MB/hour
本站实际 10 分钟文件约 58MB,与上面的整包字节数按十进制/二进制展示方式一致。若把 record 率换成更高值:
| 场景 | 原始 CSI 估计 | 1 小时存储 |
|---|---|---|
| 100 条/秒 × 约 1KB | 约 100KB/s | 约 0.35GB |
| 1,000 条/秒 × 约 1KB | 约 1MB/s | 约 3.5GB |
| 1,000 条/秒 × 8 个并行流 | 约 8MB/s | 约 29GB |
最后一行要求同时存在 8 个独立 core/stream 流,不能把普通 Wi-Fi 帧率直接乘八。采集前应根据实际记录长度、 包数和文件增长测一次,别相信标称网口速度。
3.2 硬件与网络预算
| 资源 | 建议 |
|---|---|
| 网络 | Pi 4/5 有线千兆足够接收常见的约 0.1–8MB/s CSI 流;不要用不稳定 Wi-Fi 回传 |
| 存储 | 先预留至少数小时测试空间;生产按每日 GB 级估算并设置轮转 |
| RAM | 流式解析,不要一次把数天数据读进内存 |
| CPU | 采集和落盘很轻;特征、FFT、深度学习推理取决于算法,必须实测 |
| 时间 | 开启 NTP,记录 UTC 与单调时钟;跨设备对齐另加时间同步 |
| 电源 | 使用稳定官方电源,避免欠压导致 SD 卡和网络异常 |
USB SSD 比长期高频写 SD 卡更适合连续录制。任何存储介质都应做定期健康检查,并保留 manifest/SHA-256 [6]。
4. 推荐部署顺序
- 在树莓派上使用 64 位 Raspberry Pi OS Lite,接有线网络;
- 固定局域网 IP,不把 UDP 5500 或管理 API 暴露到公网;
- 安装 Python、NumPy、抓包工具和项目 toolkit [6];
- 用本站在线样例或 10 秒数据验证解析器,而不是直接等路由器串流;
- 接收 10 秒 UDP,检查文件增长与记录数;
- 扩大到 10 分钟,检查最大空档、磁盘剩余、CPU 与温度;
- 加上 systemd 守护、日志轮转和磁盘低水位告警;
- 最后才接 MQTT/REST/Home Assistant。
最小验证命令:
# 1) 看 UDP 是否到达
sudo tcpdump -ni eth0 udp port 5500 -c 20
# 2) 录制 10 秒并观察文件增长
sudo tcpdump -ni eth0 udp port 5500 -w csi-10s.pcap
# 3) 用项目脚本/解析器统计记录数、时长和空档
python3 scripts/analyze_csi_capture.py csi-10m.bin --outdir analysis
实际接口名、record 文件格式和 daemon 端口应以你的路由器配置为准。
5. 角色 B 的可靠性与隐私
- 单向接收:树莓派只接收局域网 UDP,不主动从公网访问路由器;
- 系统隔离:分析服务使用独立用户,禁止 root 运行;
- 数据最小化:只保留目标设备 MAC,公开前脱敏;
- API 鉴权:REST/MQTT 若跨网段,至少加认证与防火墙;
- 保留策略:原始文件、中间特征和图表分开保留,避免磁盘被日志打满;
- 恢复演练:重启树莓派后,采集端应能继续发送,接收端自动恢复;
- 合规:CSI 能反映人的活动,部署前必须让同住者知情,不得用于隐蔽监控。
CSI 感知的能力与限制可参考领域综述 [7]。它不是摄像头,也不能仅凭一条树莓派记录推断身份、 医疗状态或穿墙图像。
6. 上线验收清单
| 检查 | 通过标准 |
|---|---|
| 网络 | 有线网络稳定,UDP 包按预期到达 |
| 解析 | 10 秒数据能被 CSIKit/csiread 或项目脚本读取 |
| 数据量 | 实测文件增长率与容量计划一致 |
| 时间 | 记录文件有开始/结束时间,系统 NTP 正常 |
| 恢复 | 重启接收服务后能自动继续 |
| 存储 | 低水位告警、轮转与 SHA-256/manifest |
| 隐私 | MAC 脱敏、访问控制、同住者知情 |
7. 什么时候不要用树莓派
- 只是想验证本站数据集:普通电脑更快;
- 只想跑一个单房间存在检测:ESP32 + ESPHome 成本更低;
- 已有 MT6000 并且只想采集:直接在路由器上运行已验证的 mt76 daemon;
- 目标是医疗、安防或无人值守报警:目前的数据率与单一传感器证据不足,应该增加独立传感器和人工复核。
继续阅读:Nexmon 采集机完整步骤 · MT6000 路由器复现 · 10 分钟数据集 · 工具与脚本
参考与数据来源
本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。
- C 级 · 官方资料
seemoo-lab/nexmon_csi — CSI extraction on various Broadcom Wi-Fi chips
SEEMOO Lab, TU Darmstadt
github.com/seemoo-lab/nexmon_csi · 核实: GitHub API 2026-10-29 (stars 479, last push 2026-09-30; README lists bcm43455c0 on Raspberry Pi 3B+/4B/5) - B 级 · 同行评审
Free Your CSI: A Channel State Information Extraction Platform For Modern Wi-Fi Chipsets
F. Gringoli, M. Schulz, J. Link, M. Hollick · Proceedings of the 13th ACM Workshop on Wireless Network Testbeds, Experimental Evaluation & Characterization · 2019
doi:10.1145/3349623.3355477 · 被引 334 · 核实: Crossref API 2026-10-29 (334 citations; DOI and venue resolved) · Nexmon CSI 平台的同行评审论文,说明其固件补丁与逐帧 CSI 提取路线。 - C 级 · 官方资料
Gi-z/CSIKit — Python CSI parsing and visualisation
G. Zhang
github.com/Gi-z/CSIKit · 核实: GitHub API 2026-10-11 (stars 307, MIT, last push 2025-02-19) · 支持 Atheros / Intel / Nexmon / ESP32 / FeitCSI / PicoScenes 多种格式。 - C 级 · 官方资料
citysu/csiread — fast Cython CSI parser
S. Zhu
github.com/citysu/csiread · 核实: GitHub API 2026-10-11 (stars 142, MIT, last push 2024-10-12) - E 级 · 本项目实测
本项目 10 分钟实测抓包(57,293 条 / 600.0 s,SHA-256 00373f83…95e2)
Router CSI Lab · 2026
okwujun.pw/zh/datasets/ · 核实: 分片重组逐字节校验通过(2026-10-11) · 本地原始母片 SHA-256 为 00373f83…95e2;公开下载的是去标识派生文件,SHA-256 为 527466ce…a440,两者不可混用。 - E 级 · 本项目实测
Router CSI Toolkit — 采集/分析/守护脚本(MIT,公开仓库)
Router CSI Lab · 2026
github.com/jjjwu/router-csi-toolkit · 核实: GitHub API 于 2026-11-02 核实公开仓库、抓包质量预检、成功 CI 与 v0.1.3 Release;归档 SHA-256 为 59f144c0…adea7 · 公开版含无第三方依赖的抓包质量预检;网页端检查器使用同一容器定义和边界口径。 - A 级 · 标准/综述
WiFi Sensing with Channel State Information: A Survey
W. Ma, W. Zhou, X. Wang · ACM Computing Surveys · 2019
doi:10.1145/3310194 · 被引 857 · 核实: CrossRef API, 2026-10-11 · 领域内最常被引用的 CSI 感知综述(被引 857 次,核实于 CrossRef)。 - C 级 · 官方资料
Raspberry Pi 5 and recent Raspberry Pi OS kernel versions — Makefile.rpi guide
SEEMOO Lab, TU Darmstadt · 2026
github.com/seemoo-lab/nexmon_csi/discussions/395 · 核实: Official maintainer discussion fetched 2026-10-29; documents Pi 5 kernel=kernel8.img, USE_VENDOR_CMD=1, capture and restore-wifi · 项目维护者给出的现代树莓派路线;仍需使用独立实验 SD 卡,因为安装步骤会改动固件、驱动和系统组件。