树莓派做 Wi-Fi CSI:采集机、分析主机、Pi 5 兼容与容量规划

作者 Wu Jun · 更新于 2026-10-29 · 约 6 分钟

“树莓派能做 CSI 吗?”没有一个统一答案。它可以是:

  1. Nexmon CSI 采集机:树莓派自己的 Broadcom Wi-Fi 芯片被固件补丁接管,直接输出 CSI;
  2. 路由器 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]。

但“型号在支持表里”只是第一步。实际风险包括:

这些步骤和精确检查表已集中写在 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. 推荐部署顺序

  1. 在树莓派上使用 64 位 Raspberry Pi OS Lite,接有线网络;
  2. 固定局域网 IP,不把 UDP 5500 或管理 API 暴露到公网;
  3. 安装 Python、NumPy、抓包工具和项目 toolkit [6];
  4. 用本站在线样例或 10 秒数据验证解析器,而不是直接等路由器串流;
  5. 接收 10 秒 UDP,检查文件增长与记录数;
  6. 扩大到 10 分钟,检查最大空档、磁盘剩余、CPU 与温度;
  7. 加上 systemd 守护、日志轮转和磁盘低水位告警;
  8. 最后才接 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 的可靠性与隐私

CSI 感知的能力与限制可参考领域综述 [7]。它不是摄像头,也不能仅凭一条树莓派记录推断身份、 医疗状态或穿墙图像。

6. 上线验收清单

检查 通过标准
网络 有线网络稳定,UDP 包按预期到达
解析 10 秒数据能被 CSIKit/csiread 或项目脚本读取
数据量 实测文件增长率与容量计划一致
时间 记录文件有开始/结束时间,系统 NTP 正常
恢复 重启接收服务后能自动继续
存储 低水位告警、轮转与 SHA-256/manifest
隐私 MAC 脱敏、访问控制、同住者知情

7. 什么时候不要用树莓派

继续阅读:Nexmon 采集机完整步骤 · MT6000 路由器复现 · 10 分钟数据集 · 工具与脚本

参考与数据来源

本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。

  1. 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)
  2. 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 提取路线。
  3. 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 多种格式。
  4. 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)
  5. 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,两者不可混用。
  6. 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 · 公开版含无第三方依赖的抓包质量预检;网页端检查器使用同一容器定义和边界口径。
  7. 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)。
  8. 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 卡,因为安装步骤会改动固件、驱动和系统组件。