拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

GAMIT+COSAGPS联合解算GNSS控制网的完整流程与精度验证

GAMIT+COSAGPS联合解算GNSS控制网的完整流程与精度验证

简介:一份聚焦全球导航卫星系统(GNSS)高精度控制网数据处理的PDF参考文献,面向测绘、工程测量及GNSS数据处理从业者与相关专业学生。内容基于GAMIT与COSAGPS软件联合处理流程,以某工程C级网为实例,系统介绍GAMIT基线解算步骤——包括更新软件运行表、准备观测数据、修改关键表文件、执行解算命令及质量评估;并说明COSAGPS后处理中的基线质量检验、三维向量网平差、二维网联合/约束平差与坐标成果转换,最终获取ITRF2008框架空间直角坐标和北京54平面成果,再借助TBC软件交叉验证结果可靠性。压缩包仅含1个PDF文件,大小1.24MB,为专业工程实践总结,适合作为方法参考与操作指南。已有246人学习下载,兼具理论讲解与工程案例,可帮助读者快速掌握符合中国GNSS标准的联合处理流程、质量评定要点及成果验证思路。

1. 从 GAMIT 到 COSAGPS:这套 GNSS 控制网数据处理流程,为什么值得你抄作业

做高精度 GNSS 控制网的人,多半都经历过这种纠结:GAMIT 解基线确实强,精密星历下相对精度能到 10⁻⁹ 量级,可它输出的是 o 文件,不是中国规范里那套点名、闭合差、限差检验的东西;COSAGPS 能按国标做基线质量评定和网平差,可它自己不解算基线。两个软件单独用都有短板,合起来才是完整闭环。这篇论文给的正是这条联合处理路线——GAMIT 解算基线,COSAGPS 做后处理平差,再用 TBC 独立验证,最终拿到 ITRF2008 框架当天历元下的空间直角坐标和北京 54 坐标系下的平面成果。适合谁?搞 C 级及以上等级控制网、变形监测基准网、工程首级网的技术人员,尤其是要被规范卡脖子、成果要经得起评审复核的人。下文我会把整个过程拆开,落到文件、命令、参数和坑上,照着走一遍,你也能复现。

2. 数据准备与 tables 更新:GAMIT 跑得顺不顺,一半看这里

2.1 目录结构和 RINEX 标准化是第一步,别嫌啰嗦

GAMIT 对文件组织方式有严格要求,我第一次跑的时候图省事把文件全扔一个目录里,结果 sh_gamit 直接报错找不到对应时段的文件。论文里的做法是对的:在工程目录下建三个文件夹rinex、brdc、igs,分别放 RINEX 观测文件、广播星历和精密星历。RINEX 文件名必须是小写,格式为sitedoyn.yyo,其中site是 4 字母站名,doy是年积日,n是时段号,yy是年份。比如 DOY 124、第 1 时段、2017 年,文件名就是abcd1240.17o。这个命名规则看着死板,但 GAMIT 的sh_gamit是靠文件名来识别站名和时段的,错一个字符它就给你脸色看。

另一个关键点是天线高。原始观测文件里的天线高通常是量到天线某个物理位置的斜高或垂高,但 GAMIT 需要的是相位中心高度。论文里提到要根据rcvant.dat修改 RINEX 头文件中的接收机类型、版本和天线类型,这一步不能省。实际做法是:先用南方测绘或其他厂商软件把原始数据转成标准 RINEX,然后查rcvant.dat里对应天线型号的相位中心偏移量,在 RINEX 头文件的ANTENNA: DELTA H/E/N里改掉。如果你用的是第三方转换工具,务必打开 RINEX 文件检查头文件信息,我见过好几回转换工具把天线类型写错,导致后面解算出现系统性偏差。

2.2 tables 更新用 sh_setup 一条命令搞定,但关键文件得手改

更新gamit/tables是每次处理前必须做的,因为 leap.sec(闰秒)、pole. (极移)、ut1. (地球自转参数) 这些文件每天都在变。论文给的是手动从 FTP 下载的方式,但更省事的做法是直接运行sh_setup,它会从 MIT 的服务器同步最新 tables。在工程目录下执行:

sh_setup -yr 2017

执行后会在当前目录生成tables文件夹,里面全是 GAMIT 运行需要的表文件。这一步的逻辑是:GAMIT 解算时要用到固体潮、极移、章动等改正模型,这些模型的参数是随时间变化的,不用最新值,解出来的基线在长基线上会有毫米级到厘米级的偏差。尤其注意svs_exclude.dat这个文件,它记录了不可用的卫星 PRN 号,比如正在机动或健康状态异常的卫星,不排除它们会把 NRMS 值搞得很差。

