2、WiFi定位基础:从信号到位置

做定位这行,WiFi 是绕不开的基础。我最早接触室内定位时,第一个项目就是拿 WiFi 练手。说实话,那时候觉得挺简单——不就是测个信号强度嘛。后来踩了不少坑,才明白这里面的门道有多深。

这一节,咱们把 WiFi 定位的底子打扎实。从信号特性讲起,再到两种主流定位原理,最后聊聊为什么 WiFi 定位精度上不去。

2.1 WiFi 信号特性:RSSI 与 CSI

WiFi 信号在空气中传播,会衰减、反射、绕射。我们能拿到的原始信息,主要有两种:RSSI 和 CSI。

2.1.1 RSSI——信号强度指示

RSSI,全称 Received Signal Strength Indicator。说白了,就是接收端感受到的信号强弱。数值越大,信号越强。

大部分 WiFi 芯片都直接提供 RSSI。你手机连 WiFi 时看到的信号格数,底层就是 RSSI 映射出来的。

RSSI 的特点:

  • 容易获取——几乎所有 WiFi 设备都支持
  • 粗粒度——通常只有 0~100 左右的整数值
  • 波动大——人体遮挡、开门关门,都能让 RSSI 跳几个 dB
  • 多径敏感——它反映的是多条路径叠加后的总能量,分不清哪条是直射

我在项目中遇到过最头疼的事:同一个位置,上午测的 RSSI 和下午测的能差 10 个 dB。后来才发现,是隔壁工位的人来了又走了,改变了环境。嗯,这就是 RSSI 的「软肋」。

2.1.2 CSI——信道状态信息

CSI 比 RSSI 精细得多。它描述的是信号在每条子载波上的幅度和相位。802.11n 以后,WiFi 用 OFDM 调制,一个信道分成几十个甚至上百个子载波。CSI 就是每个子载波的「体检报告」。

你想想看,RSSI 只是一个数字,CSI 却是一组复数数组。信息量完全不在一个量级。

对比项 RSSI CSI
信息粒度 一个粗值 多子载波的幅度+相位
多径分辨 无法分辨 可分辨多径成分
获取难度 简单,API 直接读 需要专用驱动/硬件
稳定性 差,波动大 相对稳定
应用场景 粗定位、指纹库 精细定位、人体感知

我的建议:如果只是做区域级定位(比如判断人在哪个房间),RSSI 够用了。但要做米级甚至亚米级定位,CSI 是更好的选择。不过 CSI 的获取门槛高,Intel 5300、Atheros 9k 系列网卡是早期常用的实验平台。

2.2 三角定位原理

三角定位,也叫几何定位。思路很直接:已知几个 AP 的位置,测出终端到每个 AP 的距离,然后画圆求交点。

距离怎么测?用信号传播模型。自由空间里,信号强度随距离增加而衰减。公式长这样:

RSSI(d) = RSSI(d₀) - 10·n·log₁₀(d/d₀) + X

其中 n 是路径损耗指数(室内通常 2~4),X 是随机噪声。知道 RSSI,就能反推出距离 d。

但这里有个大坑——室内环境根本不是自由空间。信号穿墙、绕人、反射,路径损耗模型很难准确。我做过一次实验:同一个 AP,在走廊尽头测的 RSSI 是 -55 dBm,拐个弯到隔壁房间,直接掉到 -75 dBm。按模型算,距离差了 3 倍多。

注意:三角定位在室内效果很差。原因有三:

  1. RSSI 测距误差大,动不动 3~5 米
  2. AP 位置需要精确标定,部署成本高
  3. 多径效应让信号不是直线传播

我曾经在一个 20m×30m 的仓库里试过三角定位,误差平均 8 米。后来果断放弃了。

2.3 指纹定位原理

指纹定位的思路完全不同。它不依赖传播模型,而是把位置和信号特征「绑定」起来。

分两步走:

  • 离线阶段:在目标区域布设参考点,每个点采集多个 AP 的 RSSI 向量,存入指纹库。
  • 在线阶段:终端实时采集 RSSI 向量,去指纹库里找最匹配的那个点。

匹配算法有很多种。最简单的叫最近邻(NN),算欧氏距离:

d = sqrt( Σ (RSSI_online[i] - RSSI_db[i])² )

选距离最小的参考点作为估计位置。更高级的用 KNN、加权 KNN,甚至机器学习。

指纹定位的好处很明显:它绕过了复杂的信道建模。坏处也明显:建库费时费力,环境一变就得重采。

指纹定位的精度瓶颈:

  • 参考点密度:点越密精度越高,但采集成本也越高
  • RSSI 时变性:同一位置不同时间 RSSI 可能不同
  • 设备差异:不同手机测同一个 AP,RSSI 能差 5~10 dB

我记得有一次帮客户做商场定位。指纹库采了 2000 个点,花了整整两天。结果上线后,商场换了批 AP,指纹库全废了。从那以后,我特别关注指纹库的维护成本。

2.4 WiFi 定位的精度瓶颈

说了这么多,WiFi 定位到底能做到多准?

坦白讲,纯 WiFi 定位,商用场景下 3~5 米是常态。实验室里能到 1~2 米,但那是理想环境。为什么上不去?

核心原因有这几个:

  1. 信号波动:RSSI 受环境影响太大。人走动、门开关、甚至天气变化,都能让信号跳变。
  2. 多径效应:室内信号到处反射,接收端收到的是多条路径的叠加。RSSI 无法区分直射和反射,导致测距偏差。
  3. AP 密度:WiFi AP 不是为定位设计的。覆盖范围大,但定位需要的密集部署很难实现。
  4. 设备异构:不同手机、不同网卡,RSSI 读数不一致。同一个位置,iPhone 和 Android 能差好几个 dB。

避坑指南:如果你要做 WiFi 定位,别指望它能替代 UWB 或激光。WiFi 的优势在于普适性——几乎每个室内都有 WiFi。用它做区域级定位(判断在哪个房间、哪片区域)是合理的。做米级精度的连续定位,建议考虑融合方案。

下面这张图,把 WiFi 定位的核心知识点串起来了:

WiFi 定位知识体系 WiFi 信号 RSSI(信号强度) CSI(信道状态) 三角定位 指纹定位 传播模型 精度瓶颈:信号波动 | 多径效应 | AP密度不足 | 设备异构

总结一下:WiFi 定位的精度瓶颈,本质上是信号本身的局限。RSSI 太粗,CSI 虽好但难获取。三角定位在室内水土不服,指纹定位又受制于建库和维护成本。