资讯动态

WiFi感知技术解析:从CSI信号处理到穿墙姿态估计与心率监测

发布时间:2026/10/14 12:37:54 来源:尧图企业网站定制
1. 从看不见到看得见WiFi感知到底在做什么第一次接触WiFi感知这个概念很多人脑子里冒出来的第一个疑问是一个只负责收发数据包的无线信号凭什么能看见人它又没有镜头也没有红外传感器甚至连光都不用。这个疑问非常合理因为我们对WiFi的日常认知就是上网用的跟感知八竿子打不着。但恰恰是这个看似矛盾的组合近几年在学术圈和工程圈都掀起了不小的波澜。先把结论摆在前面WiFi信号本质上是一种电磁波它在空间中传播时会遇到各种物体包括人体。人体含有大量水分对特定频段的电磁波有比较明显的反射和吸收特性。当一个人在WiFi发射端和接收端之间活动时他的呼吸、心跳、肢体动作都会让接收端收到的信号产生细微但可测量的变化。这些变化在原始数据里表现为信道状态信息CSIChannel State Information的幅度和相位波动。把这些波动翻译回人体动作和生理参数就是WiFi感知要解决的核心问题。这个方向之所以吸引人是因为它天然具备几个摄像头和可穿戴设备给不了的优势。第一它不需要被感知者佩戴任何东西也不需要他主动配合属于典型的无感感知。第二它不受光照条件限制白天黑夜一个样。第三电磁波对非金属障碍物有一定的穿透能力这意味着在合理范围内隔着一堵普通的砖墙或者木门信号依然能携带一部分人体活动的信息。第四WiFi设备本身已经无处不在路由器、智能音箱、笔记本网卡都是现成的硬件部署成本极低。当然这里必须把话说清楚所谓穿墙感知是有严格前提的。混凝土承重墙、金属屏蔽层、大面积水体对信号的衰减非常严重指望隔着三层楼板去监测心率是不现实的。市面上一些宣传把穿墙说得神乎其神实际落地时往往大打折扣。我在实际测试中得到的经验是单堵普通砖墙、木门、石膏板隔断这类轻质结构信号衰减在可接受范围内姿态估计的准确率还能维持在一个能用的水平一旦遇到钢筋混凝土结构基本就只能检测到有没有人这种粗粒度信息了。那么这套东西到底能用在哪些场景我梳理了一下自己接触过的和调研过的方向大致可以分成几类。居家健康监测是最直接的比如独居老人的跌倒检测、睡眠呼吸监测、夜间心率趋势跟踪这些场景下摄像头涉及隐私可穿戴设备老人又经常忘记戴WiFi感知刚好补上这个缺口。智能家居交互是另一块通过识别手势和姿态来控制灯光、空调、电视不用遥控器也不用喊话。还有安防领域判断房间里有没有人、有几个人、大概在什么位置用于入侵检测或者空间占用统计。再往深了走还有情绪识别、步态分析这类偏研究的方向。需要提醒的是WiFi感知目前整体还处在能用但不够稳的阶段。实验室环境下跑出来的漂亮数字搬到真实家庭环境里往往会掉一大截因为多径效应、家具布局、人员走动、邻居WiFi干扰都会影响结果。所以如果你打算动手做这个方向心态上要做好调参调到怀疑人生的准备。但反过来说正因为不成熟这里面的优化空间和工程价值才大很多问题还没有标准答案谁先趟出一条可行的路谁就有先发优势。2. 拆开信号看本质CSI为什么比RSSI更适合做感知2.1 从RSSI到CSI差的不只是一个字母早期做无线感知的人手里能拿到的数据只有RSSIReceived Signal Strength Indicator接收信号强度指示。RSSI是什么简单说就是接收端告诉你我收到的信号有多强一个标量单位通常是dBm。它的优点是几乎所有网卡都能读获取门槛极低。但缺点也致命它把所有子载波、所有路径的信息压缩成了一个数字信息量太少分辨率太粗。打个比方RSSI就像是你站在房间外面只能听到里面有声音还是没声音以及声音大概多大。而CSI相当于给你一副能分辨不同频率的耳朵你能听出低音、中音、高音各自的强弱变化甚至能分辨出声音是从哪个方向来的。人体动作对信号的影响恰恰体现在不同子载波上的差异化波动RSSI把这些差异全抹平了自然就丢掉了大部分有用信息。CSI的全称是信道状态信息它描述的是无线信号从发射端到接收端经过的每一条路径的传输特性。在OFDM正交频分复用系统里一个WiFi信道被划分成几十个甚至上百个子载波CSI会给出每个子载波上的复数信道响应包含幅度和相位两部分。这个数据维度一下子就上去了从1个标量变成了N个子载波乘以时间序列的矩阵信息密度完全不是一个量级。2.2 CSI里到底藏着什么拿到CSI数据之后你会看到它长这样对于每一个数据包每一个接收天线和发射天线对之间每一个子载波上都有一个复数。这个复数的模是幅度辐角是相位。幅度反映的是信号经过这条路径后的衰减程度相位反映的是传播延迟。人体活动是怎么影响这些数值的当你在房间里走动你的身体会遮挡、反射、散射一部分信号导致某些路径的幅度突然下降某些路径的相位发生跳变。更微妙的是呼吸和心跳胸腔的起伏幅度只有几毫米到几厘米引起的相位变化非常小但CSI的相位分辨率足够高理论上能捕捉到这种级别的变化。这也是为什么心率监测能基于CSI做而RSSI完全做不到。不过相位数据有个大坑载波频偏CFO和采样频偏SFO会引入随机的相位偏移导致原始相位看起来像噪声一样乱跳。所以实际处理时必须做相位校准常见做法是对所有子载波的相位做线性拟合减去拟合出来的斜率和截距把随机偏移消掉。这一步做不好后面所有基于相位的分析都是白搭。2.3 采集CSI需要什么硬件这是很多人卡住的第一关。普通家用路由器和手机是拿不到CSI的因为厂商的固件不开放这个接口。目前能拿到CSI的常见方案有这么几种方案硬件优点缺点Intel 5300网卡老款笔记本网卡工具链成熟Linux下有开源工具只支持802.11n子载波数30个硬件难买Atheros网卡部分AR9xxx系列子载波数多可到56个驱动折腾稳定性一般专用感知开发板厂商提供的开发套件开箱即用文档齐全价格偏高灵活性受限软件无线电通用SDR平台完全可控能玩底层成本高开发门槛陡我个人的建议是如果你只是想快速验证想法优先考虑现成的开发套件虽然贵一点但能省下大量折腾驱动的时间。如果你是要做长期研究或者需要深度定制那软件无线电平台更合适代价是你得懂不少通信底层的知识。Intel 5300那套方案现在硬件越来越难搞新手不建议从这里入门。采集的时候有几个参数必须注意。发包速率决定了你的时间分辨率做呼吸心跳监测时采样率至少要能覆盖目标频率的两倍以上考虑到呼吸大概0.2到0.5赫兹心跳1到2赫兹发包率最好在50赫兹以上留足余量。天线配置决定了空间分辨率多发多收能提供更多路径信息对姿态估计帮助很大。信道选择也很关键2.4G频段穿透好但干扰多5G频段干净但穿透差要根据你的场景权衡。3. 从原始信号到人体姿态一条完整的处理链路3.1 数据预处理把脏数据洗干净刚采集到的CSI数据是非常脏的。里面混杂着环境噪声、硬件噪声、突发干扰还有前面提到的相位随机偏移。直接拿去做分析结果基本没法看。预处理这一步做得好不好直接决定了整个系统的上限。第一步是异常值剔除。由于硬件抖动或者丢包偶尔会出现一些明显偏离正常范围的数值这些点如果不处理会在后续的差分、滤波环节被放大。常用做法是用Hampel滤波器它对每个点计算一个滑动窗口内的中位数和绝对偏差超过阈值就替换成中位数。这个方法对脉冲噪声特别有效。第二步是去噪。CSI信号里的噪声主要是高频随机噪声用低通滤波或者小波变换都能压下去。但这里有个取舍滤波太狠人体动作的高频细节也被抹掉了滤波太轻噪声又压不住。我的经验是做姿态估计时截止频率可以设高一点保留动作细节做呼吸心跳时截止频率要设得很低因为生理信号的频率本来就很低高频部分全是噪声。第三步是相位校准前面提过了这里不重复。补充一点除了线性拟合还有一种做法是利用已知的静态参考信号做差分把公共相位误差消掉。两种方法各有适用场景线性拟合通用性好差分法在静态环境下更干净。3.2 特征提取把信号波动翻译成动作语言预处理之后你要从干净的CSI序列里提取出能表征人体动作的特征。这一步是整个系统的核心特征选得好后面分类器随便用用都能出效果特征选得烂再复杂的深度学习模型也救不回来。最基础的特征是统计特征包括每个子载波上幅度序列的均值、方差、偏度、峰度以及子载波之间的相关性。这些特征计算简单对粗粒度的动作识别比如走路、坐下、跌倒已经够用。进阶一点的是频域特征。对人体动作做FFT你会发现不同动作在频域上有不同的能量分布。走路的主频大概在1到2赫兹挥手可能到3赫兹以上呼吸则集中在0.2到0.5赫兹。把频域能量分布作为特征区分度比纯时域统计量高不少。再往上是时频特征用短时傅里叶变换或者小波变换得到信号随时间和频率变化的二维图谱。这个图谱其实很像一张信号照片人体动作的起止、节奏、强度都能在里面看出来。很多基于深度学习的WiFi感知方案就是直接把这种时频图喂给卷积网络让网络自己去学特征。还有一个容易被忽略但很有用的特征多天线之间的相位差。不同接收天线收到的信号因为空间位置不同对同一个动作的响应会有细微差异。这个差异里包含了动作的空间方向信息对判断人往左走还是往右走这类问题特别关键。3.3 姿态估计模型从分类到回归的跨越早期的WiFi感知大多做的是动作分类就是判断当前是走路还是坐下还是跌倒输出是一个离散的类别标签。但姿态估计要的是连续的人体关节点坐标这是一个回归问题难度高了一个档次。做姿态估计主流思路有这么几条。一条是把CSI的时频图当成图像套用计算机视觉里成熟的姿态估计网络结构比如基于热力图的方法让网络输出每个关节点的概率分布。这条路的优势是能直接借用视觉领域的成果劣势是CSI的图像和真实图像差异很大直接迁移效果未必好。另一条是设计专门针对无线信号的网络结构比如用循环神经网络处理时间序列用图神经网络建模关节点之间的空间关系。这类方法更贴合CSI的数据特性但需要自己设计网络调参工作量大。还有一条是模型驱动的方法先建立人体动作和信号变化之间的物理模型再用优化方法反推姿态。这条路理论优雅但实际中人体和环境的复杂性让精确建模非常困难目前更多是作为数据驱动方法的补充。我在实际项目里的体会是纯数据驱动的方法在特定环境下能跑出不错的效果但一旦换环境性能下降明显。比较务实的做法是用少量目标环境的数据做微调或者引入一些物理约束作为正则项让模型不至于偏离太离谱。3.4 心率监测在噪声里捞一根针心率监测是WiFi感知里对信号质量要求最高的任务之一。原因很简单心跳引起的胸腔位移只有毫米级对应的相位变化极其微弱很容易被呼吸、身体微动、环境噪声淹没。处理思路通常是这样的先从CSI相位序列里提取出胸腔运动引起的周期性成分然后做带通滤波把呼吸频段0.1到0.5赫兹和心跳频段0.8到2赫兹分开。呼吸信号幅度大相对好提取心跳信号幅度小而且常常和呼吸的谐波混在一起分离起来很头疼。一个常用的技巧是做呼吸谐波消除。因为呼吸不是纯正弦波它的谐波会落在心跳频段里造成干扰。可以先估计出呼吸的基频然后把它的一次、二次谐波从频谱里减掉剩下的再去找心跳峰值。另一个技巧是用多个子载波做联合估计因为不同子载波对心跳的敏感度不同把多个子载波的估计结果做加权融合能提高鲁棒性。实测下来静坐状态下心率监测的误差能控制在每分钟几次以内但一旦被监测者开始走动或者说话误差就会明显变大。所以这类应用通常限定在静息场景比如睡眠监测、办公久坐监测。4. 穿墙感知的物理边界与工程妥协4.1 电磁波穿墙到底损失了什么很多人对穿墙有误解以为信号穿墙就是简单地变弱一点。实际上穿墙带来的不只是幅度衰减还有更麻烦的相位失真和多径结构改变。幅度衰减是最好理解的墙体材料吸收和反射一部分能量到达接收端的信号变弱。衰减程度取决于材料、厚度、频率。一般来说频率越高穿透损耗越大所以5G频段穿墙能力明显弱于2.4G。这也是为什么做穿墙感知时往往优先考虑2.4G频段。相位失真就没那么直观了。信号穿过墙体时不同频率成分的传播速度略有不同导致相位关系被打乱。这会破坏CSI里子载波之间的相干性而很多感知算法恰恰依赖这种相干性。结果就是穿墙之后原本能用的特征变得不可靠了。多径结构的改变更隐蔽。墙体会引入新的反射路径同时削弱某些原有路径。这意味着你在墙这边训练好的模型直接搬到墙那边用特征分布已经变了性能自然崩。4.2 穿墙场景下的可行方案既然物理限制摆在那里工程上就得做妥协。我的经验是穿墙场景下不要追求高精度的姿态估计把目标降到检测存在、判断数量、识别粗粒度动作这个层级成功率会高很多。具体做法上有几个方向值得尝试。一是降低对相位特征的依赖多用幅度特征因为幅度受相位失真的影响小。二是用跨域适应的方法在墙两侧都采集一些数据用迁移学习把模型适配过去。三是引入多设备协同在墙两侧各放一个接收端用两侧信号的差异来补偿单侧信息的不足。还有一个思路是用低频信号。频率越低穿透损耗越小但相应的空间分辨率也越低。这是一个典型的取舍需要根据具体应用来定。如果只是想知道房间里有没有人低频完全够用如果想识别具体动作那就得接受精度损失。4.3 实测中的那些意外理论分析再漂亮实测总会给你惊喜。我印象比较深的一次是在一个模拟的居家环境里做穿墙测试。按理论计算那堵墙的衰减应该在可接受范围内但实际数据一塌糊涂。排查了半天最后发现是墙里有一层金属网是装修时用来防裂的。这种金属网对电磁波的屏蔽效果极强直接把信号挡得七七八八。还有一次测试环境里有一台正在运行的微波炉2.4G频段被干扰得几乎没法用。后来换了5G频段才恢复正常。这提醒我做WiFi感知一定要考虑环境里的干扰源微波炉、无线电话、蓝牙设备都是潜在的麻烦制造者。另一个常见的意外是人体自身的遮挡。当多个人同时在感知区域里一个人可能挡住另一个人导致被挡住的人信号特征消失。这在多人场景下是个硬伤目前还没有特别好的解决方案只能通过多设备布设来缓解。5. 落地之前必须想清楚的几个问题5.1 隐私这件事绕不过去WiFi感知最大的卖点之一就是保护隐私因为它不采集图像。但这话只说对了一半。WiFi感知虽然不采集图像但它采集的是人体活动信息这些信息如果被滥用同样能推断出大量隐私内容比如你在家的作息规律、是否独居、健康状况。所以做这个方向的产品隐私设计必须前置不能等产品做完了再补。技术上可以考虑的做法包括在设备端完成感知计算只上传结果不上传原始信号对原始信号做匿名化处理去掉能识别个体身份的特征给用户提供明确的开关和可见的状态指示让他知道什么时候在被感知。5.2 标定和部署的成本实验室里跑通一个算法和把它部署到一千个家庭里中间隔着巨大的鸿沟。最大的问题是标定。每个家庭的房间布局、家具摆放、墙体结构都不一样在一个环境里训练好的模型换到另一个环境往往需要重新标定。降低标定成本是个核心工程问题。目前有几种思路一是做环境无关的特征设计让模型对布局变化不那么敏感二是用少量标注数据做快速自适应三是设计自动标定流程让用户不需要懂技术就能完成。这几种思路各有优劣实际产品里往往是组合使用。5.3 多人的问题单人场景下WiFi感知已经能做出一些可用的东西。但多人场景是另一个难度级别。多个人体的信号会叠加在一起分离难度极大。目前学术上有些工作尝试用盲源分离的方法来处理但效果离实用还有距离。如果你的应用场景天然就是多人比如办公室、商场那就要提前想清楚怎么应对。一个务实的做法是把问题简化不追求同时跟踪所有人而是做统计层面的分析比如当前区域有几个人整体活动强度如何。这种粗粒度信息在很多场景下已经够用而且实现难度低得多。5.4 和摄像头方案的互补关系我不认为WiFi感知会取代摄像头两者更像是互补。摄像头在精度、细节、成熟度上都有明显优势但受限于隐私和光照。WiFi感知在隐私友好、全天候、无感这几个维度上有独特价值但精度和稳定性还有差距。比较合理的产品思路是在隐私敏感的场景用WiFi感知在需要高精度的场景用摄像头两者数据融合取长补短。比如居家养老场景平时用WiFi感知做持续监测一旦检测到异常事件再触发摄像头确认。这样既保护了日常隐私又保证了关键事件的可靠性。6. 给想动手的人一些实在建议如果你看完这些还是想自己动手试试那我给你几条从踩坑里总结出来的建议。第一从最简单的任务开始。别一上来就搞姿态估计先做有没有人的检测跑通了再做动作分类最后再挑战姿态和心率。每一步都跑通再往下走不然问题堆在一起你根本不知道是哪个环节出的错。第二重视数据采集。这个方向的瓶颈往往不在算法而在数据。公开数据集有限而且和你的实际场景差异大。花时间搭一套稳定的采集系统把数据质量搞上去比在算法上反复调参的收益大得多。第三控制变量。调试的时候一次只改一个东西改了滤波参数就别同时改天线配置不然出了问题你没法定位。我见过太多人同时改一堆参数最后效果好也不知道为什么好效果差也不知道为什么差。第四接受不完美。WiFi感知目前的水平就是这样别指望它能做到摄像头级别的精度。找到一个它真正有优势、且精度要求不那么苛刻的场景比硬碰硬去挑战高难度任务要明智。第五多看看信号处理的基础知识。很多人一上来就学深度学习结果连傅里叶变换、滤波器设计都搞不清楚遇到问题只能瞎试。信号处理是这行的基本功花时间补上后面会省很多事。这个方向还在快速演进每年都有新的方法和新的硬件出现。现在入场时机不算晚但也别指望能轻松做出爆款。它更像是一场需要耐心的长跑拼的是对信号的理解、对场景的洞察以及把不完美的东西做到能用的工程能力。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