模块不是“接收一个坐标”,而是先测出到4颗以上卫星的距离,再用法方程解出自己的经纬度、高度和时钟偏差。整个过程分五步:收信号、捕获跟踪、测伪距、解算、输出。
第1步:卫星信号里到底有什么
导航卫星持续向外广播无线电信号,信号上调制了三类信息:
• 星历(Ephemeris):这颗卫星当前精确的轨道位置,用来算“卫星在哪”。
• 历书(Almanac):所有卫星的粗略轨道,用来判断“天上大概有哪些星”。
• 时间戳:信号发出的精确时刻,用来算“信号飞了多久”。
模块要定位,先得知道卫星在哪、信号什么时候发出。星历和时间的有效性,直接决定了首次定位的快慢——这也是冷启动和热启动差距的来源。
第2步:捕获与跟踪,为什么至少要4颗星
卫星距离地面两万多公里,信号到达地面时已经非常微弱,通常低于热噪声底。模块要在噪声里把特定卫星的伪随机码“相关”出来,这个过程叫捕获;锁定之后持续跟住相位和频率,叫跟踪。
定位解算需要解4个未知数:经度、纬度、高度、接收机时钟偏差。每颗卫星提供一个距离方程,所以至少需要4颗卫星。实际使用中,可见卫星越多,几何分布越好,解算越稳——城市高楼间只有5到6颗星时,精度和可靠性都会明显下降。
这也是SKG122S这类模块强调“可同时跟踪40颗卫星”的原因:不是为了数字好看,而是为了在遮挡环境下仍有足够的可用星参与解算。
第3步:测伪距,把时间换成距离
模块测出信号从卫星到自己的传播时间,乘以光速,得到距离。但这个距离不是真实距离,因为接收机时钟不可能和卫星原子钟一样准,所以叫伪距。
伪距里包含三类误差:卫星钟差、接收机钟差、传播路径延迟。其中接收机钟差正好作为第4个未知数,和解算一起求出来;卫星钟差可以用播发的改正数修正;传播路径延迟则是最麻烦的部分。
第4步:解算,把4个方程解成一组坐标
有了4颗以上卫星的伪距和卫星位置,就得到一个超定方程组。模块内部用最小二乘或卡尔曼滤波求解,输出经度、纬度、高度、速度、时间。
解算不是一次性的:模块每秒都在重新解算,并用历史结果做平滑。这也是为什么刚定位时坐标会“跳几下”,几十秒后才稳定下来。
第5步:输出,NMEA语句和1PPS
解算结果通过串口按NMEA0183协议输出,常见语句包括:
• GGA:时间、经纬度、定位质量、卫星数、海拔。
• RMC:时间、日期、位置、速度、航向。
• GSA:卫星使用情况与精度因子(DOP)。
• GSV:可见卫星及其信噪比。
需要授时的设备,还会同时输出 1PPS 秒脉冲,用作整机的时间基准。
误差从哪来:一张图看清五类来源

对硬件设计的三个启示
1.天线比模块更影响体验。 同样的模块,天线增益、驻波比、净空不同,实际精度能差出一倍。
2.电源纹波会变成定位噪声。 GNSS 信号极弱,DC-DC 的开关噪声一旦耦合进射频前端,表现就是漂移和丢星。
3.不要指望室内定位。 GNSS 需要天空视野,室内、地下、金属机箱内基本无法工作,这类场景要靠惯导、蓝牙或UWB补位。
参数示例(SKG122S,开阔天空)

一句话总结:定位的本质是“用时间换距离,用距离解位置”,四颗星是下限,天线和电源决定上限。