RTKLIB学习记录【postpos、execses_b、execses_r】

news2024/10/16 18:52:15

       本文主要记录对RTKLIB源码中postpos、execses_b、execses_r 函数的源码解读,不涉及其中的天线、星历等文件读取的内容,且为个人理解,如果有误,欢迎交流讨论。

一、postpos 函数部分

/rxn2rtkp函数 → postpos函数传递参数:

postpos函数接收参数:

各参数含义: 

•  gtime_t ts: 处理开始时间。ts.time == 0 表示没有时间限制。
•  gtime_t te: 处理结束时间。te.time == 0 表示没有时间限制。
•  double ti: 处理时间间隔(秒)。ti == 0 表示处理整个时间段。
•  double tu: 处理段时间(秒)。tu == 0 表示处理所有时间。
•  const prcopt_t *popt: 处理选项,包含数据处理的各种参数配置。
•  const solopt_t *sopt: 解算选项,定义输出格式等参数。
•  const filopt_t *fopt: 文件选项,包含输入输出文件的路径等。
•  char **infile: 输入文件列表,包含观测文件、导航文件等。
•  int n: 输入文件数量。
•  char *outfile: 输出文件路径(可为空字符串,表示输出到标准输出)。
•  const char *rov: 移动站(rover)的ID列表。(用空格分隔)
•  const char *base: 基准站(base station)的ID列表。(用空格分隔)
•  备注: 输入文件应包含观测数据、导航数据、精密星历/钟差数据(可选)、SBAS 日志文件(可选)、SSR 
•  消息日志文件(可选)和 TEC 网格文件(可选)。只有第一个输入文件中的观测数据被视为流动站数据。
•  输入文件的类型通过文件扩展名识别,如下:
•               .sp3,.SP3,.eph*,.EPH*: 精密星历 (sp3c)
•               .sbs,.SBS,.ems,.EMS  : SBAS 消息日志文件 (rtklib 或 ems)
•               .rtcm3,.RTCM3        : SSR 消息日志文件 (rtcm3)
•               .*i,.*I              : TEC 网格文件 (ionex)
•               其他                 : RINEX 观测、导航、GNAV、HNAV、QNAV 或钟差文件
•  输入文件可以包含通配符(*):如果文件包含通配符,将会使用展开后的多个文件。
•  输入文件可以包含关键词:如果文件包含关键词,关键词将会被日期、时间、流动站 ID 和基准站 ID 替换,进
•                         行多次会话分析。请参阅 reppath() 了解关键词。
•  输出文件同样可以包含关键词:如果输出文件不包含关键词,所有多次会话分析的结果将输出到一个单一的输
•                               出文件中。
•        SSR 改正仅对前向估计有效。
  1. 第一个 if 语句:如果开始时间、结束时间 ≠0,处理单元时间 > 0:

 

reppath函数:将文件路径中的关键字替换为 - 日期、时间、基准站流动站ID                        

* args   : char   *path     I   文件路径   
*          char   *rpath    O   存储替换关键字后的文件路径  
*          gtime_t time     I   time (gpst)  (time.time==0: not replaced)  
*          char   *rov      I   流动站ID        ("": not replaced)  
*          char   *base     I   基准站ID        ("": not replaced)  
  
