树莓派 4B部署测试nexmon_csi开源项目
nexmon_csi 是基于 nexmon 固件修补框架,专为博通(Broadcom)Wi-Fi 芯片设计的 CSI (信道状态信息) 提取工具,可在树莓派 4B 上精准采集 Wi-Fi 信号的幅度与相位信息,广泛用于人体感知、定位、行为识别等研究。

一、项目核心资料
1. 官方仓库
- 主项目 (nexmon):https://github.com/seemoo-lab/nexmon
- CSI 扩展 (nexmon_csi):https://github.com/seemoo-lab/nexmon_csi
- 树莓派优化版 (nexmonster):https://github.com/nexmonster/nexmon_csi
- 预编译二进制 (免编译):https://github.com/nexmonster/nexmon_csi_bin
2. 核心特性
- 支持芯片:树莓派 4B 内置 bcm43455c0 (7_45_189 固件)
- 协议:802.11a/g/n/ac,带宽最高 80MHz
- 数据流:支持 1×1 ~ 4×4 MIMO,逐帧提取 CSI
- 数据格式:原始复数 (幅度 + 相位),通过 UDP 端口 5500 输出
- 用途:无线感知、手势识别、人体检测、被动定位、异常监测
3. 配套工具
- nexutil:配置网卡、发送固件命令
- makecsiparams:生成 CSI 采集参数 (信道、带宽、天线)
- tcpdump:捕获 CSI 数据包 (pcap 格式)
- nexcsi / CSIKit:Python 解码库,解析 pcap 并可视化
二、树莓派 4B 部署指南
1. 系统准备
- 推荐系统:Raspberry Pi OS (Legacy, Buster) —— Kernel 5.4 / 5.10(新内核 6.x 需用预编译版,兼容性较差)
下载对应版本镜像:https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2022-01-28/
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.10.92-v7l+ #1514 SMP Mon Jan 17 17:38:03 GMT 2022 armv7l GNU/Linux
- 开启 SSH,更新依赖:
sudo apt update && sudo apt upgrade -y
sudo apt install git build-essential libgmp3-dev libmpfr-dev libmpc-dev flex bison libssl-dev libncurses-dev tcpdump -y
2. 安装 Nexmon_csi
从Nexmon_csi_bin运行安装脚本。
curl -fsSL https://raw.githubusercontent.com/nexmonster/nexmon_csi_bin/main/install.sh | sudo bash
该脚本运行大约需要一分钟,运行完成后重启系统,然后进入使用部分。


三、CSI 数据采集与使用
1. 提取CSI
按照以下步骤开始提取CSI。
- 使用
mcp(makecsiparams)生成用于配置提取器的 base64 编码参数字符串。本示例在 WiFi 芯片的第一个核心上,针对 36 号信道以 80 兆赫兹带宽采集第一个空间流的 CSI。树莓派仅有一个核心和一根天线,因此无需修改-C和-N选项。
mcp -C 1 -N 1 -c 36/80
KuABEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
mcp</b> 支持其他多项功能,例如按 Mac 地址或帧控制字节筛选数据。运行 mcp -h 查看所有可用选项。

ifconfig wlan0 upnexutil -Iwlan0 -s500 -b -l34 -vKuABEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==iw dev wlan0 interface add mon0 type monitorip link set mon0 up
通过在 5500 端口的套接字上监听 UDP 数据包来收集信道状态信息(CSI)。实现这一目标的一种方法是使用 tcpdump:tcpdump -i wlan0 dst port 5500。你可以按如下方式将 1000 个 CSI 样本存储在 pcap 文件中:tcpdump -i wlan0 dst port 5500 -vv -w output.pcap -c 1000。
注意:系统将无法使用内置的无线网卡连接到无线局域网,因此请使用以太网电缆。

2. CSI 探索器(CSI Explorer)
https://github.com/nexmonster/nexmon_csi/tree/feature/python/utils/python
一个用Python编写的快速简单的CSI解码器。
可以:
- 从生成的. pcap文件绘制CSI样本
- 阅读CSI示例以在您的Python程序中使用
使用步骤:
- 安装依赖项:
pip install numpy matplotlib - 打开
config.py文件并选择您的WiFi芯片。默认为bcm43455c0(树莓派) - 将您的pcap文件复制到
pcapfiles文件夹。可以在配置文件中更改此文件夹。 - 运行CSI-Explorer:
python3 csiexplorer.py
输入pcap的文件名。键入.pcap部分是可选的。键入一个索引以显示它的绘图。键入由-分隔的索引以播放动画(例如:10-20)。

3. 图表与终端数据解读
左侧可视化图表(Nexmon CSI Explorer)
|
图表 |
含义 |
数据特征分析 |
|
上方:幅度 (Amplitude) vs 子载波 (Subcarrier) |
每个 Wi-Fi 子载波的信号强度 |
1. 能量集中在 子载波区间,峰值约 1800,符合 802.11n/ac 的 OFDM 调制特征2. 0 子载波(直流分量)幅度归零,是标准 Wi-Fi 帧的设计3. 正负子载波对称,说明信号同步正常 |
|
下方:相位 (Phase) vs 子载波 (Subcarrier) |
每个子载波的信号相位偏移 |
1. 相位在 区间随机波动,是多径传播、环境噪声的正常表现2. 存在明显的线性趋势,是采样时钟偏移(SFO)导致的典型现象,可通过相位校准消除 |
右侧终端日志(原始 CSI 帧信息)
|
字段 |
含义 |
数值解读 |
|
Source Mac ID |
发送端 Wi-Fi 网卡 MAC 地址 |
两个设备: (RSSI -47dBm)、 (RSSI -42dBm),说明同时捕获了两个 AP / 设备的 CSI 数据 |
|
Sequence |
帧序列号 |
用于校验丢包,两个设备序列号连续(960、2909/2910),说明采集稳定无丢包 |
|
Core and Spatial Stream |
空间流编号 |
代表单空间流(1×1 MIMO),符合树莓派 BCM43455 网卡的硬件规格 |
|
RSSI |
接收信号强度 |
/ 属于强信号(正常范围:-30~-80dBm),说明收发端距离近、环境遮挡少 |
|
FCTL |
帧控制字段长度 |
代表标准 802.11 数据帧,符合 CSI 采集的帧类型要求 |
四、应用扩展
1. 应用场景开发
基于当前 CSI 数据,可直接开发以下应用:
- 人体存在检测 / 跌倒检测:通过 CSI 幅度 / 相位的波动特征识别人体运动
- 呼吸监测:提取 CSI 的低频波动,实现非接触式生命体征监测
- 手势识别:通过不同手势对应的 CSI 特征谱,实现隔空操作
- 入侵检测:通过环境 CSI 的异常变化,实现安防监控
2. 数据持久化与可视化
- 用
csishark -w csi_data.pcap保存原始 CSI 数据,后续用 Python/Matlab 批量分析 - 对接 InfluxDB+Grafana,搭建实时 CSI 监控仪表盘,实现长期环境监测
- 用 CSIKit 工具库解析 pcap 文件,提取幅度、相位、RSSI 等特征,用于机器学习建模
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)