SRIF 在 GNSS 定位软件中的应用:从滤波到信息矩阵

3 阅读5分钟

欢迎到访我的个人主站

1. 为什么 GNSS 里会关心 SRIF

GNSS 定位本质上是一个状态估计问题。位置、速度、接收机钟差、对流层延迟、载波相位模糊度,都可以放进状态向量;伪距、载波相位、多普勒这些观测,则不断给状态增加约束。滤波器要做的事情,就是在先验模型和观测信息之间做一个合理的折中。

如果只是做一个单站定位,状态维度通常不算大,用常规 Kalman Filter 或者它的平方根版本,大多数时候已经够用。比如嵌入式 GNSS 接收机里,算力和内存都比较紧张,滤波器设计的重点往往是稳定、直接、好调试。SRKF 或者 UDKF 在这类场景里就很常见。

但如果问题规模继续往上走,情况就会变得不太一样。比如 PPP 软件里引入更多频点、更多系统、更多状态参数,再进一步考虑多源融合、滑动窗口、甚至多站联合处理,状态维度和观测数量都会明显增加。这时候矩阵结构、数值稳定性和计算代价同样重要。

SRIF 值得关注,正是因为它同时踩中了这几个点。

平方根滤波的基本想法很朴素:不直接维护协方差矩阵或信息矩阵,而是维护它们的平方根因子。这样做的好处是数值上更稳,矩阵正定性更容易保持,也更适合用 QR 分解这类稳定的数值方法来更新系统。

SRIF 更进一步,它站在信息矩阵这一侧看问题。相比协方差矩阵,信息矩阵更容易保留 GNSS 观测中的稀疏结构。简单说,观测只会连接少数几个相关状态,而不是一下子把所有状态都混在一起。这个特点在小规模滤波里不一定显眼,但在大规模 GNSS 估计问题里会越来越重要。

所以这篇文章不打算把 SRIF 讲成一个纯数学概念,而是从 GNSS 软件实现的角度,重点整理几个工程上绕不开的问题:SRIF 和 SRKF 到底差在哪,分别适合什么场景,信息矩阵和协因数阵是什么关系,以及稀疏矩阵背后的图连通性该怎么理解。

2. 从 KF 到 SRKF:协方差视角

先从更熟悉的 Kalman Filter 说起。

标准 Kalman Filter 维护两个核心量:一个是状态估计,另一个是状态误差协方差:

x^,P \hat{x},\quad P

这里的 PP 描述的是状态估计误差的不确定性。对 GNSS 来说,它可以告诉我们位置、钟差、对流层、模糊度这些状态分别有多不确定,彼此之间又有什么相关性。

SRKF,也就是 Square Root Kalman Filter,并不直接维护 PP,而是维护它的一个平方根因子。例如:

P=SST P = SS^T

也可以采用其他分解形式,比如上三角因子或 UD 分解。具体选哪一种,和软件实现、矩阵库、数值习惯都有关系,但核心思想是一致的:不要直接在协方差矩阵上做更新,而是在它的因子上做更新。

这么做的好处很实际。普通 Kalman Filter 在有限精度计算下,协方差矩阵可能会慢慢失去对称性,甚至出现不再正定的问题。状态维度小的时候,这类问题不一定频繁暴露;但在长时间运行、弱观测、强相关状态较多的时候,就会比较烦。SRKF 通过平方根形式更新,数值稳定性更好,也更容易保持协方差的正定性。

从工程使用上看,SRKF 和传统 KF 的思路很接近,预测、更新、输出精度指标都比较直观。如果我们关心的是实时定位结果,以及每个状态的标准差、协方差、相关系数,那么协方差形式天然就很顺手。

所以在单站 RTK、实时 PPP、GNSS/INS 组合导航这些场景里,SRKF 是一个很自然的选择。状态规模不大,实时性要求强,还经常需要输出精度信息,这些都刚好是 SRKF 擅长的地方。

3. 从 IF 到 SRIF:信息视角

SRIF 的出发点不一样,它不是从协方差矩阵这一侧看问题,而是从信息矩阵这一侧看问题。