1.  extern int reppath(const char *path, char *rpath, gtime_t time, const char *rov,    
2.                     const char *base)    
3.  {  //初始化参数  
4.      double ep[6],ep0[6]={2000,1,1,0,0,0};  //用于存储时间的各部分(年、月、日、小时、分钟、秒)  
5.      int week,dow,doy,stat=0;  //GPS周、周内天(0-6)、年积日(一年中的第几天)、记录替换状态  
6.      char rep[64];    
7.          
8.      strcpy(rpath,path);  //将path(主函数传参过来的infile或outfile)中的路径复制到rpath(postpos函数内部定义的用于后续传参的ifile或ofile)  
  
9.      if (!strstr(rpath,"%")) return 0;  //检查路径中是否有%关键字,没有直接返回0  
10.     if (*rov ) stat|=repstr(rpath,"%r",rov );  //检查rov、base是否非空,替换路径中%r、%b关键字  
11.     if (*base) stat|=repstr(rpath,"%b",base); //rov、base为流动站和基准站的ID列表   
12.                                                   // |= 位或操作符,其实就是判断返回值是否为非0,就成功  
13.   
14.     if (time.time!=0) {  //如果传入时间不为0,执行后续所有代码  
15.         time2epoch(time,ep);  //将传入gps时间转换为历元时间(年月日时分秒),并存储在 ep 数组中  
16.         ep0[0]=ep[0];  //更新初始参数时间为当前时间的年份  
17.         dow=(int)floor(time2gpst(time,&week)/86400.0);  //计算 GPS 周内天数                   
(0表示星期天,1 表示星期一,以此类推)  
18.         doy=(int)floor(timediff(time,epoch2time(ep0))/86400.0)+1;  //计算当年第几天  
  
//根据路径中不同关键字对应格式进行替换(这里要注意传入的时间代表什么)  
19.         sprintf(rep,"%02d",  ((int)ep[3]/3)*3);   stat|=repstr(rpath,"%ha",rep);    
20.         sprintf(rep,"%02d",  ((int)ep[3]/6)*6);   stat|=repstr(rpath,"%hb",rep);    
21.         sprintf(rep,"%02d",  ((int)ep[3]/12)*12); stat|=repstr(rpath,"%hc",rep);    
22.         sprintf(rep,"%04.0f",ep[0]);              stat|=repstr(rpath,"%Y",rep);    
23.         sprintf(rep,"%02.0f",fmod(ep[0],100.0));  stat|=repstr(rpath,"%y",rep);    
24.         sprintf(rep,"%02.0f",ep[1]);              stat|=repstr(rpath,"%m",rep);    
25.         sprintf(rep,"%02.0f",ep[2]);              stat|=repstr(rpath,"%d",rep);    
26.         sprintf(rep,"%02.0f",ep[3]);              stat|=repstr(rpath,"%h",rep);    
27.         sprintf(rep,"%02.0f",ep[4]);              stat|=repstr(rpath,"%M",rep);    
28.         sprintf(rep,"%02.0f",floor(ep[5]));       stat|=repstr(rpath,"%S",rep);    
29.         sprintf(rep,"%03d",  doy);                stat|=repstr(rpath,"%n",rep);    
30.         sprintf(rep,"%04d",  week);               stat|=repstr(rpath,"%W",rep);    
31.         sprintf(rep,"%d",    dow);                stat|=repstr(rpath,"%D",rep);    
32.         sprintf(rep,"%c",    'a'+(int)ep[3]);     stat|=repstr(rpath,"%H",rep);    
33.         sprintf(rep,"%02d",  ((int)ep[4]/15)*15); stat|=repstr(rpath,"%t",rep);    
34.     }  
35. //如果路径中存在以下时间关键字,但没有给出有效时间,则返回-1                                       2  
36.  else if (strstr(rpath,"%ha")||strstr(rpath,"%hb")||strstr(rpath,"%hc")||    
37.              strstr(rpath,"%Y" )||strstr(rpath,"%y" )||strstr(rpath,"%m" )||    
38.              strstr(rpath,"%d" )||strstr(rpath,"%h" )||strstr(rpath,"%M" )||    
39.              strstr(rpath,"%S" )||strstr(rpath,"%n" )||strstr(rpath,"%W" )||    
40.              strstr(rpath,"%D" )||strstr(rpath,"%H" )||strstr(rpath,"%t" )) {    
41.         return -1; /* no valid time */    
42.     }    
43.     return stat;  //这个返回状态是只要有路径中关键字被替换就会返回非0值  
44. }   
* notes  : 路径中的以下关键字将被日期、时间和名称替换  
*              %Y -> yyyy : year (4 digits) (1900-2099)  
*              %y -> yy   : year (2 digits) (00-99)  
*              %m -> mm   : month           (01-12)  
*              %d -> dd   : day of month    (01-31)  
*              %h -> hh   : hours           (00-23)  
*              %M -> mm   : minutes         (00-59)  
*              %S -> ss   : seconds         (00-59)  
*              %n -> ddd  : day of year     (001-366)  
*              %W -> wwww : gps week        (0001-9999)  
*              %D -> d    : day of gps week (0-6)  
*              %H -> h    : hour code       (a=0,b=1,c=2,...,x=23)  
*              %ha-> hh   : 3 hours         (00,03,06,...,21)  
*              %hb-> hh   : 6 hours         (00,06,12,18)  
*              %hc-> hh   : 12 hours        (00,12)  
*              %t -> mm   : 15 minutes      (00,15,30,45)  
*              %r -> rrrr : rover id  
*              %b -> bbbb : base station id  

 