生成 tables 后,有四个文件必须手动改,这是整个流程里最需要细心的地方。第一个是station.info,记录测站名、接收机编号、天线类型、天线高、时间段等信息,GAMIT 靠它来匹配 RINEX 文件里的观测数据。第二个是sites.defaults,指定哪些站是 IGS 站、哪些是待测站,以及它们的先验坐标精度。第三个是sestbl.,这是解算策略控制文件,里面有坐标约束、对流层估计、模糊度固定策略等参数。第四个是process.defaults,控制处理流程的全局参数。这几个文件的具体写法,GAMIT 的tables目录下都有模板,复制一份改就行,关键是别漏字段。

3. GAMIT 基线解算实操:sh_gamit 命令与 NRMS 质量评估

3.1 一条 sh_gamit 命令背后的参数逻辑

准备好数据后,运行集成式解算命令。论文中用的是最终精密星历,命令如下:

sh_gamit -d 2017124 -orbit IGSF

这里-d 2017124表示解算 2017 年 DOY 124 的数据,-orbit IGSF表示使用 IGS 最终精密星历。命令执行后,GAMIT 会自动读取rinex、brdc、igs目录下的文件,按sestbl.里的策略逐时段解算基线。

参数设置上,论文给出的配置是:采样间隔 15 秒,高度截止角 15°,基线解算方式LC_Help,星历类型为最终精密星历。其中LC_Help是 GAMIT 推荐的基线解算模式,它先用 LC 组合(消电离层组合)求解,再用 Help 算法辅助固定模糊度。需要注意,GAMIT 解算时的高度截止角可以设得比采集时高,论文里采集时用的 10°,但解算时用 15°,这是因为低高度角的观测值受大气延迟和多路径影响较大,解算时适当抬高截止角能提升解的稳定性,代价是略降冗余度。

有一个容易被忽略的细节:lfile.中的测站先验坐标来自 RINEX 头文件。这意味着你在准备 RINEX 时,头文件里的近似坐标尽量要准,误差别超过 10 米。如果 RINEX 头文件坐标写得离谱,GAMIT 会因先验坐标偏差过大导致线性化迭代不收敛,NRMS 直接爆炸。

3.2 NRMS 是衡量解算质量的第一指标,学会看它

解算完成后,结果汇总在oexpta.doy文件里(expt是你的工程名),关键看Postfit nrms这一项。NRMS 是标准化均方根误差,反映的是基线解算后残差的整体水平。论文中 4 个时段的 NRMS 分别是 0.196、0.196、0.191、0.186,按国内外经验值,NRMS 小于 0.3 说明解算质量合格,小于 0.2 说明质量相当好。如果 NRMS 大于 0.3,通常说明周跳没有修复干净或对流层模型不合适,需要回头查数据质量。

查看 NRMS 的命令很简单:

grep "Postfit nrms" oexpta.124

但要理解它的物理意义:NRMS 本质上是残差平方和除以自由度和观测权重的标准化结果,它约等于单位权中误差的平方根体现。NRMS 偏大不一定全是观测数据的问题,也可能是sestbl.里的对流层估计间隔设得太密、导致参数过多吸收了信号,这个我在避坑章节会细说。

另外,为了让 COSAGPS 能读取oexpta.doy文件里的基线信息,需要在文件中加入识别标志COSAGPS FOR GAMIT O-FILE。这个操作直接用文本编辑器在文件头部插入即可,但它决定了后面平差能不能顺利进行,少了这行字,COSAGPS 导入时会提示文件格式不识别。

4. 质量评估与常见坑:NRMS 偏大,闭合差超限,都是哪些原因

4.1 NRMS 偏大且反复出现,先查这三处

现象:解算完的 NRMS 大于 0.3,连续几个时段都是如此,反复调整高度截止角也不见好转。

原因:最常见的是 RINEX 文件里的天线高或天线类型与rcvant.dat不匹配。因为 GAMIT 做相位中心改正时用的是 RINEX 头文件里的天线类型和rcvant.dat里的相位中心偏移,两者对不上,残差必然系统偏大。其次可能是station.info里的时间跨度没覆盖实际观测时段,导致部分数据用了默认值处理。第三个原因是sestbl.里对流层天顶延迟估计的间隔参数设得太激进(比如设成 5 分钟),对流层参数吸收了大量残差,反而让 NRMS 显得不正常地高。

解决:先核对 RINEX 头文件,确保天线类型完全匹配rcvant.dat里的型号写法,比如 Trimble 的 Zephyr Geodetic 在文件里写作TRM41249.00这种带编号的形式,缩写错一个字符都不行。再检查station.info的起止时间是否覆盖完整观测时段。对流层估计间隔用默认的 30 分钟即可,不要盲目调小。

