首页/文章/ 详情

GPS软件接收机v2之五 定位解算(1)

35分钟前浏览45

作为耕耘卫星导航领域多年的工程师,自然想着能够为领域多培养些人才,可是线下教学到不了这个深度,只能在网上卖瓜,还需要自卖自夸。本系列文章学习之后,不仅是能够了解定位解算的过程,关键是还能积累算法知识,为后续的深入学习打下基础。我会展示定位解算程序的调试过程,当然会存在一些教学内容上的反复,这些对于这方面的知识学习肯定是有帮助的。

对于GPS软件接收机而言,信号捕获和跟踪完成之后,一般就会有至少四个通道以上的解调信息,那怎么实现PVT解算呢?什么是PVT?

PVT = Position‑Velocity‑Time,中文:位置‑速度‑时间解算。

下面是接收机数据流流程。

卫星信号 → 捕获跟踪 → 导航电文解析(得到卫星星历) → 伪距 / 多普勒观测值生成 →PVT 解算→ 输出经纬度、速度、时间

从多个通道的信号跟踪到最终的位置、速度、时间解算,是GNSS接收机的“收官”环节。我们可以将这个过程清晰地拆解为几个关键步骤。

假设你已经完成了对至少4颗卫星的信号跟踪,每个通道都输出了以下关键信息:

  1. 伪距:测量出的卫星到接收机的距离,包含钟差误差(ρ = 几何距离 + C * [接收机钟差 - 卫星钟差] + 其他误差)。C是光速。

  2. 载波相位:更精确但存在整周模糊度的相位测量值。

  3. 多普勒频移:反映卫星与接收机相对径向运动的速度。

  4. 导航电文:解码后获得的卫星星历(精确轨道位置、钟差参数)、历书、时间等信息。

PVT解算的核心是:用伪距作为基本观测量,通过最小二乘法或卡尔曼滤波进行求解。

早期可以把这个过程简化,因为有的知识专业性太强,我们需要从最简单的方式学起。

这方面虽然不是本人的强项,不过最基本的算法还是懂的,在本系列文章中我就借助网上的程序和实际采集的数据展示一下PVT计算的过程,这样GPS软件接收机代码才算完整,一个实际的项目也就完成了。硕士研究生能将这些内容全掌握,找个高薪工作肯定是绰绰有余!!!
在跟踪程序之后,就进入了PVT解算过程。跟踪程序的结果包含哪些呢?才能支撑后续的伪距计算和导航电文解调呢?
为什么需要伪距计算和导航电文解调?核心内容!!!
伪距计算:利用1ms起始位置处的采样点位置值可以精确计算出信号从卫星传播到接收机的时间,乘以光速即得到伪距。  

导航电文解调:通过监视符号变化(+1或-1),可以解调出50Hz的导航电文数据比特,从而获取卫星星历、钟差等关键信息。

在学校里,一般会把这两部分分别安排成实验,加强学生的实践能力。

 
这本书通过实验把GPS接收机需要的知识都进行了分类,每个小实验都有各自的目的。这种安排非常适合教学。本科生想完成所有的实验肯定不可能,但完成其中几个是具备条件的,关键是通过实验可以大大提升自己多方面的能力。  
 
 
 
 
 
 
 
看到书中图6.19中的TLW和HOW了吗?这两个字在每个子帧里面都有哦!!!后面还会有个参数TOW,别搞混了。  
 
在校学习优秀和学有余力的本科生可以尝试研究这方面知识。2026年,本想在自家学院里面找两位学生培养一下,结果一个暑假几乎没有任何进展,只能放弃。网上有人如果想跟着我学,可以给我留言,我组个网课一起学卫星导航知识。言归正传,大家看完上面这些内容,心中有底了吗?现在可以求助AI学习了。在理论讲解方面,AI优势太明显了。它会以最快速的方式给你做解答。  

一、理论分析

1.1 GPS定位的基本原理

GPS定位基于伪距测量空间后方交会。每颗卫星持续发射带有精确时间戳的无线电信号,接收机通过测量信号传播时间(乘以光速)得到伪距(Pseudorange)。由于伪距包含接收机钟差、大气延迟等误差,并非真实几何距离,因此称为"伪"距。  

要解算接收机的三维坐标和接收机钟差,至少需要4颗卫星构成4个观测方程。这是因为接收机时钟与卫星原子钟不同步,钟差是第4个必须求解的未知数。

 
 
提及这里时,AI直接给出了一本参考书,之前的书籍分享文章里有!  
书籍分享!  
 
 
 

   

上面讲的太笼统了,需要继续提问,细化中间过程。不过这几天和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] + 钟差

二、各步骤核心原理

步骤1:比特同步

跟踪环每1ms输出一个符号,但导航电文是50bps,即每比特持续20ms。你需要从20种可能的偏移(1~20)中找到正确的比特边界。

来源:通信工程师专辑
理论
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-09-09
最近编辑:35分钟前
算法工匠
博士后 | 高级工程师 诚信做事 认真讲课 传播知识
获赞 428粉丝 2855文章 614课程 40
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