首页/文章/ 详情

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

1天前浏览69

本人写的这个系列文章里面涉及到的很多函数都可以在网上找到,但是你看了文章以后能清楚地知道它怎么用,和哪些数据需要配合使用。我们现在可以从 AI 获取到网上大量公开的资源,然后 AI 也可以根据这些资源整理出程序供大家学习,但很多人还是无法用起来,这其中也有AI整理程序不靠谱的因素。我之前在网上已经分享了一个完整的 GPS 软件接收机的 MATLAB 程序,但依旧很多人反馈还没能不起来,能用起来的只是少数几位,所以我觉得还是要我们这些技术老杆子来写一些文章把这些技术问题详细讲解,同时融合了自己的研发经验,当然也包括了自己的学习过程。这也许就是AI还替代不了的地方。

上一篇文章中完成了比特同步和帧同步,获取了帧的起始位置。那么下面要做什么呢?

步骤1:按子帧结构提取完整导航电文

从 firstSubFrame(channel) 开始,每20ms取一个bit,连续读取 300 bits(一个子帧,6秒)。GPS一帧有5个子帧(1500 bits,30秒),需要收集至少一帧数据才能解出星历。这部分内容对应的程序代码见上一篇文章。

步骤2:解码星历参数(Ephemeris)

  • 子帧1:卫星时钟参数、健康状态、群延迟(TGD)

  • 子帧2:轨道开普勒参数(半长轴、偏心率、轨道倾角等)

  • 子帧3:轨道开普勒参数续(近地点幅角、升交点经度、平近点角等)

  • 从子帧1-3中提取出 星历参数,用于计算卫星在发射时刻的精确位置。

步骤3:提取TOW并计算伪距(Pseudorange)

  • 子帧2的HOW字中包含 TOW(Time of Week,周内时),精确到6秒整数倍。

  • 结合子帧起点在跟踪结果中的位置(firstSubFrame),可以推算出信号发射时刻

  • 用本地接收机时间减去信号发射时刻,乘以光速,得到伪距

步骤4:PVT(Position, Velocity, Time)解算

  • 收集至少 4颗卫星 的伪距和卫星位置。

  • 建立观测方程,用最小二乘法卡尔曼滤波求解。

   

看看步骤2如何写代码?

这次将展示步骤1和步骤2的执行过程!

load的数据是跟踪模块输出的解调结果,这只是解调结果,还需要采样点的索引值。不过找到子帧和解出星历参数只需要解调结果即可。

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