二、 execses_b 函数 

/postpos函数 → execses_b函数传递参数:

在postpos函数中根据是否输入了开始时间、结束时间和段时间对输入文件进行处理,但是不管如何处理,将输入文件分成多少个,传递到exceses_b函数都是对某段时间进行处理,只需要知道开始时间、结束时间和采样频率就可以。

该函数其实就是

  1. if (ts.time!=0&&te.time!=0&&tu>=0.0)

  1. else if (ts.time!=0)

  1. else

execses_b函数接收参数:

 三、 execses_r 函数 

四、总体分析 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP IP网络编程

文章目录 TCP IP网络编程一、基础知识(TCP)1)Linux1. socket()2.bind()2.1前提2.2字节序与网络字节序2.3 字节序转换2.4 字符串信息转化成网络字节序的整数型2.5 INADDR_ANY 3.listen()4.accept()5.connect()6.案例小结6.1服务器端6.2 客户端…

《机器学习与数据挖掘综合实践》实训课程教学解决方案

一、引言 随着信息技术的飞速发展,人工智能已成为推动社会进步的重要力量。作为人工智能的核心技术之一,机器学习与数据挖掘在各行各业的应用日益广泛。本方案旨在通过系统的理论教学、丰富的实践案例和先进的实训平台,帮助学生掌握机器学习…

基于YOLO11深度学习的非机动车驾驶员头盔检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、卷积神经网络

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

对秋季新款上衣的数据分析

秋季新款上衣评论分析 1.评论的基本统计分析(数据来源:淘宝评论信息接口) 接口链接:https://easydoc.net/s/42414529(有需要调用接口的可以联系博主) 评论长度分布图: 根据接口拉取数据获得的评论数据,并…

使用Ubuntu开发Zephyr RTOS时遇到FATAL ERROR: required program JLinkExe not found...解决办法

硬件平台:STM32L432RCT6 zephyr版本:Zephyr version 3.7.99 开发环境:ubuntu 24.4 在Ubuntu环境下遇到FATAL ERROR: required program JLinkExe not found; install it or add its location to PATH错误,意味着系统找不到JLinkEx…

Linux系统的用户和用户群组的各种权限总结

Linux系统的用户和用户群组的各种权限总结 用户群组用户群组文件添加群组:groupadd 用户用户文件新建用户:useradd修改用户:usermod删除用户:userdel 文件归属:chown文件权限:chmod相关文件和目录 用户群组…

网络通信——流量与路由(万字解读)

前言:流量控制与路由更新控制 如何控制网络流量可达性? 方案一:可通过修改路由条目(即对接收和发布的路由进行过滤)来控制流量可达性,这种方式称为路由策略。 方案二:可直接通过依据用户制定的策略进行转发,且该策略优于路由表转发,这种方式称为策略路由。 (1)什么…

音视频入门基础:H.264专题(18)——AVCDecoderConfigurationRecord简介

一、引言 H.264流行的包装方式有两种,一种是AnnexB,另一种是avcC。对于AnnexB包装的H.264码流,其SPS和PPS被当做普通的NALU来处理;而对于avcC包装的H.264码流,其SPS和PPS信息存贮在AVCDecoderConfigurationRecord中&a…

