【电子DIY作品】 基于wifi-csi载波的无感安防

[复制链接]
查看438 | 回复13 | 2024-7-18 22:19:35 | 显示全部楼层 |阅读模式
本帖最后由 lhs_hfs 于 2024-7-18 22:19 编辑

0. 引入--背景知识

wifi传输数据本质上就是使用高频电磁波对信息进行调制后从一个终端传输到另一个终端的过程,由于其传输载体是电磁波,因此电磁波遇到障碍物会发生反射并产生损耗、正常传输的电磁波与发射回来的电磁波相遇时会出现相干叠加。


如果我们能测量wifi信号(即电磁波)在路径上的损耗,并建立出一个恰当的物理模型用于估计,那么一个wifi的ap和sta的组合就可以近似等效成一个小型雷达,我简单画了个图来描述下。

the.png


这里面描述wifi信号的最简单的指标就是RSSI,手机上信号有几格就是看我们与ap之间的RSSI值的大小,RSSI的测量简单,底层协议栈会主动上报RSSI值,直接就可以获取到,但是RSSI指标过于单一,非常容易受到多径效应影响(即在测量端无法判断RSSI数值偏小究竟是因为障碍物造成的损耗,还是与反射过来的相干波反相叠加导致的)

比RSSI更好一点的是CSI载波,它是通过对一组正交频分复用进行傅里叶变换,使用傅里叶变换后得到的相位与幅值可以在一定程度上对多径效应进行建模,不过缺点是CSI定义在物理层,需要专用的硬件才能获取(比如intel 5300网卡,还比如我们下面要用到的esp32)

因此,倘若在环境中部署一台用于发射csi的wifi-ap,一台用于接受csi的wifi-sta,那么就可以完全基于wifi信号来实现纯被动的人员探测,同时如果结合深度学习的话还可以实现人员身份的识别,以阻止未授权人员的通行。
(优势在于纯被动,而比如换成摄像头,那么非法分子可能会有 针对性的破坏或绕行;而上述设备无论怎么探测,都与正常的wifi网络没有区别,想想看,非法分子看到一台路由器也会心惊胆战嘛)


1. 硬件--平台搭建


由于esp32也支持获取csi载波,出于硬件性价比的考虑,这里就使用两块esp32,其中一块是很早之前买的安信可的esp32-c3,另一块就是普通的esp32-wroom-32。


IMG20240718215831.jpg


这里使用乐鑫公司提供的wifi-csi库来进行烧录,具体可以看这里espressif/esp-csi: Applications based on Wi-Fi CSI (Channel state information), such as indoor positioning, human detection (github.com)


2. 软件--深度学习、GUI



硬件的布置非常简单,没有打板或其他的操作,甚至天线都是使用的板载天线,不过相对而言,软件要做的工作可能会多一些。


首先,我们需要采集用于训练的数据,网络预计输出三类,分别是:无人、有人、有人移动。设置时间窗口为2s,每个标签分别采集20组训练数据,然后搭建一个lstm网络将输入的csi时序载波用于训练;同时为了对比csi和rssi的差别,我还搭建了一个全fc层组成的网络,使用rssi数据进行训练。由于每个人的硬件不同、硬件布置的位置也不同,所以如果有人想要复现此项目时,需要按照自己实际布置情况来采集数据,每次硬件布设位置发生变动时也需要重新采集。

训练好模型后,接下来就需要开发一个GUI,GUI这里使用pyqt来编写,一个进程来不断读取数据、一个进程负责窗口的显示、一个进程负责加载模型并进行检测,最终结果如下图所示。

r1.png r2.png r3.png


最上面的绘图区绘制csi载波、中间的绘图区绘制rssi数值、下面的文本窗口分别是模型预测情况(左)和硬件情况(右)

3. 改进点

其实我手上还有一块安信可的esp-cam,本来打算检测到有人后打开启动摄像头拍一张照然后在GUI里面显示出来,GUI当时都写好了,但是发现我只有一根microUSB的供电线,而安信可的两块板子都需要microUSB供电,最后无可奈何,只能作罢。。。


另外,csi和rssi的噪声还是不小的,可能需要一些比较好的滤波技术才能过滤掉噪声。

4. 源码




GUI.zip

9.36 KB, 下载次数: 8

回复

使用道具 举报

WangChong | 2024-7-18 23:47:28 | 显示全部楼层
训练过程能详细写下吗。感觉很有意思
回复 支持 反对

使用道具 举报

爱笑 | 2024-7-19 08:34:19 | 显示全部楼层
不错不错!
用心做好保姆工作
回复

使用道具 举报

bzhou830 | 2024-7-19 09:00:19 | 显示全部楼层
这个好有意思呀
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

1084504793 | 2024-7-19 09:28:52 | 显示全部楼层
回复

使用道具 举报

WildboarG | 2024-7-19 10:41:12 | 显示全部楼层
好厉害
回复

使用道具 举报

WildboarG | 2024-7-19 10:48:08 | 显示全部楼层
要是附近存在大量别人家的wifi所辐射出的电磁波,会不会对接收的电磁波有影响
回复 支持 反对

使用道具 举报

lsrly | 2024-7-19 11:51:40 | 显示全部楼层
好好学习,努力挣钱,专心
回复

使用道具 举报

lhs_hfs | 2024-7-19 14:06:21 | 显示全部楼层
WangChong 发表于 2024-7-18 23:47
训练过程能详细写下吗。感觉很有意思

主要是采集数据比较麻烦,因为有时候会丢包,所以就算你每个序列都指定是1.5s最终采集的长度也不一致,所以数据预处理的时候还需要裁剪。训练的话就用pytorch搭一个lstm,训练个十几轮就能收敛了。
回复 支持 反对

使用道具 举报

lhs_hfs | 2024-7-19 14:28:12 | 显示全部楼层
WildboarG 发表于 2024-7-19 10:48
要是附近存在大量别人家的wifi所辐射出的电磁波,会不会对接收的电磁波有影响 ...

不会的,因为不同wifi占用的信道是不一样的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则