卫星信号 → 捕获跟踪 → 导航电文解析(得到卫星星历) → 伪距 / 多普勒观测值生成 →PVT 解算→ 输出经纬度、速度、时间
从多个通道的信号跟踪到最终的位置、速度、时间解算,是GNSS接收机的“收官”环节。我们可以将这个过程清晰地拆解为几个关键步骤。
假设你已经完成了对至少4颗卫星的信号跟踪,每个通道都输出了以下关键信息:
伪距:测量出的卫星到接收机的距离,包含钟差误差(ρ = 几何距离 + C * [接收机钟差 - 卫星钟差] + 其他误差)。C是光速。
载波相位:更精确但存在整周模糊度的相位测量值。
多普勒频移:反映卫星与接收机相对径向运动的速度。
导航电文:解码后获得的卫星星历(精确轨道位置、钟差参数)、历书、时间等信息。
PVT解算的核心是:用伪距作为基本观测量,通过最小二乘法或卡尔曼滤波进行求解。
早期可以把这个过程简化,因为有的知识专业性太强,我们需要从最简单的方式学起。



导航电文解调:通过监视符号变化(+1或-1),可以解调出50Hz的导航电文数据比特,从而获取卫星星历、钟差等关键信息。
在学校里,一般会把这两部分分别安排成实验,加强学生的实践能力。
要解算接收机的三维坐标和接收机钟差,至少需要4颗卫星构成4个观测方程。这是因为接收机时钟与卫星原子钟不同步,钟差是第4个必须求解的未知数。
上面讲的太笼统了,需要继续提问,细化中间过程。不过这几天和AI的交流让我意识到完全靠AI的解答来学习有很大的缺陷,因为解答会绕来绕去,进展很慢,真的还是需要书籍和其他论文的阅读,不断提高提问的效率。有时候AI走入死胡同,干脆就开启一个新话题再问,不然得到的结果有可能越来越离谱。

原始符号流 (1ms采样, +1/-1)
↓
【步骤1】比特同步 (Bit Sync)
- 导航数据速率50bps,每比特20ms
- 从20种可能的边界中,找到正确的20ms分界
- 输出:0/1比特流
↓
【步骤2】帧同步 (Frame Sync)
- 搜索前导码 10001011 (0x8B)
- 每子帧300比特,验证HOW字的TOW和子帧ID
- 输出:对齐的子帧序列
↓
【步骤3】奇偶校验 (Parity Check)
- GPS使用(32,26)汉明码
- 每30比特字:24数据位 + 6校验位
- 校验涉及前一字的最后2位作为基准
- 输出:通过校验的数据字
↓
【步骤4】星历解析 (Ephemeris Parsing)
- 子帧1:时钟参数 (a_f0, a_f1, a_f2, TGD)
- 子帧2:轨道参数前半 (Crs, Δn, M₀, Cuc, e, Cus, √A, t_oe)
- 子帧3:轨道参数后半 (Cic, Ω₀, Cis, i₀, Crc, ω, Ω̇, IODE, i̇)
- 输出:16个星历参数 + 4个时钟参数
↓
【步骤5】TOW提取与伪距计算
- 从HOW字提取TOW(周内秒)
- 发射时刻 = TOW + (ms_current - ms_anchor)×1ms + code_phase/1.023MHz
- 伪距 = (t_rx - t_tx) × c
- 输出:各卫星伪距
↓
【步骤6】定位解算
- 卫星位置计算(星历+发射时刻)
- 最小二乘迭代求解
- 输出:接收机位置 [X,Y,Z] + 钟差跟踪环每1ms输出一个符号,但导航电文是50bps,即每比特持续20ms。你需要从20种可能的偏移(1~20)中找到正确的比特边界。