TECHNICAL WIKI · 技术手册

GNSS 卫星定位:原理与信号仿真实现

GPS、北斗、Galileo、GLONASS —— 四大全球导航卫星系统,让一枚几十元的芯片就能在地球任意角落算出自己的位置。本手册用尽量直白的语言讲清楚:定位究竟是怎么发生的、信号一路上被"打了哪些折扣",以及我们的 GNSS 信号模拟器如何在合法封闭环境里精确"重放"这一切。

≈ 12 分钟阅读· 6 个章节
01 · 核心原理 · PRINCIPLE

定位的本质,是精确地测距

卫星定位的核心只有一句话:如果你知道自己离若干个"位置已知"的点各有多远,就能反推出自己在哪。卫星就是这些位置已知的参照点——它们在两万公里高空,时刻广播着自己的位置与时间。

用时间,丈量距离

卫星信号以光速传播。信号里"盖着"一个精确的发射时刻,接收机收到时记下到达时刻,两者之差 Δt 乘以光速 c,就是卫星到接收机的距离。这里有个惊人的数量级:1 纳秒的计时误差 ≈ 0.3 米的距离误差。所以每颗卫星都搭载原子钟,把时间守到纳秒级。

但接收机为了便宜,用的是普通石英钟,本身带着一个未知的"钟差"。于是我们量到的并不是真实距离,而是含钟差的 "伪距"(pseudorange) —— 这个词,是理解后面一切的钥匙。

三球交会,四星定位

已知到一颗卫星的距离,你就落在以它为球心的一个球面上;两颗卫星,两球相交成一个圆;三颗卫星,三球交会到一个点 —— 这就是"三边定位"。那为什么手机总说"需要至少 4 颗卫星"?因为除了 x、y、z 三个坐标,还有接收机钟差这个第四未知数。四个未知数,就需要至少四颗卫星,联立方程一起解。看得到的卫星越多,解算越稳、越准。

GROUND r₁r₂r₃Δt 接收机
图 1 · 三球交会与四星解算(第 4 颗卫星用于解出接收机钟差 Δt)

卫星此刻在哪里?—— 星历

要用卫星当参照点,得先精确知道它自己在哪。卫星在导航电文里播发一组 星历 (ephemeris) 参数 —— 本质是开普勒轨道根数,再加上一系列摄动改正项。接收机代入公式,就能算出任意时刻卫星的三维位置与速度。星历会随时间"过期",因此需要不断更新。

时间,是这套系统的灵魂

整个 GNSS 建立在统一的时间基准上(GPS 时、北斗时……)。卫星钟的漂移、相对论效应、信号收发的硬件时延 —— 任何一处时间没对齐,都会直接放大成米级的定位误差。可以说,定位问题,首先是一个授时问题

02 · 空中信号 · SIGNAL

太空里播发的,究竟是什么

一颗卫星的信号,其实是三层内容叠在一起。理解了这三层,就理解了"测距的时间信息"到底藏在哪里。

① 载波CARRIER ② 测距码PRN / CDMA ③ 导航电文NAV DATA 调制合成BPSK
图 2 · 载波 × 测距码 × 导航电文 三层调制

① 载波是上千兆赫的正弦波,负责把信号"扛"到接收机。② 测距码 (PRN) 是一段公开、伪随机的 0/1 序列,像每颗卫星独有的"指纹":它让接收机能在同一个频率上分辨出不同卫星(这就是 CDMA),也正是它承载了测距用的精确时间信息。③ 导航电文是最慢的一层数据,把星历、钟差参数、卫星健康状态等播给接收机。

现代系统还会在多个频点上同时播发(GPS L1/L2/L5、北斗 B1/B2/B3……)。多星座、多频段不仅让可见卫星更多、遮挡环境下更可靠,还能用双频组合直接抵消掉大部分电离层误差 —— 这是高精度定位的基础,也正是我们的模拟器要做到并行 48 通道、覆盖 1176–1610 MHz 的原因。

03 · 传播误差 · PROPAGATION

信号一路上,经历了什么

从卫星到接收机的两万公里,信号会被一层层"打折"。要想仿真得像、定位得准,就得把这些损耗一项项建模出来 —— 这恰恰是一台严肃模拟器和一个玩具之间的分水岭。

