手机怎么知道你在哪?
上一篇《时间真的会变慢吗?》说到 GPS 卫星上的钟:「GPS 卫星离地球远,引力弱,钟每天快约 45 微秒;减去速度让它慢的 7 微秒,合起来每天快约 38 微秒。」卫星上的一只钟快了几十微秒,和你手机上的那个蓝点,有什么关系?这一篇就来看看,手机到底是怎么知道你在哪的。
先猜一猜
常听到的说法有:「手机给卫星发信号,卫星就找到了你」;「卫星从天上看得见你」。
都不对。手机从来不给 GPS 卫星发信号,卫星也看不见你,它们甚至不知道有多少人在用。手机只是在「听」:听天上的卫星报时。在室内,手机还会借助 Wi-Fi 和通信基站来定位,这一篇只讲卫星。
打雷:数一数,就知道多远
看到闪电以后,数一数几秒才听到雷声:声音每秒走约 340 米,数到 3,打雷的地方就在 1 公里左右以外。
GPS 用的是同一个道理,只是把声音换成了无线电,速度是光速,每秒约 30 万公里。每颗卫星都在不停地广播:「我是几号卫星,我现在在这里,现在是几点几分几秒」。手机记下收到的时刻,减去卫星发出的时刻,就知道信号在路上走了多久,乘上光速,就是离这颗卫星多远。卫星离地面约 2 万公里,信号要走 67 到 86 毫秒(1 毫秒是千分之一秒)。
天上的 32 颗 GPS 卫星
GPS 是美国的卫星导航系统。第一颗卫星 1978 年发射,1995 年全面运行,现在由美国太空军管理,正在工作的有 32 颗。它们离地面约 2 万公里,分在 6 个倾斜 55° 的轨道面上,每 11 小时 58 分绕地球一圈。《地球转一圈,真的是 24 小时吗?》里说过,地球对着星星转一圈只要 23 小时 56 分,卫星正好绕两圈。所以过了 23 小时 56 分,卫星又回到你头顶同一片天空,比前一天早了 4 分钟左右。
这样安排,是为了让地球上任何地方、任何时候,头顶都有好几颗卫星。上面的模拟里,北京在地平线 10° 以上,一直能看到 7 到 10 颗。每颗卫星上都装着三台原子钟(铷钟,有的还有一台铯钟),一台在用,其余备用;用来发民用信号的功率只有几十瓦,和一只老式灯泡差不多。
一个距离,一个圆
所有卫星的钟都对着同一个标准时间,地面站每天都在校。卫星同时报时,可它们离你远近不同,信号到达手机的时刻也就不同:近的先到,远的要晚几毫秒。手机记下每个信号的到达时刻,就能算出离每颗卫星有多远。
只知道离一颗卫星有多远,还定不了位置:离它这么远的点,在空间里围成一个大球面。为了好画,先在平面上看:离一颗卫星的距离确定了,你就在以它为圆心的一个圆上;加上第二颗卫星,两个圆交于两点;再加上第三颗,三个圆只有一个公共点,就是你所在的地方。
可是这里有个大问题:记录到达时刻,用的是手机自己的钟。手机里负责定位的芯片带着一块普通的石英钟,远远比不上卫星上的原子钟。它也不是屏幕上显示的那个时间:屏幕上的时间是从通信网络对来的,差个零点几秒,平时谁也不会注意,可定位差不起。钟差 1 微秒(百万分之一秒,10−6 秒),距离就差 300 米;钟差 1 毫秒,就差 300 公里。
解决的办法很巧妙:干脆把「手机的钟差了多少」也当成一个未知数。手机的钟要是快了,每个信号都显得晚到了同样一段时间,每个距离都多算同样一截,三个圆就交不到一点上(上图右边);把钟差一点点往回调,等到三个圆正好交于一点,位置和钟差就都算出来了。在平面上,未知数是两个方向加上钟差,一共三个,所以图里用了三颗卫星;在真实的三维空间里,未知数是东西、南北、上下,再加上钟差,一共四个,所以至少要收到 4 颗卫星。
顺便,手机也就得到了一个和原子钟对齐的时间,误差不到一微秒。通信基站、电网、银行交易,很多都靠 GPS 来对时。
藏在噪声里的信号
GPS 信号从 2 万公里外传来,到了地面已经非常弱,大约只有 10−16 瓦,比接收机自己的噪声还弱几十倍。那手机是怎么听出来的?
靠「对暗号」。每颗卫星都有自己的一串暗号:1023 个「正、负」排成的固定序列,叫 C/A 码,每毫秒重复一遍。手机事先知道每颗卫星的暗号,把它挪来挪去,和收到的一团噪声逐一对比:没对齐的时候,正负互相抵消,什么也没有;一旦对齐,1023 位每一位都对上,就冒出一个高高的尖峰。
尖峰出现的位置,就是信号的延迟。一位码只有 977.5 纳秒(1 纳秒是 10−9 秒),光在这段时间里走 293 米;接收机还能把尖峰的位置找得更细,细到一位码的百分之一左右,也就是几米。
卫星的位置和时刻,也藏在信号里,每秒只发 50 位,把完整的轨道参数发一遍要约 30 秒。所以手机通常先从网上把这些数据下好(叫「辅助 GPS」),打开地图几秒就能定位。
从地心出发,几步就算准
有了到 4 颗以上卫星的距离,还得解出位置。这些方程不好直接解,手机用的是「先猜、再改」:先随便猜一个位置和钟差,算一算按这个猜测,到各颗卫星应该是多远,和测到的比一比,差多少就往那个方向挪一点,再算、再改。
上图就是这样算出来的:从地球中心出发,离北京有 6369 公里;改一次,剩 1362 公里;再改,52 公里、76 米,第四次就到了 4 米,再改也不变了。剩下的 4 米来自测距本身的误差。同时,手机的钟快了多少,也算出来了:0.999997 毫秒,和我们假设的 1 毫秒只差几纳秒。
定位为什么会「飘」
在开阔的地方,手机定位一般能准到 5 米左右。可在高楼之间,蓝点常常乱跳。原因有好几个。
第一,卫星的分布。距离测得一样准,卫星分得越开,交点就越准;卫星挤在一小片天上,几个圆几乎平行,交点就会沿着某个方向拉得很长。
同样 3 米的测距误差,开阔地上 95% 的结果落在 6 米以内;在街上只剩 4 颗卫星,结果沿南北方向拉成一长条,95% 落在 109 米以内。好在今天的手机不只收 GPS:同一时刻,北京上空地平线 10° 以上,GPS 有 8 颗,中国的北斗有 26 颗,欧洲的伽利略有 8 颗,俄罗斯的格洛纳斯有 10 颗,一共 52 颗。北斗 2020 年开始全球服务,在亚太地区卫星特别多。
第二,楼房的反射。信号撞到玻璃幕墙再弹过来,路就绕远了,算出的距离偏长。
第三,电离层。离地面几十到几百公里高的地方,空气被阳光电离成带电的粒子,信号穿过它会被拖慢,相当于多走了几米到几十米。高端一点的手机(2018 年起)能同时收两个频率的信号:两个频率被拖慢的程度不一样,一比较,就能把电离层的影响算掉大半。
电离层还会被太阳搅乱。《太阳除了光,还送来了什么?》里说:「2024 年 5 月,这股风猛地一吹,芝加哥、纽约,一直到美国南方,很多人都在自家后院看到了极光。」同一场磁暴把电离层搅得一团乱,美国北达科他州的农民,本来能准到几厘米的自动驾驶拖拉机,那几天偏了 3 米左右,有的农民只好停下来不播种了。
还有一段历史:2000 年 5 月 2 日以前,GPS 给民用信号故意加了误差,定位只能准到四五十米。那天美国关掉了这个误差,一夜之间,民用定位就准到了 6 米左右。
卫星上的钟:相对论要算两笔账
现在回到开头那只每天快 38 微秒的钟。
第一笔账,工程师在卫星上天以前就算好了:把卫星钟的频率调低一点点,从标准的 10.23 兆赫,调到 10.229 999 995 43 兆赫,低了 4.4647 × 10−10。卫星上天以后,引力和速度的效应正好把它「补」回来,从地面看,它就走得和地面的钟一样快。
第二笔账,每颗卫星不一样。卫星的轨道并不是正圆,离地球近的时候跑得快、引力强,钟慢一点;离得远的时候,钟快一点。这个起伏最多有几十纳秒,相当于十几米。手机在计算每颗卫星的时刻时,按一个公式把它算掉。
上一篇说:「38 微秒,光能跑 11 公里多:如果不把相对论算进去,卫星定位每天会偏出 10 公里左右。」这是把 38 微秒直接乘上光速的估算,很多书里都这么讲。真实的系统还要更复杂一点:所有卫星一起快出来的那一部分,手机会当成自己的钟差一起算掉;地面站也每天在测每颗卫星的钟,发上去修正。所以就算不调,定位也不一定真的每天偏 10 公里。可是不调的话,卫星的钟会和地面的标准时间越差越远,一年就差 14 毫秒,靠 GPS 对时的基站和电网都会跟着错;每颗卫星轨道不一样,各自偏出的那一部分,手机也消不掉。所以这两笔账,一笔也不能少。
一句话:手机只听不说,听每颗卫星报时,算出离它多远,画圆找交点;钟不准,就多听一颗卫星,把钟差也算出来。几米的精度背后,是原子钟、藏在噪声里的暗号,和爱因斯坦的相对论。
我们怎么知道
- 自己看看天上的卫星。安卓手机可以装一个叫 GPSTest 的免费应用,打开就能看到一张和图 1 右边一样的「天空图」:每颗卫星在哪个方向、多高、信号多强,属于 GPS、北斗还是别的系统。站在空地上和站在窗边比一比,看看能收到几颗。苹果手机不给应用看这些数据;可以装 GNSS View 这类免费应用,看按轨道算出来的卫星在天上的位置,但看不到手机实际收到了哪几颗、信号多强。
- 手机的原始数据。从 2016 年起,安卓手机可以把测到的原始距离和时刻输出给应用,研究人员用它来测试新的定位方法。苹果手机没有开放这类数据。
- 厘米级的定位。测量队用的设备不只数码,还数电磁波本身的波峰:GPS 的 L1 信号,一个波长只有 19 厘米,数清楚了就能准到一两厘米。
还不知道什么
太阳什么时候会把电离层搅乱,搅到什么程度,现在还很难提前几天准确预报,就像天气预报里最难的强对流一样。另一个难题是信号太弱:近几年,一些冲突地区附近,常有飞机遇到 GPS 被干扰,甚至收到伪造的信号。怎样让定位不怕干扰,或者在没有卫星的时候也能知道自己在哪,各国都还在想办法。
进阶:方程、信号和数据
伪距方程。第 颗卫星在发射时刻的位置是 ,手机的位置是 ,手机的钟差是 (秒)。测到的「伪距」
包括电离层、对流层、多路径和噪声。未知数是 的三个分量和 ,所以至少要 4 颗卫星。线性化:在猜测值 附近,, 的每一行是 , 是指向卫星的单位矢量;用最小二乘 迭代。图 4:起点 ,误差依次约 6369 公里、1362 公里、52 公里、76 米、4.0 米。
几何精度因子(DOP)。测距误差为 时,位置误差约为 ,DOP 由 算出。图 5:开阔地 8 颗卫星,水平 DOP 约 1.2;街上 4 颗,水平 DOP 约 18。
C/A 码。按 IS-GPS-200 的规定,由两个 10 位移位寄存器生成:G1 的反馈多项式 ,G2 的 ,1 号卫星取 G2 的第 2、6 位相加。码率 1.023 兆码片每秒,长 1023 码片,周期 1 毫秒,一个码片 977.5 纳秒,对应 293 米。L1 载波 1575.42 兆赫,波长 19.0 厘米。导航电文每秒 50 位。
信号强度。规范规定 L1 C/A 信号到达地面的最低功率为 −128.5 dBm(约 瓦);室温下 2 兆赫带宽内的热噪声约 −111 dBm,信号弱约 17.5 dB(约 1/56)。图 3 的模拟:载噪比 dB-Hz,每个码片一个采样,信号与噪声的功率比为 除以码率,约 1/32;对 10 毫秒的数据做相关,尖峰约是背景起伏的 16 倍。
相对论。卫星轨道半径约 26560 公里,速度约 3.87 公里每秒。速度效应: 微秒每天;引力效应: 微秒每天。把地面钟随地球自转的速度和地球的扁形也算进去,规范给出的频率偏移是 ,即每天 38.58 微秒,一年约 14.1 毫秒。椭圆轨道的周期项:, 秒每米, 是偏心率, 是半长轴, 是偏近点角;PRN 07 的 ,振幅约 49 纳秒。另有萨尼亚克效应:信号在路上的 70 多毫秒里,地球带着手机转动了一点(北京的地面速度约 356 米每秒,约 27 米),计算时要在地固坐标系里扣除。
轨道数据和模拟。卫星轨道:CelesTrak 的 GP 根数(GPS、北斗、伽利略、格洛纳斯,历元 2026 年 11 月 4 日到 6 日),按开普勒轨道推算,不计摄动,半天内误差几十公里,用来画图和数可见卫星足够;北斗去掉了不提供公开服务的试验卫星(北斗三号试验星)。北京取北纬 39.90°、东经 116.41°,高度 50 米;时间从 2026 年 11 月 7 日 0 时(世界时)起。图 4、图 5 的「测量值」是用卫星位置算出的真实距离,加上 1 毫秒钟差和 3 米的高斯随机误差。
其他数据。手机在开阔地的定位精度:美国政府 GPS 网站(gps.gov)引用美国导航学会的数据,约 4.9 米。2000 年 5 月 2 日关闭「选择可用性」:美国政府 GPS 网站(gps.gov)公布的一个连续运行参考站(肯塔基州)5 月 1 日和 3 日各 24 小时的对比,水平误差(95%)从 45.0 米降到 6.3 米。2024 年 5 月的拖拉机:新闻报道引用美国国家海洋和大气管理局空间天气预报中心的说法,偏差约 10 英尺。2026 年 4 月起,正在工作的 GPS 卫星为 32 颗(美国太空军)。