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

一、项目核心资料

1. 官方仓库

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。

  1. 使用 mcpmakecsiparams)生成用于配置提取器的 base64 编码参数字符串。本示例在 WiFi 芯片的第一个核心上,针对 36 号信道80 兆赫兹带宽采集第一个空间流的 CSI。树莓派仅有一个核心和一根天线,因此无需修改 -C-N 选项。
mcp -C 1 -N 1 -c 36/80

KuABEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

mcp</b> 支持其他多项功能,例如按 Mac 地址或帧控制字节筛选数据。运行 mcp -h 查看所有可用选项。

  1. ifconfig wlan0 up
  2. nexutil -Iwlan0 -s500 -b -l34 -vKuABEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
  3. iw dev wlan0 interface add mon0 type monitor
  4. ip 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程序中使用

使用步骤:

  1. 安装依赖项:pip install numpy matplotlib
  2. 打开config.py文件并选择您的WiFi芯片。默认为bcm43455c0(树莓派)
  3. 将您的pcap文件复制到pcapfiles文件夹。可以在配置文件中更改此文件夹。
  4. 运行CSI-Explorer:python3 csiexplorer.py

输入pcap的文件名。键入.pcap部分是可选的。键入一个索引以显示它的绘图。键入由-分隔的索引以播放动画(例如:10-20)。

3. 图表与终端数据解读

左侧可视化图表(Nexmon CSI Explorer)

图表

含义

数据特征分析

上方:幅度 (Amplitude) vs 子载波 (Subcarrier)

每个 Wi-Fi 子载波的信号强度

1. 能量集中在 -50 ~ 0

子载波区间,峰值约 1800,符合 802.11n/ac 的 OFDM 调制特征2. 0 子载波(直流分量)幅度归零,是标准 Wi-Fi 帧的设计3. 正负子载波对称,说明信号同步正常

下方:相位 (Phase) vs 子载波 (Subcarrier)

每个子载波的信号相位偏移

1. 相位在 -150 ~ 150

区间随机波动,是多径传播、环境噪声的正常表现2. 存在明显的线性趋势,是采样时钟偏移(SFO)导致的典型现象,可通过相位校准消除

右侧终端日志(原始 CSI 帧信息)

字段

含义

数值解读

Source Mac ID

发送端 Wi-Fi 网卡 MAC 地址

两个设备:96:c3:c0:6c:60:7a

(RSSI -47dBm)、76:18:ed:44:d2:e9

(RSSI -42dBm),说明同时捕获了两个 AP / 设备的 CSI 数据

Sequence

帧序列号

用于校验丢包,两个设备序列号连续(960、2909/2910),说明采集稳定无丢包

Core and Spatial Stream

空间流编号

0x0000

代表单空间流(1×1 MIMO),符合树莓派 BCM43455 网卡的硬件规格

RSSI

接收信号强度

-47dBm

/ -42dBm

属于强信号(正常范围:-30~-80dBm),说明收发端距离近、环境遮挡少

FCTL

帧控制字段长度

64

代表标准 802.11 数据帧,符合 CSI 采集的帧类型要求


四、应用扩展

1. 应用场景开发

基于当前 CSI 数据,可直接开发以下应用:

  • 人体存在检测 / 跌倒检测:通过 CSI 幅度 / 相位的波动特征识别人体运动
  • 呼吸监测:提取 CSI 的低频波动,实现非接触式生命体征监测
  • 手势识别:通过不同手势对应的 CSI 特征谱,实现隔空操作
  • 入侵检测:通过环境 CSI 的异常变化,实现安防监控

2. 数据持久化与可视化

  • csishark -w csi_data.pcap 保存原始 CSI 数据,后续用 Python/Matlab 批量分析
  • 对接 InfluxDB+Grafana,搭建实时 CSI 监控仪表盘,实现长期环境监测
  • 用 CSIKit 工具库解析 pcap 文件,提取幅度、相位、RSSI 等特征,用于机器学习建模
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