Java项目实战II基于Java+Spring Boot+MySQL的服装销售平台(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当今数字…

C++面试速通宝典——24

452. Linux进程地址空间 文本段:包含程序的可执行代码初始化数据段(数据段):包含已初始化的全局变量和静态变量。未初始化数据段(BSS段):包含未初始化的全局变量和静态变量。堆:动态…

Python 在Excel中添加数据条

在Excel中添加数据条是一种数据可视化技巧,它通过条形图的形式在单元格内直观展示数值的大小,尤其适合比较同一列或行中各个单元格的数值。这种表示方式可以让大量的数字信息一目了然。本文将介绍如何使用Python在Excel中的指定单元格区域添加数据条。 …

Apache HTTP Server 配置SSL证书(Windows)

Apache2.4.39 HTTP Server 配置SSL证书 1. 申请证书 申请证书步骤(略) 证书名称如下: ca-bundle.crt xxx_com.crt xxx_com.key2. 配置 证书位置:Apache2.4.39\conf\ssl Apache2.4.39\conf\ssl修改两个配置文件: 0localhost_80.conf <VirtualHost *:80>Rewrite…

【HTML格式PPT离线到本地浏览】

文章目录 概要实现细节小结 概要 最近在上课时总是出现网络不稳定导致的PPT无法浏览的情况出现&#xff0c;就想到下载到电脑上。但是PPT是一个HTML的网页&#xff0c;无法通过保存网页&#xff08;右键另存为mhtml只能保存当前页&#xff09;的形式全部下载下来&#xff0c;试…

数据库实验2-2

10-1 将学号为“1911203”的学生的联系电话改为“590987” 本题目要求编写SQL语句&#xff0c; 在students表中&#xff0c;将学号为“1911203”的学生的联系电话改为“590987”。 提示&#xff1a;请使用UPDATE语句作答。 表结构: 请在这里写定义表结构的SQL语句。例如&am…

碳钎维:无人机轻量化关键材料!

一、碳纤维材料特性 轻质高强&#xff1a; 碳纤维是一种含碳量在95%以上的高强度新型纤维材料&#xff0c;具有极高的比强度和比刚度。 在同等重量下&#xff0c;其拉伸强度可达到钢、铝合金、钛合金的9倍以上&#xff0c;弹性模量可以达到钢、铝合金、钛合金的4倍以上。 耐…

c语言经典100例

1.字符串转为数字 #include <stdio.h>int strToInt(char *s) {int num0;int sign1;int step1;if (*s -){sign -1;s;}while (*s > 0&&*s < 9){num num*10(*s-0);step 10;s;}return num*sign; }int main() {char a[10] "-1234";char *s a ;pr…

git删除错误的commit

文章目录 1、git删除错误的commit2、.gitignore配置文件不生效的问题 1、git删除错误的commit git的流程如图&#xff1a; 当某次失误造成commit的版本有问题&#xff0c;需要回退到正常的版本修改后重新add。 首先通过git log查看commit提交记录&#xff0c;可以看到HEAD-…

2024最新版安装教程!Python安装+PyCharm安装使用教程!!(非常简单)

Python下载安装 一、进入Python官网首页&#xff0c;下载最新版的Python 官方网址&#xff1a;Download Python | Python.org 鼠标悬浮在Downloads&#xff0c;选择最新版本 注意&#xff1a;由于Python官网服务器设立在国外&#xff0c;所以下载速度非常慢&#xff0c;我这…

在centos(ubuntu)中如何通过预构建二进制文件安装nodejs

首先去Node.js下载你说需要的版本的预构建二进制文件Node.js — 下载 Node.js 在CentOs或Ubuntu离线服务器上安装Node.js&#xff0c;你可以通过下载Node.js的预构建二进制文件来完成。以下是具体步骤&#xff1a; 获取Node.js预构建二进制文件&#xff1a; 在有网络连接的机器…

【Linux系统编程】线程的简单运用

目录 前言&#xff1a; 一&#xff0c;线程退出 二&#xff0c;进程异常 三&#xff0c;资源共享 四&#xff0c;单线程的代码运用 五&#xff0c;多线程的代码运用 六&#xff0c;线程的优缺点 七&#xff0c;线程的私有与共享 前言&#xff1a; 学习有关线程的代码运…