卫星导航算法的数据结构设计(持续更新)

卫星导航算法重构与多频多系统程序设计实践
本文分享了作者在卫星导航算法重构过程中的经验,包括开源程序推荐、数据结构优化(如使用C++map设计)、C++IO流的应用、多线程多进程编程技巧以及处理多频多系统的需求。

这个学期一直在做卫星导航算法重构,重写一套算法过程中借鉴学习了各类开源程序,对目前用过的程序进行总结。

1、开源程序总结

卫星导航算法整体架构推荐阅读:上交GICI、与武大中心的POSGO ,架构合理优秀,他们的数据结构会更适用于多频多系统。强烈建议卫星导航的一些数据结构一定要按照C++ map容器设计,卫星号为健,对应相应的卫星信息。摆脱传统的数组或者结构体,不然在设计多频多系统时会吃亏。 (后面会单独详细总结)。

 多频多系统程序设计推荐阅读:武大中心PRIDE-PPP-AR,适应了所有频点,模糊度固定,功能强大。我们一般可以通过卫星位置与sunpos信息,大致确定卫星的姿态,并且对于GPS与GLONASS 的eclip 现象可进一步精确计算卫星的姿态。但是在此程序中还添加了att.obx文件,我们能获取高精度卫星姿态信息,在进行windup修正时,会有进一步的提升,这样类似的提升在此开源程序还有很多很多

2、卫星导航程序算法数据结构总结

学会使用C++ IO流

如果要重构一份卫星导航程序,个人建议摆脱Rtklib的C语言文件读取,随着文件版本的迭代、例如CLK文件3,04等文件版本更新,出现了许多空格等因素造成的文件读取失败,建议用C++ IO流方式进行文件读取,方便高效快速。

观测文件数据设计

利用C++ STL库设计观测数据,以下是一个简单的例子

struct Carrierphase {
  double value;//载波相位值
  uint8_t LLi; //周跳标识符
  int snr;     //载噪比
  double freq;
  string code;
};
//伪距
struct Pseudorange{
  double freq;
  double value;
  string code;
};
struct MeasData
{
  map<int,Carrierphase> L;
  map<int,Pseudorange> P;
  map<int,double> D;
  map<int,double> S;
};

//每一个历元的存储的观测数据(根据不同的系统分开存储,为了后续可以快速修改)
struct MeasDatas {
  map<int,MeasData> GpsObservationData;
  map<int,MeasData> GlonassObservationData;
  map<int,MeasData> GalieoObservationData;
  map<int,MeasData> Bds2ObservationData;
  map<int,MeasData> Bds3ObservationData;

  //对应的prn,每颗卫星存储的观测值,因为不存在同一个历元出现相同的卫星好的数据,所以用map存储
};

后面发现在GICI、POSGO  开源代码都有类似的数据结构,(英雄所见略同) 并且由于map是

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值