RTKLIB学习--前向滤波
#前言
如果要详细了解RTKLIB或进行二次开发,了解obs指针所存储每个历元的卫星观测数据是必不可少的环节,此文对RTKLIB的(由于后处理和实时运行都要用到前向滤波)前向滤波(从文件头读取观测数据到obs结构体中,进行每个历元的解算)进行详细的分析。结合代码调试来学习效果更佳
procpos函数
procpos是开启历元循环所在的函数,也是循环读取每个历元观测数据所在的函数。
solstatic=sopt->solstatic&&//静态解(popt->mode==PMODE_STATIC||popt->mode==PMODE_PPP_STATIC);rtkinit(&rtk,popt);rtcm_path[0]='\0';//实时数据流
while ((nobs=inputobs(obs,rtk.sol.stat,popt))>=0) {
在这个函数中循环读取一个历元的观测数据,而广播星历则是一次读取完。
/* exclude satellites 排除没有参与定位的卫星*/for (i=n=0;i<nobs;i++) {if ((satsys(obs[i].sat,NULL)&popt->navsys)&&popt->exsats[obs[i].sat-1]!=1) obs[n++]=obs[i];}if (n<=0) continue;//n为一个历元有效观测卫星数
if (!rtkpos(&rtk,obs,n,&navs)) continue;
正式进入定位模块,后面的条件判断则是一个历元定位结束后根据滤波方向决定下一个读取的历元。
inputobs()
在inputobs中通过不同的滤波方式读取基准站,流动站观测数据;由于后向滤波(从文件末尾读)只适用于后处理,在这里只介绍前向滤波(从文件头读取数据)。
其中obss.data[] 存储了所有历元的卫星观测数据,在inputobs()函数中通过流动站索引 iobsu,基准站索引 iobsr 从 obss.data 中获取 obsd_t *obs 其中存储了一个历元的所有卫星的观测数据,由于在spp,ppp,模式中不涉及到基准站,inputobs()函数对基准站的处理不易读懂,算法很巧妙,需要下一定的功夫理通
* input obs data, navigation messages and sbas correction -------------------*/
static int inputobs(obsd_t *obs, int solq, const prcopt_t *popt)
{gtime_t time={0};char path[1024];int i,nu,nr,n=0;trace(3,"infunc : revs=%d iobsu=%d iobsr=%d isbs=%d\n",revs,iobsu,iobsr,isbs);if (0<=iobsu&&iobsu<obss.n) {settime((time=obss.data[iobsu].time));if (checkbrk("processing : %s Q=%d",time_str(time,0),solq)) {aborts=1; showmsg("aborted"); return -1;}}if (!revs) { /* input forward data 从第一个历元读取*/if ((nu=nextobsf(&obss,&iobsu,1))<=0) return -1;//获取流动站观测卫星数/,&iobsu是上一个历元的基准站观测值索引,需要更新到当前历元的流动站观测值索引if (popt->intpref) {//内插参考观测值时,将iobsr索引(上一个历元的基准站索引)定位到当前历元的流动站索引for (;(nr=nextobsf(&obss,&iobsr,2))>0;iobsr+=nr)//最终iobsr被定位到当前历元流动站索引if (timediff(obss.data[iobsr].time,obss.data[iobsu].time)>-DTTOL) break;//iobsr所在历元时间段与当前历元的流动站历元时间差大于阈值时,退出}else {//不内插参考观测值时for (i=iobsr;(nr=nextobsf(&obss,&i,2))>0;iobsr=i,i+=nr)//获取上一个历元基准站观测数;iobsr被定位到当前历元基准站索引if (timediff(obss.data[i].time,obss.data[iobsu].time)>DTTOL) break;//上一个历元基准站索引时间与当前历元流动站索引时间差大于阈值时}
注:
①当 popt->intpref 为1时,表明参考站观测值是内嵌到流动站观测中的,也就是说一个历元观测值为(流动站观测值+基准站观测值);
&iobsr 初始为上一个历元的基准站索引,nr=上一历元基准站观测数,(假设历元时间段为30s)此时timediff= -30<阈值;iobsr+=nr成为了当前历元的流动站索引值,nr=当前历元的流动站数,timediff=0;结束循环
②popt->intpref 为0时,流动站观测值和基准站观测值是分开的。
&iobsr 初始为上一个历元的基准站索引,nr=上一历元基准站观测数,(假设历元时间段为30s)此时timediff= -30<阈值;iobsr=i不变,i +=nr,成为了当前历元基准站索引,timediff=0<阈值; iobsr=i 成为了当前历元基准站索引,i +=nr成为了下一个历元的基准站索引,timediff=30>阈值,结束循环
nr=nextobsf(&obss,&iobsr,2);//确保iobsr被定位到当前历元基准站索引,获取当前历元基准站观测数
如果 popt->intpref 为1时 iobsr从当前历元的流动站索引定位到基准站索引,然后获取观测卫星数,popt->intpref 为0时只获取观测卫星数。
如果是单点定位模式,则在第一次调用nextobsf() 时,由于观测数据的rcv无法匹配到给定参数为“2"的rcv,&iobsr 被遍历到最后一个历元,在之后调用nextobsf() 时,不会进入到if语句 的内部
for (i=0;i<nu&&n<MAXOBS*2;i++) obs[n++]=obss.data[iobsu+i];//复制流动站观测卫星数据
for (i=0;i<nr&&n<MAXOBS*2;i++) obs[n++]=obss.data[iobsr+i];//复制基准站观测卫星数据
iobsu+=nu;//流动站索引此时变为参考站索引 或下一个历元的流动站索引(spp,ppp)
nextobsf()
search next observation data index 前向滤波的方式--------------------------*/
static int nextobsf(const obs_t *obs, int *i, int rcv)
{double tt;int n;/*如果rcv为流动站,i在上一级函数中通过+=nu成为了上一个历元的基准站索引;如果是rtk模式一个历元段包括(rcv=1:流动站段 + rcv=2:基准站段)(参考观测值内插时)*/for (;*i<obs->n;(*i)++) if (obs->data[*i].rcv==rcv) break;//rtk模式:rcv=1(基准站索引->当前历元流动站站索引);rcv=2(-->下一段索引,可能是基准站,也可能是流动站)for (n=0;*i+n<obs->n;n++) {//遍历当前段观测卫星,tt=timediff(obs->data[*i+n].time,obs->data[*i].time);//第n个观测卫星时间与索引观测卫星时间差if (obs->data[*i+n].rcv!=rcv||tt>DTTOL) break;//如果卫星rcv改变或者历元时差过大,结束循环}return n;//返回索引所在历元rcv观测卫星数
相关文章:
RTKLIB学习--前向滤波
#前言 如果要详细了解RTKLIB或进行二次开发,了解obs指针所存储每个历元的卫星观测数据是必不可少的环节,此文对RTKLIB的(由于后处理和实时运行都要用到前向滤波)前向滤波(从文件头读取观测数据到obs结构体中࿰…...
利用C++与Python调用千帆免费大模型,构建个性化AI对话系统
千帆大模型已于2024年4月25日正式免费,调用这个免费的模型以实现自己的AI对话功能,遵循以下步骤: 了解千帆大模型: 千帆大模型是百度智能云推出的一个平台,提供了一系列AI能力和工具,用于快速开发和应用A…...
VTK9.2.0+QT5.14.0绘制三维显示背景
背景 上一篇绘制点云的博文中,使用的vtkCameraOrientationWidget来绘制的坐标轴,最近又学习到两种新的坐标轴绘制形式。 vtkOrientationMarkerWidget vtkAxesActor 单独使用vtkAxesActor能够绘制出坐标轴,但是会随着鼠标操作旋转和平移时…...
Vue.js2+Cesium1.103.0 十六、多模型轨迹运动
Vue.js2Cesium1.103.0 十六、多模型轨迹运动 Demo <template><div id"cesium-container" style"width: 100%; height: 100%;"><ul class"ul"><li v-for"(item, index) of deviceInfo" :key"index" cl…...
Matlab|基于PMU相量测量单元进行电力系统电压幅值和相角状态估计
主要内容 程序采用三种方法对14节点和30节点电力系统状态进行评估: ①PMU同步相量测量单元结合加权最小二乘法(WLS)分析电力系统的电压幅值和相角状态; ②并采用牛顿-拉夫逊方法进行系统潮流计算,结果作为理论分…...
【C++】---二叉搜索树
【C】---二叉搜索树 一、二叉搜索树概念二、二叉搜索树操作(非递归)1.二叉搜索树的查找 (非递归)(1)查找(2)中序遍历 2.二叉搜索树的插入(非递归)3.二叉搜索树…...
FastAPI - 依赖注入3
在FastAPI中,依赖注入是一种强大的功能,它允许你轻松地将依赖项注入到你的路由处理程序函数中,以处理不同的任务,例如数据库访问、认证和配置管理。 FastAPI支持依赖注入通过以下方式: 使用参数注解: 你可…...
【网络运维的重要性】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...
YOLOv5改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附代码/涨点能手】
💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在图像识别中,学习捕捉长距离关系是基础。现有的CNN模型通常通过增加深度来建立这种关系,但这种形式效率极低。因此&…...
自用网站合集
总览 线上工具-图片压缩 TinyPNG线上工具-url参数解析 线上工具-MOV转GIF UI-Vant微信小程序版本其他-敏捷开发工具 Leangoo领歌 工具 线上工具-图片压缩 TinyPNG 不能超过5m,别的没啥缺点 线上工具-url参数解析 我基本上只用url参数解析一些常用的操作在线…...
【Golang】gin框架如何在中间件中捕获响应并修改后返回
【Golang】gin框架如何在中间件中捕获响应并修改后返回 本文讲述如何捕获中间件响应以及重写响应如果想在中间件中记录响应日志等操作,我们该如何获取响应数据呢?假如需要统一对响应数据做加密,如何修改这个返回数据再响应给客户端呢…...
电脑同时配置两个版本mysql数据库常见问题
1.配置时,要把bin中的mysql.exe和mysqld.exe 改个名字,不然两个版本会重复,当然,在初始化数据库的时候,如果时57版本的,就用mysql57(已经改名的)和mysqld57 代替 mysql 和 mysqld 例如 mysql -u root -p …...
Java | Leetcode Java题解之第112题路径总和
题目: 题解: class Solution {public boolean hasPathSum(TreeNode root, int sum) {if (root null) {return false;}if (root.left null && root.right null) {return sum root.val;}return hasPathSum(root.left, sum - root.val) || has…...
HaloDB 的 Oracle 兼容模式
↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~ 前倾回顾 前面介绍了“光环”数据库的基本情况和安装办法。 哈喽,国产数据库!Halo DB! 三步走,Halo DB 安装指引 ★ HaloDB是基于原生PG打造的新一代高性能安…...
【Python】解决Python报错:TypeError: ‘xxx‘ object does not support item assignment
🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…...
Spring-注解
Spring 注解分类 Spring 注解驱动模型 Spring 元注解 Documented Retention() Target() // 可以继承相关的属性 Inherited Repeatable()Spirng 模式注解 ComponentScan 原理 ClassPathScanningCandidateComponentProvider#findCandidateComponents public Set<BeanDefin…...
旧手机翻身成为办公利器——PalmDock的介绍也使用
旧手机有吧!!! 破电脑有吧!!! 那恭喜你,这篇文章可能对你有点用了。 介绍 这是一个旧手机废物利用变成工作利器的软件。可以在 Android 手机上快捷打开 windows 上的文件夹、文件、程序、命…...
期货交易的雷区
一、做自己看不懂的行情做交易计划一样要做有把握的,倘若你在盘中找机会交易,做自己看不懂的行情,即便你做进去了,建仓时也不会那么肯定,自然而然持仓也不自信,有点盈利就想平仓,亏损又想扛单。…...
东方通TongWeb结合Spring-Boot使用
一、概述 信创需要; 原状:原来的服务使用springboot框架,自带的web容器是tomcat,打成jar包启动; 需求:使用东方通tongweb来替换tomcat容器; 二、替换步骤 2.1 准备 获取到TongWeb7.0.E.6_P7嵌入版 这个文件,文件内容有相关对应的依赖包,可以根据需要来安装到本地…...
6.S081的Lab学习——Lab5: xv6 lazy page allocation
文章目录 前言一、Eliminate allocation from sbrk() (easy)解析: 二、Lazy allocation (moderate)解析: 三、Lazytests and Usertests (moderate)解析: 总结 前言 一个本硕双非的小菜鸡,备战24年秋招。打算尝试6.S081࿰…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