信息滤波器维护的是信息矩阵和信息向量:

Λ=P1,η=Λx^ \Lambda = P^{-1},\quad \eta = \Lambda \hat{x}

其中 Λ\Lambda 是协方差矩阵的逆。协方差矩阵表达的是“不确定性有多大”,信息矩阵表达的则是“约束有多强”。这两个说法看起来只是正反两面,但落到矩阵结构上,差别会非常明显。

SRIF,也就是 Square Root Information Filter,维护的是信息矩阵的平方根因子:

Λ=RTR \Lambda = R^T R

这里的 RR 通常是一个三角因子。观测更新时,可以把先验信息和新观测方程堆叠起来,然后通过 QR 分解得到新的信息因子。最后需要状态解的时候,再通过三角回代求出 x^\hat{x}

这个过程和加权最小二乘非常像。甚至可以说,SRIF 更像是把最小二乘的 QR 分解写成了递推滤波形式。也正因为如此,它和批处理平差、滑动窗口估计、因子图优化之间的关系会更近。

在 GNSS 里,这个视角很有用。很多观测并不会同时约束所有状态,而是只和少数状态有关。比如某一颗卫星在某一个历元的载波相位观测,通常只会连接接收机状态、卫星相关改正、对流层参数和对应的模糊度。变量很多,但单条观测涉及的变量并不多,这就是典型的稀疏结构。

SRIF 的优势就在这里:它不仅是“平方根形式更稳定”,还可以更自然地利用信息矩阵里的稀疏性。

4. SRIF 和 SRKF 到底差在哪

SRKF 和 SRIF 名字都带 Square Root,容易让人觉得它们只是同一类方法的两个变体。但真正的差别不在“平方根”,而在“协方差形式”和“信息形式”。

SRKF 维护的是协方差的平方根。它关心的是状态误差怎么传播,也就是“我现在还不确定多少”。预测时,过程噪声会让不确定性变大;更新时,观测会让不确定性变小。这套逻辑和传统 Kalman Filter 完全一致,只是数值实现更稳。

SRIF 维护的是信息矩阵的平方根。它关心的是约束信息怎么累积,也就是“我已经被哪些观测约束住了”。新的观测进来,相当于给状态系统增加一组新的约束;旧状态被边缘化,相当于在信息矩阵里做一次变量消元。

工程上,两者的手感也不一样。

SRKF 更容易直接拿到协方差。定位软件里如果需要频繁输出状态标准差、位置协方差、DOP 相关指标,协方差形式会比较方便。SRIF 则更容易和稀疏矩阵、QR 分解、变量消元这些东西结合起来。它对大规模问题更友好,但如果你想拿完整协方差,反而需要额外计算。

可以粗略地说,SRKF 更像传统实时滤波的稳定版本,SRIF 更像递推版的加权最小二乘或者因子图求解器。这个类比不完全严格,但对理解它们在软件里的定位很有帮助。

5. SRIF 和 SRKF 分别适合什么场景

如果只看理论,SRKF 和 SRIF 都能处理滤波问题。但到了工程实现里,适用场景还是有明显差异。

SRKF 更适合状态维度中小、实时性强、需要频繁输出协方差的场景。比如单站 PPP、RTK、GNSS/INS 组合导航,这些问题的状态规模通常可控,而且软件经常要给外部模块提供位置精度、速度精度、姿态精度等结果。此时协方差形式很直接,调试也比较方便。

SRIF 更适合状态维度较大、观测约束比较局部、希望利用稀疏矩阵的场景。比如多站网络解算、滑动窗口估计、后处理平滑,或者未来要把 GNSS 和更多传感器、更多先验约束放到一个统一估计框架里。变量一多,矩阵结构就很重要。如果还用稠密协方差去硬算,很容易把计算量和内存都推上去。

当然,这里不是说 SRKF 只能做小问题,SRIF 只能做大问题。真正的选择还要看状态设计、观测模型、边缘化策略、矩阵库能力,以及你到底需要输出哪些结果。