电离层延迟Klobuchar 8 参数 对流层延迟仰角 / 高度相关 相对论 · 群延迟TGD / ISC 建筑 · 反射面 多径反射 接收机
图 3 · 信号传播路径上的主要误差源

主要的"折扣"包括:电离层延迟(随太阳活动剧烈变化,工程上常用 Klobuchar 8 参数模型改正)、对流层延迟(与卫星仰角、测站高度相关)、相对论效应(卫星高速运动又处于较弱引力场,钟走得更快,须修正,含轨道偏心率项)、群延迟 TGD/ISC(不同频点间的硬件时延偏差)、多径(信号经建筑/地面反射后与直达波叠加)以及卫星钟差(用 a0/a1/a2 多项式描述)。

正因如此,我们内置了一整条损耗与误差模型链 —— Klobuchar 电离层、仰角相关对流层、相对论与群延迟修正、仰角功率衰减。生成的因此不是"理想信号",而是逼近真实天空的信号;只有这样,拿它做出来的测试才真正有意义。

04 · 我们的实现 · IMPLEMENTATION

在软件里,重建整片星空

GNSS 信号模拟器做的事,是把前面的流程"倒着走一遍":给定一个场景(时间、地点、运动轨迹),算出每颗卫星相对接收机的位置、伪距与多普勒,再合成出对应的射频信号,喂给接收机。它让研发和测试不必受限于真实天气、真实轨迹,可以在合法的封闭环境里随时复现任意场景 —— 弱信号、高动态、特定星座配置……

这条路并非从零开始。开源社区里,GPS-SDR-SIM、GNSS-SDR 等项目很早就验证了"用软件定义无线电 (SDR) 生成 GNSS 基带信号"的可行性 —— 通常是单星座、单频点、离线生成一段 IQ 文件再回放。我们站在这些工作的肩膀上,但把它推进到了工程可用的另一个量级。

实时信号引擎 · 7×24 持续运行 · 不断流 / 不漂移 场景 & 星历SCENARIO 卫星轨道解算POS · RANGE 调制合成CODE × CARRIER 误差 & 损耗模型PROPAGATION IQ → SDR 射频RF FRONT-END Klobuchar · 对流层 · 相对论 · 群延迟低成本 SDR 兼容→ 送入接收机天线
图 4 · 从场景到射频:软件定义 GNSS 信号生成链路

首先是可靠性。离线生成文件的老办法跑不了长测试。我们做的是实时信号引擎,支持 7×24 小时持续运行,长时间不断流、不累积漂移 —— 耐久测试、值守监控这类真实场景才终于可行。

其次是成本。高端信号源动辄数十万。我们在算法层面做了大量优化,让引擎兼容低成本 SDR 终端,把原本属于实验室的能力压到大众可负担的价位 —— 让更多团队、更多个人真正用得起。

最后是性能。相比单星单频的原型,我们做到多星座多频段并行、48 通道,配合上一节完整的误差模型与 1 kHz 更新率,在定位速度与精度上都有实质提升,足以支撑高动态、高精度场景的验证。更细的能力清单,可参见首页的 技术参数

05 · 终端侧 · ON THE RECEIVER

终端如何完成一次定位

前几节从系统角度描述了定位的原理;本节转到终端一侧。对接收机而言,一次定位通常经过捕获、跟踪、解调与解算四个阶段,在毫秒到秒的量级内连续完成,之后持续输出结果。

捕获与跟踪

接收机开机后,首先要在噪声中找到卫星信号。卫星相对地面高速运动,其载波存在明显的多普勒频移,测距码也带有未知的码相位。捕获阶段在"多普勒频率 × 码相位"构成的二维搜索空间中,用本地复制码与接收信号做相关运算;当两者对齐、相关值出现显著峰值时,即判定该颗卫星被捕获。此后进入跟踪阶段:码跟踪环(DLL)维持码相位对齐,载波跟踪环(PLL)维持载波锁定,二者共同保证接收机稳定、连续地从信号中读出观测量。任一环路失锁,都需要重新捕获。

解调、解算与首次定位时间

