rtklib--伪距单点定位(single-point positioning)学习(1)Satposs

目录

  • 前言
  • pntpos总体调用流程图
  • Satposs总体调用流程图:
  • 1.Satposs:按照所观测到的卫星顺序计算出每颗卫星的位置、速度{钟差、频漂}
  • 2.ephclk:通过广播星历来确定卫星钟偏
  • 3.stasys:根据卫星编号确定该卫星所属的导航系统和该卫星在该系统中的 PRN编号。
  • 4.eph2clk:根据信号发射时间和广播星历,计算卫星钟差
  • 5.satpos:计算信号发射时刻卫星的Position、Velocity、Clock
  • 6.ephpos:根据广播星历计算出算信号发射时刻卫星的 P、V、C
  • 7.eph2pos:根据广播星历计算出信号发射时刻卫星的位置和钟差
  • 总结


前言

       rtklib是一个非常不错的开源软件,研究GNSS方向的同学、学者都或多或少会接触到,里面的源代码适合很多类似我这样的新手进行学习,我就是分享一下我学习过程的一些心得想法和感悟,欢迎大家一起交流(接口程序postpos的参数配置、读取数据我这里不提及,只说spp的具体实现)

       话不多说,直接开整。

pntpos总体调用流程图

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第1张图片
pntpos函数参数设置与解释
rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第2张图片
1.检查卫星个数是否大于 0

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第3张图片
2.当处理选项 opt中的模式不是单点模式时,电离层校正采用 Klobuchar模型,对流层校正则采用 Saastamoinen模型;相反,当其为单点模式时,对输入参数 opt不做修改。
rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第4张图片
3.调用 satposs函数,按照所观测到的卫星顺序计算出每颗卫星的位置、速度{钟差、频漂}。

在这里插入图片描述

4.调用 estpos函数,通过伪距实现绝对定位,计算出接收机的位置和钟差,顺带返回实现定位后每颗卫星的{方位角、仰角}、定位时有效性、定位后伪距残差。
在这里插入图片描述

5.调用 raim_fde函数,对上一步得到的定位结果进行接收机自主正直性检测(raim)。通过再次使用 vsat数组,这里只会在对定位结果有贡献的卫星数据进行检测。
在这里插入图片描述

6.调用 estvel函数,依靠多普勒频移测量值计算接收机的速度。这里只使用通过了上一步 raim_fde操作的卫星数据,所以对于计算出的速度就没有再次进行raim了。
在这里插入图片描述

7.首先将 ssat_t结构体数组的 vs(定位时有效性)、azel(方位角、仰角)、resp(伪距残余)、resc(载波相位残余)和 snr(信号强度)都置为 0,然后再将实现定位后的 azel、snr赋予 ssat_t结构体数组,而 vs、resp则只赋值给那些对定位有贡献的卫星,没有参与定位的卫星,这两个属性值为 0。
rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第5张图片


具体函数的介绍:限于篇幅原因,本篇文章只介绍有关于计算卫星位置、速度的Satposs函数,以及它所调用的函数。

Satposs总体调用流程图:

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第6张图片

1.Satposs:按照所观测到的卫星顺序计算出每颗卫星的位置、速度{钟差、频漂}

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第7张图片

(1)按照观测数据的顺序,首先将将当前观测卫星的 rs、dts、var和svh数组的元素置 0。

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第8张图片

(2)通过判断某一频率下信号的伪距是否为 0,来得到此时所用的频率个数。注意,频率个数不能大于 NFREQ(默认为 3)。
rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第9张图片

(3)用数据接收时间减去伪距信号传播时间,得到卫星信号的发射时间。

在这里插入图片描述

(4)调用 ephclk函数,由广播星历计算出当前观测卫星的钟差。

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第10张图片

(5)用 3中的信号发射时间减去 4中的钟偏,得到 GPS时间下的卫星信号发射时间。

