手机定位原理入门 · 讲义与学习笔记
用大白话讲清GPS、基站、Wi-Fi三种定位技术原理及手机如何融合它们确定你的位置
整理:问学·科技
第 1 关 · 定位世界的通用语言
理解定位的根问题与「测距+多球相交」的通用数学原理,为后续三种具体技术打底。
定位的本质:从方向感到精确坐标
你有没有这样的经历:在商场里告诉朋友「我在电梯旁边」,结果他找半天找不到——但如果你说「我在商场3楼西区ZARA门口」,他一下就找过来了。
这两种描述方式,正好对应了定位这件事里最核心的两种思路:**方向感**和**精确坐标**。本节我们要搞清楚的,就是为什么手机需要的不是前者、而是后者。
人天生靠「方向感」定位
我们人类找位置,本能是用相对描述——「我前面是图书馆」「往南走200米」「在三岔路口左拐」。这套方法靠的是:
- 周围熟悉的参照物
- 东南西北的方位
- 大致的远近估计
它能解决日常问题,但有三个硬伤:
- **依赖参照物**:换个陌生地方立刻失效
- **误差大**:「200米」到底是150还是300?说的人自己心里也没底
- **机器听不懂**:你跟地图App说「我前面是图书馆」,App完全无法处理这句话
机器需要的是「精确坐标」
手机、地图、滴滴、外卖App……所有跟位置打交道的程序,骨子里都需要一个东西:**三个数字**。这就是位置三要素:
- **经度(Longitude)**:你距离本初子午线(穿过英国格林尼治天文台的那条南北线)往东或往西多少度
- **纬度(Latitude)**:你距离赤道往北或往南多少度
- **海拔(Altitude)**:你距离海平面在垂直方向上多高
合起来,全球地表和空中的任何一点(包括你此刻站着的地方)都对应唯一一组数字。比如北京天安门广场的坐标大致是:
> 39.9054°N,116.3976°E,海拔约44米
「N」是北纬(North),「E」是东经(East)。手机屏幕上那个闪烁的小蓝点,背后其实就是这一组不断刷新的三个数字。
坐标为什么比方向感更值钱
你可能会反问:导航App不是也会告诉我「前方500米右转」吗?这听起来明明是方向感啊?
这里有个关键转换:地图App**先拿到你的精确坐标**,把坐标对到地图上某条路、某两个路口之间,再生成「前方500米右转」这种人类能听懂的方向感指令。换句话说——
> **方向感是给人看的,坐标是给机器用的。** 机器先有坐标,才能反过来翻译成方向感。
这也解释了为什么手机必须做定位这件吃力不讨好的事:
- **打车**:司机要的不是「他在马路对面」,而是「他在XX路XX号门口」这种门牌级精度
- **外卖**:骑手要知道你精确到楼栋的坐标,否则送错单元楼你就要下楼走两步
- **导航**:路线规划本质上是「从坐标A到坐标B的最优路径」
- **找朋友**:微信共享位置发出去的就是一组坐标,对方点开就能直接看到你在哪
如果手机只能告诉你「我大概在朝阳区」,今天几乎所有的位置服务都没法工作。
两种思路的关系
flowchart LR Q[我在哪?] --> R[方向感<br/>相对描述] Q --> C[精确坐标<br/>绝对地址] R --> R1[我在图书馆南门<br/>往北走100米] C --> C1[39.9054°N<br/>116.3976°E<br/>44米] R1 --> R2[人和人能听懂<br/>但模糊] C1 --> C2[机器可直接处理<br/>全球唯一]
要点
定位的根本任务,是把「我在哪」这个模糊问题,转化成一组**全球唯一的三个数字**(经度、纬度、海拔)。方向感只是给人类看的翻译结果——所有的导航、打车、找位置服务,底层都依赖这一组坐标在运转。
理解了这一点,后面三节我们就可以专心去拆解:手机到底是怎么**算出**这一组三个数字的。
测距的多种基本思路:从教学二分到真实世界
测距的两种基本思路:从生活直觉到工程实践
上一节我们搞清楚了,定位最终要的是「一组精确的三个数字」(经度、纬度、海拔)。但手机并不知道自己在哪——它必须**先测出自己和某个已知位置之间的距离**,才有资格把球画出来。
所以本节的核心问题就一个:**怎么测距离?**
两种直觉方法:听回声 vs 听音量
人类几千年前就会两招:
**第一招:听回声**。你在山谷里大喊一声,过一会儿听到回声。如果你能精确知道声音往返花了多少秒,乘以音速再除以 2,就是山的距离。这招的本质是「**用时间换距离**」——信号跑得越快越准。
**第二招:听音量**。朋友拿音响越走越远,你感觉声音越来越小,凭着对音响音量的记忆粗略估计他走了多远。这招的本质是「**用信号强度换距离**」——信号越远越弱。
定位系统也基本上就在这两招之间做文章:
| 思路 | 工程化版本 | 测的物理量 | 代表应用 | |------|-----------|-----------|---------| | 听回声 | **电磁波飞行时间 ToF** | 时间 | GPS、北斗、5G 精确定位 | | 听音量 | **信号强度 RSSI** | 功率 | 传统 Wi-Fi、基站粗定位 |
**ToF(Time of Flight)**:电磁波在真空中的速度是光速 c ≈ 30 万 km/s。GPS 卫星在 2 万公里高空发信号,手机 0.067 秒后收到,距离 = 30 万 × 0.067 ≈ 2 万公里——刚好对上。**距离 = 速度 × 时间**。
**RSSI(Received Signal Strength Indicator)**:信号在空间里按平方反比衰减,距离翻倍,信号弱到只剩 1/4。所以手机可以通过收到的信号强度反推距离。
但这只是教学的「简化二分」
如果你以为定位系统非此即彼,就想简单了。上面两种方法各有一个硬伤:
- **ToF 要求时钟太精准**。GPS 卫星上装的是原子钟,1 万年才误差 1 秒;但你手机没有原子钟啊!要是手机自己都不知道「现在几点」,0.067 秒这个时差根本量不准。
- **信号强度受干扰太严重**。穿一面墙、旁边有金属反射、甚至下个雨湿度变化,都会让数据失真,基本是个玄学。
工程上的解法是另起炉灶,发展出几个「不直接测时间、也不直接测强度」的衍生方法,每一种都是为了绕开上面两种方法的某个痛点:
- **TDOA(到达时间差,Time Difference of Arrival)**:你发一个信号,三个基站同时在听。基站之间用光纤连着,**互相之间**的时钟是同步的。它们只需要看信号到不同基站的**微小时间差**,就能画出双曲线定位。这招巧妙地避开了「手机时钟不准」——因为你根本不需要知道手机几点发的。
- **AoA(到达角度,Angle of Arrival)**:不测距离,测信号**从哪个方向来**。基站用一排天线(阵列天线),不同天线收到信号的时间/相位差就能算出信号入射角度。两个基站画两条射线,交点就是你。5G 基站里就在用这招。
- **PDOA(到达相位差,Phase Difference of Arrival)**:和 AoA 类似,但用的是电磁波的「相位」(波峰波谷的位置),分辨率比时间差还高,能测出厘米级差别。Wi-Fi 802.11mc、BLE 5.1 都在用。
- **RTT(往返时间,Round Trip Time)**:手机发个信号给基站,基站立刻回一个,手机量「一来一回」花了几秒。因为是**手机自己计时、自己收信号**,根本不存在两台钟对不上的问题。Wi-Fi FTM 和 5G 都在用。
测距方法的全家福
flowchart TD R[测距方法] --> T[教学二分] T --> T1[ToF<br/>电磁波飞行时间] T --> T2[RSSI<br/>信号强度] R --> D[真实系统的衍生方法] D --> D1[TDOA<br/>到达时间差] D --> D2[AoA<br/>到达角度] D --> D3[PDOA<br/>到达相位差] D --> D4[RTT<br/>往返时间] T1 -.需要纳秒级时钟.-> P1[痛点1:手机没原子钟] T2 -.易受遮挡.-> P2[痛点2:穿墙就失真] D1 -.基站间同步.-> S1[绕开痛点1] D2 -.不测距离只测角度.-> S1 D3 -.更高分辨率.-> S1 D4 -.手机自计时.-> S1
为什么这件事对你重要
作为产品人,你不需要背这些缩写的定义,但你需要一个**心智模型**:当看到「我们用 TDOA 提升定位精度」这种技术新闻时,心里要清楚——
- 测距不是只有「时间」「强度」两条路
- 真实系统是**多种方法混着用**的,GPS 不只用卫星,Wi-Fi 也不只看信号强度
- 厂商选哪种方法,是在**精度、功耗、硬件成本、部署难度**之间做权衡
到下一节我们就会看到——不管用上面哪种方法测出距离,最后都要把多个距离画成球,球面相交的位置就是答案。
要点
测距看起来是「时间或强度二选一」,但真实定位系统至少有 5-6 种方法(ToF、TDOA、AoA、PDOA、RTT 等),每一种都是为了绕开另一种的工程痛点。理解这一点,你再看任何定位技术新闻都不会被术语唬住。
三球相交:用三个距离解出位置
三球相交:用三个距离解出位置
上一节我们搞清楚了,手机可以用 ToF、TDOA、AoA 等各种方法「测出自己和某个已知位置之间的距离」。但这离最终定位还差最后一步——**知道距离之后,怎么把位置算出来?**
答案出奇地简单:每个距离会画出一个「球」,三个球的交点就是你。
一个距离 = 一个球壳
假设你测出自己和卫星 S1 的距离是 2 万公里。那么你的位置**所有可能性**,就是以 S1 为圆心、半径 2 万公里的那个球壳上的某一点——室内、室外、高空、地下,只要是离 S1 正好 2 万公里的地方,都可能是你。
几何上,在三维空间里,满足「到某点距离等于定值」的所有位置构成一个**球面**(只有表面那层,没有内部)。一个距离就锁住一个球面。
两个距离 = 一个圆
再加上第二颗卫星 S2,距离 1.5 万公里。同样的道理,你的位置必须在以 S2 为圆心、半径 1.5 万公里的球面上。
你的真实位置必须**同时满足这两个条件**——既在球 S1 上,又在球 S2 上。两个球面相交,得到的几何图形是一个**圆**(一维曲线,不是平面)。这条圆上的任何一点到 S1 和 S2 的距离都符合要求。
到这里你还有无穷多个候选位置。
三个距离 = 两个点(通常其中一个舍掉)
再加第三颗卫星 S3,距离 1.8 万公里。三个球面相交,几何上最多交出**两个点**。这两个点关于 S1-S2 连线所在平面对称(镜面反射出来的)。
为什么不是唯一的点?因为数学上三个球的方程组,平方之后会引入一个伪根。但在实际定位中,这两个点通常一个在地表附近、一个在太空里——我们通过「海拔不为负、或者多测几个时刻排除」的方式,把太空那个舍掉,留下的就是你在地球表面的位置。
flowchart LR
subgraph 几何递进
A1[1 个距离<br/>球面 无数点] --> A2[2 个距离<br/>圆 一维曲线]
A2 --> A3[3 个距离<br/>最多 2 个点]
end
S1[卫星 S1<br/>已知位置] -.距离 d1.-> A1
S2[卫星 S2<br/>已知位置] -.距离 d2.-> A2
S3[卫星 S3<br/>已知位置] -.距离 d3.-> A3
A3 --> P[你的位置<br/>通常唯一]
数字算一遍就明白
假设三颗卫星的已知位置在三维空间里是这样的(数字是简化过的坐标):
- S1 = (0, 0, 0)
- S2 = (10, 0, 0)
- S3 = (0, 10, 0)
你测出 d1 = √50,d2 = √50,d3 = √50(单位都是 km)。
解出来位置 (x, y, z) 必须同时满足:
- x² + y² + z² = 50
- (x−10)² + y² + z² = 50
- x² + (y−10)² + z² = 50
第一、二式相减:−20x + 100 = 0 → x = 5 第一、三式相减:−20y + 100 = 0 → y = 5 代回第一式:25 + 25 + z² = 50 → z² = 0 → z = 0
唯一解 (5, 5, 0)——这是完美对称的特殊情况。一般情况会得到 z = ±h 两个点,但地球表面那一侧留下,另一个在地下/太空。
这个思路为什么重要
GPS、北斗、5G 精确定位、UWB 室内定位……**不管哪种定位技术,核心都是同一个数学原理**:测出你到几个已知点的距离,然后做多球相交。这个方法有个学名叫 **trilateration**(三边测量 / 三球相交)。
区别只在两件事:
- **已知点是谁**(卫星?基站?Wi-Fi 热点?)
- **距离怎么测**(ToF?TDOA?RSSI?)
这就像不同菜系做菜——川菜、粤菜、淮扬菜看着不一样,但底层都是「火候 + 调味 + 时间」三件套。你先把这个三件套理解了,下一关看 GPS、看基站、看 Wi-Fi,会发现它们其实是同一种思路在不同食材上的应用。
要点
每测出一个到已知点的距离,就把你「锁」在一个球面上;两个球面相交是一条圆,三个球面相交最多剩两个点(实际中再排除一个),这就是 trilateration 的全部几何直觉。
时钟偏差:所有 ToF 定位系统的隐含第四未知量
时钟偏差:所有 ToF 定位系统的隐含第四未知量
上一节我们说「三个距离就能算出位置」——这话有个隐藏前提:**测距用的时间必须准确**。但现实里,你的手机时钟和卫星时钟不是同步的。这个偏差会让所有测距都偏,而且**偏的方向完全相同**——属于系统误差。一秒钟差一点点,所有距离都错一点点。
接力赛秒表的类比
想象你和三个朋友在操场上,三个人分别站在三个已知位置。每个朋友喊一声「现在」,你按下秒表,等回声到了再按停。秒表读数 × 声速 = 你和那个朋友的距离。
如果秒表是准的,三个朋友 + 三个距离 → 三个方程 → 你的 (x, y, z) 唯一确定——上一节就是这个逻辑。
但如果你的秒表每跑 1 秒其实只走了 0.9999 秒(偏慢 0.0001 秒)呢?这 0.0001 秒会**均匀地**污染你**每一条**距离测量——因为每条测量都要靠你的秒表。声速乘以一个偏慢的时间,三个距离全都偏小一点。
**麻烦来了**:你现在有三个方程,但**未知数变成了四个**——坐标 (x, y, z) 三个 + 秒表偏差 δ 一个。三个方程解四个未知数,解不出来。
ToF 测距时,这个偏差从哪冒出来
上一节学的 ToF 工作流程是:信号源(比如卫星)在 t=0 发一束电磁波,接收端(手机)在 t=T 时收到,用 d = c × T 算出距离。
但这里有个细节:**T 是用手机的时钟量的,t=0 是用卫星的时钟刻的**。这两个时钟之间存在一个固定偏差 δ(虽然很小,但不等于零):
- 手机测到的时间 = 真实飞行时间 + δ
- 手机算出的距离 = c × (真实时间 + δ) = 真实距离 + c × δ
注意最后那项 c × δ 是个**固定的偏移量**——它对每颗卫星都一样,**你没法把它和真实距离区分开**。
三球变「三方程四未知」
回到三维定位的方程组。原本是三个方程三个未知数 (x, y, z):
(x − x₁)² + (y − y₁)² + (z − z₁)² = d₁² (x − x₂)² + (y − y₂)² + (z − z₂)² = d₂² (x − x₃)² + (y − y₃)² + (z − z₃)² = d₃²
但因为 δ 的存在,你测的 d_i 其实等于「真实距离 + c·δ」。三个方程、四个未知数 (x, y, z, δ),**欠定**——数学上解不出唯一解。
flowchart TD
subgraph 理想情况
A1[3 个方程]
A2[3 个未知数 x, y, z]
A3[唯一解]
A1 --> A2 --> A3
end
subgraph 现实情况
B1[3 个方程]
B2[4 个未知数 x, y, z, δ]
B3[欠定 无穷解]
B1 --> B2 --> B3
end
subgraph 解法
C1[4 个方程]
C2[4 个未知数]
C3[唯一解 + 顺带算出 δ]
C1 --> C2 --> C3
end
多一个信号源 = 多一个方程 = 救星
再加一个信号源(第四颗卫星、第四个基站),方程变成四个,未知数还是 (x, y, z, δ) 四个——**刚好**。不仅能算出位置,还能顺带把 δ 也解出来,相当于**顺便校准了你的手机时钟**。
这就是 GPS 定位至少需要 **4 颗卫星**而不是 3 颗的真正原因——不是因为覆盖范围更广,不是因为信号强度更好,而是数学上**必须多一个方程来消除那个隐含的时钟偏差**。
数字感受一下这个偏差的量级
0.0001 秒听起来小得可以忽略。但光速是 30 万公里/秒:
> 0.0001 × 300,000 = **30 公里**
也就是说,**手机时钟只要偏 0.0001 秒,定位误差就有 30 公里**——足以从北京漂到天津。手机用的石英钟和卫星上的原子钟之间的偏差,量级就是这么可观。这也解释了为什么 GPS 卫星必须装原子钟(精度纳秒级,对应距离误差几米以内),而手机用便宜石英钟——只要卫星时钟够准、手机能算出自己的 δ,定位就能成立。
这个原理不只 GPS 才有
任何用 ToF 测距的定位系统,都会被这个时钟偏差问题咬到:
- **GPS / 北斗 / GLONASS**:靠第 4 颗卫星解 δ
- **UWB 室内定位**:靠多一个基站解 δ
- **5G 精准 ToF 定位**:原理上同样需要多一组测量
这也是为什么业内还有别的定位思路(比如 TDOA)——它**绕开 δ** 这个变量,用「两路信号到达的时间差」来定位,根本不需要知道绝对时间。这部分会在后续讲混合定位时再展开。
要点
ToF 测距的隐含第四未知量是「接收机与信号源之间的时钟偏差 δ」,它会被原样加到每一个距离测量上;为了解出 δ,三维定位必须比几何维度多一个方程——这就是为什么 GPS 至少要 4 颗卫星,而不是 3 颗。
学习笔记
定位与测距:从方向感到精确坐标
一、定位的本质:方向感 vs 精确坐标
人类的方向感定位
- 用相对描述:参照物、东南西北、大致远近
- 三个硬伤:
- 依赖参照物,换个陌生地方立刻失效
- 误差大,「200 米」到底是 150 还是 300 心里没底
- 机器听不懂,地图 App 无法处理「我前面是图书馆」
机器需要的精确坐标:位置三要素
- 经度(Longitude):距本初子午线(穿过英国格林尼治天文台)东/西多少度
- 纬度(Latitude):距赤道北/南多少度
- 海拔(Altitude):距海平面垂直方向多高
- 三个数字全球唯一对应一点
- 例:北京天安门约 39.9054°N,116.3976°E,海拔约 44 米(N 北纬,E 东经)
核心关系
- 方向感是给人看的翻译结果
- 坐标是给机器用的底层数据
- 地图 App 先拿到精确坐标,再翻译成「前方 500 米右转」这种人类指令
- 打车、外卖、导航、共享位置等所有位置服务,底层都依赖这一组坐标
二、测距的基本思路
两种直觉方法
| 思路 | 工程化版本 | 测的物理量 | 代表应用 | |------|-----------|-----------|---------| | 听回声 | 电磁波飞行时间 ToF | 时间 | GPS、北斗、5G 精确定位 | | 听音量 | 信号强度 RSSI | 功率 | 传统 Wi-Fi、基站粗定位 |
- ToF:本质是「用时间换距离」,距离 = 速度 × 时间;电磁波真空中速度 c ≈ 30 万 km/s
- RSSI:本质是「用信号强度换距离」;信号在空间里按平方反比衰减,距离翻倍信号弱到 1/4
两种方法各自的硬伤
- ToF:要求时钟极精准。GPS 卫星用原子钟,1 万年才误差 1 秒;手机没有原子钟
- RSSI:受干扰严重。穿墙、金属反射、湿度变化都会让数据失真
工程上的衍生方法(不直接测时间/强度,绕开痛点)
- TDOA(到达时间差):三个基站之间时钟同步,只看信号到不同基站的微小时间差,避开手机时钟不准
- AoA(到达角度):用阵列天线不同天线收到信号的时间/相位差算出信号入射方向,两条射线交点定位;5G 基站在用
- PDOA(到达相位差):用电磁波相位,分辨率比时间差高,能测出厘米级差别;Wi-Fi 802.11mc、BLE 5.1 都在用
- RTT(往返时间):手机发信号给基站,基站立刻回一个,手机自己计一来一回的时间,绕开两端时钟同步问题;Wi-Fi FTM 和 5G 都在用
三、三球相交定位
几何递进
- 1 个距离 → 1 个球面(无数候选点;满足「到某点距离等于定值」的所有位置构成球面)
- 2 个距离 → 1 个圆(两个球面相交得一维曲线)
- 3 个距离 → 最多 2 个点(三个球面相交,关于某平面对称)
- 实际中:通过「海拔不为负」或「多测几个时刻」把太空那个点舍掉
数学原理
- 学名:trilateration(三边测量 / 三球相交)
- 不管哪种定位技术(GPS、北斗、5G 精确定位、UWB 室内定位),核心都是同一个原理
- 区别只在两件事:已知点是谁(卫星/基站/Wi-Fi 热点)、距离怎么测
四、时钟偏差:ToF 定位的隐含第四未知量
问题来源
- ToF 公式 d = c × T:T 用手机时钟量,发射时刻 t=0 用卫星时钟刻
- 两钟之间存在固定偏差 δ(很小但不为零)
- 手机测到的时间 = 真实飞行时间 + δ
- 算出的距离 = 真实距离 + c × δ(固定偏移量,对每颗卫星都一样,方向相同的系统误差)
- δ 均匀污染每一条距离测量
方程组变化
- 理想情况:3 个方程、3 个未知数 (x, y, z) → 唯一解
- 现实情况:3 个方程、4 个未知数 (x, y, z, δ) → 欠定,无穷解
解决方法
- 加 1 个信号源(第四颗卫星/第四个基站)
- 方程变 4 个,未知数仍 4 个 → 刚好可解
- 顺带把 δ 也解出来,相当于顺便校准手机时钟
- 这就是 GPS 定位至少需要 4 颗卫星(不是 3 颗)的真正原因:数学上必须多一个方程来消除隐含的时钟偏差
第 2 关 · GPS定位原理:天空中的 30 颗灯塔
能向他人用大白话讲清手机如何从太空中的卫星获得自身坐标,并理解为什么至少需要 4 颗卫星。
GPS 系统的三大部分与星座规模
GPS 系统的三大部分与星座规模
想象一下:地球上空 2 万公里的地方,有一群不眨眼的「太空灯塔」,24 小时不停朝地面喊「我在这里、现在几点了」。手机只要能同时听到三四座灯塔的声音,就能算出自己站在地球上的哪一点。这一整套「灯塔系统」就是 GPS。
GPS 不只是天上的卫星,它其实由**三大部分**组成,缺一不可:
一、太空段:卫星星座
目前 GPS 在轨大约 **31 颗工作卫星**(比最初设计的 24 颗多,备用的也开着),均匀分布在 **6 个轨道面**上,每个轨道 4-5 颗,轨道高度约 **2 万公里**,绕地球一圈约 12 小时(这种高度叫「中轨」MEO,介于低轨导航卫星和地球同步卫星之间)。
每颗卫星都背着一台**原子钟**(误差几十亿年才差 1 秒的那种),持续广播两件事:
- **自己的位置**(星历,告诉你它此刻在轨道上哪一点)
- **当前时间戳**(发信号那一刻的精确时间)
二、地面段:监控网络
天上卫星的原子钟会漂,轨道也会被日月引力慢慢拽偏,所以地面上有一张维护网:
- **1 个主控站**(在美国科罗拉多)算轨道和钟差
- **若干监测站**(全球分布)持续盯着每颗卫星
- **注入站**把修正后的「星历 + 钟差」上传给卫星,再由卫星转播给手机
可以理解为:地面段是 GPS 的「校准后台」,没有它,卫星报的时间和位置会越来越不准。
三、用户段:你手机里的 GPS 芯片
手机主板上那颗指甲盖大小的芯片就是用户段。它**不发射信号**,只**被动接收**天上卫星广播的无线电(这就是为什么 GPS 定位不耗手机 SIM 卡的流量,原理跟收音机收电台一样)。芯片拿到多颗卫星的「时间戳 + 位置」后,用下一节要讲的算法算出自己的坐标。
flowchart LR
A[太空段<br/>~31 颗中轨卫星<br/>原子钟 + 星历广播] -->|无线电信号| C[用户段<br/>手机 GPS 芯片<br/>被动接收]
B[地面段<br/>主控站 + 监测站 + 注入站] -.修正数据与轨道.-> A
现实是:你手机看到的卫星比 24 颗多得多
GPS 是美国 90 年代建成的老系统。今天天上其实有**四大全球卫星导航系统**并存:
- **GPS**(美国,约 31 颗)
- **北斗 BeiDou**(中国,2020 年全球组网完成,约 30+ 颗)
- **GLONASS**(俄罗斯,约 24 颗)
- **Galileo**(欧盟,约 30 颗)
现代手机芯片(2017 年以后出的)基本都是**多系统同时接收**的,同一时刻抬头能看见 **40 颗以上**卫星完全正常。芯片会自动挑信号最好的几颗一起用,所以城市楼群间也不至于一颗都搜不到。
这也解释了为什么我们平时说「GPS 定位」其实是个口语——准确说,手机用的是 **GNSS**(Global Navigation Satellite System,全球导航卫星系统)多星座联合定位,里面有 GPS,也有中国北斗的份。
**要点:** GPS 是「太空卫星 + 地面校准站 + 手机接收芯片」三件套;今天天上同时跑着美、中、俄、欧四套系统共 100+ 颗卫星,现代手机一次性都能收,可见卫星数远超 24 颗。
测距原理:电磁波飞行时间与原子钟
测距原理:电磁波飞行时间与原子钟
上一块说到天上每颗 GPS 卫星都在不停广播自己的位置和时间戳。问题来了:手机收到这些信号之后,怎么知道卫星离自己有多远?答案藏在一个中学物理公式里:**距离 = 速度 × 时间**。
起点:电磁波以光速飞行
GPS 卫星和手机之间的「通讯」,本质上就是一道**电磁波**(无线电)在真空中飞——速度就是光速,**约每秒 30 万公里**(准确值 299,792,458 m/s,是自然界少数被精确定义的常量之一)。卫星离地面约 2 万公里,所以一道信号从卫星飞到手机,大约只需要 **67 毫秒**(千分之 67 秒)。
如果手机能准确测出「信号飞了多久」,乘上光速,就得到了与那颗卫星的距离。
残酷的精度要求
但魔鬼藏在细节里。67 毫秒听起来很小,我们来算一笔账:
flowchart LR
A[卫星在 t₀ 时刻<br/>发出时间戳] -->|电磁波<br/>以光速飞行| B[手机在 t₁ 时刻<br/>收到信号]
B --> C[飞行时间 Δt = t₁ - t₀]
C --> D[距离 d = c × Δt]
- 飞行时间测量**误差 1 毫秒** → 距离误差 **300 公里**(地球从北京到上海都不止)
- 误差 **1 微秒**(千分之一毫秒)→ 距离误差 **300 米**(可能把你从这条街挪到下一条街)
- 误差 **1 纳秒**(十亿分之一秒)→ 距离误差 **30 厘米**(约一脚距离)
换句话说,要把定位精度做到「能告诉你站在哪个门牌号」这种程度(误差几米),**卫星和手机之间的时间同步必须精确到几十纳秒**——比眨眼快几十亿倍。
为什么必须用原子钟
日常生活中的钟表根本扛不住这种要求:
- **机械表 / 石英表**:每天误差几秒;一个月能差几分钟
- **手机里的时钟**:本质也是石英晶体,误差类似
- **GPS 卫星上的原子钟**:以铷或铯原子的振荡周期计时,**几千万年到几亿年才差 1 秒**
这不是奢侈,是刚需。如果卫星的钟慢 1 微秒,地面上所有用它的定位都会偏 300 米。换算一下极端点:**1 秒钟的时间误差,会把定位结果错出整整 30 万公里**——直接把你甩到月球附近。
所以 GPS 卫星上每颗都背着**不止一台原子钟**(通常 3-4 台互为备份),单台价值上百万美元。整个 GPS 系统能运作,前提就是这些天价钟表几十年如一日地精准。
实际的玩法
流程其实很直接:
- **卫星**在信号里写一个时间戳:「我是 XX 号卫星,我在 t₁ 时刻发出这条消息」
- **手机**在收到信号的瞬间,记下自己的本地时间 t₂
- 飞行时间 = t₂ - t₁,乘以光速 = 与该卫星的距离
听起来天经地义。但你可能已经发现一个 bug:手机记的 t₂ 准吗?手机里的石英钟跟卫星的原子钟根本不在一个量级,差几微秒甚至几毫秒太正常了。
这个「手机自己的钟不准」的问题,正是下一节要解决的核心——它就是「为什么至少要 4 颗卫星」的关键原因。
**要点:** GPS 测距用的是「距离 = 光速 × 飞行时间」,但电磁波太快,飞行时间必须精确到几十纳秒(对应距离误差才几米),所以卫星必须装原子钟来保证发出的时间戳足够准。
第四颗卫星的作用:三维坐标与时间同步
上一节我们留下一个 bug:手机测距离时,记下的「收到时间」t₂ 是用手机自己那块石英钟读的,可那块钟每天能飘几毫秒,跟卫星的原子钟根本不在一个量级。如果直接拿它算距离,定位会偏几百米甚至更远。怎么修这个 bug?答案是——**多看一颗卫星**。
一道数学题:到底几个未知数
定位在数学上是个解方程的过程。先把上一节的核心再摆一遍:
- 已知:每颗卫星(xₛ, yₛ, zₛ)的位置,信号发出的时间戳 t₁
- 未知:**手机的(x, y, z)**
- 方程:手机与每颗卫星的距离 = c × (手机本地时间 t₂ - t₁)
直觉上,三维空间三个未知数,三颗卫星三个方程,正好解出来。但**等等**——手机那个 t₂ 有问题:手机时钟和原子钟之间有个**未知的偏差 δt**(可能正,可能负,可能几微秒也可能几十微秒),你完全不知道它多大。
所以真正的未知数其实是 **4 个**:x、y、z、δt。
δt 怎么把定位搞砸
把 δt 写进公式更清楚:手机算出的「伪距」= c × (t₂ - t₁ - δt)。也就是说,每一颗卫星的测距都被同一个 δt 污染了,污染量是 **c·δt**。
- δt = 1 微秒 → 每颗距离都偏 300 米
- δt = 10 微秒 → 每颗距离都偏 3 公里
而且这个偏差是**系统性**的——所有卫星一起偏,不是随机抖动,所以平均一下没用。这就是「3 颗卫星就算再多也都带同一个错」。
为什么非要 4 颗
flowchart TD
A[手机收到 N 颗卫星信号] --> B[每个方程:<br/>距离 = c·Δt - c·δt]
B --> C{未知数有几个?}
C -->|x, y, z 三个| D[3 颗卫星:<br/>3 方程 3 未知<br/>但 δt 没人管 → 偏]
C -->|x, y, z, δt 四个| E[4 颗卫星:<br/>4 方程 4 未知<br/>唯一解 → 同时拿到坐标和时钟修正]
一旦有 **4 颗卫星**,就有 4 个方程、4 个未知数(x, y, z, δt),方程组就有唯一解了。手机不只能算出自己在哪,**顺便还解出了自己时钟相对原子钟的偏差 δt**。这个 δt 被解出来后,定位精度立刻回到「该有的水平」(几米级),手机内部也借机把自己那块便宜石英钟「校准」了一次。
一个数字例子
假设手机在北京上空某个真实位置,时钟慢了 +5 微秒(δt = 5 μs,相当于 c·δt = 1500 m 的系统性偏差)。
- **只用 3 颗**:算出的坐标会被「整体平移」到偏离 1500 米的地方——你以为自己在北京三环,实际显示在天津附近。
- **用 4 颗**:第 4 颗方程把 δt = 5 μs 解出来,再回代修正每颗的距离,最后 x、y、z 解在误差几米的范围内。同时手机内部也知道自己「原来慢了 5 微秒」,下次开机还按这个偏差补偿。
反直觉的关键
一个常见误解是:「3 颗解平面(2D)、4 颗解立体(3D)」。其实**只要时间完全准,3 颗就够了**——3 球面相交就是一个点。第 4 颗干的事**不是「加一维」**,而是「花钱买一个方程来换出 δt」。换句话说,4 颗卫星 = 3 颗帮你定位 + 1 颗帮你修钟。
这也解释了为什么 GPS 至少要 4 颗:不是因为空间是三维,**而是因为你的手机没装原子钟**。如果哪天手机里也塞了原子钟(贵到没人这么做),理论上 3 颗就够了。
**要点:** 手机用 3 颗卫星会留下一个未知量——手机自身时钟与原子钟的偏差 δt——导致定位整体偏移;第 4 颗卫星的方程专门用来解出这个 δt,所以「至少 4 颗」的本质是「3 颗定位 + 1 颗修钟」。
误差来源:大气层、多径与卫星几何
前面的章节都假设信号在真空中跑、原子钟一秒不差、手机只收到一条直射信号。真实世界没这么干净。这一节把「理想假设」逐条拆开,看每一条会把你的定位偏多少。
误差源一:电离层延迟
卫星信号穿过 60 公里以上的电离层时,会撞上大量自由电子,速度比真空光速**慢一点**。但「慢多少」不是固定的——白天和晚上不一样,太阳风暴时更严重。
- 典型影响:白天距离测量被拉长 **5–10 米**,太阳风暴期间能到几十米
- 怎么修:双频接收机用两个不同频率的信号对比,可以把延迟「算掉」(现代手机 GPS 芯片已支持双频)
电离层有一个巧妙的特性:它是**色散的**(对不同频率的电磁波延迟不同),这就是双频能修它的原因。
误差源二:对流层延迟
信号继续下行进入对流层(地表到 10 多公里高)。这里有水汽、空气密度变化,电磁波也会被折射减速。这部分延迟**和频率无关**(不是色散),双频搞不定,只能靠「建模」——查当地气压、湿度来估算。
- 典型影响:2–5 米
- 阴雨、湿热天气会更大
误差源三:多径反射(城市峡谷元凶)
这条最贴近日常感受。GPS 信号遇到高楼、玻璃幕墙会**反射**。手机天线收到的不是「一条直线来的信号」,而是「直射 + 几条反射」的叠加。反射路径比直射长,测出来的时间偏大,距离偏大。
flowchart LR
SAT[卫星] -->|直射| PHONE[手机]
SAT -.->|反射| WALL[高楼玻璃幕墙]
WALL -.->|反射后到达| PHONE
PHONE --> ERR[测出的距离被算大]
典型场景:
- **城市峡谷**:反射面多,误差能到 **20–50 米**
- **开阔地**:基本没反射,误差小
- **室内**:信号衰减 + 多径,差到不可用
多径是**最难修**的——反射环境每栋楼都不一样,算法只能靠「信号质量筛选」砍掉一部分。
误差源四:几何分布(PDOP)
前面三个误差都是「距离测错了」。但还记得上一节解 4 球面相交吗?**球面交点对「小误差」有多敏感**,取决于卫星怎么分布。
- 卫星**均匀散开**(头顶、四面八方):交点锐利,距离小误差只让位置动一点
- 卫星**挤在一角**(比如全在南边):交点拖成长条,同等距离误差让位置跑出几十米
flowchart TD
subgraph 好几何
H1[头顶 1 颗]
H2[东 1 颗]
H3[西 1 颗]
H4[南 1 颗]
H1 & H2 & H3 & H4 --> P1[交点锐利 偏小]
end
subgraph 差几何
B1[南边 4 颗挤一起]
B1 --> P2[交点拖长 偏大]
end
这个「几何差多少倍」有量化指标叫 **PDOP(Position Dilution of Precision)**。PDOP=1 是理想;PDOP=5 意味着你测距多准都没用,定位误差被放大 5 倍。
一张表看清各误差的「贡献」
| 误差源 | 典型影响 | 是否可修 | |---|---|---| | 电离层 | 5–10 m | 双频可修 | | 对流层 | 2–5 m | 模型估算 | | 多径反射 | 0–50 m(城市峡谷) | 很难修 | | PDOP 几何 | 误差放大 1–5 倍 | 选卫星可缓解 |
四样加在一起,就是地图上「定位精度 8 m」或「15 m」的真实来源。
为什么室内和城市峡谷 GPS 差
- **室内**:信号穿墙大幅衰减,可见卫星从十几颗掉到 3–4 颗,几何立刻变差;多径极严重
- **城市峡谷**:可见卫星被高楼挡掉一半,剩下的都挤在头顶一块小天空,PDOP 飙升;加上一堆反射,多径爆炸
这就是为什么**纯 GPS 在楼里、地铁里基本不可用**——多径、几何、衰减全凑齐了。
**要点:** 真实 GPS 精度由四个误差源决定——电离层、对流层、多径、卫星几何(PDOP)。前两个靠模型和双频能修,多径和几何分布是城市峡谷定位飘的核心原因。
A-GPS:用网络数据加速冷启动
想象这样一个场景:你刚下飞机到了个陌生城市,机场出口没指示牌,你得一路问过去才知道自己住哪个酒店、要走哪条路——**这就是「冷启动」GPS**。
冷启动时手机面临的问题很尴尬:它**不知道现在该往天上哪个方向去找卫星**。所有 31 颗卫星都在 2 万公里高空以每秒几公里的速度飞,盲扫一遍得花不少时间。
三类要下载的「说明书」
GPS 启动需要三类数据:
- **历书(Almanac)**:粗略的「星座总览」,告诉手机「天上大致有哪些卫星、轨道倾角是多少」。完整历书 25 KB 左右,靠卫星以 **50 bps** 广播一遍要 **十几分钟**。
- **星历(Ephemeris)**:每颗卫星**自己的精确位置表**,每 2 小时更新一次。每颗几 KB,30 颗全下完要好几十秒。
- **当前时间、粗略位置**:手机自己的时钟不准,没有参考就不知道该先搜哪颗卫星。
普通 GPS 走「卫星下行」这条路:手机开机 → 逐个频率扫 → 等卫星慢慢广播星历 → 算位置。**首次定位 30–60 秒**,信号差的城市峡谷能拖到几分钟。
A-GPS:让网络替你问好了
A-GPS(Assisted GPS,辅助 GPS)走另一条路:手机**通过 WiFi 或蜂窝网络**,联系一个叫「A-GPS 辅助服务器」的服务(手机厂商或运营商部署,服务器遍布全球)。
这个服务器 7×24 小时在收 GPS 信号,手里**永远有最新的星历、历书、原子钟差**。手机一开机就发个请求过去,服务器几秒内回传:
flowchart LR
PHONE[手机开机] -->|WiFi或蜂窝网络| SERVER[辅助服务器]
SERVER -->|历书| PHONE
SERVER -->|星历| PHONE
SERVER -->|粗略位置和时间| PHONE
PHONE -->|直接搜指定卫星| SAT[GPS 卫星]
SAT -->|精确时间戳| PHONE
PHONE --> FIX[3-10 秒锁定位置]
整个过程就像:
- **普通 GPS**:你下飞机自己到处问路
- **A-GPS**:机场出口服务台直接递给你「今天航班表+酒店地址+打车地图」
三大加速机制
为什么 A-GPS 能从 60 秒压到几秒?三个加速点叠在一起:
- **跳过慢速广播**:卫星下行 50 bps,A-GPS 走网络几 Mbps,差着 5 个数量级——星历下载从几十秒变几百毫秒
- **知道搜哪颗星**:有了粗略位置和当前时间,手机能算出「现在头顶能看到哪 6–8 颗卫星」,**不用扫所有频率**
- **初始搜索窗口变窄**:知道卫星大致位置后,手机只需在很窄的频率+码相位区间里找信号,捕获时间从「扫全频」变「定点捞针」
真实场景:为什么你感觉不到冷启动
现代手机芯片出厂就内置 A-GPS。你打开地图 App 几秒就出定位,根本没意识到背后在做这些事。但你关掉网络试试——**飞行模式下冷启动**,你会看到那个明显的「定位中」转圈,可能转 30 秒以上。
这就是为什么飞行模式下 GPS 也能用,但「**明显比连着网慢**」——卫星下行链路还在工作,只是没人帮你预下载星历。
更隐蔽的依赖:即使你已经用过一次 GPS、缓存了星历,**2 小时后星历过期**,下次冷启动又得重新拿。地下室、地铁里待了一晚上出来第一次定位慢,也多亏了 A-GPS 还能再拉一份。
**要点:** A-GPS 用网络预先从辅助服务器下载星历、历书和粗略参考信息,把 GPS 冷启动从 30–60 秒压到几秒——本质是「用宽带网络绕过卫星的 50 bps 慢速广播」。现代手机默认就开 A-GPS,所以日常感知不到冷启动。
学习笔记
GPS 系统组成与星座规模
GPS 由**三大部分**组成,缺一不可:
- **太空段**:在轨约 **31 颗**工作卫星,均匀分布在 **6 个轨道面**(每轨道 4–5 颗),轨道高度约 **2 万公里**(属中轨 MEO),绕地一圈约 **12 小时**。每颗卫星搭载**原子钟**(误差几十亿年才差 1 秒),持续广播自己的**星历**(位置)与**当前时间戳**。
- **地面段**:1 个**主控站**(科罗拉多)计算轨道和钟差 + 若干**监测站**(全球分布)+ **注入站**上传修正数据。地面段是 GPS 的「校准后台」。
- **用户段**:手机里的 GPS 芯片,**只被动接收**卫星广播的无线电(不耗流量,原理同收音机)。
现实:四大全球导航系统并存
今天天上同时跑着四套系统:GPS(美国,约 31 颗)、**北斗 BeiDou**(中国,2020 年全球组网完成,约 30+ 颗)、GLONASS(俄罗斯,约 24 颗)、Galileo(欧盟,约 30 颗)。2017 年后的手机芯片**多系统同时接收**,同一时刻可见 **40 颗以上**卫星。
因此日常说的「GPS 定位」是口语,准确说应叫 **GNSS**(全球导航卫星系统),里面包含中国北斗的信号。
测距原理:光速 × 飞行时间
核心公式:**距离 = 光速 × 时间**。GPS 信号本质是**电磁波**,在真空中的速度即光速,**约每秒 30 万公里**(准确值 299,792,458 m/s,是被精确定义的常量)。卫星距地约 2 万公里,信号飞行只需约 **67 毫秒**。
精度门槛极苛刻
- 测时误差 **1 毫秒** → 距离误差 **300 公里**
- 测时误差 **1 微秒** → 距离误差 **300 米**
- 测时误差 **1 纳秒** → 距离误差 **30 厘米**
要把定位做到几米精度,**卫星与手机的时间同步必须精确到几十纳秒**——比眨眼快几十亿倍。
为什么必须用原子钟
- 机械表/石英表:每天误差几秒
- 手机里的时钟:本质也是石英,误差类似
- GPS 卫星的原子钟(**铷**或**铯**原子振荡周期):**几千万年到几亿年才差 1 秒**
卫星钟慢 1 微秒,所有定位偏 300 米;**1 秒钟误差会把定位错出 30 万公里**(甩到月球附近)。每颗卫星装 **3–4 台**互为备份的原子钟,单台上百万美元。
测距流程
- 卫星在信号里写入「我是 XX 号卫星,t₁ 时刻发出」
- 手机收到瞬间记下本地时间 t₂
- 飞行时间 = t₂ − t₁,乘以光速 = 距离
但手机那块石英钟并不准——这正是下一节「为什么至少要 4 颗卫星」要解决的核心。
第四颗卫星:解出手机时钟偏差 δt
未知数实际是 4 个
直觉上三维空间三个未知数 x、y、z,三颗卫星三个方程就够了。但手机记的 t₂ 来自自己那块不准的石英钟,与卫星原子钟之间存在一个**未知的偏差 δt**(可能正、可能负、可能几微秒也可能几十微秒)。
真正的未知数是 **4 个**:x、y、z、**δt**。手机算出的「伪距」= c × (t₂ − t₁ − δt),每颗卫星的距离都被同一个 δt **系统性**污染,平均消除不掉:
- δt = 1 微秒 → 每颗距离都偏 300 米
- δt = 10 微秒 → 每颗距离都偏 3 公里
4 颗卫星 = 唯一解
**4 颗卫星 → 4 个方程、4 个未知数 → 唯一解**。手机不仅算出坐标,还顺带解出自己的时钟偏差 δt,定位精度回到「该有的水平」(几米级),手机内部也借机把自己那块便宜石英钟「校准」一次。
常见误解:「3 颗解平面、4 颗解立体」
常见误解:「3 颗解平面、4 颗解立体」。其实**只要时间完全准,3 颗就够**(3 球面相交即一点)。第 4 颗**不是「加一维」**,**而是「花钱买一个方程来换出 δt」**——4 颗 = 3 颗定位 + 1 颗修钟。
「至少 4 颗」的本质原因是**手机没装原子钟**,不是空间是三维。
| 误差源 | 典型影响 | 是否可修 |
| 误差源 | 典型影响 | 是否可修 | |---|---|---| | 电离层 | 5–10 m(太阳风暴可达几十米) | **双频可修**(色散特性) | | 对流层 | 2–5 m | 模型估算(非色散,双频搞不定) | | 多径反射 | 0–50 m(城市峡谷) | 很难修 | | PDOP 几何 | 误差放大 1–5 倍 | 选卫星可缓解 |
电离层延迟
信号穿过 60 公里以上的电离层撞上自由电子,速度比真空中**慢一点**。白天与夜晚不同,太阳风暴更严重。电离层是**色散**介质(对不同频率延迟不同),所以双频接收机可对比「算掉」延迟,现代手机芯片已支持双频。
对流层延迟
信号下行进入对流层(水汽、空气密度变化造成折射减速),延迟**与频率无关**(非色散),只能靠当地气压、湿度建模估算,阴雨湿热天气更大。
GPS 信号遇高楼、玻璃幕墙反射
GPS 信号遇高楼、玻璃幕墙**反射**。手机收到的不是一条直射,而是「直射 + 几条反射」的叠加,反射路径更长,测出的时间偏大、距离偏大。**多径最难修**——反射环境每栋楼都不一样,算法只能靠信号质量筛选砍掉一部分。
几何分布(PDOP)
球面交点对「小误差」的敏感度取决于卫星分布:
- 卫星**均匀散开**(头顶、四面八方)→ 交点锐利,小距离误差只让位置动一点
- 卫星**挤在一角**(全在南边)→ 交点拖成长条,同等距离误差让位置跑出几十米
量化指标叫 **PDOP**(Position Dilution of Precision):PDOP=1 理想;PDOP=5 意味着测距多准都没用,定位误差被放大 5 倍。
A-GPS:用网络加速冷启动
冷启动的问题
手机刚开机时**不知道该往天上哪个方向找卫星**——31 颗卫星都在 2 万公里高空以每秒几公里飞行,盲扫一遍很慢。
GPS 启动需要三类数据:
- **历书(Almanac)**:星座总览(哪些卫星、轨道倾角),完整约 25 KB,靠卫星以 **50 bps** 广播需**十几分钟**
- **星历(Ephemeris)**:每颗卫星的精确位置,**每 2 小时更新**,每颗几 KB
- **当前时间、粗略位置**:手机时钟不准,没参考就不知道先搜哪颗
普通 GPS 走「卫星下行」路径:开机 → 逐个扫频 → 等卫星慢慢广播 → 算位置。**首次定位 30–60 秒**,信号差时拖到几分钟。
A-GPS 的解法
A-GPS(Assisted GPS)让手机通过 WiFi 或蜂窝网络联系**辅助服务器**(手机厂商或运营商部署,全球分布)。服务器 7×24 小时在收 GPS 信号,手里**永远有最新的星历、历书、原子钟差**。手机开机后几秒内就拿到这三类数据,直接去搜指定卫星。
第 3 关 · 基站定位原理:无处不在的信号塔
理解在没有 GPS 信号时,手机如何用运营商基站完成粗略定位,以及不同方法对应的精度梯度。
基站定位的直觉:最近基站与小区识别
上一关的盲区:GPS 进不去的地方
上一关讲了 GPS 测距——理论上精度很高(米级),但它有个硬前提:**卫星信号极弱**。一道墙、一层楼板就能把它挡掉大半。所以你进入这些场景时,GPS 几乎完全失效:
- 地下车库、地铁、隧道
- 高楼林立的「城市峡谷」
- 室内、商场里、电梯里
而手机只要插着 SIM 卡,就**必须**时刻跟运营商网络保持联系——打电话、发短信、收验证码,哪一样断网都不行。所以哪怕你钻进地下三层,手机信号常常还剩一两格——它肯定正连着某根基站天线。
这就给了我们一条「GPS 失效时的兜底通道」:**用运营商的基站来定位**。
最朴素的想法:知道连了哪根杆,就知道大概在哪
最直觉的思路是这样的:
> 你的手机不可能同时离两个基站都最近。它每时每刻都在跟一根特定的基站天线「通话」。如果我查得到这根天线杆的精确 GPS 坐标,那你的位置至少能缩到「这根杆的覆盖范围内」——城市里几百米,郊区几公里。
这就像你朋友告诉你「我在城西的图书馆旁边」——你不知道确切门牌号,但知道该往城西那片走。
Cell ID:基站的「身份证号」
实际工程里不是用「哪根杆」来定位,而是用 **Cell ID**(小区标识)。
为什么?因为一根基站铁塔上通常装 **3 副朝向不同方向的天线**(每副覆盖约 120°,拼起来正好 360°)。每副天线辐射的那一片扇区,叫一个「**小区**(Cell)」,有自己独立的**唯一编号**。
- 同一根铁塔的 3 个小区,编号不同
- 不同铁塔的小区,编号也绝不重复
- 全球所有运营商的所有小区,加起来唯一
所以「手机现在连的是哪个 Cell」才是定位的关键——它告诉你的不只是「哪根杆」,还是「杆的哪个方向」。
实际怎么工作
flowchart LR
A[手机扫描周围基站] --> B[自动接入信号最强的小区]
B --> C[获得当前 Cell ID 例如 46000-12345-678]
C --> D[运营商后台查表]
D --> E[数据库返回该 Cell 的位置和覆盖半径]
E --> F[应用拿到粗略位置]
整条链路里,手机**不做任何计算**——它只负责上报「我连的是哪个 Cell ID」。**算位置的是运营商后台的数据库**,它知道每个 Cell ID 对应的天线坐标和覆盖范围。
精度为什么这么粗
Cell ID 定位没有做任何「测距」——它不是估算你和基站的距离,而是直接告诉你「你在 Cell X 的覆盖范围里」。
- 城市中心基站密:每个小区覆盖半径可能只有 200–500 米
- 郊区基站稀:可能覆盖 2–5 公里
- 农村基站更稀:可能 10 公里以上
这就是为什么同样是用基站定位,你在市区能定位到「哪条街」,到了乡下只能告诉你「大概在某某镇」。
**要点:** Cell ID 定位的核心是「不测距、只查表」——知道手机接入了哪个小区 ID,就知道它大致在那片天线的覆盖范围内。最粗、最便宜,但只要手机有信号就永远在线,是 GPS 失效时的第一道兜底。
Cell ID 定位:最粗也最便宜
手机不做任何计算——它只上报一个编号
上一节我们说到了「最近基站」的直觉——只要知道手机连的是哪根杆,就知道个大概位置。这一节把这个直觉拆开讲清楚:具体怎么「查」,精度在哪里,为什么说它「最粗也最便宜」。
Cell ID 定位最反直觉的一点是:**你的手机完全不知道自己在哪里,也不需要去算**。它只做一件事——每隔几秒把当前连入的小区 ID 上报给运营商核心网,比如 `460-00-12345-678` 这样一串数字,前几段是国家和运营商代码,后面是小区唯一编号。
这个上报本来就在发生:你打电话、发短信、收验证码,运营商都得知道你在哪个 Cell 上才能把数据转给你。所以 Cell ID 定位**不需要额外硬件、不需要专门开启任何开关**——只要手机有信号,定位数据就**自动**在那儿。
算位置的是运营商的「基站地址簿」
运营商后台有一张巨大的数据库表,结构非常简单:
| 字段 | 示例 | |---|---| | Cell ID | 460-00-12345-678 | | 天线经度 | 116.123456 | | 天线纬度 | 39.987654 | | 朝向 | 正北偏东 30° | | 覆盖半径 | 约 350 米 |
这张表怎么来的?**人工录入 + 现场勘测**。运营商建基站时,工程队会精确测量天线的 GPS 坐标、朝向、海拔,然后登记进系统。全国几百万根天线,每根 3 个小区——这是一项大工程,但**只做一次**,建成就长期有效。
定位时,运营商核心网收到你手机上报的 Cell ID,就在表里查一行——**一个数据库查询,几十毫秒**,就返回了经纬度。
flowchart LR
A[手机连入小区 ID=678] --> B[运营商核心网收到上报]
B --> C[查基站地址簿]
C --> D[返回天线坐标与覆盖半径]
D --> E[应用拿到粗略位置]
为什么说它「最便宜」
便宜体现在三个地方:
- **对手机零要求**:不装 App、不开 GPS、不算任何东西。10 年前的功能机只要能打电话就能被定位。
- **对运营商零额外计算**:就是查表,毫秒级返回,几乎不增加基站负载。
- **对网络零压力**:上报数据本来就在发生(打电话、发短信都要报 Cell ID),定位是**白嫖**这个数据。
为什么说它「最粗」
Cell ID 定位**没有做任何「测距」**。它不是估算「你离天线有多远」,而是直接告诉你「你在 Cell X 的覆盖范围内」——所以精度完全取决于**那个 Cell 有多大**:
- **城市 CBD**:基站密得像蜂窝,每个小区可能只覆盖一两个街区——**200–500 米**精度,够定位到「哪家咖啡馆」
- **普通市区**:**500 米到 1 公里**,大致能定位到「哪条路」
- **郊区**:**3–5 公里**误差,可能跨了好几个镇
- **农村、高速公路**:一杆独苗,覆盖半径 **10 公里**以上——只能告诉你「大概在某某县」
看,这跟「看杆在哪」的直觉完全一致——**Cell 有多大,你的误差就有多大**。而这是运营商建网时就决定了的,算法层面无能为力。
实际体验
打开手机地图 App,在地下车库、地铁里看定位——如果它还能显示你的位置,那个蓝点八成就是 Cell ID 给的,**会漂来漂去固定在某个范围里**。一旦出了车库 GPS 一接上,蓝点立刻变实变准。
**要点:** Cell ID 定位的精髓是「不测距、只查表」——运营商数据库里每一行都登记着「哪个 Cell ID 对应哪根天线的经纬度」。手机有信号就能定位,永远在线、几乎零成本,代价是精度完全跟着基站密度走:城市百米,乡村十几公里。
信号强度测距:RSSI 与距离估算
用喊话做开场:信号越强,距离越近
想象你站在公园里蒙着眼,朋友在固定位置冲你喊「嘿——!」——**你听得越响,就知道他离你越近**。RSSI 定位的逻辑跟这个一模一样:基站天线是「嗓门恒定的朋友」,手机收到的信号越强(RSSI 数值越大),距离就越近。
这里的 RSSI(Received Signal Strength Indicator,接收信号强度指示)是一个负数,单位 dBm——**数字越接近 0,信号越强**。一般范围:
- **-50 到 -70 dBm**:信号很强,离天线几百米内
- **-70 到 -90 dBm**:信号一般,1 公里上下
- **-90 到 -110 dBm**:信号很弱,几公里外
- **低于 -110 dBm**:几乎断线
经验模型:距离翻倍,信号掉一截
信号强度和距离的关系不是线性的——你离天线从 100 米走到 200 米,信号不会掉一半;走到 400 米,也不会再掉一半。**每翻一倍距离,信号就大致掉一固定值**,这个关系工程师用一个对数公式描述(简化版):
> RSSI = 发射功率 − 路径损耗常数 − 10 × n × log(距离)
里面那个 n 叫**路径损耗指数**——开阔地大概 2,城市街道大概 3-4,室内可能 4-5。**n 越大,同样的距离下信号掉得越凶**。
这公式对工程师是「参考」,不是「真理」——真实世界复杂得多,下面会讲。
从「一个距离」到「一个位置」
一个基站告诉你「离我 500 米」——**你还是在一个 500 米半径的圆圈上**,位置并不唯一。
- **1 个基站**:你可能在这圈上任何一点
- **2 个基站**:两个圆相交,大约 1-2 个可能位置
- **3 个基站**:三个圆理论上交于一个点
flowchart TB
A[手机向多个基站发送信号] --> B[各基站分别测出 RSSI]
B --> C[把 RSSI 换算成距离]
C --> D[以每个基站为圆心画圆]
D --> E[三个圆相交于一点]
E --> F[该点即为定位结果]
这就是**三角定位**的几何直觉——**圆圈越多越准**。
为什么城里用 RSSI 总是「差一口气」
理论上很美,实际工程里有几道坎:
**多径效应**。你站在高楼林立的街道上,基站的信号不是只走一条路到你手机——它会从窗户、墙面、地面反射多次,绕着弯子到。**最终手机收到的信号是这些多份信号的叠加**,可能比直达路径强,也可能弱很多。
这导致一个尴尬事:**同一 RSSI 值在城里可能对应 200 米,也可能对应 600 米**——取决于附近有多少反射面。算法只能猜个平均,精度就上不去。
**障碍物损耗**。墙、玻璃、树木、人体本身都会吸收信号——同一基站,你在街边测的 RSSI 和你进咖啡馆坐下来再测,能差 10-20 dBm。
**环境会变**。这个路口今天畅通,明天有辆大卡车停那儿,信号反射情况就变了。算法模型跟不上物理世界的快速变化。
4G/5G 时代为什么好了一些
不是 RSSI 原理变了,是**硬件和组网变了**:
- **基站密了**:4G/5G 时代基站密度比 2G 时代高一个数量级,**圆圈画得多,定位更收敛**
- **多天线 MIMO**:基站端能分辨出「从哪个方向来的信号最强」,过滤掉部分多径干扰
- **5G 毫米波**:波长极短,方向性极强,反射行为更可预测——但也更容易被手、人挡住
- **协作多点 CoMP**:相邻基站能一起处理同一手机的信号,相当于「多人测同一物体取平均」
综合下来,**4G/5G 下的 RSSI 定位在城市中能从 1-2 公里收敛到 200-500 米**——依然不惊艳,但比 2G 时代好太多。
一个具体场景
你在三里屯一个街角打开地图 App,附近三根 5G 基站分别测出你的 RSSI 是 -72、-78、-75 dBm。算法把每个数值代入路径损耗模型,算出你大约离它们 300、500、400 米。
三圈画下来,交点应该就在你脚下——**但因为多径,交点其实是个 100-200 米的模糊小区域**。地图上你的蓝点会**慢慢漂、慢慢定**,就是这个原因。
**要点:** RSSI 测距的底层是「距离越远信号越弱」这条物理规律加一个统计经验模型。它能给出「多远」的估计,但**估算精度被多径、反射、障碍物严重拖累**。4G/5G 时代靠基站密度暴增和更好的信号处理,把城市精度从公里级拉到了几百米,但**这条路的天花板就在那儿**——想再准,得换更硬的测距方法(下一节讲)。
传播时间测距:TA 与 RTT 方案
一根看不见的尺:让信号告诉你「我多远」
上一节我们用 RSSI 把「喊话响度」换算成距离,受多径干扰严重。**有没有更硬的物理量可以用?**
有——**时间**。光速是恒定的(30 万公里/秒),只要能精确测出信号跑了几微秒,距离就算出来了。问题是怎么让手机和基站精确「对表」——这就是 3GPP 协议里 Timing Advance(TA)和 RTT 机制的故事。
为什么要「对表」?因为所有手机共用一根天线
基站的「听筒」同一时间只能认真听一个手机说话。如果大家随便开口,远处的信号还在飞、近处的信号已经到——**基站的听筒就乱套了**。
工程师的解法很巧妙:**让远方的手机「早一点发」**。这样所有信号刚好前后脚到达基站,整整齐齐排队。基站告诉手机「你要早发多少」,就是 **Timing Advance**。
TA:用「早发量」反推距离
flowchart LR
A[手机发信号] --> B[基站收到 测晚到多久]
B --> C[基站下发 TA 值 告诉手机下次提前发]
C --> D[手机下次早 TA 时间发出]
D --> E[信号正好准时到基站]
具体过程:
- 手机按当前 TA 值发信号
- 基站测出「这个信号晚到了 Δt 这么多」
- 基站更新 TA 值发回手机:「下次提前 Δt 发」
- 手机照办,**新信号正好在「窗口」内到达**
这个 Δt 是**信号从手机到基站的单向传播时间**。光速下,1 微秒 ≈ 300 米。所以:
- **TA = 1 微秒** → 离基站约 300 米
- **TA = 5 微秒** → 离基站约 1.5 公里
LTE 中 TA 的最小步进是 **0.52 微秒**,对应约 **78 米**——这就是 TA 单基站定位的精度天花板。和 RSSI 一样,**单 TA 只能给你一个距离环**,三个基站画三圈才能交出位置。
RTT:让信号跑个来回
TA 是「基站测 + 手机听指令」,本质是单向测距。4G/5G 引入了更直接的 **RTT(Round Trip Time,往返时间)**:
flowchart LR
A[基站发探测信号] --> B[手机收到 立刻回一个]
B --> C[基站收到回包 测总耗时 RTT]
C --> D[RTT 除以 2 等于单向时间]
D --> E[乘以光速 等于距离]
- 基站发一个探测信号,记下出发时间
- 手机收到后**毫秒级响应**一个回包
- 基站收到回包,记下到达时间
- **总时间 = 去程 + 返程**,除以 2 就是单程时间,乘以光速就是距离
**5G NR 把 RTT 列为标准测距方法**,因为:
- **不再依赖手机上报 TA**——基站自己就能算
- **配合多基站测量**,可以三角定位到几十米精度
- 协议里专门定义了 **PRS(Positioning Reference Signal,定位参考信号)**,定时精度极高
为什么都依赖 3GPP 协议
你可能注意到,TA 和 RTT 都离不开**严格的时间框架**——3GPP 把无线接口切成 **10 ms 帧、1 ms 子帧、几十微秒时隙**,手机和基站按这个表「对表」才能做精确测量。如果时间不同步,1 微秒的误差就是 300 米的误差。
这也是为什么**测时间比测信号强度更可靠**:强度受环境影响,但**光速不变**——只要协议里的时间框架撑得住,距离就算得准。
TA/RTT 对比 RSSI:硬物理量 vs 软物理量
| 维度 | RSSI | TA / RTT | |------|------|----------| | 测的是什么 | 信号强度 | 信号传播时间 | | 受多径影响 | 大 | 小 | | 城市典型精度 | 200-500 米 | **50-100 米** | | 协议要求 | 低 | 高(要严格同步) |
5G 的 RTT + 多基站组合,是**纯基站定位能达到的精度天花板**——再要更准,就得靠 GPS 或 Wi-Fi 了。
一个具体例子
你走进国贸地铁站附近,5G 手机连上基站,基站做 RTT 测量:
- 探测信号从基站到手机用了 0.8 微秒
- 手机响应回基站用了 0.8 微秒
- **总 RTT = 1.6 微秒** → 单程 0.8 微秒 → 距离 ≈ **240 米**
再结合另外两个基站的 RTT 数据,**三角定位下来你就在国贸地铁 A 口附近 50-100 米范围内**——这已经是纯基站能做到的极限。
局限
- **非视距(NLOS)下误差偏大**:反射路径让 RTT 偏长,距离被高估
- **5G 毫米波视距要求高**:穿墙能力差,地下室几乎用不了
- **依赖网络同步**:基站间时间不同步会引入系统误差
**要点:** TA 是「让远处手机早开口」的巧思,RTT 是「让信号跑个来回测总时长」。两者都依赖 3GPP 严格的**时间框架**——本质都是**把时间换算成距离**。时间比信号强度更硬、**受环境干扰更小**,所以 5G RTT 能把纯基站定位精度顶到 **50-100 米**。
基站定位的强项与软肋
基站定位的强项与软肋
GPS 是「户外明星」——开阔天空下能给你 5-10 米的精度,可一进楼、钻地铁、钻隧道就熄火。**基站定位正好相反:精度不行,但「哪儿都能用」**。这一节我们把基站定位的全貌过一遍:什么时候它是大救星,什么时候它只能给你个大概。
基站定位的三大强项
强项一:全场景可用,GPS 死掉的地方它还活着
GPS 信号从 2 万公里高空的卫星下来,**穿墙能力极差**——混凝土、钢筋、玻璃幕墙都能把它削弱到定位失败。
但基站在 1 公里以内,**穿一堵墙、穿过窗户完全没问题**。所以这些场景基站定位是主力:
- 地下停车场、地铁、隧道
- 高楼密集的城市峡谷(GPS 多径严重,定位会漂)
- 室内办公、商场(GPS 几乎无效)
- 火灾、地铁故障等紧急场景
强项二:启动极快,手机一开机就能定位
GPS **冷启动要 30 秒到几分钟**——它要先下载卫星星历、搜星、锁定。新手机或长期没用的手机甚至要等更久。
而基站定位**几乎瞬时**:手机一开机就连上最近的基站,小区 ID 几毫秒就能查到;5G RTT 测量几秒内出结果。
flowchart LR
A[场景:手机刚开机] --> B{需要立刻定位吗}
B -->|是| C[基站定位<br/>秒级出结果]
B -->|否| D[GPS 定位<br/>30秒到几分钟]
C --> E[定位成功]
D --> E
强项三:紧急救命的最后一道线
**110、119、120 紧急电话**——法律上要求运营商必须能定位到拨打者,**不管手机有没有开启 GPS、是不是智能机**。这就是为什么紧急电话能用老式功能机打——运营商通过基站定位可以把你定位到**小区级别**(通常几百米范围)。
汶川地震等灾害中,**GPS 失灵、地图数据缺失**,基站定位是救援队找到受困者的核心手段。
基站定位的三大软肋
软肋一:精度天花板低
即使在 5G 时代,RTT 多基站组合的**最好成绩是 50-100 米**——而开阔地 GPS 是 5-10 米,差一个数量级。
Cell ID 更夸张:基站稀疏的农村和高速公路上,**单基站定位可能偏差几公里**。你在内蒙古草原上开车,运营商只知道「你连上了 XX 乡那个基站」,至于你在基站覆盖区的哪个角落,它真的不知道。
软肋二:受基站密度强约束
基站定位精度 ≈ **基站的密度**。城市里每隔 300-500 米一个基站,定位有保障;农村 5-10 公里一个基站,能定位到「你在 XX 镇」就算赢了。
flowchart TD
A[基站定位精度梯度] --> B[密集城区<br/>50-150米]
A --> C[普通城区<br/>200-500米]
A --> D[郊区<br/>500米到2公里]
A --> E[农村高速<br/>2-10公里]
软肋三:隐私敏感性高
GPS 是单向的:你算自己的位置,不告诉卫星。**基站定位是双向的——运营商必须知道你连了哪个基站,才能给你定位**。也就是说,运营商**随时知道你在哪个基站覆盖区**,从你开机那一刻起。
这是为什么各国对运营商位置数据都有严格的隐私法规——你每次打电话、刷网页,运营商都「顺便」知道你的位置。
横向对比:GPS vs 基站定位
| 维度 | GPS | 基站定位 | |------|-----|----------| | 户外开阔 | ★★★★★ 5-10米 | ★★ 100-500米 | | 城市峡谷 | ★★ 漂移严重 | ★★★ 100-300米 | | 室内 | ★ 经常定不到位 | ★★★★ 50-150米 | | 地下 | ✗ 完全失效 | ★★★ 100-300米 | | 启动速度 | 慢 30秒到几分钟 | 极快 秒级 | | 功耗 | 高 | 低 | | 隐私 | 单向计算 | 运营商可见 |
一个具体场景
晚上 11 点你在国贸三期商场 B1 美食广场点外卖。手机收不到任何 GPS 信号(混凝土和地下双重屏蔽),但 4G/5G 信号满格。
- **外卖 App 不知道你的精确位置**——它只能根据你连的基站 ID 推一个大概
- 骑手导航到国贸三期,**骑手的 App 也只能定位到「国贸三期附近」**
- 这就是为什么骑手会打电话问「你在哪个电梯口」
如果你的手机同时支持 Wi-Fi 定位(下一关讲),**结合商场 Wi-Fi 热点可以把位置精确到楼层**。这就是为什么现代定位系统是**多种方法融合**。
呼应开篇:为什么需要混合定位
整个第三关我们从「最粗的 Cell ID」讲到「最硬的 RTT」,精度从「几公里」一路压到「几十米」。但**单独靠基站,我们永远到不了 5 米**——这需要 GPS 接力。
要点
**基站定位是 GPS 的「备胎将军」**——精度不如 GPS,但 GPS 死掉的所有地方它都活着;启动快、功耗低、紧急时是最后一道线。**但它精度天花板低、依赖基站密度、有隐私敏感**。所以现代手机从不单独用它——它要和 GPS、Wi-Fi 组队,才是你日常感受到的「准确定位」。
学习笔记
基站定位原理
一、定位背景与直觉
GPS 依赖卫星信号,极易被墙体、楼板遮挡,在地下车库、地铁、隧道、高楼峡谷、室内等场景几乎完全失效。
手机只要插着 SIM 卡,就必须时刻与运营商网络保持联系,因此信号常常仍剩一两格——这给了我们「GPS 失效时的兜底通道」:**用运营商的基站来定位**。
最朴素的直觉:知道手机连的是哪根基站天线,就知道它大致在那根杆的覆盖范围内。城市里几百米,郊区几公里。
二、Cell ID 定位:不测距,只查表
核心结构
一根基站铁塔上通常装 **3 副朝向不同方向的天线**(每副覆盖约 120°),每副天线辐射的扇区叫一个**小区(Cell)**,有独立的**唯一编号 Cell ID**。
- 同一根铁塔的 3 个小区编号不同
- 不同铁塔的小区编号也绝不重复
- 全球所有运营商的所有小区加起来唯一
工作链路
手机只负责上报「我连的是哪个 Cell ID」(如 `460-00-12345-678`),**不做任何计算**。运营商后台查表,返回该 Cell 的天线经纬度、朝向和覆盖半径——整个过程就是一个数据库查询,几十毫秒。
这张「基站地址簿」由运营商工程队人工录入:建基站时精确测量天线的 GPS 坐标、朝向、海拔,全国几百万根天线只录入一次,长期有效。
| 场景 | 覆盖半径 |
| 场景 | 覆盖半径 | |---|---| | 城市 CBD(基站密) | 200–500 米 | | 普通市区 | 500 米–1 公里 | | 郊区 | 3–5 公里 | | 农村/高速公路 | 10 公里以上 |
为什么「最便宜」
- **对手机零要求**:不装 App、不开 GPS,10 年前的功能机就能被定位
- **对运营商零额外计算**:就是查表,几乎不增加基站负载
- **对网络零压力**:打电话、发短信本来就要报 Cell ID,定位是白嫖这个数据
**要点**:Cell ID 定位的核心是「不测距、只查表」——Cell 有多大,误差就有多大。算法层面无能为力,因为这是运营商建网时就决定了的。
三、RSSI 信号强度测距
原理
RSSI(Received Signal Strength Indicator,接收信号强度指示)是负数,单位 dBm,**越接近 0 信号越强**:
- -50 ~ -70 dBm:信号很强,几百米内
- -70 ~ -90 dBm:信号一般,1 公里上下
- -90 ~ -110 dBm:信号很弱,几公里外
- 低于 -110 dBm:几乎断线
信号强度与距离不是线性关系
信号强度与距离不是线性关系,而是**距离每翻一倍,信号大致掉一固定值**,用对数公式描述:
> RSSI = 发射功率 − 路径损耗常数 − 10 × n × log(距离)
路径损耗指数 n:开阔地约 2,城市街道 3-4,室内 4-5。n 越大,同样距离下信号掉得越凶。
三角定位
- 1 个基站:你在一个圆圈上,位置不唯一
- 2 个基站:两个圆相交,1-2 个可能位置
- 3 个基站:三个圆理论上交于一点
实际工程难题
- **多径效应**:高楼街道上信号经墙面、窗户、地面多次反射后叠加,同一 RSSI 在城里可能对应 200 米也可能对应 600 米
- **障碍物损耗**:同一基站,街边与咖啡馆内测的 RSSI 能差 10-20 dBm
- **环境会变**:算法模型跟不上物理世界的快速变化
4G/5G 时代的改进
- 基站密度比 2G 高一个数量级,圆圈画得多更收敛
- MIMO 多天线:分辨「从哪个方向来的信号最强」,过滤部分多径
- 5G 毫米波:波长极短,方向性极强,反射行为更可预测
- 协作多点 CoMP:相邻基站一起处理同一手机的信号
四、TA 与 RTT:传播时间测距
光速恒定(30 万公里/秒)
光速恒定(30 万公里/秒),**只要能精确测出信号传播时间,距离就算出来**。问题是怎么让手机和基站精确「对表」。
TA(Timing Advance)
基站同一时间只能认真听一个手机。解法是**让远处的手机「早一点发」**,使所有信号前后脚到达,整齐排队。
- 手机按当前 TA 发信号
- 基站测出「晚到 Δt 这么多」
- 基站更新 TA 发回手机:「下次提前 Δt 发」
- 这个 Δt 就是信号单向传播时间
光速下,1 微秒 ≈ 300 米。LTE 中 TA 最小步进 0.52 微秒,对应约 **78 米**——这就是 TA 单基站定位的精度天花板。单 TA 只能给一个距离环,三个基站画三圈才能交出位置。
RTT(Round Trip Time)
4G/5G 引入的直接双向测距:
- 基站发探测信号,记下出发时间
- 手机收到后毫秒级回一个包
- 基站收到回包,记下到达时间
- 总时间 = 去程 + 返程,除以 2 乘以光速 = 距离
5G NR 把 RTT 列为标准测距方法,协议里定义了 **PRS(Positioning Reference Signal,定位参考信号)**,定时精度极高。配合多基站测量可三角定位到几十米精度。
为什么依赖 3GPP 协议
3GPP 把无线接口切成 **10 ms 帧、1 ms 子帧、几十微秒时隙**,手机和基站按这个表对表才能精确测量。1 微秒的时间误差就是 300 米的距离误差。
**要点**:测时间比测信号强度更可靠——强度受环境影响,但**光速不变**。
五、基站定位的强项
基站在 1 公里以内
基站在 1 公里以内,穿一堵墙、穿过窗户完全没问题。在地下停车场、地铁、隧道、高楼峡谷、室内办公、商场等场景是定位主力,尤其在火灾、地铁故障等紧急场景不可替代。
GPS 冷启动要 30 秒到几分钟(要下载星历
GPS 冷启动要 30 秒到几分钟(要下载星历、搜星、锁定),基站定位几乎瞬时——Cell ID 几毫秒,5G RTT 测量几秒内出结果。
紧急电话
110、119、120 紧急电话,法律上要求运营商**必须**能定位到拨打者,**不管手机有没有开启 GPS、是不是智能机**。
第 4 关 · Wi-Fi定位原理:你家路由器的意外贡献
理解 Wi-Fi 定位的两种主要方法——信号测距与指纹库——以及全球 Wi-Fi 指纹库是如何通过众包建成的。
Wi-Fi 定位的前提:MAC 地址与地理固定性
打开你家路由器的底部贴纸,找到「MAC」或「MAC Address」后面那串像 8C:85:90:11:22:33 的字符。这串就是这部路由器在全球网络设备中的「身份证号」,理论上永远不会和世界上任何其他设备的 MAC 重复。
一、MAC 地址与 BSSID 是什么
**MAC 地址**(Media Access Control Address)是烧录在每一块网卡硬件里的 48 位全球唯一编号,由设备厂商按 IEEE 分配的前缀生产:前 24 位是「厂商代码」,后 24 位是「厂商自己编的序列号」。理论上全球任何两块网卡出厂时 MAC 都不重复。
Wi-Fi 定位里我们更关心一个特定身份——**BSSID**(Basic Service Set Identifier)。它其实就是路由器那枚 Wi-Fi 芯片的 MAC 地址。一个路由器可以同时广播多个 Wi-Fi 网络(2.4G / 5G、访客网络等),每一路广播对应一个 BSSID。
简记:**MAC 是「这台设备的身份证」,BSSID 是「这个 Wi-Fi 信号的身份证」**。在 Wi-Fi 定位中真正起作用的是 BSSID——它把你手机周围能听到的每一条 Wi-Fi 信号区分得清清楚楚。
二、为什么 BSSID 能当「灯塔编号」
回顾上一关讲过的 Cell ID:运营商每根铁塔的每副天线都有一个全球唯一的小区编号,后台一查就知道它的位置。Wi-Fi 定位走的是同一条思路,但有一个质的飞跃:
- **数量级飞跃**:全中国运营商基站合计约几百万个小区;而一台普通家用路由器就贡献一个 BSSID。一栋居民楼里可能有几十个 BSSID 在同时喊自己的名字,一座商场可能有几百个。
- **密度飞跃**:运营商基站主要覆盖马路,城里几百米一个,进了楼里信号就飘;Wi-Fi 路由器是「每一户、每一家店、每一个办公室」都有,密度比基站高一个量级。
- **天然被动**:和 GPS、基站一样,手机只是接收 Wi-Fi 路由器周期性广播的 Beacon(信标)帧,不主动连网、不耗流量、不需要密码,定位动作本身对路由器完全透明。
三、地理固定性:为什么路由器能当「锚点」
光是「数量多」还不够,关键还得「不动」。
- **位置稳定**:家用和商用路由器一旦装好就很少挪动;不像手机那样到处跑。运营商建基站时会派人精确测量录入坐标,Wi-Fi 路由器则是大量「自然形成」的固定信号源——只要不搬家电,BSSID 就一直待在那。
- **信号范围小**:一台家用路由器的 Wi-Fi 覆盖也就十几米到几十米(穿一堵墙信号就掉一截)。所以一旦手机在某个位置能稳定扫到某个 BSSID,就基本能反推出手机离那台路由器不远。
- **反推链路**:这是后面「信号测距派」和「指纹库派」共同的前提——只要某 BSSID 的位置我们知道,扫到它的手机的位置就能被估算出来。
四、回到灯塔的比喻
把三种定位信号源按「距离手机远近」叠在一起看,层次立刻清晰:
flowchart TB
subgraph 高空层
G[GPS 卫星<br/>2 万公里高空<br/>约 30 颗可见星]
end
subgraph 中距离层
C[运营商基站<br/>几公里到几十公里<br/>几百万个小区]
end
subgraph 身边层
W[Wi-Fi 路由器<br/>十几米到几十米<br/>全球数亿台]
end
P[你的手机]
P -.接收卫星广播.-> G
P -.接收基站信号.-> C
P -.接收 Wi-Fi 信标.-> W
GPS 是 2 万公里高空的「大灯塔」,基站是几公里外的「中灯塔」,而每台 Wi-Fi 路由器就是身边十几米到几十米内的「小灯塔」。它们有名字(BSSID)、有位置(固定不动)、有覆盖范围(信号能传到哪),于是构成一张比基站密得多的定位网格。
后面几节我们会讲:怎么用这些小灯塔的「名字和信号强度」反推出手机的具体位置。
**要点:** BSSID 是路由器的全球唯一编号,相当于定位网格中的「灯塔名字」;路由器位置相对固定,加上数量和密度远超基站,使 Wi-Fi 定位成为室内和高楼密集区的关键手段。
信号测距派:RSSI 换算距离的尝试
打开蓝牙耳机,屏幕上显示「-50dBm」;你朝路由器走近一步,数字变成「-48dBm」。这个数字就是 **RSSI**(Received Signal Strength Indicator,接收信号强度指示)——手机听到路由器喊话时量出的「响度」。
「信号测距派」的核心想法朴素得像日常经验:**喊得越响,距离越近**。能不能把 RSSI 这个「响度」换算成距离,再拿多个路由器一起算交叉点,定出手机位置?
一、从「响度」到「距离」的换算
物理学家告诉我们一个近似规律:信号在空气里传播,能量按距离的平方衰减(穿过墙还会再打折)。工程上把它压成一条经验公式:
> 距离 d ≈ 10^((发射功率 − 接收强度) / (10 × n))
其中的 n 是「环境因子」——空旷大厅里接近 2,普通写字楼里 3~4。公式不用背,只需记一个直觉:**RSSI 每变弱 6dB,距离大约变远一倍**。
举个例子:路由器满功率是 -30dBm,你 1 米处能听到 -30dBm;到 2 米变成 -36dBm;到 4 米变成 -42dBm;走到 10 米可能只剩 -60dBm。这个曲线在一片空地里相当准。
二、三球相交:和上一关同款的几何
如果能算出手机到三个路由器 A、B、C 的距离分别是 d₁、d₂、d₃,那么手机的位置就是「以 A 为圆心 d₁ 为半径的圆」「以 B 为圆心 d₂ 为半径的圆」「以 C 为圆心 d₃ 为半径的圆」三个圆共同交叠的那一小块区域(理想情况下是一个点)。
flowchart TB
subgraph 几何
A[路由器 A<br/>已知坐标] -.以 d1 为半径的圆.-> P((📱 手机位置))
B[路由器 B<br/>已知坐标] -.以 d2 为半径的圆.-> P
C[路由器 C<br/>已知坐标] -.以 d3 为半径的圆.-> P
end
这和上一关讲过的「用 TA 或信号强度辅助基站测距」的几何完全一样。差别只是锚点从「几公里外的基站」换成了「几十米内的路由器」,尺度变小,理论精度本该更高。
三、室内多径:这条路为什么走不远
理论很美,落地却难。问题不在公式,而在**现实里的墙、人、家具、玻璃**。
**多径效应**:路由器的喊话在室内不是走「直线」到你手机的,而是先撞墙、穿桌、被人体吸收一部分,再绕到天花板反射一次,最后从侧面、背后多路同时到达你手机。手机测到的 RSSI 是这些路径**叠加后的总能量**——你原地转身 30 度,可能某一束反射路径刚好被身体挡住,RSSI 就跳掉 5~10dB。
**几个真实场景**(路由器在 3 米外):
- 正前方无遮挡:-55dBm
- 中间隔一堵承重墙:-72dBm
- 旁边站着另一个人:-58dBm
- 门开着 vs 门关着:差 6dBm 以上
也就是说,**同一物理距离,RSSI 可以在 ±10dB 之间漂移**,换算成距离误差就是 ±50% 甚至更多。三个圆都「胖」了 50%,交叠区域就变成一片模糊的云,不再是一个点。
**测距派的命门**:RSSI 是一个「粗糙的响度计」,不是一把精确的尺子。在空旷停车场它勉强能用,在写字楼、商场、家里的复杂环境里精度只能到十几米——比 GPS 进不了门,也比下一节要讲的「指纹库派」差一截。
下一节正是为了绕开这个困难:**不直接换算距离,而是把「在某个位置能听到的信号组合」本身当作这个位置独一无二的「指纹」去匹配**——那条路完全不需要 RSSI 和距离之间的换算。
**要点:** RSSI 是路由器喊话的「响度」,按物理规律可粗略换算距离;多个距离做三球相交本可定出手机位置,但室内多径让 RSSI 极不稳定,同一距离隔一堵墙就差十几 dB,导致「信号测距」在复杂环境里精度只有十几米。
指纹库派:信号向量与匹配流程
上一节我们撞了墙:RSSI 上下乱跳,没法可靠地换算成距离。指纹库派说:**那就别换算了**——你站在 A 点能听到的「Wi-Fi 组合」本身就和你站在 B 点时不一样,把这个组合当作 A 点的「指纹」存进数据库,下次手机再听到差不多的组合,就说明它就在 A 点附近。
这就是指纹库法的全部精髓:**从「还原距离」改为「识别模式」**。
一、什么是「指纹」
你打开手机 Wi-Fi 设置,会看到一长串能搜到的网络。每条记录包含两样东西:
- **BSSID**:路由器的 MAC 地址(上一节讲过,全球唯一,相当于路由器的「身份证号」)
- **RSSI**:你能听到它多响
在某个固定位置(比如你家客厅中央),你扫到这样的列表:
> - 邻居 5G-A 路由器(AA:BB:CC:11:22:33),-45dBm > - 你家客厅路由器(AA:BB:CC:11:22:88),-32dBm > - 楼下咖啡店路由器(AA:BB:CC:11:22:55),-68dBm > - 楼道公共 AP(AA:BB:CC:11:22:77),-71dBm
这一组「BSSID + 各自 RSSI」就是**一个指纹向量**。换个位置(哪怕就挪到卧室),路由器和强度都会变,组合也跟着变:
> - 邻居 5G-A 路由器,-58dBm > - 你家客厅路由器,-48dBm > - 楼下咖啡店路由器,-77dBm > - 床头柜小路由器(AA:BB:CC:11:22:99),-40dBm ← 新出现一个
**关键认知:指纹不是「某一条信号有多强」,而是「一组信号的强度组合」**。就像人的指纹不是某一条线,而是多条纹路的整体图案——整组稳定,单独哪一条都不可靠。
二、数据库怎么建:先「采样」再「使用」
指纹法要工作分两步:
**第一步:建库(离线阶段)**
派人/派车/派手机到目标区域(一家商场、一栋写字楼、一条街),在每个事先标记好的网格点(比如每 5 米 × 5 米)停下来扫一遍 Wi-Fi,把「BSSID + RSSI」记进数据库,并把这个网格点的真实坐标也存进去。
| 网格坐标 | BSSID-A 强度 | BSSID-B 强度 | BSSID-C 强度 | |---|---|---|---| | (10, 20) | -45 | -60 | -72 | | (15, 20) | -48 | -55 | -75 | | (10, 25) | -50 | -58 | -68 |
**第二步:匹配(在线阶段)**
手机当前扫到一组指纹,去数据库里找「最像」的那一条,返回它对应的坐标。
三、怎么判断「像不像」:KNN 与概率
在线匹配最常用的两种思路:
- **KNN(K-近邻)**:把当前指纹和数据库里每条指纹的「相似度」算一遍(比如算 RSSI 在 BSSID 维度上的差值平方和),挑出最像的 K 条(K=3 或 5),用它们坐标的平均值作为你的位置。简单粗暴,效果还不错。
- **概率模型**:在数据库上跑出「某个 BSSID 在每个位置上的强度分布」的概率函数,看到当前观测时,用贝叶斯公式反推「最可能是哪个位置」算出来。更精细,对采样不均的鲁棒性更好。
不管是 KNN 还是概率模型,它们的输入都只有一件事:**一组 BSSID + 各自 RSSI**。它们不关心 RSSI 是不是真的等于某段距离——这正是指纹派绕开上一节困难的办法。
flowchart LR
A[📱 手机实时扫描] -->|BSSID + RSSI 组合| B{在指纹库中找最相似条目}
B -->|KNN 或概率匹配| C[(指纹数据库<br/>每个网格点的已知指纹)]
B -->|返回最像的网格坐标| D[📍 估算位置]
四、行业先驱:Skyhook 与 PlaceEngine
指纹库法不是新鲜事,早在 2000 年代初就有人把它产品化:
- **Skyhook Wireless**(美国,2003 年成立):最先把「扫街建库 + 客户端匹配」做成商用方案,专门为没有 GPS 的设备(早期 iPod、笔记本)提供定位。后来被 TruePosition 收购,技术并入基站定位阵营。
- **PlaceEngine**(日本,索尼 2006 年发布):思路完全一样,但更早把「用户主动贡献」做进产品——鼓励普通用户在自己家或公司用 PC 跑客户端程序,把所在位置的指纹贡献到中央数据库。这其实就是后来 Google/Apple「众包建库」的雏形。
它们证明了这条路**走得通**,但商业上有硬伤:建库成本极高(扫一条街要开车慢悠悠走几小时),更新滞后(搬走一家咖啡店、关掉一个热点都要重采)。**这个痛点直到 Google/Apple 把手里的「随时在线的手机」变成建库工人,才真正解决**——这就是下一节要讲的故事。
**要点:** 指纹派不把 RSSI 换算成距离,而是把「一组 BSSID + 各自 RSSI」的信号组合当作每个位置的独特「指纹」存进数据库;定位时拿实时扫描去库里找最像的一条(用 KNN 或概率匹配),返回其坐标;Skyhook 和 PlaceEngine 是这套思路的早期商用化先驱,但建库成本高、更新难的问题最终靠众包才解决。
众包建库:每部手机的贡献
上一节我们讲过 Skyhook、PlaceEngine 这些先驱的致命软肋:**建库成本太高**。一家公司要派人开车慢慢扫一条街、停下来记数据、回家入库;更新又得再扫一遍。覆盖一座城市要几周,覆盖一个国家要几年,覆盖全球?根本不可能。
但到了 2010 年前后,Google 和 Apple 几乎「白嫖」式地解决了这个问题——**他们手里已经握着全球几十亿部手机**。凭什么不拿手机当采集员呢?
一、核心洞察:GPS 成功的瞬间,手机既「知道自己在哪」也「能听到谁在叫」
GPS 定位成功的那一刻,手机至少知道两件事:
- **自己大概在哪里**(户外开阔地带精度 5~10 米)
- **此刻能扫到哪些 Wi-Fi,各 BSSID 的 RSSI 是多少**(这是手机本来就会扫的)
这两件事发生在同一秒、同一个地点——这就是建库要的全部原材料。
试想:100 万部手机,每部每天 GPS 成功 50 次,每次上报 5 个 BSSID,那就是 **2.5 亿条「位置 + Wi-Fi」记录,完全零成本**——用户毫不知情,运营商毫不知情,连路由器的老板都毫不知情。
二、上报什么:一行记录的字段
每次「GPS 锁定 + Wi-Fi 扫描」同时发生时,手机会生成这样一条记录加密上传:
| 字段 | 例子 | 说明 | |---|---|---| | 估算位置 | 纬度 31.2304, 经度 121.4737 | 来自 GPS | | 可见 BSSID 列表 | AA:BB:CC:11:22:33 等 | 路由器身份证号 | | 对应 RSSI | -45dBm, -68dBm 等 | 各路信号强度 | | 时间戳 | 2024-03-15 14:32 | 哪一刻扫的 |
服务器收到后只做一件事:**把「BSSID」和「最近一次被看到时的位置」绑在一起**。这一绑,就把「某台路由器的位置」从「未知」变成「大致已知」——至于这台路由器属于谁、是谁装的,数据库并不关心,它只记 BSSID 和位置。
三、整条链路:上行建库 + 下行定位
flowchart TD
A[手机打开地图 App] --> B[GPS 定位成功<br/>手机知道位置]
B --> C[同一瞬间扫描 Wi-Fi<br/>得到 BSSID 列表]
C --> D[加密回传<br/>位置 + Wi-Fi 列表]
D --> E[(Google/Apple<br/>全球 Wi-Fi 位置库)]
E --> F[另一部手机<br/>扫到相同 BSSID]
F --> G[室内也能定位<br/>无需 GPS]
读这张图要顺着走两遍:
- **上行(建库)**:左半边,GPS 已知 → 顺带采集 → 上传
- **下行(定位)**:右半边,新用户扫到 Wi-Fi → 查库 → 拿位置
**这两条链路用的是同一份 Wi-Fi 扫描数据,但目的完全相反**——一个是把 Wi-Fi 的位置写进库,一个是从库读出 Wi-Fi 的位置。
四、一个具象例子
2015 年,巴西某个小镇的卡车司机开着货车过镇。Android 手机 GPS 锁定了 5 颗卫星,知道自己在南纬 23°、西经 46° 附近。同一秒手机扫到 3 个 Wi-Fi(一家镇卫生院、一家小卖部、司机自家邻居),全部匿名上传给 Google。
三年后,一个法国游客走进同一家镇卫生院喝咖啡。室内 GPS 没信号,他打开 Google Maps。手机扫到一模一样的 3 个 BSSID 和差不多的 RSSI,查库,命中那条 2015 年的记录——**即使 Google 从来没派人去过这个镇,它也能告诉你「你在这家卫生院里」**。
这就是众包的威力:一家商业公司要覆盖这种长尾地区,几辈子都做不到;**但只要有一部手机路过一次,数据库就有了**。
五、与 Skyhook 时代对比
| 维度 | Skyhook 时代 | Google/Apple 时代 | |---|---|---| | 谁在采集 | 雇人开车的专业团队 | 全球几十亿用户的手机 | | 触发条件 | 公司主动派任务 | 用户一开机就在采 | | 覆盖速度 | 几年覆盖一座城市 | 几年覆盖全球 | | 更新速度 | 要重新派车扫 | 路由器一移动,下次有人路过就更新 | | 成本 | 高昂 | 接近零 |
**这种「把用户变成采集员」的模式不是 Google 发明的**——PlaceEngine 当年就想做众包,但当时只有 PC、不会移动、没有 GPS,所以做不大。真正让众包起飞是三件事凑齐:
- 智能手机普及(人手一部会移动的设备)
- GPS 几乎时刻在线(位置锚点随手可得)
- 始终在线的网络(数据能立刻传回云端)
三件凑齐之后,**Wi-Fi 指纹库的覆盖范围从「被扫过的街道」直接跳到「有人类活动的地方」**。
六、这一节埋下的伏笔
但这个机制也有个明显的暗面:
- 用户的手机在不知情时持续上报位置
- 路由器的位置被第三方公司在用户不知情时收集
- 一旦 BSSID 能定位,那 BSSID 是谁家的(哪户人家、哪家店)就成了可查询的信息
**这就是下一节要聊的「隐私双刃剑」——也是为什么 iOS 14 和 Android 10 之后,你手机的 Wi-Fi MAC 地址会开始随机变。**
**要点:** Google/Apple 利用「手机在 GPS 定位成功的瞬间既知道自己位置、又能扫到周围 Wi-Fi」这一巧合,让全球几十亿部手机零成本地上报「位置 + Wi-Fi 列表」建库,把 Skyhook 时代要专业团队扫街几周的工作量分散到每一次普通用户使用地图的瞬间——这是 Wi-Fi 定位能全球可用的根本原因。
Wi-Fi 定位的隐私双刃剑
一个让你有点不舒服的推想
上一节我们说每部手机都在零成本地帮 Google/Apple 建库。听起来是技术奇迹,但顺着想一步就会发现:
> 今天早上 8:50,你走在北京国贸地铁站出口。手机自动扫到 3 个 Wi-Fi(星巴克、便利店、某户人家),GPS 同时告诉你「你现在在国贸」。**你毫不知情**。但 Google/Apple 此刻已经收到一条记录:「(你的大致位置)附近有这些 BSSID」。
这事的两边,**你(手机主人)和路由器主人,都没同意过**。
---
一、这把剑到底伤到了谁
Wi-Fi 定位建库,本质是在建一张**关于「谁在哪、谁装了什么」的全球地图**。它至少伤到两类人:
1. 路由器主人——他可能只是买了个路由器回家
你家里那台路由器的 BSSID,已经被无数次路过的手机上传过。它在 Google 的库里对应着**你家这栋楼、这个单元、这层**的经纬度。
任何人下载一个 Wi-Fi 分析 App(甚至一个开源脚本),**走到你家楼下一扫**,就能把「AA:BB:CC:11:22:33 = 中国某市某区某路某号某楼某户」反查出来。
这不是理论风险——**家暴受害者、被跟踪者的真实担忧就在这里**:stalker 只需要一根带 Wi-Fi 的天线,就能在受害者楼下确认「我到了她的楼」。
2. 路人甲乙丙——你的轨迹被悄悄记下了
你今天的轨迹:8:30 出小区门、8:50 国贸地铁、9:18 公司楼下咖啡馆、9:32 进办公室——
这些**不在你手机本地**,而是在一张你不知道、看不见、删不掉的服务器日志里。你授权了吗?没有。你能查吗?不能。
更糟的是,**「匿名位置」基本等于半实名位置**:MIT 2013 年的研究证明,只要 4 个时间-地点坐标,95% 的人就能被唯一识别——因为「家-地铁-公司」这种行为模式太独特了。把名字抹掉也没用。
---
二、行业的应对:MAC 地址随机化
意识到问题后,2019~2020 年 Apple 和 Google 几乎同时做了同一件事:**手机扫描 Wi-Fi 时不再用真实 MAC,而是用一个临时的、每次连接都会换的「假 MAC」**。
- Android 10(2019):默认开启 MAC 随机化
- iOS 14(2020):所有 Wi-Fi 连接都使用私有地址
用一个类比说清楚:
> 以前你逛商场,每家店铺都认得你的脸(真实 MAC)。现在你**每次进店换一张面具**(随机 MAC),店铺只知道「来过一个人」,不知道是不是同一个回头客。
它要防的不是定位功能本身,而是**「别人用 Wi-Fi 探测来跟踪你这台具体设备」**这件事。
---
三、关键:MAC 随机化**只挡住了一半**
很多人以为「开了 MAC 随机化,Wi-Fi 定位就废了」——**没有**。这俩是不同的东西,必须分清:
| 层面 | 谁的身份 | 能不能随机化 | |---|---|---| | 路由器 BSSID | 路由器硬件烧死的 MAC | **不能**——出厂即固定 | | 客户端 MAC | 手机扫描时用的 MAC | **能**——iOS 14 / Android 10 起随机 |
Wi-Fi 位置库依赖的是**前者**(路由器身份),所以定位功能**完全没受影响**。Google 拿着全球路由器 BSSID 照样能给你定位。
随机化真正挡掉的是**第二行**:以前零售店可以靠监听你手机的 MAC 来追踪你逛了多久、去没去过化妆品区;现在不行了,因为你每次接入都换身份。
flowchart TD
A[手机扫描 Wi-Fi] --> B[老版本: 真实 MAC]
A --> C[iOS 14 / Android 10: 随机 MAC]
B --> D[设备可被持续跟踪]
C --> E[设备轨迹被打断]
F[路由器 BSSID 始终固定] --> G[位置库照常工作]
G --> H[定位不受影响<br/>但路由器的住址一直在库中]
---
四、一个具象的反面例子
2019 年荷兰研究者在鹿特丹做了一件事:他们用一台无人机在城市上空飞,持续扫描地面 Wi-Fi 信号。**每扫到一个 BSSID 就立刻查全球 Wi-Fi 数据库**。
30 分钟内,他们在地图上点出了 100 多户人家的**精确住址**——那些人从未同意过。
这就是双刃剑最锋利的那一面。
---
五、行业还在做的进一步修补
意识到 MAC 随机化只解决一半问题后,大公司在做更激进的事:
- **端侧建库**:Apple iOS 13 起,收集 Wi-Fi 位置数据走 on-device aggregation + 差分隐私上传,原始数据尽量不离开手机
- **BSSID 删除请求**:Google 提供公开表单,你可以让 Google 把你家路由器的 BSSID 从库中删掉
- **加密上行**:扫描结果上行是加密的,但**加密只防监听者,不防 Google 自己**
也就是说,**根治仍然依赖法规(如 GDPR)和用户主动行使删除权**。
---
**要点:** Wi-Fi 定位能全球可用的代价,是路由器的住址和路人的轨迹都被悄悄收集;MAC 地址随机化(iOS 14 / Android 10)只能阻止「用 Wi-Fi 持续跟踪你这部手机」,挡不住「BSSID 位置库照常工作」——根治还得靠法规、端侧处理和用户的删除请求。
学习笔记
Wi-Fi 定位原理:你家路由器的意外贡献(学习笔记)
一、MAC 地址与 BSSID
- **MAC 地址**:烧录在网卡硬件里的 48 位全球唯一编号,前 24 位是 IEEE 分配的厂商代码,后 24 位是厂商自编序列号。
- **BSSID**:Wi-Fi 定位真正用到的身份,本质是路由器那枚 Wi-Fi 芯片的 MAC 地址。一台路由器可同时广播多个 Wi-Fi 网络(2.4G / 5G、访客网络等),每路广播对应一个 BSSID。
- 简记:**MAC 是「这台设备的身份证」,BSSID 是「这个 Wi-Fi 信号的身份证」**。
二、BSSID 为什么能当「灯塔编号」
相对运营商基站,Wi-Fi 定位有质的飞跃:
- **数量级飞跃**:全中国运营商基站合计约几百万个小区,而每台家用路由器就贡献一个 BSSID——一栋居民楼几十个、一座商场几百个。
- **密度飞跃**:基站主要覆盖马路、城里几百米一个,进了楼里信号就飘;Wi-Fi 路由器深入「每一户、每一家店、每间办公室」。
- **天然被动**:和 GPS、基站一样,手机只接收路由器周期性广播的 Beacon 帧,不主动连网、不耗流量、不需密码,定位动作对路由器完全透明。
三、地理固定性:路由器能当「锚点」
- **位置稳定**:家用/商用路由器装好就少挪动,是大量「自然形成」的固定信号源——只要不搬家电,BSSID 就一直待在那。
- **信号范围小**:家用 Wi-Fi 覆盖十几米到几十米,穿一堵墙就掉一截。手机能稳定扫到某 BSSID,就基本反推出手机离该路由器不远。
- 共同前提:只要某 BSSID 的位置我们知道,扫到它的手机的位置就能被估算出来——这是「信号测距派」与「指纹库派」共同的基础。
按距手机远近
按距手机远近:GPS 卫星(2 万公里高空,约 30 颗可见星)→ 运营商基站(几公里到几十公里,几百万个小区)→ Wi-Fi 路由器(十几米到几十米,全球数亿台)。手机同时接收这三层信号。
五、信号测距派:RSSI 换距离
- **RSSI**:手机听到路由器喊话时量出的「响度」。
- 经验公式:`距离 d ≈ 10^((发射功率 − 接收强度) / (10 × n))`,n 为环境因子(空旷大厅接近 2,普通写字楼 3~4)。
- 直觉:**RSSI 每变弱 6dB,距离大约变远一倍**。
- **三球相交**:算出手机到三个路由器 A、B、C 的距离 d₁、d₂、d₃,以各路由器为圆心画圆,三圆共同交叠区域即手机位置(与上一关基站定位几何同款,差别仅锚点从「几公里外」换成「几十米内」)。
测距派的命门:室内多径
- 路由器喊话不是直线到达手机,而是先撞墙、穿桌、被人体吸收、绕天花板反射,多路径叠加后的总能量被记为 RSSI。
- 同一物理距离下,RSSI 会在 **±10dB** 之间漂移,换算成距离误差可达 **±50% 甚至更多**——三个圆都「胖」了 50%,交叠区从点变模糊云。
- **结论**:RSSI 是「粗糙的响度计」而非精确的尺子;空旷地勉强能用,写字楼/商场/家里的复杂环境下精度仅十几米。
六、指纹库派:从「距离」到「模式」
核心思路转变:**从「还原距离」改为「识别模式」**——不直接换算距离,而是把「在某个位置能听到的信号组合」本身当作该位置独一无二的「指纹」去匹配。
1. 什么是「指纹」
- 手机 Wi-Fi 列表每条记录包含两样东西:**BSSID**(路由器身份证号)+ **RSSI**(信号强度)。
- 在某固定位置扫到的一组「BSSID + 各自 RSSI」即**指纹向量**;换个位置,路由器和强度组合都会变。
- **关键认知**:指纹不是「某一条信号有多强」,而是「一组信号的强度组合」——整组稳定,单独哪一条都不可靠。
2. 数据库怎么建:先采样再使用
- **离线建库**:在目标区域每 5 米 × 5 米的网格点扫一遍 Wi-Fi,把「BSSID + RSSI」与真实坐标一起入库。
- **在线匹配**:手机当前扫到一组指纹,去库里找「最像」的一条,返回对应坐标。
3. 怎么判断「像不像」
- **KNN(K-近邻)**:算当前指纹与库中每条指纹的相似度(如 RSSI 在 BSSID 维度上的差值平方和),挑出最像的 K 条(K=3 或 5),用它们坐标的平均值作为位置。
- **概率模型**:在库上跑出「某 BSSID 在每个位置上的强度分布」概率函数,看到当前观测时用贝叶斯反推最可能是哪个位置;对采样不均的鲁棒性更好。
- 两者输入都只是一组 BSSID + 各自 RSSI,**不关心 RSSI 是否真等于某段距离**——这正是指纹派绕开上一节困难的办法。
七、众包建库:每部手机的贡献
1. 核心洞察
GPS 定位成功的那一刻,手机同时知道两件事:
- 自己大概在哪里(户外开阔地带精度 5~10 米);
- 此刻能扫到哪些 Wi-Fi,各 BSSID 的 RSSI 是多少。
两件事发生在同一秒、同一个地点——这就是建库要的全部原材料。例:100 万部手机,每部每天 GPS 成功 50 次,每次上报 5 个 BSSID = **2.5 亿条「位置 + Wi-Fi」记录,零成本**,用户、运营商、路由器老板全不知情。
2. 上报什么:一行记录的字段
每次「GPS 锁定 + Wi-Fi 扫描」同时发生,手机加密上传:估算位置(经纬度)、可见 BSSID 列表、对应 RSSI、时间戳。服务器只做一件事:**把「BSSID」和「最近一次被看到时的位置」绑在一起**——至于路由器属于谁、是谁装的,数据库不关心,它只记 BSSID 和位置。
3. 双向链路
- **上行(建库)**:GPS 已知 → 顺带采集 → 上传,零成本把 BSSID 位置写进库。
- **下行(定位)**:新用户室内扫到相同 BSSID → 查库 → 拿位置,无需 GPS。
- **同一份 Wi-Fi 扫描数据,目的相反**:一个写库,一个读库。
八、隐私双刃剑
- 每次手机 GPS 成功 + Wi-Fi 扫描同时发生时,Google/Apple 已收到一条「(你的大致位置)附近有这些 BSSID」记录。**手机主人和路由器主人都没同意过**。
- 这把剑至少伤到两类人:
- **路由器主人**:可能只是买了个路由器回家,但自家 BSSID 已被无数次路过的手机上传,库中对应自家楼栋、单元、楼层的经纬度。任何人拿 Wi-Fi 分析 App 走到楼下一扫即可反查到这串 BSSID。
- (讲义进一步推想中讨论……)
第 5 关 · 混合定位:手机如何选与融
理解手机定位系统如何根据场景在 GPS、基站、Wi-Fi 之间自动选择与融合,以及传感器在其中扮演的角色。
单一技术的盲区:混合方案的必要性
出门前你一定会看天气:晴天穿薄外套,下雨换雨披,零下裹羽绒服——没人会指望一件衣服应对所有天气。手机定位也是同样的道理:GPS、基站、Wi-Fi 就像它的「三件衣服」,每件都有最合适的场景,也都有「穿不出去的尴尬时刻」。
你已经在前三个模块里把这三件衣服各自看清了:GPS 靠卫星测距、精确但怕遮挡;基站靠查 Cell ID 表、稳定但粗;Wi-Fi 靠热点指纹、室内强但户外空旷。这一节我们用三个真实场景,把这三种技术的盲区钉死——从而看清「为什么必须混合」。
三个高难场景
flowchart TD
A[出门定位的三个高难场景] --> B[场景1 地下车库]
A --> C[场景2 刚出地铁]
A --> D[场景3 陌生大商场]
B --> B1[GPS 穿不透楼板]
B --> B2[基站覆盖圆太大]
B --> B3[Wi-Fi 锚点稀疏]
C --> C1[GPS 冷启动要等几十秒到几分钟]
C --> C2[基站切换出现跳变]
D --> D1[GPS 多径反射误差大]
D --> D2[基站太粗 找不到店]
D --> D3[Wi-Fi 主场 但户外失效]
B1 & B2 & B3 --> E1[三种技术 全部瘸腿]
C1 & C2 --> E2[切换瞬间最难定位]
D1 & D2 & D3 --> E3[Wi-Fi 主场 但非万能]
E1 & E2 & E3 --> F[没有银弹]
F --> G[必须混合 智能切换 互相补位]
场景一:地下车库
你开车进地库,手机信号从四格掉到一两格。要导航去出口,三种技术同时瘸腿:
- **GPS**:头顶几层混凝土楼板把卫星信号几乎完全挡住,谈不上定位。
- **基站**:信号可能剩一两格,但基站定位本质是「查小区表」,返回的是一个几百米到几公里半径的圆。地库里上百辆车都落在同一个圆里,谁也分不清。
- **Wi-Fi**:地库里路由器本来就少,绝大多数家用 Wi-Fi 装在自家客厅里,地下车库这种空间未必被数据库收录到。即使能扫到几个 BSSID,能用的「锚点」也少得可怜。
这个场景里,三种技术**全部瘸腿**。
场景二:刚走出地铁站
上一秒你还在地下,月台连 GPS 都收不到;下一秒你踏上地面,理论上终于能「看到」天空。但实际情况是:
- **GPS 不会立刻给出精确位置**。它需要几十秒到几分钟的「冷启动」——重新搜星、解析星历、算距离。你出闸机那一刻打开地图,那颗小蓝点可能要原地打转半天才能稳定下来。
- **基站在切换瞬间会出现跳变**。地铁里你连的是沿线某个专用小区,出了地面立刻要切到街边的小区,地图上你的位置可能从「地下某处」瞬移到几百米外的某个基站覆盖圆心。
这个**场景切换的瞬间**,是定位系统最难受的时刻之一。
场景三:陌生的大商场
周末去一个新开的购物中心,地图 App 应该把你定位到「XX 商场 3 楼 2301 商铺门口」才算合格。但:
- **GPS** 在这种钢混结构 + 大面积玻璃幕墙的环境里会被多径反射折腾得很惨,误差经常拉到几十米。商场里几十家店挤在一起,几十米的误差意味着你可能被定位到马路对面那栋楼。
- **基站** 精度太粗,几百米的覆盖圆根本定位不到商场里具体哪一层哪个店。
- **Wi-Fi 才是这个场景的主场**。商场每个店铺、每层楼都有几十个 AP,共同构成一张密集的「指纹网」——这正是 Wi-Fi 定位真正发光的舞台。
但别忘了,**Wi-Fi 也有自己的盲区**:空旷的户外、停车场、远离任何路由器的野外,它同样失效。
把三件事并排放
| 场景 | GPS | 基站 | Wi-Fi | |------|-----|------|-------| | 地下车库 | ✗ 收不到 | △ 太粗 | △ 锚点少 | | 刚出地铁 | △ 冷启动慢 | △ 切换跳变 | 取决于环境 | | 陌生商场 | △ 多径误差大 | ✗ 太粗 | ✓ 主场 |
没有任何一列是全 ✓,也没有任何一行是全 ✗。**每种技术都是「某些场景天才、某些场景瘸腿」**。这就是混合方案存在的根本原因——
不是某一种技术不够好,而是**没有任何一种技术能在所有场景里都足够好**。手机必须学会根据场景在三者之间动态切换,并且把多个结果融合起来互相补位。下一节我们就来看,手机里的系统是怎么判断「我现在到底在哪种场景」的。
**要点:** 单一技术都有盲区(GPS 怕遮挡、基站怕室内、Wi-Fi 怕空旷),现实场景又复杂多变——这就是为什么手机必须同时用上多种定位技术,再按场景智能切换和融合。
场景判断:室内外与动静态的识别
你不会在地铁里举望远镜看路,也不会在客厅里戴墨镜出门——做任何事之前,你都会先「判断场景」再选对工具。手机定位系统也是同样的思路:在它决定该用 GPS、基站还是 Wi-Fi 之前,必须先回答两个问题——**我在室内还是室外?** **我在动还是静?** 这一节我们就把这个「场景判断」拆开看。
一、怎么判断室内还是室外
手机不是凭一个开关拍脑袋的,它会综合好几路线索同时投票:
- **GPS 卫星可见数**:能看到 4 颗以上、信号强度高 → 大概率在户外;只能看到 0–1 颗、信号极弱 → 大概率被遮挡。
- **Wi-Fi 扫描结果**:扫到一堆像「TP-LINK_XXXX」「CMCC-XXXX」这种家用/办公路由器名 → 典型的室内指纹;扫到的 SSID 稀少、且都是户外远距离的 → 大概率在街上。
- **基站类型**:连的是覆盖半径几公里的宏站、信号强 → 户外;连的是装在楼宇里的皮站/飞站 → 室内。
- **环境光传感器**:室内灯光通常比较稳定;户外阳光动态范围更大。但这条线索很弱——拉窗帘就会骗到它,所以只能当参考。
- **磁力计**:室内钢筋、水管、家电多,地磁场被搅得很乱;户外相对干净。所以磁力计读数的「抖动程度」也是一条辅助线索。
这些线索**单独看都不可靠,合起来才靠谱**。手机里跑着一个小型分类器(多数是手工规则,少量是用机器学习训练的小模型),把上面所有信号加权融合,最后输出一个概率:「70% 户外」或「92% 室内」——而不是一个非黑即白的开关量。
二、怎么判断在动还是静
动静态判断同样重要:你站着不动时,手机没必要每秒都去算一次新位置;你开车跑 80 km/h 时,定位必须采得更密才追得上。这就要靠**运动传感器**:
- **加速度计**:站着不动时,它读到的主要就是重力(约 9.8 m/s²),数值非常平稳。走路时会看到周期性的小尖峰(每一步一次),开车则是低频、振幅更大的颠簸。三种波形长得完全不一样,分类器一眼能分清。
- **陀螺仪**:你转身、扭头、转弯时,它会报出角速度。这个用来区分「原地打转」和「直线前进」非常关键——光看加速度计分不出这俩。
- **GPS 多普勒反算速度**:只要 GPS 能锁星,它顺便就能告诉你当前速度。速度 ≈ 0 → 静态;5 km/h → 步行;60+ km/h → 车里。这条只要 GPS 在线就极其准确。
- **气压计变化率**:上下楼时气压会快速变化;待在原地气压基本平稳。
这些数据合起来,分类器输出类似「静态,置信度 95%」或「步行,速度约 1.2 m/s」这样的结果。
三、判断完之后,触发什么动作
场景判断不是为判断而判断,它的输出会**直接驱动一个决策树**——决定主用哪种技术、用多高的频率。
flowchart TD
A[场景判断持续运行] --> B{室内还是室外}
B -->|户外| C{动还是静}
B -->|室内| D{动还是静}
C -->|移动中| E[主用 GPS 1Hz 高频采样]
C -->|静止| F[GPS 降频 或仅用基站]
D -->|移动中| G[主用 Wi-Fi + 传感器推算]
D -->|静止| H[Wi-Fi 单次定位后进入省电]
E --> I[持续监听 准备下一次判断]
F --> I
G --> I
H --> I
举几个你熟悉的真实瞬间对应一下:
- **城市街道上走路**:户外 + 移动中 → GPS 跑满 1 Hz,精度好,电量中。
- **走进商场大门**:卫星信号几乎瞬间消失,Wi-Fi 列表瞬间变长 → 分类器翻转为「室内」 → 切到 Wi-Fi 为主,GPS 可以关掉省电。
- **坐地铁过隧道**:GPS 没信号,基站只剩一个、Wi-Fi 全无 → 场景变成「地下、高速移动」 → 退守到「基站 + 加速度计/陀螺仪的惯性推算」,定位靠「猜」。
- **站在商场里看橱窗**:分类器给出「静态 + 室内」→ Wi-Fi 算一次定到位,然后系统进入低功耗模式,可能 30 秒才唤醒一次看你有没有动。
四、为什么这一步常被人忽略
如果有人问你「手机怎么定位的」,多数人会直接跳到「GPS 多少颗卫星、三球相交」那一层。但其实**场景判断是这一切的前置环节**——没有它,再准的 GPS 也用错地方,再省电的设计也省不下来。
这也就解释了三个日常感受:
- 同一个 App 在不同地方,背后的定位技术可能**完全不同**——屏幕上一个静止的小蓝点,背后跑的是一整套在不停决策的「控制回路」。
- 手机「耗电怪」很多时候不是 GPS 一直开着,而是**场景判断出错了**,误以为你在户外一直狂开 GPS。
- 厂商宣传里那些「秒定」「超省电」之类的口号,本质都是在卖这个判断+切换算法,而不是单点技术。
下一节我们会看,**当 GPS 罢工、Wi-Fi 也靠不住时**,加速度计、陀螺仪、磁力计、气压计这些「替补队员」是怎么帮系统继续猜你在哪的。
**要点:** 手机不会一上来就同时启用三种定位技术——它会先用「信号特征 + 运动传感器 + 气压/磁力」综合判定**室内外与动静态**,再据此动态切换主用技术、调整采样频率,从而在精度、响应、耗电之间取得平衡。
传感器融合:加速度计、陀螺仪、磁力计与气压计
想象你在一个完全看不见的商场里被蒙上眼睛,要从一楼走到三楼的某家咖啡店。你没有地图、没有 GPS,但只要你还记得起点、并且能感知每一步走了多远、转向了多少度、上下了几层楼——你就能**靠自己的「身体」估算**自己现在在哪。
手机里那一堆小传感器,做的就是这件事。它们在 GPS 和 Wi-Fi 都帮不上忙的时候,接管定位任务,给出「我猜你在这里」的答案。
一、四个替补队员,各管一摊
**1. 加速度计——数步子、量步幅**
加速度计能感知手机被多大幅度地加速。站着不动时,它读到的是固定的重力;走路时,每迈一步都会产生一个明显的波形尖峰——就像心电图上的 QRS 波一样有规律。
手机数这些尖峰就知道你走了几步。再根据经验公式估算步幅(步子大、步幅长,步行慢、步幅短;大致在 0.5–0.8 米之间),就能算出「我大概走了多少米」。
这一步叫**航位推算(PDR, Pedestrian Dead Reckoning)**:从已知起点出发,靠「步数 × 步幅」和方向,一路累加推出当前位置。
**2. 陀螺仪——感知「我转了多少度」**
加速度计只能告诉你「走了多远」,但你要是不告诉它方向,它就会算出一条「我径直往前走」的直线——而实际上你早就拐弯了。
陀螺仪感知的是角速度(每秒转多少度)。你左转 90°,陀螺仪会输出一个 90 度/秒的尖峰;持续右转 360°,它会累加出 360°。这一步直接告诉你**朝向变化了多少**。
**3. 磁力计——给出「绝对方向」**
陀螺仪的问题是「漂移」:积分时间长了,误差会越来越大。站在原地不动时,陀螺仪理论上应该读 0,但因为噪声会慢慢漂出几度、十几度,越积越离谱。
磁力计(电子罗盘)感知的是地磁场方向,告诉你「我手机的顶边现在指向哪」。它给出的是**绝对方向**,不漂移,所以经常被拿来做陀螺仪的「校准锚」——隔几秒用磁力计纠一次陀螺仪的误差。
注意:磁力计在室内很容易被旁边那台 iPad 充电器或者大铁门干扰,读数会突然跳一下。所以工程师不会单独信它,而是把它和陀螺仪做加权融合。
**4. 气压计——告诉我「上了几楼」**
气压计测量的是大气压力。压力随着高度增加而减小——大致每升高 8 米,气压下降 1 hPa(百帕)。你从一楼走到三楼,差不多升高 8–10 米,气压变化约 1 hPa。
这个变化用加速度计是看不出来的(它分不清重力分量和上下加速度),用陀螺仪也分不清(你站着坐直梯它不动)。**只有气压计能稳定告诉你「我现在比三分钟前高了一层楼还是低了一层楼」**——这在大型商场找洗手间、找店时极其关键。
二、它们怎么一起工作
四个传感器不是各干各的然后简单加在一起,而是**实时融合**。下面这张图是它们如何协作把「我猜你在哪」算出来:
flowchart LR
A[加速度计] -->|步数+步幅| E[融合引擎]
B[陀螺仪] -->|角速度/转向| E
C[磁力计] -->|绝对方向 校准陀螺仪| E
D[气压计] -->|高度变化| E
E -->|当前位置估计+不确定度| F[定位系统输出]
G[GPS/Wi-Fi偶尔给出绝对位置] -->|整体校正累积误差| E
注意最下面那条回路:GPS 或 Wi-Fi 偶尔给出一个相对可靠的绝对位置后,会**反哺**给融合引擎去校正航位推算的累计误差。否则你盲走 10 分钟,估计位置可能已经偏出真实位置 50 米。
三、一个真实的场景:商场里找店
你在一个 5 层商场里,要从 1 楼入口走到 3 楼优衣库:
- 进门:Wi-Fi 指纹告诉你「现在 1 楼东门」,这是起点。
- 乘扶梯上楼:陀螺仪没怎么动(你被扶着),加速度计也没明显波形(你站着),**但气压计发现气压下降了约 1.2 hPa**——系统判定你上升了约 10 米,**对应 2–3 层**。
- 进入 3 楼水平走动:加速度计开始数步子(每步约 0.65 米),陀螺仪报告你左转 30°、又左转 45°,磁力计持续给出「面朝北偏东 15°」。融合引擎每 200 ms 刷新一次「你大概在 3 楼某处」。
- 走出店门口那一刻:GPS 重新锁星,给出绝对位置(误差 8 米),融合引擎立刻用它把过去 5 分钟的航位推算误差**整体校正**一遍,避免越走越偏。
整个过程,**没有一个单一传感器独自决定答案**——这正是「融合」两个字的本意。
**要点:** 当 GPS 和 Wi-Fi 都罢工时,手机靠加速度计(数步子)、陀螺仪(感转向)、磁力计(给绝对方向)、气压计(判楼层)四件套做航位推算,再被偶尔出现的绝对位置校正,从而在室内和地下继续「猜」你在哪。
加权融合:多源位置的投票
想象你刚到一个陌生的城市,要找一家叫「张三的小馆」。你身边围着四个当地人,每个人都给你指一个方向:甲说「东边三条街」,乙说「东北方向两条街」,丙说「东边一条街」,丁说「我也说不清,但应该在东边」。
你不会只听某一个人的——你会**根据每个人说话的「底气」决定信多少**。说话最笃定、平时最靠谱的那个人意见占大头;说话含糊的那个意见就只听一点点。然后你把所有人的意见按权重加起来,得出一个「综合判断」。
手机定位里这个过程有个更专业的名字——**加权融合**。GPS、基站、Wi-Fi、传感器航位推算……每时每刻都在往系统里塞「我猜你在 X 点」,而融合引擎要做的事,就是给每一个猜测**打分**,然后**按分数合成一个最终答案**。
一、三把打分尺:精度、置信度、新旧
1. 精度(精度半径)
每个定位技术自己就会标一个「我现在大概准不准」:
- GPS 报告「3 米精度」——意思是「我的猜测落在以这个点为圆心、半径 3 米的圆里,概率 68%」
- 基站报告「200 米精度」——大饼画得稀
- Wi-Fi 报告「15 米精度」——居中
这个数字越**小**,说明这个来源越**靠谱**,在融合时就该占**越大的权重**。直觉上你大概也想到了——**精度越差的意见,权重应该越低**。这就是工程师们常说的「**反方差加权**」(精度越小、方差越小,方差越小权重越大)。
2. 置信度(这一刻的可信度)
同一个 GPS 信号,在不同环境下「可置信度」不一样:
- 头顶有 12 颗卫星、空旷无遮挡 → 置信度高
- 头顶只有 4 颗卫星、还有一半被高楼挡了 → 置信度低
系统会给每个源一个「此刻我对自己有多大把握」的分数。基站信号在演唱会现场被挤爆时,置信度会骤降;Wi-Fi 路由器旁边突然摆了个金属柜,置信度也会跟着掉。
3. 新旧(测出来多久了)
20 秒前 GPS 给的坐标和现在真实位置可能差了 50 米(你走了一段)。所以**越早的测量,越不值钱**。系统会给每个候选位置一个「新鲜度」折扣——每过一秒,权重就乘一个小于 1 的衰减系数(典型的半衰期是几秒)。
这就是为什么你在地图 App 上看到定位图标会「飘一下」然后稳住——前两秒的旧值还在和最新值融合,还没被刷掉。
二、怎么「加」:加权平均
假设某一刻系统手里有这几个候选:
| 来源 | 报告位置 | 精度 | 置信度 | 权重 | |------|---------|------|--------|------| | GPS | A 点 | 5 m | 高 | 0.60 | | Wi-Fi | B 点 | 20 m | 中 | 0.30 | | 基站 | C 点 | 200 m | 低 | 0.08 | | 航位推算 | D 点 | 15 m | 中 | 0.02(但很新) |
注意看航位推算那一行——精度看起来还行,但**权重却很小**。原因是它**没有绝对锚点**,全靠历史推测;走越久误差越大,所以系统整体上不太敢信它。但它**新鲜度极高**(刚刚才数过你的步子),所以也不是零分。
最终坐标 = A×0.60 + B×0.30 + C×0.08 + D×0.02
flowchart TD
G[GPS: A点 精度5m] -->|权重0.60| F
W[Wi-Fi: B点 精度20m] -->|权重0.30| F
B2[基站: C点 精度200m] -->|权重0.08| F
P[航位推算: D点 15m] -->|权重0.02| F
F[加权融合 算出最终坐标] --> O[地图上的小蓝点]
这四个点本来分散在不同地方,**加权平均算出来的是一个「折中」位置**。这个折中点通常比任何一个原始猜测都更接近真实位置——这就是融合的价值:**用数学的「平均」,换掉单源的「赌一把」**。
三、一个具体例子:地铁出站那一刻
你出地铁的瞬间,App 上看到定位跳了三次:
- **刚出闸机(t=0)**:地下 GPS 完全收不到,Wi-Fi 几乎没有,基站独大。它给的位置是「地铁口西侧 150 米处」——你看着地图上那个点离你起码 200 米,明显偏了。系统内部:基站权重 0.85,航位推算权重 0.15。
- **走出地面 2 秒(t=2s)**:GPS 突然锁到 3 颗星,立刻报「西侧 25 米」——虽然精度还没稳,但数字对得上。系统内部权重开始重排:GPS 跳到 0.55,Wi-Fi 0.20,基站 0.10,航位推算 0.15。最终坐标 = 0.55×GPS + 0.20×Wi + 0.10×基站 + 0.15×航位。地图上小蓝点瞬间「飞」到你头上。
- **5 秒后(t=5s)**:GPS 精度稳到 5 米,Wi-Fi 也匹配上了,航位推算因为新鲜度衰减已经掉到 0.05。最终坐标 = 0.65×GPS + 0.25×Wi + 0.05×基站 + 0.05×航位。位置彻底稳了。
三次刷新,每次权重分布都不同——这就是**动态打分**的威力。
四、为什么「投票」这个词不完全准确
用「投票」打比方其实有点偷懒,因为真正的加权融合**不是简单的「少数服从多数」**,而是**每个候选都参与决定最终位置**——哪怕 GPS 自信到 100%,最终坐标里也还是会有基站那 0.001 的份量。这是为了**防某一来源突然抽风**:万一 GPS 这一刻因为多径效应跳到一个离谱的位置,其他源的存在能让最终结果不至于跟着跳到天涯海角。
**要点:** 多个定位源同时给候选位置,系统按「精度 × 置信度 × 新鲜度」三把尺打分,算出每个源的权重,然后**加权平均**得到最终坐标——这一过程每秒会刷新好几次,每次都重新打分,融合让位置既稳又准。
工程权衡:快、准、省电的「教学三角」
想象你在商场里迷路了,给朋友打电话问路。
**方案 A**:你每 1 秒打一次电话——「我在哪?我在哪?我在哪?」朋友每次都给你精确到门牌号的位置。但你的手机 20 分钟就没电了,朋友也快被你烦死了。
**方案 B**:你每 5 分钟打一次——手机能用一整天。但你已经走错了三个楼道才被纠正。
**方案 C**:你不打电话——电池 100%,但你已经走到商场外面去了。
定位系统也面临完全一样的选择。工程师在设计时必须同时盯着三件事:
- **快**:你动了之后多久能被识别出来(响应延迟)
- **准**:识别出来的位置误差多大(精度)
- **省电**:定位芯片每小时烧掉多少电池(功耗)
这三件事的英文常被简化成 latency / accuracy / power。这个口诀有助于记忆,所以教学上会叫它「三角」——但**请记住它是一个比喻**,并不是严格的「三难困境」(trilemma 那种只能三选二的死结)。真实工程里常常是「多选二点五」、「不同场景侧重不同」,三者并不是非此即彼。
一、为什么鱼与熊掌难兼
回到商场那个例子。**省电的方法很简单——少干活**。但定位这件事「少干」就意味着:
- 不开 GPS = 准度直接掉一个量级
- 不频繁刷新 = 你走了 200 米 App 才发现
- 不用 Wi-Fi 扫描 = 室内完全瞎
换句话说,**每提升一分「快」或「准」,几乎都要拿电池去换**。这不是工程偷懒,是物理规律:GPS 芯片搜索卫星要耗电、解算伪距要耗电、Wi-Fi 扫描要发射探测帧、传感器要持续采样……每件事都在从电池里抽血。
最直观的反例:把 GPS 设成每秒刷新一次、持续使用,半小时就能把手机电量从 100% 拽到 60% 以下——这就是为什么默认设置下 App 不会这么干。
flowchart LR
A[提高定位频率] -->|变好| B[响应更快]
A -->|变差| C[更费电]
A -->|变好| D[轨迹更连续]
E[降低定位频率] -->|变好| F[更省电]
E -->|变差| G[响应变慢]
E -->|变差| H[可能漏掉短距离移动]
I[只用基站不用 GPS] -->|变好| J[很省电]
I -->|变差| K[精度差几十倍]
二、厂商的两条主线策略
1. 自适应:随场景切换频率
聪明的办法是**不是任何时候都那么拼**:
- 屏幕关着、App 在后台、你还站着不动 → 系统每 30 秒甚至每分钟定位一次(极省电)
- 你开始走路 → 加速度计一抖,系统自动把频率提到每秒 1 次
- 你打开地图 App、点导航 → GPS 全力开火
- 你进入隧道 → GPS 一秒就丢,系统切到基站 + 航位推算
这背后的硬件功臣是**协处理器**(iPhone 上的 Motion Coprocessor、安卓的 Sensor Hub)。它是个小芯片,**主 CPU 睡着时它依然在听加速度计、陀螺仪**,判断「这人是不是在动」。只有它喊一嗓子「动了」,主 CPU 才会被叫醒去启动 GPS。
2. 批处理:攒一波再发
另一种思路是**攒几个定位请求一起处理**。比如你后台有 5 个 App 都要定位:天气、地图、运动、新闻、约车。如果每个 App 都自己跑一遍 GPS,手机要被刷爆 5 次。
安卓的 Fused Location Provider(融合位置服务)和 iOS 的 Significant Location Change(重大位置变化)就做这件事——**只让系统层跑一次定位,然后把结果分给所有 App**。原本 5 次的耗电变成 1 次,App 们拿到的坐标还都一样。
三、作为一个产品经理怎么看这件事
理解了三角之后,你再去看手机设置里那些「高精度定位」开关,意义就清晰了:
- **关掉高精度** = 拒绝用 GPS,只用基站/Wi-Fi。地图上那个蓝点会变得很粗,但**续航会显著变长**。
- **允许 App 后台定位** = 那个 App 在你不用它的时候依然能拿位置(可能用于轨迹、广告、统计)。**这是隐私与省电之外第三个角**——本次课不展开,但你做产品决策时要知道。
厂商的「出厂默认」策略也能猜出立场:苹果更激进地限制后台定位(隐私优先),安卓更激进地提供高精度模式(响应优先),但两者都在硬件层用协处理器拼命省电——**省电永远是底线**,因为用户对续航的感知最直接。
**要点:** 「快、准、省电」是教学上的三角比喻而非严格三难——真实工程是「在每个场景下动态切档」:屏幕关且不动时降到 30 秒一次的频率省电,导航时全速运转;协处理器监听动作、批处理服务合并请求,都是为了同时拿到三者的最大公约数。
学习笔记
混合定位:多源协作与权衡
一、单一技术的盲区:为何必须混合
没有任何一种定位技术能覆盖所有场景,三种技术各有「瘸腿」时刻:
- **GPS**:靠卫星测距,精确但怕遮挡;冷启动需几十秒到几分钟
- **基站**:查小区表,稳定但精度粗(覆盖圆半径可达几百米到几公里)
- **Wi-Fi**:靠热点指纹,室内强但户外空旷时锚点稀疏
**三个高难场景**说明三技术同时失效:
- **地下车库**:GPS 被楼板完全挡住;基站返回大圆覆盖,数百辆车落在同一圆内;Wi-Fi 锚点稀疏
- **刚出地铁**:GPS 冷启动需数十秒到数分钟;基站切换瞬间出现跳变,位置可能瞬移到数百米外
- **陌生大商场**:GPS 在钢混结构+玻璃幕墙环境下多径反射严重,误差可达数十米;基站太粗定位不到具体楼层与店铺;Wi-Fi 才是此场景主场,但户外空旷时同样失灵
结论:**没有银弹**,必须混合、智能切换、互相补位。
定位系统在选择主用技术前
定位系统在选择主用技术前,必须先回答两个问题:我在室内还是室外?我在动还是静?
室内外识别(多线索投票)
- **GPS 卫星可见数**:可见 4 颗以上且信号强→户外;0–1 颗且极弱→被遮挡
- **Wi-Fi 扫描结果**:扫到大量家用/办公路由器名→室内指纹;SSID 稀少且为远距离户外热点→户外
- **基站类型**:连宏站(覆盖半径数公里)→户外;连皮站/飞站→室内
- **环境光传感器**:室内灯光稳定,户外阳光动态范围大(弱线索,拉窗帘即可欺骗)
- **磁力计**:室内钢筋、水管、家电干扰使地磁场紊乱,读数抖动大;户外相对干净
这些线索**单独看都不可靠,合起来才靠谱**。分类器输出概率(如「70% 户外」「92% 室内」),而非非黑即白的开关量。
动静态识别(靠运动传感器)
- **加速度计**:静止时读数平稳(约 9.8 m/s² 重力);步行呈周期性小尖峰;开车呈低频大幅颠簸
- **陀螺仪**:区分「原地打转」与「直线前进」的关键
- **GPS 多普勒反算速度**:只要 GPS 锁星即可给出准确速度,0≈静态、5 km/h≈步行、60+ km/h≈车内
- **气压计变化率**:上下楼时快速变化,静止时平稳
分类器输出类似「静态,置信度 95%」或「步行,速度约 1.2 m/s」的结果。
场景判断驱动的决策树
- 户外+移动中→主用 GPS,1 Hz 高频采样
- 户外+静止→GPS 降频或仅用基站
- 室内+移动中→主用 Wi-Fi+传感器推算
- 室内+静止→Wi-Fi 单次定位后进入省电
三、传感器融合:PDR 替补上场
当 GPS 与 Wi-Fi 都帮不上忙时,手机里的运动传感器接管定位,靠「身体感知」推算位置。
四个传感器各管一摊
- **加速度计——数步子、量步幅**:从波形尖峰数出步数,按经验公式估算步幅(约 0.5–0.8 米),累加得到位移
- **陀螺仪——感知转向角速度**:积分得到「转了多少度」,补偿加速度计的方向缺失
- **磁力计——绝对方向校准**:给出地磁场方向,不漂移,但易受室内金属物体干扰,需与陀螺仪加权融合
- **气压计——高度变化**:每升高 8 米气压下降约 1 hPa;只有气压计能稳定区分上下楼
从已知起点出发
从已知起点出发,靠「步数×步幅」+方向+高度变化累加推出当前位置。
四个传感器的输出汇入融合引擎
四个传感器的输出汇入融合引擎,结合 GPS/Wi-Fi 偶尔给出的绝对位置**反哺校正**累计误差。否则盲走 10 分钟,估算位置可能已偏出真实位置 50 米。
每种技术每时每刻都在塞「我猜你在 X 点」
每种技术每时每刻都在塞「我猜你在 X 点」,融合引擎要给每个猜测打分,再按分数合成最终答案。
三把打分尺
- **精度(精度半径)**:精度数字越小越靠谱,权重越大(反方差加权)
- **置信度(此刻的可信度)**:同一信号在不同环境下可信度不同(如演唱会现场基站置信度骤降)
- **新旧(新鲜度)**:越早的测量越不值钱,每过一秒权重乘以小于 1 的衰减系数(典型半衰期几秒)
加权平均
每个来源按其权重参与平均:精度差的来源权重低,航位推算虽新鲜但因无绝对锚点整体权重小。最终坐标=各源坐标×各自权重之和。
五、工程权衡:快、准、省电
工程师必须同时盯三件事:
- **快(响应延迟)**:动了之后多久能被识别
- **准(精度)**:识别出的位置误差多大
- **省电(功耗)**:定位芯片每小时烧掉多少电池
三者在真实工程中常是「多选二点五」或「不同场景侧重不同」,并非只能三选二的死结。