openwifi · 2020年10月09日

openwifi 从CSI到CSI

v2-87342716a78582481a0197dae493b101_1440w.jpg
终于,可以从openwifi平台上很方便的实时获取信道状态信息了!

不知道openwifi是啥?一句话:openwifi是一个开源的WiFi芯片,目前还没流片,跑在FPGA平台上。长文介绍:纸飞机:开源Wi-Fi芯片/FPGA设计以及背后的中国开发者

CSI在WiFi研究领域指Channel State Information,也就是通过接收到的WiFi信号来估计WiFi信号的传播信道长什么样子。目前人们可以从CSI里提取到很多信息,比如人的走动,心跳,敲击键盘(如上图),总之吹的很神就是了。

因为这颗WiFi芯片是开源的,所以我们可以获取比传统CSI更多的信息!比如我们现在还支持每个WiFi包的频偏,均衡星座图,时间标签等。所以题目的“从CSI到CSI”指的是从Channel State Information到Chip State Information!

先上真相:https://www.zhihu.com/zvideo/1297662571618148352

为何能从电脑上实时显示FPGA/芯片内部的信道响应,频偏,星座图信息?因为我们构建了一条从FPGA到Linux的通道(side channel),来把这些信息实时导出。详细参见这个说明文档:https://github.com/open-sdr/openwifi/blob/master/doc/app_notes/csi.md
csi-architecture.jpg
CSI信息格式如下:
csi-information-format.jpg
我们的源代码里提供了实时解析CSI信息并显示的python脚本,以及帮助大家离线分析存储下来的CSI的Matlab脚本,都在openwifi github上。

看起来这个功能只是个信息实时导出的功能。但仍然是挺麻烦的:

fpga里需要有逻辑把这些信息按照触发条件(可配置成MAC地址等)捕获下来,然后还需要通过DMA通道传给ARM,在ARM Linux内核中我们构建了相应的驱动来接收这些信息,并传给用户空间的程序,这个用户空间的程序也可以用来配置信息捕获的频率和过滤规则(地址匹配等),最后这个用户空间程序把信息通过FPGA板上的以太网传送给外部电脑(走UDP)。python和matlab脚本分析和显示都在外部电脑上。所以总结一下导出信息涉及到的知识点:

verilog/FPGA编程
FPGA内的wifi协议解析、触发和信息(信道估计,均衡器)捕获
FPGA-linux dma
linux 内核驱动
linux 内核和用户空间通信
python(电脑))和C(FPGA板)之间的TCP/IP通信
python实时绘图

feature虽小,但绝对需要全栈才能实现!

原文发表于知乎:https://zhuanlan.zhihu.com/p/263071541

推荐阅读
关注数
2189
内容数
35
开源Wi-Fi芯片openwifi项目相关技术进展,欢迎加入
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息