在这里插入图片描述
(6)调用 satpos函数,计算信号发射时刻卫星的 P(ecef,m)、V(ecef,m/s)、C((s|s/s))。

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第11张图片

(7)如果由 6中计算出的钟偏为 0,就再次调用 ephclk函数将其计算出的卫星钟偏作为最终的结果。

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第12张图片

2.ephclk:通过广播星历来确定卫星钟偏

(1)首先调用 satsys函数根据卫星编号确定该卫星所属的导航系统和该卫星在该系统中的 PRN编号。

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第13张图片

(2)对于 GPS导航系统,调用 seleph函数来选择 toe值与星历选择时间标准 teph最近的那个星历。
(3)调用 eph2clk函数,通过广播星历和信号发射时间计算出卫星钟差。
rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第14张图片

3.stasys:根据卫星编号确定该卫星所属的导航系统和该卫星在该系统中的 PRN编号。

(1)为处理意外情况(卫星号不在 1-MAXSAT之内),先令卫星系统为 SYS_NONE。

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第15张图片

(2)按照 RTKLIB中定义相应宏的顺序来判断是否是 GPS、GLO、GAL系统等,判断标准是将卫星号减去前面的导航系统所拥有的卫星个数,来判断剩余卫星个数是否小于等于本系统的卫星个数。
rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第16张图片

(3)确定所属的系统后,通过加上最小卫星编号 PRN再减去 1得到该卫星在该系统中的 PRN编号。

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第17张图片

4.eph2clk:根据信号发射时间和广播星历,计算卫星钟差

在这里插入图片描述

(1)计算与星历参考时间的偏差 dt = t-toc。

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第18张图片

(2)利用二项式校正计算出卫星钟差,从 dt中减去这部分,然后再进行一次上述操作,得到最终的 dt。

在这里插入图片描述

(3)使用二项式校正得到最终的钟差。

在这里插入图片描述

5.satpos:计算信号发射时刻卫星的Position、Velocity、Clock

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第19张图片

(1)判断星历选项的值,如果是 EPHOPT_BRDC,调用 ephpos函数,根据广播星历计算出算信号发射时刻卫星的 P、V、C
rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第20张图片

6.ephpos:根据广播星历计算出算信号发射时刻卫星的 P、V、C

(1)调用 satsys函数,确定该卫星所属的导航系统。

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第21张图片

(2)如果该卫星属于 GPS系统,则调用 seleph函数来选择广播星历。

在这里插入图片描述

(3)根据选中的广播星历,调用 eph2pos函数来计算信号发射时刻卫星的位置、钟差和相应结果的误差。
在这里插入图片描述

(4)在信号发射时刻的基础上给定一个微小的时间间隔,再次计算新时刻的位置和钟差。

在这里插入图片描述

(5)基于差分近似计算卫星速度和时钟漂移。

在这里插入图片描述

7.eph2pos:根据广播星历计算出信号发射时刻卫星的位置和钟差

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs_第22张图片

(1)与大部分资料上计算卫星位置和钟差的过程是一样的,只是这里在计算偏近点角 E时采用的是牛顿法来进行迭代求解(计算卫星位置代码过多不予附图见源码)。
在这里插入图片描述

(2)计算相对论效应对卫星钟差的影响。

在这里插入图片描述

(3)计算误差直接采用 URA值来标定,具体对应关系可在 ICD-GPS-200C P83中找到。

在这里插入图片描述


总结

       看代码的过程中确实感觉到了自己的基础理论知识不够扎实,需要学习的东西还有很多,以后也会不定期的更新一些有关于GNSS的基础知识,希望能和大家一起探讨学习。

       完整代码我也放在了我的资源中,可以免费下载,文中的截图均是自己根据参考的解析进行的截图,是按照一个函数为一个模块顺序进行截取的,然后依次进入它们所调用的函数。


参考:
RTKLIB源码解析(一)——单点定位(pntpos.c).

你可能感兴趣的:(伪距单点定位(spp),Rtklib,c算法,gnss)