但作为一个经验判断,可以先这么记:小而实时,用 SRKF 很顺手;大而稀疏,用 SRIF 更舒服。

6. 信息矩阵和协因数阵不是一回事

讨论 SRIF 时,很容易把信息矩阵、协方差矩阵、协因数阵混在一起。尤其 GNSS 和测量平差领域经常会说“协因数阵”,但它和信息矩阵不是一个东西。

先看协方差矩阵:

P P

它表示状态估计误差的不确定性。对角线元素是各个状态的方差,非对角线元素是状态误差之间的协方差。

再看协因数阵:

Qx Q_x

它常见于测量平差里,通常和单位权方差一起出现:

Px=σ02Qx P_x = \sigma_0^2 Q_x

也就是说,QxQ_x 更多描述的是设计矩阵、权阵、观测几何带来的结构;乘上单位权方差 σ02\sigma_0^2 之后,才得到实际意义上的协方差矩阵 PxP_x

信息矩阵则是另一侧:

Λ=P1 \Lambda = P^{-1}

它是协方差矩阵的逆,表示约束强度。如果协方差大,说明不确定性大,信息就少;如果协方差小,说明约束强,信息就多。

所以直观上,协方差矩阵和协因数阵更像是在描述“误差有多大、误差之间怎么相关”;信息矩阵更像是在描述“变量之间被哪些观测绑在一起、约束强度有多大”。

这点对理解 SRIF 很关键。SRIF 的稀疏性主要体现在信息矩阵这一侧,而不是协方差这一侧。很多情况下,信息矩阵可以很稀疏,但它的逆,也就是协方差矩阵,可能已经比较稠密了。

7. 稀疏矩阵和图连通性:为什么 SRIF 适合大问题

信息矩阵的稀疏性,可以用图来理解。

把每个状态变量看成图里的节点。如果两个变量同时出现在某个观测方程里,它们之间就存在一条边。反映到信息矩阵里,通常就是对应位置出现一个非零块。

GNSS 观测很适合这种图模型的理解方式。一个伪距或载波观测,可能会连接接收机位置、接收机钟差、卫星钟差改正、对流层参数、模糊度参数。但它不会连接系统里的所有状态。换句话说,每条观测只是在大图里加了一小块局部连接。

当观测很多、状态很多时,这些局部连接会组成一个很大的稀疏图。图的连通性可以告诉我们很多事情:哪些变量被共同约束,哪些变量其实属于独立子问题,哪些地方连接太弱,可能导致病态或者不可观。

这也是为什么信息矩阵比协方差矩阵更适合表达这类结构。信息矩阵里的非零块,基本对应变量之间的直接约束关系;协方差矩阵里的相关性则可能是间接传播出来的,往往更容易变稠密。

不过,稀疏不等于自动高效。SRIF 里做 QR 分解或变量消元时,可能会产生填充。图上看,就是消掉一个节点后,它的邻居之间可能被连成一团。消元顺序选得不好,本来很稀疏的问题也可能变得很重。

所以 SRIF 想跑得快,变量排序很关键。哪些状态先消,哪些状态后消,哪些状态保留在窗口里,本质上都是在管理这张图的结构。

8. 回到开头:什么时候该认真考虑 SRIF

最后回到一开始的问题:什么时候该认真考虑 SRIF?

如果只是单站实时定位,状态维度不大,软件也需要频繁输出协方差,那 SRKF 或者传统 KF 已经很好用。尤其在嵌入式 GNSS 里,简单、稳定、可控,本身就是很重要的工程优势。

但如果问题开始变成多系统、多频点、多历元、多状态,或者要处理大量模糊度参数、滑动窗口、后处理平滑、多站联合估计,那 SRIF 就值得认真考虑了。

它的优势不只是“平方根形式更稳定”,更重要的是它能把 GNSS 问题里的稀疏约束结构用起来。对大规模估计问题来说,这往往比单纯换一个滤波公式更重要。

这也是 SRIF 和现代因子图优化关系很近的原因。二者背后都在处理同一件事:把观测写成约束,把变量组织成图,然后用稳定的矩阵分解方法求解。