资讯动态

Wi-Fi单链路被动人体追踪:从CSI多普勒到全身运动估计

发布时间:2026/10/22 16:54:46 来源:尧图企业网站定制
1. 这个工作解决的是什么问题第一次看到用一条Wi-Fi链路做被动人体追踪这个标题时我第一反应是标题里每个词都认识连起来却觉得有点不可思议。Wi-Fi不是用来上网的吗怎么能追踪人单链路是什么意思为什么特别强调单被动又是什么含义先把这几个词拆开。被动指的是被追踪的人身上不需要携带任何设备。手机不放兜里、手上不拿标签、身上不戴任何传感器系统通过分析环境中的Wi-Fi信号变化来判断这个人的位置和移动轨迹。这个前提很重要它决定了这项技术能用在什么场景如果允许每个人带设备那蓝牙、UWB、RFID都有很成熟的方案根本不用费劲去折腾Wi-Fi信号。被动的价值恰恰在于被追踪者是无感的、不需要配合的。单链路指收发两端各只有一根天线或者说只使用一条收发天线对。常规的多天线方案可以靠到达角AoD/AoA来做定位但只有一根天线的时候角度信息没有了距离信息也没有了几乎什么几何信息都拿不到。Widar2.0的贡献就在于它告诉你即使只有一条链路依然能实现全身追踪。人体追踪在这个工作里有两个层次的含义一是定位即人在房间里的二维坐标二是跟踪即连续估计这个人移动的轨迹。更进一步它还能估计出运动速度甚至速度的方向。这些信息组合起来就形成了一套完整的被动感知方案。这项技术适合谁来读如果你在做无线感知、智能家居中的人体感知、养老监护、安防监控这类方向这篇论文是绕不开的经典工作它属于Wi-Fi感知里被动追踪的标杆之一。即使你不是做研究的人只要你对Wi-Fi信号除了上网还能干什么这个话题感兴趣也值得了解一下它的核心思路。这篇博客我就按自己复读这篇论文时的思路来拆重点讲它解决问题的路径以及在复现和理解过程中容易踩的坑。2. 从环境信号里捞运动信息2.1 为什么Wi-Fi信号能感知人体要理解Widar2.0先要理解一个物理基础电磁波在传播过程中遇到物体时会发生反射、散射、衍射。当物体静止时这些反射路径是稳定的当物体移动时反射路径的长度在持续变化导致接收信号的相位随之变化这个现象就是多普勒效应。Wi-Fi信号虽然主要是用来传数据的但接收机在信道估计阶段会得到一组信道状态信息CSIChannel State Information它刻画了信号从发射机到接收机之间经历的全部传播效应。CSI的幅度和相位会随着环境中物体的运动而发生微小变化这正是Wi-Fi感知的基础。可以做一个生活化类比你站在一间屋子里大声喊一声声音碰到墙壁、家具会反弹回来形成回声。如果屋子里一切都静止回声的模式是固定的这时有个人从你面前走过回声的模式就会改变。Wi-Fi信号就是那声喊只不过频率更高、波长更短能捕捉到更细微的变化。但这里有一个关键的困难CSI的变化是环境中所有路径变化的叠加。也就是说人动一下CSI的变化里既有直接来自人体反射的成分也有被人体遮挡导致其他路径改变带来的成分还有环境中其他物体微动带来的噪声。如何从混叠的信号中分离出与人体运动相关的成分是Wi-Fi感知最核心的难题之一。Widar2.0对这个问题给出的回答分两步走第一步使用一种名为B-Fi的信号处理框架从CSI中提取出精确的人体运动多普勒信息第二步将多普勒信息映射到空间位置和速度上。2.2 多普勒频移为什么是更好的选择做Wi-Fi感知的早期工作大多使用CSI的幅度或相位变化来检测事件比如静态人体检测人是否在房间里、活动识别人在做什么动作。这类方法在很多场景下够用因为事件检测只需要判断信号有没有显著变化不需要精确刻画变化的物理含义。但到了追踪这个层面问题就不一样了。追踪需要连续输出位置或速度这要求从中提取的信号特征必须有明确的物理意义。CSI幅度变化的物理意义很模糊它取决于人所在的位置、人体朝向、墙面反射系数等很多因素很难建立一个稳定的映射模型。多普勒频移则不同。一个物体以速度v沿某方向移动时如果射频链路的方向与该物体的运动方向夹角为θ那么多普勒频移与v和θ的关系由下式决定fd v * cos(θ) / λ其中λ是信号波长。2.4GHz频段的波长大约是12.5厘米一个以0.5m/s速度行走的人正对链路运动时产生的多普勒频移大约是4Hz。这个量级在几十毫秒的测量窗口内是可以分辨的。多普勒频移的物理意义非常明确它直接编码了人体运动速度在链路方向上的投影。只要能从CSI中准确提取出多普勒频移就拿到了一个干净的运动物理量剩下的事情就是如何把这个一维的物理量映射成二维空间中的位置和速度。3. B-Fi从CSI里榨出干净的多普勒谱3.1 为什么不能直接对CSI做傅里叶变换直觉上要得到多普勒频移对CSI序列做傅里叶变换不就行了因为CSI的相位随时间的变化率就是多普勒频移。但实际操作中这个思路行不通原因有两个。第一个原因是CFO载波频率偏移。Wi-Fi收发两端虽然都工作在标称的同一频率但实际振荡器之间总有微小偏差这个偏差导致的相位偏移随时间是线性增长的混在CSI相位里会形成一个虚假的大多普勒偏移。如果不消除CFO真实的人体多普勒会被淹没或严重偏移。第二个原因是STO符号定时偏移和采样频偏。它们会造成相位随子载波索引线性变化在频域上表现为CSI跨天线的线性相位。这些非理想因素叠加在一起使得直接从原始CSI相位中还原多普勒几乎不可行。而且不同Wi-Fi网卡的CFO和STO特性还不一样有的卡固定、有的卡随机跳变这让问题更加难办。3.2 B-Fi的三步处理流程B-Fi本质上是一套专门针对CSI相位污染物设计的净化流程它分成三步。第一步是STO估计与补偿。CSI的相位与真实信道相位的关系按子载波索引变化其中STO引起的相位偏移与子载波索引成正比。B-Fi计算相邻子载波的相位差从而解出与STO相关的斜率项。这一项可以被估计出来并从相位中减去。第二步是CFO估计与补偿。CFO引起的相位偏移与时间成正比对同一子载波上的CSI序列相邻时刻做共轭相乘相位差中就包含了CFO的贡献。同样可以估计出来然后补偿掉。第三步是残余误差清理。经过前两步后相位中剩下的主要就是信道真实相位和相位噪声了。B-Fi还会做一步基于线性趋势去除的处理把残余的线性相位趋势进一步压制。这三步做完之后得到的相位序列就可以用来计算多普勒谱了。具体做法是对补偿后的CSI序列做短时傅里叶变换STFT得到每一时刻的多普勒谱这个谱就是后续所有处理的输入。我在读这部分时有一个体会B-Fi的价值不在于每一步有多复杂而在于它把这些网卡层面的脏东西和物理层面的好信号清晰地区分开来。很多初学者一上来就套用STFT结果做出来的多普勒谱全是规律的斜线还以为是人体运动的特征实际上那是CFO造成的虚假多普勒。B-Fi这套流程相当于先告诉系统哪些变化是设备自身的错误哪些变化才是环境里真实的物理运动。实践提示使用Intel 5300网卡采集CSI时CFO和STO的量级会随网卡和驱动版本变化。B-Fi的补偿参数不是一劳永逸的更换网卡或环境后建议先采集一段静态数据用来标定残余误差的量级再决定是否需要额外的滤波步骤。4. Widar2.0的三维建模空间、速度与多普勒的映射关系4.1 单链路为什么难做定位多天线方案可以用到达角定位原理类似人的两只耳朵判断声源方向两耳收到声音的时间差对应着角度。单链路只有一只耳朵自然无法直接测角度。那么单链路上还剩下哪些信息答案是人体运动产生的多普勒频移。频率只有一个标量里面的信息量确实不足以直接确定二维位置。Widar2.0的聪明之处在于它不试图从一个多普勒值恢复位置而是把多普勒值放在一个空间模型中倒推位置。具体来说Widar2.0假设人体可以建模为一个由多个散射体组成的扩展目标。不同身体部位躯干、手臂、腿位于空间中的不同位置在人体运动过程中每个部位相对于链路的方向不同、速度不同因此产生不同的多普勒频移。这样一来虽然只有一条链路但一次测量得到的是一个多普勒谱里面包含了多个频率分量每个分量都代表人身体上某个部位的瞬时运动状态。4.2 从多普勒频移到空间位置的数学映射设人体的位置为p速度为v发射天线位置为tx接收天线位置为rx。人体某一部分产生的多普勒频移可以写成fd (v · (p - tx)/||p - tx|| v · (rx - p)/||rx - p||) / λ用语言描述就是人体某一部分相对收发天线的径向速度之和除以波长。如果把人体看作一个整体那么每个身体部位的多普勒是不同的因为它们相对于收发天线的径向速度不同。Widar2.0的核心洞察是在人体运动过程中人体可以看作一个刚体所有部位的位移可以用人体质心的位移加上围绕质心的旋转来描述。这样一来人体上任意一点的速度可以写成v_i v_c ω × r_i其中v_c是质心速度ω是旋转角速度r_i是第i个散射体相对质心的位置。代入多普勒公式后整个多普勒谱的形状就由一组参数决定质心位置、质心速度、旋转角速度、身体的姿态结构。这看起来是一个高维估计问题直接求解非常困难。但Widar2.0找到了一个巧妙的角度来简化将人体建模为一条线段脊柱在运动过程中这条线段会在地面上投影出一条运动轨迹。将人体运动分解为平移和旋转两部分后多普勒谱实际上可以分解为三种基本模式整体平移产生的整体多普勒、肢体摆动产生的周期多普勒、以及身体旋转产生的旋转多普勒。这三种模式的组合在时间-多普勒谱上形成了非常明显的特征结构。论文里把这种结构叫做运动的DTW特征我通俗地理解就是你在超市里推着购物车走动购物车本身的移动速度是一个基础量同时你手臂推动购物车的力量在周期性变化这两个信号叠加在一起通过分析叠加模式就能反推购物车的移动速度。Widar2.0做的其实是类似的事情只不过购物车换成了人体躯干手臂摆动换成了四肢的周期性摆动。4.3 速度估计先估速度再定位置Widar2.0的追踪流程分两个阶段第一阶段先估计速度第二阶段再从速度积分出位置。为什么先速度后位置因为人体产生的多普勒频移与速度直接相关从多普勒谱估计速度信息最为自然而位置则需要通过速度对时间积分获得两步走的顺序正好符合信息传递的因果链。速度估计的具体做法是定义一个速度运动谱VMS, Velocity Motion Spectrum它描述的是在给定人体运动速度v的情况下理论上会得到的多普勒谱形态。通过将实测的多普勒谱与不同候选速度下的理论谱做匹配找出最匹配的速度值就完成了速度估计。这里要提一下SAPSegment Amplitude Product这个方法。它是论文里用于估计速度的算法核心思想很直接把一组观测到的多普勒谱按时间维度切成多个片段每一个片段对应理论上的一个速度增长或衰减阶段对所有候选速度计算累计幅度乘积最大乘积对应的速度就是估计值。这个方法的好处是对噪声不敏感因为乘积操作天然放大了正确的信号路径上的幅度同时压制了随机噪声的贡献。实测下来SAP的估计精度和选择的参数有很大关系。核心参数有两个一是谱的时间窗口长度窗口太短则频率分辨率不够窗口太长则速度变化被平均掉二是多普勒谱的幅度归一化方式选择不当会导致个别强反射路径主导整个估计结果从而带来偏差。我在复现时通常会将STFT窗口设为0.5至1秒并且对多普勒谱做能量归一化后再进行SAP计算。4.4 位置估计从轨迹积分到全局优化有了速度序列V(t)位置P(t)可以通过积分得到P(t) P0 ∫ V(τ)dτ但积分有一个问题速度估计中的微小偏差会在积分中累积时间越长位置漂移越严重。Widar2.0解决这个问题的方法是把位置估计建模成一个全局优化问题而不是简单积分。具体而论的优化目标包括三项一是位置变化应当与估计的速度一致速度约束二是人体位置应当在房间的物理可行区域内空间约束三是在短时间窗口内的移动应当是平滑的平滑约束。这三项约束组合成一个代价函数通过求解最优化问题得到整段轨迹。这个思路等于把每帧定位和全局平滑结合起来避免了逐帧定位时常见的跳变问题也避免了纯积分时的漂移问题。我在自己的项目里试过用卡尔曼滤波替代这个全局优化短期效果不错但长时间运行后漂移仍然无法避免。Widar2.0这套全局优化的思路本质上是在告诉你单链路信息有限必须用时间维度上的连续性来弥补空间维度上的信息不足这个思想比具体的优化形式更有启发价值。5. 系统实现与实验评估中的细节5.1 硬件平台与数据采集流程Widar2.0的原型系统使用了两台配备Intel 5300网卡的迷你主机一台作为发射机连续发送数据包另一台作为接收机采集CSI。发射机使用一根天线接收机同样使用一根天线组成一条收发链路。数据采集使用标准的CSI工具例如Linux 802.11n CSI Tool或后续的AX200工具。采集时需要设置固定的发包速率论文中采用的是1000包/秒这个速率决定了多普勒谱的时间分辨率和最大可观测多普勒频率。以1000包/秒为例根据奈奎斯特采样定理可观测的多普勒频率范围是±500Hz。在2.4GHz频段下这意味着可观测的径向速度上限大约是62.5m/s远超过室内人体运动的速度。因此这个设置足够覆盖人体运动的所有常见场景。配置提示实际采集时网卡的带宽模式会影响CSI的子载波数量。20MHz模式下Intel 5300工具能输出30个子载波的CSI40MHz模式下也是30个。多普勒计算主要依赖同一子载波在时间维度上的相位变化因此子载波数量本身不会限制多普勒谱的质量但对频率偏移补偿的精度有一定影响。5.2 实验场景与性能指标论文在多个室内场景中验证了系统性能包括小型办公室、大型实验室、走廊等环境。性能指标主要是定位误差和追踪误差报告的中位误差在几十厘米量级。从使用者的角度来看我关心的更多是它在真实环境中的鲁棒性。比如人在走动时如果同时玩手机手臂的摆动幅度会发生变化这会不会影响多普勒特征的质量会议室内如果有其他人坐着不动他们的静态反射会不会干扰速度估计还有地面的材质、墙面的反射系数这些因素都会影响实际效果。我个人的复现经验是空旷环境下效果稳定但在家具多、金属物体多、人员杂的环境里误差会明显增大。这主要是因为多径环境下的静态反射成分难以被完全分离B-Fi能处理动态的相位污染但无法区分环境中的静态物体反射和人体运动反射前者在多普勒谱上表现为接近零频的强分量如果它们发生微弱的波动比如空调风吹动纸张、天花板灯具的微小振动就会被误判为缓慢移动的物体。5.3 可视化调试看多普勒谱是第一步我做无线感知实验有一个经验任何一个新环境、新场景开始实验之前先看多普勒谱的长相。一个干净的多普勒谱应该呈现以下特征静态背景对应的零频分量稳定且尖锐人体运动对应的非零频率分量呈现清晰的连续条纹。如果发现多普勒谱上有明显的斜线条纹通常是CFO补偿不彻底这是设备本身的频偏导致的不是人体运动的真实特征。如果发现谱的能量分布非常分散、几乎看不到清晰条纹很可能是收发链路之间的直射路径太强把微弱的反射信号全部压制了。这种情况下可以调整收发设备的相对位置避免直射路径完全遮挡反射路径或者在接收端使用方向性稍强的天线来压缩直射路径的增益。调试提示使用STFT提取多普勒谱时窗函数的选择会影响谱的泄漏程度。我通常选用汉明窗窗长设为256个CSI样本约0.256秒并做75%重叠这样既保证了频率分辨率约3.9Hz又保留了足够的时变细节。如果追求更高的速度分辨率可以加大窗长但代价是时间分辨率下降速度突变时的响应会变慢这个权衡需要根据实际运动速度来调整。6. 常见问题排查与复现经验6.1 常见问题速查表以下是我在理解、复现和二次开发Widar2.0过程中遇到的问题汇总按出现频率排序。问题现象可能原因排查建议多普勒谱中始终有倾斜条纹CFO或STO补偿不完全检查标定数据的残余相位线性趋势尝试更长的静态标定数据帧静止状态下多普勒谱出现虚假速度环境中的微弱振动被误判缩短STFT窗口长度以提高频率域灵敏度在速度估计中增加最小速度阈值速度估计频繁跳变SAP候选速度的离散化间隔过大缩小速度网格的间隔适当增加时间窗口长度轨迹漂移明显速度估计含有偏差检查多普勒谱是否被强静态分量主导尝试对速度做时间域低通滤波追踪丢帧人体速度过快导致多普勒频移超出范围提高发包速率降低载波频率如使用2.4GHz而非5GHz多人场景失效多普勒谱混叠无法分辨多目标将系统限制在单目标场景尝试结合多链路信息6.2 复现中最容易忽略的环节第一个容易忽略的环节是设备摆放的角度。很多人在复现时只关注收发天线之间的距离和位置忽视了两者的朝向。Wi-Fi天线的辐射方向图并非全向均匀的天线朝向会显著影响反射路径的接收增益。我实测中发现天线朝向与预期人体运动方向的夹角如果超过45度反射信号的信噪比会明显下降。建议在实验前先采集一段人在不同朝向行走的数据对比多普勒谱的清晰度再固定天线的朝角。第二个容易忽略的环节是CSV数据的时间戳对齐。使用CSI工具采集到的数据包在时间维度上不一定严格均匀尤其是当系统负载较高时数据包到达间隔会有抖动。如果直接对不等间隔的CSI序列做STFT会产生额外的频谱展宽。我通常在预处理阶段先做线性插值将CSI序列重采样到均匀的时间网格上再继续处理。第三个容易忽略的环节是静态背景的更新。B-Fi假设环境中的静态反射在短时间内是稳定的但对于长时间运行的场景温度变化、家具微动等都会导致静态背景缓慢变化。如果整个系统从启动到运行跨越较长时间建议每隔几分钟重新采集一段静态参考数据更新背景模型。我在实验室的长时间测试中发现超过10分钟后不更新背景的多普勒谱会出现零频漂移现象静止物体的多普勒分量慢慢从零频位置偏移到附近频点这就是背景变化导致的结果。6.3 一个完整的复现验证流程我推荐的复现路线如下可以帮你快速判断自己的实现是否正确。第一步搭建硬件环境并采集一段静态数据人不在房间内大约30秒。对这段数据做B-Fi处理并生成多普勒谱预期结果为零频处有一个稳定的强分量其他频点基本为噪声。如果不符合预期优先检查CFO/STO补偿逻辑。第二步采集一段人在固定位置原地摆动手臂的数据大约20秒。多普勒谱上应该出现周期性的频率分量变化频率与摆臂速度相关。这一步验证的是系统能否感知肢体运动产生的多普勒信息。第三步采集人在房间内沿直线行走的数据。多普勒谱上应该出现一条连续变化的频率轨迹从行走速度对应的频率值缓慢变化到反向速度对应的负频率值。如果这个轨迹不连续说明速度估计的时间分辨率不足或信号质量不够。第四步按论文的SAP算法做速度估计并将估计结果与实际行走速度对比。如果这一步偏差较大先不要急着进入位置估计阶段因为位置是从速度积分得到的速度不准则位置必然不准。第五步实现位置估计并画出行走轨迹与真实路径对比。如果轨迹形态正确但整体偏移通常是初始位置P0设置的问题如果轨迹形态扭曲通常是速度估计的偏差累积需要回到第四步排查。这五步走完你基本就能确定自己对Widar2.0的理解是否到位了。我自己做这个流程时每一步都踩过坑尤其是第三步和第四步之间的衔接。很多人速度估计的代码能跑通但画出来的多普勒轨迹和速度估计值对不上原因是STFT的时频网格和SAP的速度网格没有对齐一个用索引表示频率一个用物理速度表示频率两者之间差了波长换算这一步这个换算看似简单一旦弄错整个系统就会功亏一篑。7. 这个思路的扩展空间和后续影响Widar2.0提出的不仅仅是一个具体的追踪系统更是一套如何利用单条链路提取人体运动多普勒的方法论。这个概念层面的贡献比系统本身的性能指标更值得关注。单链路被动追踪是Wi-Fi感知里约束最苛刻的场景如果这个场景都能解决那么更宽松的场景多条链路、多天线自然就有了更丰富的可用信息。事实也是如此Widar2.0后续的很多工作在它的基础上引入多链路信息融合利用多条单链路结果的一致性来进一步降低误差。我在做多链路感知的实验时最常用的做法就是把每一条链路的Widar2.0估计结果作为输入再用几何约束去做融合这样比直接对CSI做联合处理要稳定得多。另一个值得一提的扩展方向是频段的迁移。Widar2.0在2.4GHz频段表现良好但5GHz频段有更高的多普勒灵敏度——同样的运动速度下5GHz频段产生的多普勒频移大约是2.4GHz的两倍。不过5GHz信号的穿透性较弱覆盖范围小在跨房间场景下性能会明显下降。如果做的是单房间内的高精细感知5GHz可能是更好的选择如果做的是跨房间的粗粒度追踪2.4GHz的覆盖优势更突出。Widar2.0的思想还可以迁移到毫米波频段。毫米波频段下人体的多普勒频移更大速度分辨率更高但静态杂波也更严重。在毫米波场景里Widar2.0的先干净化、再提取物理量、再空间映射三层方法论同样适用只是每一层的具体实现需要根据信号特性重新设计。我之前尝试过把B-Fi的框架用在毫米波雷达的数据上发现STO补偿那步可以省掉因为毫米波雷达本身是全相参系统但CFO补偿仍然需要因为雷达发射机和接收机的本振并不完全共享。最后想说的是一次实际体会。我在复现Widar2.0之前一直觉得被动追踪是一个已经被Wi-Fi感知领域解决得很成熟的问题直到我真正动手做了一遍才发现从CSI原始数据到干净的多普勒谱中间每一步都藏着大量工程细节。一篇论文的价值往往不在于它最后报告的那几个精度数字而在于它为了得到这些数字铺了哪些路、避了哪些坑。Widar2.0就是这种类型的代表作它把从一条Wi-Fi链路里看穿一个人的运动这个大问题拆成了一系列可以单独解决、单独验证的小问题。这个拆解问题的方式才是它留给后来者最珍贵的东西。

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

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

免费获取报价 →
↑