跟踪稳定后,接收机完成位同步与帧同步,解调出导航电文,获得星历与钟差等参数;据此计算各卫星在该时刻的位置,再结合各自的伪距,通过最小二乘或卡尔曼滤波求解接收机的位置、速度与时间(PVT)。从开机到输出第一个坐标所需的时间称为首次定位时间(TTFF):在无先验信息的冷启动下通常需要数十秒,而在已缓存星历与大致位置的热启动下往往只需数秒。可见卫星越多、几何分布越好(PDOP 越小),解算结果越稳定、越精确。

GNSS 芯片 + 操作系统底层(应用不可见) 天线ANTENNA 射频前端RF / 下变频 捕获 · 跟踪DLL / PLL 解调 · 解算PVT 应用层 · APP 系统定位服务LOCATION SVC APP经纬度 + 精度 仅获得定位结论
图 5 · 终端信号处理链路:应用层只能取到最终坐标,触达不到信号细节

手机等消费终端:应用层拿不到信号细节

需要特别说明一点:在手机等消费终端上,信号的接收、下变频、捕获、跟踪与电文解调,全部由 GNSS 芯片(或 SoC 内的射频与基带模块)连同操作系统底层完成。应用程序(APP)通常无法接触原始观测量或信号处理过程,只能通过系统提供的定位服务获得一个最终结论——一组带有精度估计的经纬度坐标。(部分平台开放了读取原始测量值的接口,但这既非所有设备都具备,也仍处于系统授权与框架的约束之下。)

这也说明了定位测试为何应作用在信号层或系统层,而不是在应用层修改数值:模拟器面向的是芯片本身。它在射频前端重放足够真实的卫星信号,使整条链路按真实逻辑完成捕获、跟踪与解算,终端据此自行算出预设的位置——这样的验证才具有可信度,也才能覆盖弱信号、多径、高动态等真实条件下的行为。

06 · 结语 · CLOSING

既知其然,也知其所以然

从一束微弱的太空信号,到屏幕上一个稳定的坐标,中间是测距、解算、授时与误差建模的层层配合。理解了原理,你会更清楚一台好的模拟器该在哪些地方下功夫;而我们,正是在可靠性、成本与性能这三条线上,把开源的雏形打磨成了可用于严肃工程的产品。

想进一步了解具体能力与合作方式,欢迎回到 产品首页,或与我们联系。

↑ 返回顶端
附录 · 完整技术参数 · APPENDIX

AnyLocate技术参数

以下为核心规格摘要,"✓"表示支持,其余为具体指标;完整参数以随软件包提供的手册及实际版本为准。

01 频点 / 星座 CONSTELLATION
GPSL1CA / L1C
北斗 BDSB1I / B1C
GalileoE1 / E5a
GLONASSG1 / G2
02 通道与射频 RF / CHANNELS
通道分配48
射频频段1176 – 1610 MHz
IQ 量化2 / 4 / 8 / 16 bit
天线支持单路发射
观测输出
RF 功率可调
输出方式SDR 实时推流 · IQ 文件离线生成
并发通道动态分配(上限随主机算力 / SDR 带宽)
03 场景支持 SCENARIOS
静态定点
基础动态
自定义动态
持续运行 7×24
覆盖范围全球任意位置 / 任意时刻
时间系统UTC · GPS · 北斗 · Galileo · GLONASS
多星座组合任意星座 / 信号自由组合
04 动态性能 DYNAMICS
更新率1 kHz
速度≤ 100 m/s
加速度≤ 2 G
定位精度≤ 5 m
多普勒按星-机相对速度实时建模
05 误差与传播模型 PROPAGATION
电离层损耗模型Klobuchar 8参数
对流层损耗模型仰角 / 高度相关
卫星时钟模型a0/a1/a2 多项式
相对论修正偏心率修正项
群延迟TGD / ISC 频间偏差
仰角功率衰减
06 注入与高级功能 ADVANCED
自定义星历注入
星历在线热切换运行中平滑切换,全程不失锁(交叉淡化)
导航信息注入
定向 / 周翻转
UTC 模型
卫星选择控制按星座 / PRN 屏蔽单颗 + 仰角掩码
配置方式JSON / XML
外部接口MCP / CLI
// 完整参数手册随软件包提供 · 具体能力以实际版本为准