4.2 COSAGPS 闭合差超限,但 GAMIT 看起来一切正常

现象:GAMIT 解算时 NRMS 值很好(不到 0.2),但到了 COSAGPS 做环闭合差检验时,某个环的闭合差超限。

原因:你很可能忘了在oexpta.doy文件里正确添加 COSAGPS 识别标志,或者添加的位置不对,导致 COSAGPS 读取基线信息时把某些行的格式解析错误。另一个可能是 GAMIT 解算时用了不同的高度截止角或不同时段的星历,导致同一测站的基线解在不同时段之间存在系统性偏差。

解决:确认识别标志写的是COSAGPS FOR GAMIT O-FILE,且放在文件头部独立一行。如果标志没问题,回到 GAMIT 检查是否所有时段都用了同一版本的精密星历,混用不同版本的星历会让基线解之间存在框架一致性偏差。

4.3 在 o 文件里手工改坐标,改了等于没改

现象:直接在oexpta.doy或lfile.里手改某个测站的坐标,重新跑 COSAGPS 后成果没变化。

原因:GAMIT 解算时测站先验坐标是参与基线解算的,不是平差时才用。你改后处理文件里的坐标,基线向量没变,平差时只是换了基准或约束,不是重新解算。如果测站先验坐标有误,应该在 RINEX 头文件里改近似坐标,然后重新跑sh_gamit。

解决:RINEX 头文件的近似坐标一定要先用掌上电脑或静态解算软件算准,再进 GAMIT。不要指望后处理阶段能补救先验坐标的系统性偏差。

4.4 TBC 验证时平面坐标差得离谱,方向对但数值偏大

现象:TBC 和 COSAGPS 的平差结果对比,长边方向差 2~3 厘米,短边反而差 8 毫米,规律性不强。

原因:坐标系转换参数不一致。COSAGPS 里你用的是北京 54 加中央子午线 102° 的自定义坐标系统,TBC 里如果选了不同的椭球参数或中央子午线,结果自然对不上。另外,TBC 平差时如果你没有把已知点的坐标类型标对(比如把平面坐标当成大地坐标输入),那出来的结果就没有参考价值。

解决:两个软件的坐标系统参数逐项核对:椭球、中央子午线、投影面正常高、已知点坐标类型。论文里明确说 TBC 平差时的坐标系统、平差方法和起算数据和 COSAGPS 相同,这是交叉验证的前提,任何一项不一致,验证就失去意义。

5. COSAGPS 后处理全流程:从基线导入到二维约束平差

5.1 工程参数和已知数据输入,格式决定成败

COSAGPS 处理的第一步是打开或新建工程、设置工程参数。这里要设置的包括坐标系统、中央子午线、仪器误差等。论文里设的仪器误差是 5mm + 1ppm,这是双差固定解的典型先验精度。坐标系统先选 WGS84,因为 GAMIT 解算的基线向量本质上属于 ITRF 框架,而 WGS84 与 ITRF 在厘米级精度上等价。

接下来输入已知数据。论文的做法是把第 1 时段中 CHNS、WQKY 与 BJFS、LHAZ、ULAB、URAM 等 IGS 站联测,获取这两点 ITRF2008 框架 2017.3370 历元下的空间直角坐标,作为三维向量网平差的已知数据。这里要理解一个关键逻辑:GAMIT 解算的基线向量属于 ITRF2014(因为最终精密星历的轨道坐标系统是 IGS14,源于 ITRF2014),但 ITRF2014 和 ITRF2008 在 2010.0 历元有相同的坐标原点、尺度和定向,所以可以把解算结果直接认定为 ITRF2008 当天历元。对于 C 级网这种精度级别,这两个框架间的细微差异可以忽略。

5.2 分时段读取同步基线,检验和三维平差

COSAGPS 的一个核心功能是分时段读取同步基线、形成同步基线文件。操作方法是在软件里按时段逐个导入oexpta.doy文件,软件会自动识别同一时段内同步观测的基线。导入后先做环闭合差检验和重复基线差检验,这两个检验是国标要求的,COSAGPS 会输出每个环的闭合差数值和限差对比。论文中所有异步环闭合差和重复基线差都在限差范围内,说明观测数据质量良好。

在 WGS84 坐标系统下进行三维向量网平差时,参数设置上要留意起算数据的选取。论文只用了 2 个已知点(CHNS 和 WQKY)做约束,其他 8 个点作为待定点。这种用少量高精度点约束全网的做法在 C 级网中很常见,因为 IGS 站联测成本高,不是所有测站都值得布设。

