“智感无界”——基于 Wi-Fi CSI 的 AIoT 无线环境感知实验
通过设计嵌入式开发端和云端服务程序为用户提供一个高效的学习平台。
实验介绍
本实验通过设计嵌入式开发端和云端服务程序,为用户提供一个高效的学习平台。
嵌入式端:
硬件基于esp32-wroom-32开发板,编写读取CSI信号,打包成UDP数据包(目的端口为:),通过WiFi发送到云端IP栈。发包频率设置为50Hz。
云端:
前期开发可以在本地PC进行,调试成功后,购买阿里ECS,将项目部署到云服务器,实现AIoT系统。具体功能参考实现:
动画引导页
用户首次访问Web端页面时,将通过动画直观地了解CSI(信道状态信息)信号如何识别空间内是否有人的存在。这些动画采用简单易懂的方式展示WiFi信号在遇到人体干扰时的变化情况,帮助用户轻松理解这一复杂技术背后的原理。这种视觉化学习方法不仅能够迅速抓住用户的注意力,还能为后续的学习打下良好的基础。
登录界面与个性化路径规划
完成动画引导后,用户将进入登录界面,在这里输入用户名和密码以确保个人信息的安全。紧接着,系统会要求用户选择自己对机器学习的学习经验程度。
工具箱探索与导学界面
成功登录后,用户将进入工具箱模块。首先迎接他们的是导学界面,该界面采用对话式的交互设计,模拟一对一的教学环境。在这里,“导师”(即系统)将通过互动式对话介绍机器学习的核心逻辑。这种互动方式让学习过程变得更加生动有趣,避免了传统教学的单调乏味。
实操阶段:从数据到预测
数据收集:用户首先进入数据收集页面,可以模拟数据或从开发板获取实时数据。这一环节旨在让用户熟悉数据来源及其多样性。
数据预处理:接下来是数据预处理阶段,包括数据集划分及信号处理。此步骤对于提高模型准确性至关重要,用户将学习如何准备数据以便后续使用。
模型选择与训练:在完成数据预处理后,用户将进行模型选择,并基于所选模型进行训练。系统提供了多种算法供用户尝试,鼓励他们探索不同模型的效果。
模型管理与对比:用户可以在此管理已训练的模型,比较不同模型之间的性能差异,找出最适合其应用场景的解决方案。
模型预测:最后,用户可以选择特定文件进行模型预测。系统将展示预测结果,并提供可视化分析,帮助用户更好地理解模型的表现。
实验环境及资源准备
一、概述
嵌入式端设备需求:esp32-wroom-32开发板,提供WiFi CSI信号,并通过UDP上传到云端
云端部署内容:前端页面、后端服务,两者都是采用python中的flask技术实现
二、软硬件运行平台
硬件需求
用户端:普通个人电脑即可,操作系统不限,但要求安装各大主流浏览器。网络环境需要下载速度与上传速度可稳定在1Mb/s。
云服务器端:操作系统为Linux(推荐 Ubuntu 22.04 LTS / CentOS 7+),CPU 建议采用双处理器 2.0 GHz及以上配置,内存至少2GB,磁盘空间至少 8 GB,使用带宽至少1Mbps,项目启动运行后,服务器须保持一直开机状态。
硬件端:ESP32开发板。
软件需求
三、系统开发平台
本系统采用B/S架构开发,需要将项目相关文件部署到服务器运行,用户可通过浏览器访问并使用该系统。采用分布式系统设计,不同后端服务之间通过RESTful API进行调用。
硬件环境
个人笔记本 ThinkBook 16P
配置:
13th Gen Intel(R) Core(TM) i9-13900H 2.60 GHz
机带 RAM 32.0 GB (27.8 GB 可用)
系统类型 64 位操作系统, 基于 x64 的处理器
嵌入式开发设备:ESP32开发板、CY8CPROTO-062-4343W开发板
软件环境
嵌入式开发设备:ESP32开发板、CY8CPROTO-062-4343W开发板
Linux CentOS 7操作系统
集成开发环境
后端IDE:IntelliJIDEA、VisualStudioCode
前端IDE:WebStorm
接口集成测试:Postman
数据库
MySQL数据库,关系型数据库为SUN公司出品,现被ORACLE公司收购,版本号为
8.0.34
Redis数据库,非关系型数据库,是一个完全开源的,高性能的key-value数据库
四、云端实验资源
在开始实验之前,请先点击右侧屏幕的“进入实操”再进行后续操作
实验资源简介
进入实操前,请确保阿里云账号满足以下条件:
个人账号资源
使用您个人的云资源进行操作,资源归属于个人。
平台仅提供手册参考,不会对资源做任何操作。
确保已完成云工开物300元代金券领取。
在实验页面,当您已阅读并同意上述创建资源的目的以及部分资源可能产生的计费规
则,点击【进入实操】继续部署该应用。
领取权益及实验资源开通
第一步:本次实验需要您通过领取阿里云云工开物300元高校专属权益优惠券(若已领取请跳过)
重要实验产生的费用优先使用优惠券,优惠券使用完毕后需您自行承担。
第二步:领取学生专属300元优惠券后,点击进入【学生用券中心】
两种方式
方式一
方式二
实例规格
包年包月
按时收费
资源说明
本场景主要涉及以下云产品和服务:ECS
根据自己的需求选择包年包月 或 按量付费,两种方式均支持抵扣学生300元代金券。
资源消耗
包年包月:
ECS服务器,e实例2核2G三个月:246.43元
按量付费:
只在项目部署、调试和项目演示时付费,约10元以下
购买步骤
找到【包年包月不焦虑】模块
选择【e实例(处理器与内存比1:1)(3个月)】
点击【立即购买】
找到【按量付费更灵活】模块
选择【e实例(处理器与内存比1:1)】
点击【立即购买】
说明如果您调整了资源规格、使用时长,或执行了本方案以外的操作,可能导致费用发生变化,请以控制台显示的实际价格为准。
该实验下资源消耗查看方式:
在该实验完成后,在【费用与成本—账单详情—明细】中查看产品的资源消耗情况(按量付费的资源消耗部分会有T+1的延时)。
实验原理及步骤
前期可以在本地实现web应用,联调通过后,再进行ECS端项目部署。
本地开发
(1)预备知识
WiFiCSI(信道状态信息)信号原理。基于无线信号在传输过程中的多径效应和信道特性,通过分析这些特性来获取环境信息。
UDP协议栈。
信号处理算法:了解各种滤波算法,如均值滤波、快速傅里叶变换、小波变换等用于CSI信号处理。
深度学习模型:搭建、训练、测试等流程。
web开发技术。
(2)技术路线
系统的整体架构如图1所示。
图1 系统架构图
WiFi无线感知核心技术介绍:
数据采集
信道状态信息 (CSI) 是指 Wi-Fi 连接的信道信息。ESP32 中,CSI 由子载波的信道频率响应组成,CSI 从发送端接收数据包时开始估计。每个子载波信道频率响由两个字节的有符号字符记录,第一个字节是虚部,第二个字节是实部。根据接收数据包的类型,信道频率响应最多有三个字段。分别是 LLTF、HT-LTF 和 STBC-HT-LTF。对于在不同状态的信道上接收到的不同类型的数据包,CSI 的子载波索引和总字节数如下所示。
数据包格式
使用udp在对指定ip的1234端口发送udp数据包
数据包格式是前4字节是小端序的时间戳,后续字节是直接复制的wifi_csi_info_t 中的buf字段数据,其格式是每两个字节表示一个通道的复数采样数据。核心解析代码如下所示。
参考文献:
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/wifi.html
https://github.com/espressif/esp-csi/blob/master/README_cn.md
数据采集环节在模拟家庭环境中开展,实验环境包含1、2、3、4四个环境场景。在房间内部署信号收发器和CSI接收器设备实时采集WiFi信号,通过设置有人/无人两种状态,并调整室内物品摆放模拟不同空间布局。设备同步记录CSI数据与时间戳,单条数据记录由32位时间戳及64位长度的CSI信号构成。
图2 房间布局情况
场景1:房间基本布局,环境内没有设置干扰项。
场景2:在房间门口A点放置高度约1m的物品。
场景3:在收发器视距线B点放置高度约1m的物品。
场景4:在CSI接收器视距线C点放置高度约1m的物品。
数据预处理阶段,利用数据处理工具对原始 WiFi 信号进行清洗,剔除噪声及异常值最终提取CSI信号的振幅与相位特征,构建适用于模型训练的特征向量。
最终采集到的数据集有57,277条,分为11个CSV文件,数据文件大小为29.3 MB。具体数据集情况如表2所示:
通过系统整合场景1、2、3、4的多环境场景数据,显著提升了数据集的场景覆盖度与复杂度,促使模型在训练过程中学习不同场景中CSI信号的不变特征,有效增强了训练后其对未知干扰因素的鲁棒性及跨场景泛化能力。
信号处理
对采集的CSI数据进行预处理,包括振幅信号的均值滤波和相位信号的线性回归处理。处理后的信号用于特征提取和分类模型训练。用Python语言实现例如下述的信号处理算法:
均值滤波信号处理:一种简单而常用的平滑滤波方法。通过滑动窗口计算信号在局部区域内的平均值,从而有效地减少高频噪声和突变点。这种方法适合处理波动性较小的信号,但在面对非平稳或复杂模式时可能存在信息损失的风险。
滤波信号处理:基于中值的鲁棒滤波器,用于检测和剔除信号中的离群值。通过计算滑动窗口内的中位数和标准差判断异常点,适合处理带有突变、噪声或异常干扰的信号,常用于预处理阶段以提升后续分析的准确性。
快速傅里叶变换信号处理:通过将时间域信号转换到频域来提取其频率成分,是分析周期性、振动或频率特征信号的重要工具。它能揭示信号中隐藏的周期结构,但不适合处理非平稳信号或需要时间定位的变化。
小波信号处理:利用小波变换对信号进行多尺度、多分辨率分析,既保留了时间信息,又能捕捉频率变化。相比FFT,小波处理更适合分析非平稳信号,比如突变、跳变或局部事件,广泛应用于生物医学信号、地震数据、语音等领域。
经验模态分解信号处理:一种自适应信号分解方法。可将复杂信号分解为一组本征模态函数(IMF),每个IMF代表不同时间尺度的局部特征。EMD不依赖预设基函数,特别适用于非线性、非平稳信号的分析,如生理信号处理、地震分析等。
特征提取
这里以小波信号处理为例。对每组数据进行信号处理,提取CSI信号的振幅和相位数据。振幅数据反映信号的能量强度,振幅数据通过计算复数信号的模值得到,在Python中可使用np.abs()函数获取信号的振幅数据。相位数据携带信号的相位偏移信息,定义为复数信号的幅角,在Python中可使用np.angle()函数获取相位信息。
接着,采用小波信号处理技术对CSI数据进行降噪与特征优化。小波变换通过多尺度信号分析,能够有效滤除高频噪声成分,同时凸显信号中的低频趋势特征与局部细节信息。该处理过程在抑制数据噪声的同时,完整保留了对信道状态分析具有关键作用的有效特征,为后续模型训练的特征输入质量提供保障。
最后,将处理后的特征进行特征融合,将处理后的振幅和相位特征拼接成一个完整的特征向量,使用np.concatenate方法将振幅和相位沿列方向拼接。信号处理及构建特征向量的代码如下所示。
分类模型
构建多种神经网络模型,包括全连接网络(FC)、循环神经网络(RNN)、门控循环单元(GRU)、长短时记忆网络(LSTM)和双向 LSTM (BiLSTM)等,对特征进行分类建模。
(3)系统功能具体实现
非交互类
动画展示:
当用户进入Web端后,首先会看到一段动画,通过这个动画可以直观地了解基于CSI(信道状态信息)信号的有人无人识别原理的底层逻辑。动画演示了两个WiFi设备发送信号,当一个人走过这两个WiFi信号之间时,系统如何识别到有人存在的过程。
技术实现:
该动画利用了HTML5的<canvas>元素和原生JavaScript来绘制动态效果。以下是一些关键技术和功能点:
HTML5<canvas>元素:用于在网页上进行图形绘制,包括波形、圆圈以及人物图标。
JavaScript动画控制:通过JavaScript编写动画逻辑,控制波形的扩散、连接线的形成以及人物图标的移动。
CSS样式:用于布局和美化界面,确保动画区域清晰可见且易于理解。
事件监听器:监听窗口加载和调整大小的事件,以确保动画能够适应不同的屏幕尺寸并正确初始化位置。
图3 进入页面后的初始动画
交互类
本系统前端采用HTML、JavaScript和CSS构建,提供直观且互动性强的用户界面,确保用户能够轻松访问和操作各种功能。HTML负责页面结构,CSS用于美化界面,而JavaScript则实现动态交互效果,增强用户体验。后端使用Flask框架,它是一个轻量级的PythonWeb应用框架,用于处理业务逻辑、数据管理和API请求,确保前后端高效通信与数据处理。通过这种架构,系统不仅提供了流畅的用户体验,还具备了强大的后台支持能力。
前端交互层
功能定位:用户操作与数据可视化中心
Web控制台:
模型版本管理:查看所有模型,删除训练完成的模型
实时监控看板:CSI波形动态渲染
参数配置界面:支持JSON格式的模型超参数编辑
图4 前端交互层
数据处理层
处理流水线:
原始CSI数据→校验清洗→复数转换→特征提取→窗口分割→标准化输出
关键技术:
无效子载波过滤(30个子载波保留策略)
动态范围压缩(DRC算法)
滑动窗口重叠率控制(默认30%)
图5 数据处理层
业务逻辑层
模型训练器:
支持ResNet/LSTM等网络架构
自动超参数调优
训练过程可视化
实时预测器:
多模型并行推理
动态批处理机制
图6 业务逻辑层
API服务层
接口规范:RESTfulAPIV1.2
关键端点:
图7 API服务层
数据存储层
图8 数据存储层
云端项目部署
服务器购买配置
点击【立即购买】后,默认大部分配置,修改镜像为【云市场镜像】——【1Panel Linux】,最下方保证关闭自动续费,然后立即购买。注意此时下方金额应该显示0元。
后面自行确认订单即可
连接云服务器
打开阿里云,【工作台】——【云服务器ECS】
重置密码
点击重置密码按钮,自行设置新密码
远程连接
点击远程连接按钮,使用刚刚重置的密码,立即登入。
也可以使用远程连接工具,例如XShell进行连接。我们后面的示例采用XShell进行连接并部署。
配置Conda中的Python环境
运行命令conda create --name 25CAAC python=3.12.9
再激活环境conda activate 25CAAC
pip install以下依赖
分别启动前后端
分别进入前端后端代码目录,运行python app.py
成功部署:以下示例为部署成功界面:
实验资源释放
无论购买的是包年包月还是按量付费方式,都需要手动释放资源。
停止服务器,避免流量超支产生费用:
不再需要示例时请删除示例:
点击 云服务器ECS—实例—复制实例ID,点击【删除】
在弹窗粘贴实例ID,并进行勾选,点击【确定删除】
完成安全验证后,即可成功释放实例。
检查是否成功释放资源
关闭实验
在完成实验后,点击 结束实操
点击 取消 回到实验页面,点击 确定 跳转实验评分
请为本次实验评分,并给出您的建议,点击 确认,结束本次实验