RTKLIB 的可变模糊度解决阈值
文章来源于RTKlibexplorer博客的作者,这里仅做翻译记录,方便后期查找学习。 原文链接A variable ambiguity resolution threshold for RTKLIB
RTKLIB 使用模糊度分辨率(AR 比)阈值来确定整数模糊度分辨率解是否有足够的置信度以将其声明为固定解。如果不是,则使用浮动解决方案。更具体地说,AR比率是次优固定解的残差平方和与最佳固定解的残差平方和之比。
该比率越高,最佳解决方案是正确解决方案的置信度就越高。然而,没有简单的方法来确定该阈值的最佳值应该是多少。在实践中,通常根据经验结果设定,典型值在 1.5 到 3.0 之间变化。RTKLIB 使用 3.0 作为该阈值的默认值,这是一个相当保守的值,尤其是当有大量卫星可用于模糊度解决时。如果选择的值太低,错误修复将很常见,但值太高会导致不必要的低修复率。一般来说,如果底层 GNSS 模型强度较高,则可以使用较低的阈值。GNSS 模型强度会受到很多参数的影响,包括跟踪卫星的数量、测量精度、测量周期数、使用频率的数量,以及许多其他。如果模型强度高,那么这个可以降低,如果模型强度非常低,应该增加阈值。
Teunissen 和 Verhagen 在这篇论文中提出了一个令人信服的论点(和其他几个)AR 比率阈值不仅应该针对不同的解决方案环境进行调整,而且还应该在单个解决方案中逐个时代进行调整。他们认为,随着模型强度的变化,阈值应该进行调整,以确保错误解决方案的可能性是固定的。事实证明,精确的模型强度很难计算,模型强度与最优阈值之间的关系也很复杂。他们提出了一种解决方案,其中从两个参数估计模型强度;(1) 卫星的数量,以及 (2) 基于浮点模糊度协方差矩阵的模糊度解析失败率的估计。然后将这两个值与所需的故障率一起应用于一组查找表,以计算最佳阈值。查找表是使用各种模型和模型强度的蒙特卡罗模拟生成的。他们将这种技术命名为固定故障率比测试 (FFRT)。
他们提供了 Matlab 和 python 代码示例来演示他们的算法,可以从这里下载这些算法以及一些解释其工作原理的文档。对于任何想要更完整地了解他们的方法的人来说,这是一个非常有用的工具。
他们在几年前的论文中预测的一件事是,随着可用卫星的数量随着更新的星座而增加,远离固定阈值的需求将变得更大。我相信随着伽利略和北斗的推出,以及更新的低成本双频接收器,我们已经达到了固定阈值不再足够的地步。问题在于,特别是对于动态运动场景,可用卫星对的数量可能从遮挡条件下的少数几个到开阔条件下的几十个不等。这导致单个解决方案中模型强度的巨大变化。如果选择固定阈值来满足受阻天空条件,那么对于开阔天空条件来说就太保守了。
因此,下一步是尝试将一些此功能添加到 RTKLIB 的演示 5 版本中。我很早就决定通过使目标简单地改进现有算法而不是尝试实现最佳解决方案来降低解决方案的复杂性。朝这个方向迈出的第一步是用一组级联多项式系数替换查找表,以用一组更小的数字来近似表的内容。然后我将上述python代码的FFRT部分重写为RTKLIB C代码。示例代码还允许用户选择两个目标故障率之一。为了进一步简化解决方案,我取消了更高的固定故障率目标选项,仅支持 0.001 故障率目标。
到现在为止还挺好。我能够在 python 示例代码和 RTKLIB 代码之间获得非常相似的结果。不幸的是,我对这些结果并不完全满意。基于卫星数量的阈值调整似乎表现良好,但基于浮动模糊度协方差矩阵的调整往往过于乐观,会导致阈值调整得太低。我怀疑其原因与卡尔曼滤波器的准确度估计也趋于非常乐观的原因非常相似。数学是基于这样的假设,即输入测量值都具有零均值误差并且彼此不相关且在时间上不相关,在现实世界中这些都不成立。在某种程度上,查找表应该对此进行补偿,
我的结论是,在许多情况下,模糊度协方差矩阵不足以准确估计卫星分量数量后的剩余模型强度。然而幸运的是,我相信解决方案中模型强度的最大变化通常是由可用卫星数量的变化引起的,而不是由其他组件引起的。
我最终得到的结果是,至少作为初始实现,根据卫星数量调整阈值,但模型强度的其余部分仍由用户指定。为了让用户界面与现有的 RTKLIB 代码更加兼容,我使用了现有的惯例,即通过直接调整 AR 比率阈值来调整模型强度。然而,现在调整的是名义 AR 比率阈值而不是固定阈值。标称 AR 比率阈值被定义为有八个卫星对用于模糊度解决的情况的阈值。如果模糊集中的卫星对数增加,则降低阈值,如果减少,则增加阈值。
下图试图展示在固定目标故障率为 0.1% 的情况下,此方法与 FFRT 算法的相关性。我不会在这里详细描述 Pf_ILS 是什么,知道它是前面提到的在 FFRT 中从浮点模糊协方差矩阵计算的模型强度估计就足够了。
下图中点的三个轨迹是在 FFRT python 代码中使用指定模型强度 (Pf_ILS) 0.005、0.035 和 0.85 的查找表计算的。x 轴是用于模糊度解决的卫星数量,y 轴是相应的 AR 比率阈值。三条彩色线是在 RTKLIB 中为对应于这些模型强度的标称 AR 比率阈值计算的等效值。
? AR比率阈值的omparison为FFRT和RTKLIB
值得一提的一个细节是,FFRT 方法使用卫星数作为输入,而 RTKLIB 实现使用卫星对数作为输入。它们在一种频率、一种星座情况的计算中对齐。因此,您可以看到图例中的标称 AR 比率阈值出现在 x 轴上的卫星数量为 9 颗(一颗参考卫星和八颗差分卫星)时。随着参考卫星的数量随着多个星座和频率的增加而增加,卫星数量和卫星对数量之间的差异将增加。
我已将这些代码更改引入到 demo5 b34c 代码中,该代码可从 rtklibexplorer Github 页面或 rtkexplorer.com 的下载部分获得
我已经向 RTKLIB 添加了两个新的配置参数,以尝试使此功能尽可能灵活。下图来自 RTKPOST,突出显示了两个新功能,最小 AR 比率和最大 AR 比率。这些允许完全禁用(默认)、部分启用或完全启用新功能。每个时期的 AR 比率阈值首先根据标称 AR 比率阈值和卫星对的数量计算,如上图所示。如果超过任一值,则将其剪裁为最小值或最大值。
?可变AR比阈值Ew输入选项
最小值、最大值和标称值的默认值为 3.0。这将强制比率始终等于 3.0,并等于之前的单个默认值 3.0。要完全启用该功能,请将最小值设置为小于或等于 1.0,将最大值设置为 10.0 或更大。这意味着计算出的阈值永远不会被裁剪。在上面的示例中 (min=1.5,nom=3,max=10),我部分启用了该功能。只要大于或等于 1.5,就会使用上图中蓝线的计算值。如果卫星对的数量大于 25,计算的阈值将低于 1.5,但最终值将设置为 1.5,因为它将被最小阈值裁剪。
当使用 u-blox F9P 或其他具有多个星座的双频接收器运行实时解决方案时,这些更改会产生最大的差异,因为用于模糊度解决的卫星对数量可能非常大,而且首次修复的时间更为关键。在这种情况下,它可以显着减少标称情况下首次修复的时间,同时如果只有少数卫星可用,仍然可以防止错误修复。
但是请注意,可变阈值并不总是会提高修复率,并且在某些情况下会降低它。只要可用卫星对的数量低于 8,AR 比率阈值就会增加。这将减少错误修复的数量,但也会降低修复率。但总的来说,它应该在整个卫星计数范围内提供更恒定的故障率。
在我的下一篇文章中,我将使用此功能将内部 F9P 实时解决方案与 RTKNAVI 实时解决方案进行比较。