三维平差后,论文得到的最弱点位中误差为 ±8.4 mm,最弱边长中误差为 1/3029000。这个精度远高于 C 级网的要求,说明控制网设计和观测质量都很过硬。

5.3 换坐标系做二维约束平差,这一步最容易翻车

三维平差完成后,将坐标系统更改为北京 54,中央子午线经度 102°,输入 CHNS 和 SZXB 的平面坐标后进行二维约束平差。这里有个容易踩的坑:北京 54 坐标系统的椭球参数和 WGS84 不一样,直接改坐标系而不输入已知平面坐标,平差会因为没有足够的起算条件而无法进行。论文的做法是输入两个已知点的平面坐标,做二维约束平差。

二维平差后,最弱点位中误差为 ±2.3 mm,最弱边长中误差为 1/5016000。注意这个精度比三维平差还要好,这是因为二维约束平差固定了已知点坐标,点位误差被约束条件压制了。从数据处理角度,这两套成果分别服务不同需求:三维成果对应 ITRF 框架下的空间坐标,二维成果对应北京 54 平面坐标,二者用于不同场景。

COSAGPS 的高程拟合功能我没细展开,但在实际项目中,如果网内联测了水准点,可以用它做高程拟合,得到正常高。论文里没提这个,估计是因为该项目平面成果为主,高程另有方案。

6. TBC 交叉验证与两类软件处理结果的差异分析

6.1 TBC 参数设置对照,验证才有意义

TBC 验证的目的不是跑一套独立流程,而是模拟同样的平差基准和流程。论文中 TBC 基线解算参数设置为广播星历、固定解、双频 L1&L2、采样间隔 15 秒、高度截止角 15°。这里有个有意思的地方:GAMIT 用的是最终精密星历,而 TBC 用广播星历,两者解出的基线本身就有差,但 TBC 的优势在于它的基线解算引擎对周跳处理比较稳健,用广播星历也能达到足以验证平面成果的精度。

TBC 的网平差参数必须和 COSAGPS 保持一致:同样的坐标系统、同样的平差方法、同样的起算数据。我见过不少人在 TBC 里默认选了 WGS84 椭球但没改中央子午线,结果投影坐标直接偏掉几米。论文中 TBC 平差时用了和 COSAGPS 相同的北京 54 坐标系和起算点,所以两者平面成果的最大互差只有 8.6 mm,其中大多数点互差在 5 mm 左右。

6.2 两组结果的互差怎么解读:8.6 mm 意味着什么

从表 1 的对比数据看,二维平差成果的互差最大值出现在测站 KSZ7,dx 3.6 mm、dy 7.8 mm,平面互差 8.6 mm。这个量级对于 C 级网来说可以接受吗?C 级网最弱边相对中误差要求一般是 1/100000 量级,8.6 mm 的互差对应 41.67 km 最大边长时是 1/4845,看起来似乎不大,但要注意这是两种软件独处理结果的一致程度,不是点位误差本身。

要靠这个互差验证成果正确性,逻辑是这样的:GAMIT 用精密星历、COSAGPS 用国标检核和约束平差,TBC 用广播星历、独立解算和同样的约束平差,两者在原理、软件、星历上都不完全相同,如果最终平面坐标互差只有毫米级,说明整个流程中的系统性误差没有显著影响。反过来想,如果互差达到厘米级以上,那就要怀疑坐标系参数输错、或者已知点坐标打架了。

拿到 TBC 验证结果后,我在自己的项目里还会多做一个动作:用两个软件各自输出的三维坐标反算边长,和 GAMIT 基线解算的边长对比。如果边长互差也在毫米级,说明整条链路从基线到平差都自洽,成果可以放心出图。

6.3 验证完成后的成果管理:数据归档与复核习惯

处理完 GNSS 数据后,建议把最终成果按项目归档保存:GAMIT 解算的oexpta.doy、COSAGPS 的平差报告、TBC 的验证工程文件,以及所有 RINEX 文件、星历文件。归档时给文件按时段和站点编号命名,方便日后复核。通常项目的技术要求要出正式报告,成果表和精度统计表都在 COSAGPS 里生成,TBC 验证报告作为附件提供给业主单位。

从那以后,我每次做控制网都会强制自己走一遍双软件交叉验证的流程:GAMIT 解基线出 NRMS,COSAGPS 做检验和平差,TBC 独立复核。虽然多花半天时间,但至少成果拿出去不会被质疑数据处理的正确性——这种确认感,远比省那半天时间重要。希望这套流程对你有实际帮助。

本文还有配套的精品资源,点击获取

返回列表