定位的本质,是精确地测距
卫星定位的核心只有一句话:如果你知道自己离若干个"位置已知"的点各有多远,就能反推出自己在哪。卫星就是这些位置已知的参照点——它们在两万公里高空,时刻广播着自己的位置与时间。
用时间,丈量距离
卫星信号以光速传播。信号里"盖着"一个精确的发射时刻,接收机收到时记下到达时刻,两者之差 Δt 乘以光速 c,就是卫星到接收机的距离。这里有个惊人的数量级:1 纳秒的计时误差 ≈ 0.3 米的距离误差。所以每颗卫星都搭载原子钟,把时间守到纳秒级。
但接收机为了便宜,用的是普通石英钟,本身带着一个未知的"钟差"。于是我们量到的并不是真实距离,而是含钟差的 "伪距"(pseudorange) —— 这个词,是理解后面一切的钥匙。
三球交会,四星定位
已知到一颗卫星的距离,你就落在以它为球心的一个球面上;两颗卫星,两球相交成一个圆;三颗卫星,三球交会到一个点 —— 这就是"三边定位"。那为什么手机总说"需要至少 4 颗卫星"?因为除了 x、y、z 三个坐标,还有接收机钟差这个第四未知数。四个未知数,就需要至少四颗卫星,联立方程一起解。看得到的卫星越多,解算越稳、越准。
卫星此刻在哪里?—— 星历
要用卫星当参照点,得先精确知道它自己在哪。卫星在导航电文里播发一组 星历 (ephemeris) 参数 —— 本质是开普勒轨道根数,再加上一系列摄动改正项。接收机代入公式,就能算出任意时刻卫星的三维位置与速度。星历会随时间"过期",因此需要不断更新。
时间,是这套系统的灵魂
整个 GNSS 建立在统一的时间基准上(GPS 时、北斗时……)。卫星钟的漂移、相对论效应、信号收发的硬件时延 —— 任何一处时间没对齐,都会直接放大成米级的定位误差。可以说,定位问题,首先是一个授时问题。
太空里播发的,究竟是什么
一颗卫星的信号,其实是三层内容叠在一起。理解了这三层,就理解了"测距的时间信息"到底藏在哪里。
① 载波是上千兆赫的正弦波,负责把信号"扛"到接收机。② 测距码 (PRN) 是一段公开、伪随机的 0/1 序列,像每颗卫星独有的"指纹":它让接收机能在同一个频率上分辨出不同卫星(这就是 CDMA),也正是它承载了测距用的精确时间信息。③ 导航电文是最慢的一层数据,把星历、钟差参数、卫星健康状态等播给接收机。
现代系统还会在多个频点上同时播发(GPS L1/L2/L5、北斗 B1/B2/B3……)。多星座、多频段不仅让可见卫星更多、遮挡环境下更可靠,还能用双频组合直接抵消掉大部分电离层误差 —— 这是高精度定位的基础,也正是我们的模拟器要做到并行 48 通道、覆盖 1176–1610 MHz 的原因。
信号一路上,经历了什么
从卫星到接收机的两万公里,信号会被一层层"打折"。要想仿真得像、定位得准,就得把这些损耗一项项建模出来 —— 这恰恰是一台严肃模拟器和一个玩具之间的分水岭。
主要的"折扣"包括:电离层延迟(随太阳活动剧烈变化,工程上常用 Klobuchar 8 参数模型改正)、对流层延迟(与卫星仰角、测站高度相关)、相对论效应(卫星高速运动又处于较弱引力场,钟走得更快,须修正,含轨道偏心率项)、群延迟 TGD/ISC(不同频点间的硬件时延偏差)、多径(信号经建筑/地面反射后与直达波叠加)以及卫星钟差(用 a0/a1/a2 多项式描述)。
正因如此,我们内置了一整条损耗与误差模型链 —— Klobuchar 电离层、仰角相关对流层、相对论与群延迟修正、仰角功率衰减。生成的因此不是"理想信号",而是逼近真实天空的信号;只有这样,拿它做出来的测试才真正有意义。
在软件里,重建整片星空
GNSS 信号模拟器做的事,是把前面的流程"倒着走一遍":给定一个场景(时间、地点、运动轨迹),算出每颗卫星相对接收机的位置、伪距与多普勒,再合成出对应的射频信号,喂给接收机。它让研发和测试不必受限于真实天气、真实轨迹,可以在合法的封闭环境里随时复现任意场景 —— 弱信号、高动态、特定星座配置……
这条路并非从零开始。开源社区里,GPS-SDR-SIM、GNSS-SDR 等项目很早就验证了"用软件定义无线电 (SDR) 生成 GNSS 基带信号"的可行性 —— 通常是单星座、单频点、离线生成一段 IQ 文件再回放。我们站在这些工作的肩膀上,但把它推进到了工程可用的另一个量级。
首先是可靠性。离线生成文件的老办法跑不了长测试。我们做的是实时信号引擎,支持 7×24 小时持续运行,长时间不断流、不累积漂移 —— 耐久测试、值守监控这类真实场景才终于可行。
其次是成本。高端信号源动辄数十万。我们在算法层面做了大量优化,让引擎兼容低成本 SDR 终端,把原本属于实验室的能力压到大众可负担的价位 —— 让更多团队、更多个人真正用得起。
最后是性能。相比单星单频的原型,我们做到多星座多频段并行、48 通道,配合上一节完整的误差模型与 1 kHz 更新率,在定位速度与精度上都有实质提升,足以支撑高动态、高精度场景的验证。更细的能力清单,可参见首页的 技术参数。
终端如何完成一次定位
前几节从系统角度描述了定位的原理;本节转到终端一侧。对接收机而言,一次定位通常经过捕获、跟踪、解调与解算四个阶段,在毫秒到秒的量级内连续完成,之后持续输出结果。
捕获与跟踪
接收机开机后,首先要在噪声中找到卫星信号。卫星相对地面高速运动,其载波存在明显的多普勒频移,测距码也带有未知的码相位。捕获阶段在"多普勒频率 × 码相位"构成的二维搜索空间中,用本地复制码与接收信号做相关运算;当两者对齐、相关值出现显著峰值时,即判定该颗卫星被捕获。此后进入跟踪阶段:码跟踪环(DLL)维持码相位对齐,载波跟踪环(PLL)维持载波锁定,二者共同保证接收机稳定、连续地从信号中读出观测量。任一环路失锁,都需要重新捕获。
解调、解算与首次定位时间
跟踪稳定后,接收机完成位同步与帧同步,解调出导航电文,获得星历与钟差等参数;据此计算各卫星在该时刻的位置,再结合各自的伪距,通过最小二乘或卡尔曼滤波求解接收机的位置、速度与时间(PVT)。从开机到输出第一个坐标所需的时间称为首次定位时间(TTFF):在无先验信息的冷启动下通常需要数十秒,而在已缓存星历与大致位置的热启动下往往只需数秒。可见卫星越多、几何分布越好(PDOP 越小),解算结果越稳定、越精确。
手机等消费终端:应用层拿不到信号细节
需要特别说明一点:在手机等消费终端上,信号的接收、下变频、捕获、跟踪与电文解调,全部由 GNSS 芯片(或 SoC 内的射频与基带模块)连同操作系统底层完成。应用程序(APP)通常无法接触原始观测量或信号处理过程,只能通过系统提供的定位服务获得一个最终结论——一组带有精度估计的经纬度坐标。(部分平台开放了读取原始测量值的接口,但这既非所有设备都具备,也仍处于系统授权与框架的约束之下。)
这也说明了定位测试为何应作用在信号层或系统层,而不是在应用层修改数值:模拟器面向的是芯片本身。它在射频前端重放足够真实的卫星信号,使整条链路按真实逻辑完成捕获、跟踪与解算,终端据此自行算出预设的位置——这样的验证才具有可信度,也才能覆盖弱信号、多径、高动态等真实条件下的行为。
既知其然,也知其所以然
从一束微弱的太空信号,到屏幕上一个稳定的坐标,中间是测距、解算、授时与误差建模的层层配合。理解了原理,你会更清楚一台好的模拟器该在哪些地方下功夫;而我们,正是在可靠性、成本与性能这三条线上,把开源的雏形打磨成了可用于严肃工程的产品。
想进一步了解具体能力与合作方式,欢迎回到 产品首页,或与我们联系。
AnyLocate技术参数
以下为核心规格摘要,"✓"表示支持,其余为具体指标;完整参数以随软件包提供的手册及实际版本为准。