简介:这是一套面向电离层物理、GNSS信号处理及空间天气研究领域的Fortran源码工具,专用于将标准RINEX格式的GNSS观测数据(如GPS/GLONASS)高精度反演为电离层总电子含量(TEC),并输出为GTEX专用格式,服务于定位误差校正、电离层建模与太阳活动影响分析等科研与工程场景。资源共42个文件,含15个编译目标文件(.o)、15个核心Fortran源码(.f,涵盖RINEX读取、轨道插值、TEC计算、坐标转换、周跳修正等模块)、3个Shell脚本(含自动化处理流程)、2个参数配置列表(param.list、filename.list)、1个可执行程序(rnx2gtex)及Makefile、README、头文件(Define.h)等完整构建组件,包体仅290KB,结构紧凑、依赖精简。已有155人学习下载,读者可直接编译运行,获得从原始RINEX观测到GTEX格式TEC序列的端到端处理能力,并通过源码深入理解TEC反演中的几何映射、卫星钟差修正、双频组合算法及Julian日历转换等关键技术实现细节。
1. RNX2GTEX到底是什么:一个老工具背后的硬需求
做GNSS数据处理的人,大概率绕不开一个词:TEC。搞电离层研究、做单频定位误差修正、评估空间天气,都需要从GNSS观测数据里提取总电子含量。而RNX2GTEX这个Fortran源码项目,干的就是这件事——把RINEX格式的GNSS观测文件,转换成电离层TEC值。
先说清楚这个工具在整条数据处理链路里的位置。GNSS接收机采集到的原始数据通常是厂商私有格式,比如Trimble的.dat、Leica的.m00,经过转换后变成标准交换格式RINEX。RINEX文件里记录的是伪距、载波相位、多普勒等观测值,但这些观测值本身并不是TEC。TEC需要从L1和L2两个频率的观测值差异中推算出来,RNX2GTEX就是在这个环节工作的:输入RINEX观测文件,输出每条信号路径上的TEC时间序列,供后续电离层建模、层析成像或精度评估使用。
这个工具适合谁?三类人最需要。第一类是电离层物理方向的研究生,手里攒了一堆RINEX数据,但还没有系统的TEC提取工具链;第二类是卫星导航定位领域的工程师,需要对观测数据做预处理分析,比如评估一条基线上的电离层活跃程度;第三类是刚接触Fortran科学计算的开发者,想找一个结构清晰、能直接编译运行的GNSS处理源码作为学习范本。无论哪类,这个项目都能提供一个完整的、可运行的参考实现。
我最初拿到这个源码时有点意外,因为现在Python做GNSS处理的生态已经很成熟,比如georinex解析RINEX、numpy做矩阵运算,为什么还要用Fortran?带着这个疑问把源码过了一遍之后,我意识到这个选择有它的道理。Fortran在科学计算领域积累了几十年的代码资产,尤其是电离层、对流层这类地球物理模型中,大量成熟的算法库都是Fortran写的,RNX2GTEX作为其中一环,用Fortran写可以非常方便地嵌入到既有模型流程中。另外,处理长时间序列的RINEX数据时,Fortran的数组操作和I/O效率确实比脚本语言高出一截,尤其是在没有向量化优化习惯的Python代码面前,差距很明显。
2. TEC计算原理:代码背后的物理与数学
2.1 双频观测值如何反演TEC
要读懂RNX2GTEX的源码,先得理解TEC反演的基本原理。GNSS信号从卫星到接收机的传播路径上,会穿过电离层,而电离层中的自由电子会对无线电信号产生折射效应。这个效应的核心特征是:折射量与信号频率的平方成反比。所以用两个不同频率的信号同时传播,两者之间的延迟差就直接反映了传播路径上的总电子含量。
具体到数学表达,伪距观测方程可以写成:
P1 = ρ + c(dt_r - dt_s) + I1 + T + ε1 P2 = ρ + c(dt_r - dt_s) + I2 + T + ε2
其中电离层延迟I与频率的关系是:
I1 = 40.3 × TEC / f1² I2 = 40.3 × TEC / f2²
两式相减,消去几何距离ρ、钟差和对流层延迟T,得到:
P2 - P1 = 40.3 × TEC × (1/f2² - 1/f1²)
整理后就是代码里最核心的公式:
TEC = (P2 - P1) × f1² × f2² / (40.3 × (f1² - f2²))
对于GPS系统,f1 = 1575.42 MHz,f2 = 1227.60 MHz,代入后系数大约是9.52,也就是TEC ≈ 9.52 × (P2 - P1)。这里的TEC单位是TECU,1 TECU = 10¹⁶ electrons/m²。
RNX2GTEX源码里必然有一段代码在做这个换算,但实际工程实现远比公式复杂。因为伪距观测值噪声很大,单历元的P2 - P1可能包含几TECU的噪声,直接使用效果很差。所以常见做法是用载波相位观测值来平滑伪距,或者直接用相位观测值计算相对TEC变化,再用伪距TEC来消除相位模糊度。
2.2 载波相位TEC与模糊度处理
载波相位观测值的噪声远小于伪距,大约只有毫米级,对应的TEC噪声可以低到0.01 TECU以下。但相位观测值有一个整数模糊度问题,导致它只能给出TEC的相对变化,无法给出绝对值。
相位观测方程类似:
L1 = ρ + c(dt_r - dt_s) - I1 + T + λ1 × N1 + ε1 L2 = ρ + c(dt_r - dt_s) - I2 + T + λ2 × N2 + ε2
同样做差,得到:
L1λ1 - L2λ2 = -(I1 - I2) + λ1N1 - λ2N2
整理后:
TEC = (L1λ1 - L2λ2 + λ2N2 - λ1N1) × f1² × f2² / (40.3 × (f1² - f2²))
这里的λ1N1 - λ2N2是一个常数偏差,只要没有周跳,它在一段连续观测弧段内保持不变。所以RNX2GTEX这类工具的标准做法是:用伪距TEC确定这个常数偏差的初值,然后用相位TEC去跟踪高精度的相对变化。这种组合方式兼顾了伪距的绝对性和相位的精密性。
源码里实现这个策略时,最需要小心的就是周跳检测。一旦发生周跳,相位观测值会跳变,常数偏差也随之改变,如果继续沿用之前的偏差值,后续所有TEC估计都会整体偏移。我看到的实现里,通常会使用电离层残差组合或者M-W组合来检测周跳,碰到周跳就重新初始化偏差。
2.3 硬件延迟偏差(DCB)和斜向TEC转垂直TEC
还有一个不可忽视的问题:卫星和接收机硬件对两个频率信号的处理延迟不同,这种差分硬件延迟(DCB,Differential Code Bias)会直接叠加在TEC估计值上。如果不做修正,TEC结果可能偏差几TECU到十几TECU,在电离层平静时期这个误差已经相当可观了。
处理DCB通常有两条路线。一条是用外部产品修正,比如CODE分析中心发布的卫星和接收机DCB文件,直接扣除;另一条是在数据自身内部估计,假设一个区域内所有接收机和卫星的DCB之和在一定时间尺度内恒定,通过最小二乘平差同时解算TEC和DCB。RNX2GTEX这类单站处理工具,如果源码里没有集成外部DCB文件的接口,那它的输出就是"非修正TEC",也就是包含DCB偏差的原始TEC值。这一点在用的时候要特别注意,否则后续建模会引入系统性误差。
另外,从观测值中提取的TEC是沿卫星到接收机视线方向的斜向TEC(STEC),而大多数应用场景需要的是垂直TEC(VTEC)。转换需要知道电离层穿刺点(IPP)的位置和卫星高度角,常用的是单层映射函数:
VTEC = STEC × cos(arcsin((Re×sin(90°-el)) / (Re+h)))
其中Re是地球半径,约为6371 km,h是电离层单层高度,通常取350-450 km。RNX2GTEX如果输出的是STEC,那就需要在后处理中自己加这一层映射;如果源码里已经包含了映射函数,那它输出的就是VTEC。我建议拿到源码后第一件事就是确认这一点,看一下主程序里是否调用了高度角计算和映射函数相关的子程序。
3. 源码结构与核心模块拆解
3.1 RINEX文件解析模块:格式细节决定成败
RINEX格式是GNSS数据交换的通用语言,但解析它并不轻松。RNX2GTEX的源码首先要解决的就是读取RINEX观测文件,通常是RINEX 2.11或2.12版本,也可能支持3.x。这个模块的代码量往往占整个项目的三分之一以上,属于典型的"看着简单,写起来琐碎"的部分。
RINEX观测文件的结构分两部分:头部区(Header)和数据区(Body)。头部区每一行都有固定的列位置,比如第1-60列是描述信息,第61-80列是标签。程序需要从头部读取的关键信息包括:接收机近似位置(APPROX POSITION XYZ)、观测类型列表(# / TYPES OF OBSERV)、观测历元间隔(INTERVAL)、数据类型标志(G=GPS,R=GLONASS,E=Galileo,C=BDS)等。
这里有一个特别容易踩的坑:不同版本的RINEX对观测类型的命名规则不同。RINEX 2.x用的是两位字符,比如L1、L2、P1、P2、C1、D1、S1;RINEX 3.x变成了三位字符,比如L1C、L2W、C1C、C2W。RNX2GTEX源码里,解析模块通常会维护一个映射表,将不同版本的观测码统一映射到内部定义的编号,然后根据编号索引对应的观测值数组。如果你自己改源码,新增了某种观测类型而没有同步更新映射表,程序会大概率在读取数据时直接报错。
解析数据区时,需要注意历元行的格式。RINEX 2.x的历元行格式为"YY MM DD HH MM SS 标志 卫星数",然后是每颗卫星的观测值。观测值按头部声明的类型顺序排列,缺失值用0.0或空白填充。源码中常见的做法是逐行读取后,先判断是否为历元行(通过正则或格式检查),再按卫星数循环读取观测值,每一颗卫星的观测值根据被跳过的空白字段对齐。
I/O性能方面,RNX2GTEX如果处理的是多天、多站的RINEX数据,文件I/O的优化就很重要。我看到一些实现里用了Fortran的直接访问(direct access)或流式I/O来替代默认的顺序读,实测在大文件上能快不少。
3.2 观测值预处理与质量控制
RINEX数据不等于干净数据。由于多路径效应、接收机异常、卫星故障等原因,原始观测值里混入了不少粗差,RNX2GTEX的预处理模块就是把这些异常值挡在TEC计算之前。
预处理通常包含几个环节。首先是卫星高度角计算,利用广播星历或精密星历计算每颗卫星在接收机处的仰角和方位角。高度角低于阈值(比如10度)的卫星观测值会被剔除,因为低高度角信号穿过电离层的路径长,多路径效应严重,TEC提取精度很难保证。
其次是粗差剔除。常用的方法是考察相邻历元之间的观测值变化率,如果某个历元的P2-P1值与前一个历元的差值超过设定阈值(比如50 TECU),就标记为异常并剔除。更严格的做法是结合载波相位平滑伪距后的残差来判断,残差超过3倍标准差就剔除。
再就是周跳检测。我上面提到过,相位观测值的连续性直接决定了TEC跟踪的精度,所以RNX2GTEX里大概率会有一个专门检测周跳的子程序。经典的检测手段是使用电离层残差组合(LI组合,即L1 - L2的线性组合),这个组合对周跳非常敏感——一个周跳在LI组合中会产生大约5.4 cm的跳变(对GPS),远超噪声水平。代码中通常会给LI组合设置一个阈值,比如10 cm,超过就判定为周跳,并触发模糊度重新初始化。
3.3 TEC计算与输出格式
预处理完成后,TEC计算就是标准的公式推演了。RNX2GTEX主体循环伪代码思路通常是:
打开RINEX观测文件 读取头部信息 循环读取每个历元: 循环读取每颗卫星: 检查观测值有效性 计算卫星高度角/方位角 如果高度角低于阈值,跳过 计算伪距TEC(P2-P1) 计算相位TEC(L1λ1-L2λ2) 用伪距TEC初始化相位TEC常数偏差 检测周跳,若发生则重新初始化 输出STEC或VTEC 关闭文件输出部分一般有两种设计。一种是直接输出文本文件,每行包含时间、卫星PRN、高度角、方位角、STEC、VTEC等字段,方便用绘图工具展示;另一种是直接输出成IONEX格式或其他电离层地图产品需要的中间格式,方便与CODE、IGS等机构的产品做对比。看RNX2GTEX这个名字,GTEX大概率是"GNSS TEC EXtraction"的意思,输出的应该是一种自定义的TEC交换格式,后面可以做转换器接到其他可视化工具上。
这里我建议拿到代码后先看输出样例,确认各个字段的单位和坐标系。比如STEC是正的还是负的,相位TEC的符号约定是什么,时间是GPS时还是UTC,这些细节如果不核对,后面做时间序列对比时很容易出问题。
4. 编译与运行实战
4.1 Fortran环境准备:gfortran安装与验证
RNX2GTEX是Fortran源码,第一步是准备一个可用的Fortran编译器。如果你在Linux或macOS上工作,gfortran是最稳妥的选择,它是GNU编译器套件的一部分,免费、跨平台、兼容性好。大部分Linux发行版都可以通过包管理器直接安装,Ubuntu/Debian系用apt,CentOS/RHEL系用yum或dnf。macOS上如果装了Homebrew,brew install gcc就会一并安装gfortran。Windows上可以安装MinGW-w64或者使用WSL(Windows Subsystem for Linux),我个人的建议是直接用WSL跑Linux环境,省去一堆环境变量和依赖的麻烦。
安装完成后,用下面的命令验证编译器是否正常:
gfortran --version如果输出了版本信息,就说明环境就绪。接着写一个hello world验证编译链路:
program hello print *, 'Fortran is ready' end program hellogfortran -o hello hello.f90 ./hello这里有个小经验:老版本的RNX2GTEX源码可能用的是Fortran 77语法(.f后缀),而新版本可能是Fortran 90/95(.f90后缀)。gfortran对两者都能编译,但处理.f文件时会按F77标准编译,如果你的代码里用了F90的自由格式写法,记得把文件名改成.f90,或者在编译时加-ffree-form选项强制指定自由格式。
4.2 源码编译流程:从Makefile到手动编译
拿到RNX2GTEX源码后,先看看项目里有没有Makefile。有Makefile的话,直接执行make就能出可执行文件。但很多学术代码的Makefile年代久远,编译器选项和现代环境不完全兼容,需要手动调整。
我的建议是先把Makefile里的FC变量指到gfortran,把FFLAGS里的优化选项设置好:
FC = gfortran FFLAGS = -O2 -ffixed-line-length-none -fno-range-check LDFLAGS =这里-ffixed-line-length-none很重要,因为老Fortran代码默认固定格式下每行不能超过72个字符,如果源码里有长表达式,不加这个选项会直接编译报错。-fno-range-check是应对某些老代码里整数溢出或类型转换检查过严的问题,不过用的时候要谨慎,它可能掩盖真实的代码bug。
如果项目里没有Makefile,也可以手动编译:
gfortran -O2 -ffixed-line-length-none -o rnx2gtex main.f90 tec_calc.f90 rinex_read.f90注意编译顺序,依赖模块一定要在主程序之前编译。如果源码用到了module(.mod文件),还需要保证module文件在编译时能被找到,必要时用-I参数指定module搜索路径。
4.3 运行参数与输入输出文件
运行RNX2GTEX前,需要准备好输入文件。最基本的输入是一份RINEX观测文件,文件名通常类似abcd0010.21o这种格式,其中abcd是测站名,001是年积日,0表示该天内第0个会话,.21o表示2021年的观测文件。如果你的源码还依赖导航文件(比如需要计算卫星位置或高度角),那还需要准备对应的.21n或.21p文件。
程序运行方式通常是命令行传参:
./rnx2gtex abcd0010.21o或者交互式输入文件名。运行后应该会生成一个TEC输出文件,我建议第一次运行先用小数据量尝试,比如单站1小时的RINEX文件,确认输出符合预期后再跑完整数据。
输出文件的每一行大概长这样:
2021 001 12 00 00 G01 45.3 182.6 12.34 11.87 2021 001 12 00 00 G02 38.7 75.2 18.92 17.44分别是时间、卫星PRN、高度角、方位角、STEC、VTEC。这些字段名可能因源码版本不同而有差异,但核心信息是一致的。
5. 常见问题与排查技巧实录
5.1 编译期报错的原因和解决
RNX2GTEX这类老代码,编译报错几乎是必然的,不用慌,大部分问题集中在几类。
最常见的是语法兼容性报错。比如老代码用了PAUSE语句,这在现代Fortran标准里已经被废弃,gfortran会报告Error: PAUSE statement is not standard,可以直接注释掉或者改成CONTINUE。还有OPEN语句里的STATUS='NEW',如果文件已经存在会报错,改成STATUS='REPLACE'即可。
另一个高频问题是隐式类型冲突。老Fortran代码默认I-N规则(变量名以I、J、K、L、M、N开头的是整型,其他是实型),但有些变量名在现代代码里容易引起歧义。比如NMAX被当作整型,如果代码里给它赋了浮点值,编译时会报Type mismatch。解决办法是在主程序和子程序里统一加上IMPLICIT NONE,把所有变量显式声明,虽然改起来麻烦,但能一次性把这类问题清干净。
还有一种情况是整数溢出。处理RINEX数据时,如果用到整型变量存储时间戳或数据字节数,在老代码里可能是16位或32位整型,数据量大了之后会溢出。gfortran默认整型是32位,存储文件大小没问题,但如果代码里有从UNIX时间戳转换的逻辑,建议把相关变量改成INTEGER(8)。
5.2 运行期数据异常的类型和应对
编译过了不等于能拿到正确结果。我实际跑这类工具时,经常遇到几类运行期异常。
第一类是输出TEC值全部为零。这通常是输入的RINEX文件里没有找到代码期望的观测类型。比如源码默认读取P1和P2观测值,但你的接收机输出的是C1和L2,源码里与观测类型匹配相关的逻辑就会失效,导致所有观测值被标记为无效。解决方法是查看源码中解析观测类型那段,把实际存在的观测码加入匹配列表。
第二类是TEC值出现明显的系统性偏差或跳变。系统性偏差大概率是DCB未修正导致,前面分析过,这是预期内的。跳变则要重点检查周跳检测是否生效,可以对照该时段有没有发生磁暴等空间天气事件,如果没有,就很有可能是周跳漏检。
第三类是程序运行到某个历元直接崩溃或死循环。常见原因是RINEX文件数据区某行格式损坏,导致解析逻辑进入错误分支。排查时可以打开调试选项重新编译,或者直接在读取模块里加打印语句,输出出问题历元的时间,再回到原始RINEX文件里检查那一行数据。
5.3 结果验证与质量评估
拿到TEC结果后,一定要做质量检查,而不是直接进入后续建模。我的习惯做法是三个步骤。
第一步,画出TEC时间序列图,看趋势是否合理。正常情况下,白天TEC值高,中午前后达到峰值,夜间TEC值低,日出前达到谷值。一天内STEC变化范围通常在几TECU到几十TECU之间。如果曲线完全没有日变化规律,或者数值明显超出合理范围,说明处理链路有问题。
第二步,与外部产品对比。IGS和CODE等机构发布全球电离层地图(GIM),可以从它们的网站下载对应时刻的TEC数据,在自己的测站位置插值,再与RNX2GTEX的输出对比。两者差异在几个TECU以内是正常的,如果差异巨大,需要仔细检查是否漏掉了DCB修正。
第三步,检查多颗卫星之间的一致性。同一测站同一时刻,不同卫星的STEC因为传播路径不同会有差异,但VTEC经过映射函数修正后应该趋于一致。如果某颗卫星的VTEC明显偏离其他卫星,大概率是这颗卫星数据本身有问题或者处理参数设置不对。
以下整理了一份快速排查表,方便复现时对照。
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 编译报错PAUSE/STOP | 老语法不适配 | 注释或替换为CONTINUE |
| 编译报类型不匹配 | 隐式类型冲突 | 加IMPLICIT NONE显式声明 |
| 输出全零 | 观测类型不匹配 | 检查RINEX头部的观测类型列表 |
| TEC日变化无规律 | 卫星钟差/轨道未处理 | 确认是否输入了导航文件 |
| TEC整体偏大 | DCB未修正 | 引入外部DCB改正 |
| TEC出现阶跃 | 周跳漏检 | 调整周跳检测阈值 |
| 运行崩溃 | RINEX数据行损坏 | 定位并修复损坏行 |
6. 实际应用场景与扩展思路
6.1 电离层监测与研究中的典型用法
RNX2GTEX提取出的TEC时间序列,在科研和工程中用途很广。我自己最近的项目里,用这类工具处理了一个中等纬度测站连续三天的数据,研究磁暴期间TEC的扰动特征。方法是先提取STEC,然后用滑动窗口计算TEC变化率指数(ROTI,Rate of TEC Index),能很清楚地看到磁暴期间电离层闪烁活动增强的信号。
具体做法是:对每个卫星的连续弧段,计算每30秒的TEC变化率,再在5分钟窗口内统计标准差,就得到了ROTI。用RNX2GTEX的输出,配合几行Python脚本就能完成:
import numpy as np import pandas as pd data = pd.read_csv('tec_output.txt', delim_whitespace=True, names=['year','doy','hh','mm','ss','prn','el','az','stec','vtec']) data['time'] = pd.to_datetime(data[['year','doy','hh','mm','ss']].astype(str).agg('-'.join, axis=1), format='%Y-%j-%H-%M-%S') data = data.sort_values(['prn','time']) for prn, grp in data.groupby('prn'): grp = grp.reset_index(drop=True) dtec = grp['stec'].diff() / grp['time'].diff().dt.total_seconds() * 30 roti = dtec.rolling(10, min_periods=1).std() data.loc[grp.index, 'roti'] = roti这类分析在空间天气研究和导航增强系统性能评估中非常常见。
6.2 从单站到网络:扩展方向
RNX2GTEX的单站版本做出来后,下一步很自然的扩展就是处理一个测站网络的TEC数据,做区域电离层地图。常见做法是先把每个站的TEC输出统一为VTEC,然后选择单层高度(比如350 km),计算每个观测值的电离层穿刺点经纬度,再用克里金插值或球谐函数拟合生成区域TEC地图。
这个过程在Fortran源码层面可以加,但更便捷的做法是保留RNX2GTEX作为前端提取工具,把输出用Python的scipy和pykrige做插值。两条路线的区别在于:如果数据量巨大、要求实时处理,就在Fortran侧把插值也实现了,减少I/O开销;如果只是离线研究,脚本语言就够用了,没必要改Fortran源码。
另外一个常见扩展是把TEC输出与接收机DCB估计结合起来。如果你有同一个区域多个测站同时段的数据,可以在TEC提取结果的基础上,用最小二乘平差同时估计每个测站的接收机DCB和每颗卫星的卫星DCB。这个内容本身可以写一篇单独的博文,这里提一句是因为RNX2GTEX输出的STEC文件是这类平差的直接输入,做好格式对接能省不少事。
6.3 源码改造时的一些个人经验
如果你打算在RNX2GTEX基础上做二次开发,我分享几个实操中总结的经验。
第一,先跑通再改造。拿到源码第一件事不是急着读代码,而是先找一小段RINEX数据,把原始代码完整编译运行一遍,确认输出正常。只有基线跑通了,你之后做的任何改动才有对照。
第二,新增输出字段时,注意保持原有输出格式稳定。很多下游处理流程依赖固定列数的输出文件,如果你加了列,下游脚本就会错位。稳妥的做法是新增一个输出文件,或者在文件末尾附加新列,而不是改中间列的位置。
第三,RINEX 3.x的多系统支持值得优先考虑。现在越来越多的接收机输出RINEX 3.x格式,包含GPS、GLONASS、Galileo、BDS等多系统数据。如果RNX2GTEX只支持GPS,可以照葫芦画瓢扩展支持其他系统。注意不同系统的频率不同,比如BDS的B1I是1561.098 MHz,B2I是1207.14 MHz,Galileo的E1是1575.42 MHz,E5a是1176.45 MHz,这些频率常数必须对应修改,直接套GPS的公式会得到错误结果。
第四,单元测试断不可少。TEC计算函数是整个工具的核心,建议给它写一组单元测试,输入已知的P1、P2差值,验证输出TEC是否与理论值一致。比如P2-P1 = 1米时,TEC应该约为9.52 TECU,几个简单用例就能把核心算法钉死,后续改代码不会改坏。
7. 写在最后的一点实操体会
用RNX2GTEX处理TEC数据这条技术路线,给我最大的感受是:科学计算领域,工具不论新旧,能解决问题就是好工具。Fortran这门语言被很多人认为过时了,但在GNSS电离层处理这种对数值精度和计算效率要求高的场景,它依然有不可替代的价值。RNX2GTEX的价值不仅在于它本身能提取TEC,更在于它是一个完整的、结构清晰的样例,新手可以通过读懂它理解TEC提取的全流程,老手可以在它的基础上做二次开发。我自己的做法是将它作为整个处理链路的源头,后面接Python做可视化和统计分析,各取所长。最后再提醒一句:跑任何GNSS处理工具之前,先确认你对输入数据的格式和数据质量有充分的了解,这是所有后续分析可信度的基础。
本文还有配套的精品资源,点击获取