本文主线:标准 Kalman → 协方差平方根 → QR 时间更新 → QR 量测更新 → 数值优势 → GNSS 参数估计
1. 核心结论
平方根 Kalman 滤波的英文是:
Square-Root Kalman Filter,SRKF
它不是:
- 对状态向量开平方;
- 计算状态误差的均方根;
- 一种新的统计估计准则。
它是:
不直接递推误差协方差矩阵 P\mathbf PP,而是递推其矩阵平方根因子 S\mathbf SS。
本文统一采用下三角形式:
P=SST\boxed{ \mathbf P=\mathbf S\mathbf S^{\mathrm T} }P=SST
其中:
- P\mathbf PP:状态估计误差协方差矩阵;
- S\mathbf SS:P\mathbf PP 的下三角平方根因子;
- (⋅)T(\cdot)^{\mathrm T}(⋅)T:矩阵转置。
标准 Kalman 与 SRKF 使用相同的状态模型、观测模型和统计目标。
标准Kalman
→ 直接更新协方差P
SRKF
→ 更新协方差因子S
在精确算术下,两者结果等价;在有限精度计算中,SRKF 通常更可靠。
2. “平方根”三个字怎样理解
标量 p>0p>0p>0 的平方根满足:
p=(p)2p=(\sqrt p)^2p=(p)2
对正定协方差矩阵 P\mathbf PP,需要区分两个相关概念。
2.1 对称主平方根
对称主平方根记为:
P1/2\mathbf P^{1/2}P1/2
它满足:
P1/2P1/2=P\mathbf P^{1/2}\mathbf P^{1/2} = \mathbf PP1/2P1/2=P
并且 P1/2\mathbf P^{1/2}P1/2 本身是对称正定矩阵。
2.2 协方差平方根因子
平方根 Kalman 滤波通常保存一个因子 S\mathbf SS:
P=SST\boxed{ \mathbf P=\mathbf S\mathbf S^{\mathrm T} }P=SST
S\mathbf SS 常取 Cholesky 三角因子。它一般不对称,而且通常:
S2≠P\mathbf S^2\ne\mathbf PS2=P
因此,SRKF 中的“平方根”更准确地理解为:
能与自身转置相乘并恢复协方差的矩阵因子。
例如:
P=[4225]\mathbf P = \begin{bmatrix} 4 & 2\\ 2 & 5 \end{bmatrix}P=[4225]
其下三角 Cholesky 因子为:
S=[2012]\mathbf S = \begin{bmatrix} 2 & 0\\ 1 & 2 \end{bmatrix}S=[2102]
因为:
SST=[2012][2102]=[4225]=P\begin{aligned} \mathbf S\mathbf S^{\mathrm T} &= \begin{bmatrix} 2 & 0\\ 1 & 2 \end{bmatrix} \begin{bmatrix} 2 & 1\\ 0 & 2 \end{bmatrix}\\ &= \begin{bmatrix} 4 & 2\\ 2 & 5 \end{bmatrix}\\ &=\mathbf P \end{aligned}SST=[2102][2012]=[4225]=P
它不是对 P\mathbf PP 的元素逐个开平方,也不等同于对称主平方根 P1/2\mathbf P^{1/2}P1/2。
3. 平方根因子是否唯一
满足:
P=SST\mathbf P=\mathbf S\mathbf S^{\mathrm T}P=SST
的普通因子一般不唯一。
若 U\mathbf UU 为正交矩阵:
UUT=I\mathbf U\mathbf U^{\mathrm T}=\mathbf IUUT=I
则:
P=(SU)(SU)T\mathbf P = \left(\mathbf S\mathbf U\right) \left(\mathbf S\mathbf U\right)^{\mathrm T}P=(SU)(SU)T
也是同一个协方差的因子分解。
为了使算法和软件接口统一,工程中通常规定:
- 使用下三角 Cholesky 因子,或使用上三角因子;
- 三角因子的对角线取正值;
- 全部 QR 阵列和转置方向遵循同一约定。
对正定矩阵,正对角线的 Cholesky 三角因子唯一。
4. 协方差矩阵为什么可以分解
理论协方差矩阵满足:
P=PT\mathbf P=\mathbf P^{\mathrm T}P=PT
以及:
aTPa≥0\mathbf a^{\mathrm T}\mathbf P\mathbf a\ge 0aTPa≥0
其中:
- a\mathbf aa:任意向量;
- 第二式表示 P\mathbf PP 为半正定矩阵。
若 P\mathbf PP 正定,则可以进行普通 Cholesky 分解。
若 P\mathbf PP 仅半正定或秩亏,普通无主元 Cholesky 可能失败或出现零对角线,需要根据问题采用:
- 矩形平方根;
- 主元 Cholesky;
- 秩揭示 QR;
- 特征值分解;
- 奇异值分解 SVD。
这类方法允许因子列数小于状态维数,从而显式表示零方差方向或严格约束方向。
5. 标准 Kalman 滤波模型
Kalman 滤波用于根据动态模型和含噪观测,递推估计随时间变化的状态。
状态方程:
xk=Fk−1xk−1+Bk−1uk−1+wk−1\mathbf x_k = \mathbf F_{k-1}\mathbf x_{k-1} + \mathbf B_{k-1}\mathbf u_{k-1} + \mathbf w_{k-1}xk=Fk−1xk−1+Bk−1uk−1+wk−1
观测方程:
zk=Hkxk+vk\mathbf z_k = \mathbf H_k\mathbf x_k + \mathbf v_kzk=Hkxk+vk
其中:
- xk∈Rn\mathbf x_k\in\mathbb R^nxk∈Rn:第 kkk 个历元状态;
- Fk−1\mathbf F_{k-1}Fk−1:状态转移矩阵;
- uk−1\mathbf u_{k-1}uk−1:已知控制输入;
- Bk−1\mathbf B_{k-1}Bk−1:控制输入矩阵;
- wk−1\mathbf w_{k-1}wk−1:过程噪声;
- zk∈Rm\mathbf z_k\in\mathbb R^mzk∈Rm:观测向量;
- Hk\mathbf H_kHk:观测矩阵;
- vk\mathbf v_kvk:观测噪声。
噪声协方差为:
Cov(wk−1)=Qk−1\operatorname{Cov}(\mathbf w_{k-1})=\mathbf Q_{k-1}Cov(wk−1)=Qk−1
Cov(vk)=Rk\operatorname{Cov}(\mathbf v_k)=\mathbf R_kCov(vk)=Rk
标准公式通常假设过程噪声、观测噪声与相应的先验估计误差不相关。
6. 标准 Kalman 预测与更新
状态预测:
x^k−=Fk−1x^k−1++Bk−1uk−1\hat{\mathbf x}_k^{-} = \mathbf F_{k-1}\hat{\mathbf x}_{k-1}^{+} + \mathbf B_{k-1}\mathbf u_{k-1}x^k−=Fk−1x^k−1++Bk−1uk−1
协方差预测:
Pk−=Fk−1Pk−1+Fk−1T+Qk−1\mathbf P_k^{-} = \mathbf F_{k-1} \mathbf P_{k-1}^{+} \mathbf F_{k-1}^{\mathrm T} + \mathbf Q_{k-1}Pk−=Fk−1Pk−1+Fk−1T+Qk−1
新息:
νk=zk−Hkx^k−\boldsymbol\nu_k = \mathbf z_k-\mathbf H_k\hat{\mathbf x}_k^{-}νk=zk−Hkx^k−
新息协方差:
Cν,k=HkPk−HkT+Rk\mathbf C_{\nu,k} = \mathbf H_k\mathbf P_k^{-}\mathbf H_k^{\mathrm T} + \mathbf R_kCν,k=HkPk−HkT+Rk
Kalman 增益:
Kk=Pk−HkTCν,k−1\mathbf K_k = \mathbf P_k^{-}\mathbf H_k^{\mathrm T} \mathbf C_{\nu,k}^{-1}Kk=Pk−HkTCν,k−1
状态更新:
x^k+=x^k−+Kkνk\hat{\mathbf x}_k^{+} = \hat{\mathbf x}_k^{-} + \mathbf K_k\boldsymbol\nu_kx^k+=x^k−+Kkνk
其中:
- 上标 −-−:当前历元观测更新前的先验量;
- 上标 +++:观测更新后的后验量;
- νk\boldsymbol\nu_kνk:观测值与预测观测值之差。
7. 标准协方差更新的数值风险
简化的协方差更新为:
Pk+=(I−KkHk)Pk−\mathbf P_k^{+} = \left( \mathbf I-\mathbf K_k\mathbf H_k \right) \mathbf P_k^{-}Pk+=(I−KkHk)Pk−
有限精度计算可能导致:
- Pk+\mathbf P_k^{+}Pk+ 不再严格对称;
- 很小的正特征值变成负数;
- 协方差失去半正定性;
- 长时间递推后误差逐渐累积。
Joseph 形式为:
Pk+=(I−KkHk)Pk−(I−KkHk)T+KkRkKkT\begin{aligned} \mathbf P_k^{+} &= \left( \mathbf I-\mathbf K_k\mathbf H_k \right) \mathbf P_k^{-} \left( \mathbf I-\mathbf K_k\mathbf H_k \right)^{\mathrm T}\\ &\quad+ \mathbf K_k\mathbf R_k\mathbf K_k^{\mathrm T} \end{aligned}Pk+=(I−KkHk)Pk−(I−KkHk)T+KkRkKkT
Joseph 形式数值上更稳健,但仍然直接保存和更新 P\mathbf PP。
SRKF 则直接维护 S\mathbf SS。
8. SRKF 针对什么问题
SRKF 主要针对:
有限精度计算造成的协方差数值不稳定
它重点改善:
- 协方差的对称性;
- 正定或半正定性质;
- 病态矩阵计算;
- 长时间递推可靠性;
- 不同状态尺度造成的数值风险;
- 单精度或有限字长实现。
它不直接解决:
- 状态模型错误;
- Q\mathbf QQ 和 R\mathbf RR 设置错误;
- 粗差、多路径和周跳;
- 非高斯噪声;
- 系统不可观或弱可观问题。
SRKF 可以改善弱可观方向上的数值计算,但不能增加系统本身的可观性。
9. SRKF 的基本流程
SRKF 对状态均值的预测与标准 Kalman 相同。
变化主要发生在:
- 协方差时间更新;
- 新息协方差计算;
- 后验协方差更新。
10. QR 分解为什么适合平方根滤波
设:
AT=QT\mathbf A^{\mathrm T} = \mathbf Q\mathbf TAT=QT
其中:
- QTQ=I\mathbf Q^{\mathrm T}\mathbf Q=\mathbf IQTQ=I;
- T\mathbf TT 为上三角矩阵。
则:
AAT=TTQTQT=TTT\begin{aligned} \mathbf A\mathbf A^{\mathrm T} &= \mathbf T^{\mathrm T} \mathbf Q^{\mathrm T} \mathbf Q \mathbf T\\ &= \mathbf T^{\mathrm T}\mathbf T \end{aligned}AAT=TTQTQT=TTT
所以 TT\mathbf T^{\mathrm T}TT 是 AAT\mathbf A\mathbf A^{\mathrm T}AAT 的下三角平方根因子。
QR 分解使用正交变换,并且不需要显式形成 Gram 矩阵或法方程。与“先形成法方程、再分解”相比,它通常具有更好的舍入误差性质。
11. SRKF 时间更新推导
设上一历元后验协方差因子为:
Pk−1+=Sk−1+Sk−1+T\mathbf P_{k-1}^{+} = \mathbf S_{k-1}^{+} \mathbf S_{k-1}^{+\mathrm T}Pk−1+=Sk−1+Sk−1+T
过程噪声协方差因子为:
Qk−1=SQ,k−1SQ,k−1T\mathbf Q_{k-1} = \mathbf S_{Q,k-1} \mathbf S_{Q,k-1}^{\mathrm T}Qk−1=SQ,k−1SQ,k−1T
代入协方差预测:
Pk−=Fk−1Sk−1+Sk−1+TFk−1T+SQ,k−1SQ,k−1T\begin{aligned} \mathbf P_k^{-} &= \mathbf F_{k-1} \mathbf S_{k-1}^{+} \mathbf S_{k-1}^{+\mathrm T} \mathbf F_{k-1}^{\mathrm T}\\ &\quad+ \mathbf S_{Q,k-1} \mathbf S_{Q,k-1}^{\mathrm T} \end{aligned}Pk−=Fk−1Sk−1+Sk−1+TFk−1T+SQ,k−1SQ,k−1T
构造水平拼接矩阵:
Ak=[Fk−1Sk−1+SQ,k−1]\mathbf A_k = \begin{bmatrix} \mathbf F_{k-1}\mathbf S_{k-1}^{+} & \mathbf S_{Q,k-1} \end{bmatrix}Ak=[Fk−1Sk−1+SQ,k−1]
于是:
Pk−=AkAkT\mathbf P_k^{-} = \mathbf A_k\mathbf A_k^{\mathrm T}Pk−=AkAkT
对 AkT\mathbf A_k^{\mathrm T}AkT 做薄 QR 分解:
AkT=Qk(t)Tk\mathbf A_k^{\mathrm T} = \mathbf Q_k^{(t)}\mathbf T_kAkT=Qk(t)Tk
其中:
- Qk(t)\mathbf Q_k^{(t)}Qk(t):列正交矩阵;
- Tk\mathbf T_kTk:上三角矩阵。
因此:
Pk−=TkTTk\mathbf P_k^{-} = \mathbf T_k^{\mathrm T}\mathbf T_kPk−=TkTTk
可取:
Sk−=TkT\boxed{ \mathbf S_k^{-} = \mathbf T_k^{\mathrm T} }Sk−=TkT
12. 时间更新的维数检查
设:
- 状态维数为 nnn;
- 过程噪声因子的列数为 qqq。
则:
Fk−1Sk−1+∈Rn×n\mathbf F_{k-1}\mathbf S_{k-1}^{+} \in\mathbb R^{n\times n}Fk−1Sk−1+∈Rn×n
SQ,k−1∈Rn×q\mathbf S_{Q,k-1} \in\mathbb R^{n\times q}SQ,k−1∈Rn×q
所以:
Ak∈Rn×(n+q)\mathbf A_k \in\mathbb R^{n\times(n+q)}Ak∈Rn×(n+q)
AkT∈R(n+q)×n\mathbf A_k^{\mathrm T} \in\mathbb R^{(n+q)\times n}AkT∈R(n+q)×n
薄 QR 分解得到:
Tk∈Rn×n\mathbf T_k\in\mathbb R^{n\times n}Tk∈Rn×n
因此 Sk−\mathbf S_k^{-}Sk− 是 n×nn\times nn×n 下三角矩阵。
13. SRKF 量测更新预阵
设观测噪声协方差分解为:
Rk=SR,kSR,kT\mathbf R_k = \mathbf S_{R,k}\mathbf S_{R,k}^{\mathrm T}Rk=SR,kSR,kT
构造块矩阵:
Mk=[SR,kHkSk−0Sk−]\boxed{ \mathbf M_k = \begin{bmatrix} \mathbf S_{R,k} & \mathbf H_k\mathbf S_k^{-}\\ \mathbf 0 & \mathbf S_k^{-} \end{bmatrix} }Mk=[SR,k0HkSk−Sk−]
其 Gram 矩阵为:
MkMkT=[Cν,kHkPk−Pk−HkTPk−]\mathbf M_k\mathbf M_k^{\mathrm T} = \begin{bmatrix} \mathbf C_{\nu,k} & \mathbf H_k\mathbf P_k^{-}\\ \mathbf P_k^{-}\mathbf H_k^{\mathrm T} & \mathbf P_k^{-} \end{bmatrix}MkMkT=[Cν,kPk−HkTHkPk−Pk−]
其中:
Cν,k=HkPk−HkT+Rk\mathbf C_{\nu,k} = \mathbf H_k\mathbf P_k^{-}\mathbf H_k^{\mathrm T} + \mathbf R_kCν,k=HkPk−HkT+Rk
若状态维数为 nnn、观测维数为 mmm,则:
- SR,k∈Rm×m\mathbf S_{R,k}\in\mathbb R^{m\times m}SR,k∈Rm×m;
- HkSk−∈Rm×n\mathbf H_k\mathbf S_k^{-}\in\mathbb R^{m\times n}HkSk−∈Rm×n;
- Mk∈R(m+n)×(m+n)\mathbf M_k\in\mathbb R^{(m+n)\times(m+n)}Mk∈R(m+n)×(m+n)。
这里默认 Rk\mathbf R_kRk 正定。若观测噪声协方差半正定或存在严格约束,需要使用矩形因子或约束型平方根更新。
14. SRKF 量测更新推导
对 MkT\mathbf M_k^{\mathrm T}MkT 做 QR 分解,等价于寻找正交矩阵 Uk\mathbf U_kUk,使:
MkUk=[Sν,k0GkSk+]\boxed{ \mathbf M_k\mathbf U_k = \begin{bmatrix} \mathbf S_{\nu,k} & \mathbf 0\\ \mathbf G_k & \mathbf S_k^{+} \end{bmatrix} }MkUk=[Sν,kGk0Sk+]
其中:
- Sν,k\mathbf S_{\nu,k}Sν,k:新息协方差的下三角因子;
- Gk\mathbf G_kGk:状态与新息的交叉因子;
- Sk+\mathbf S_k^{+}Sk+:后验协方差的下三角因子;
- Uk\mathbf U_kUk:正交矩阵。
由于右乘正交矩阵不改变 Gram 矩阵,比较分块可得:
Sν,kSν,kT=Cν,k\boxed{ \mathbf S_{\nu,k} \mathbf S_{\nu,k}^{\mathrm T} = \mathbf C_{\nu,k} }Sν,kSν,kT=Cν,k
GkSν,kT=Pk−HkT\boxed{ \mathbf G_k \mathbf S_{\nu,k}^{\mathrm T} = \mathbf P_k^{-}\mathbf H_k^{\mathrm T} }GkSν,kT=Pk−HkT
GkGkT+Sk+Sk+T=Pk−\boxed{ \mathbf G_k\mathbf G_k^{\mathrm T} + \mathbf S_k^{+}\mathbf S_k^{+\mathrm T} = \mathbf P_k^{-} }GkGkT+Sk+Sk+T=Pk−
15. 从平方根阵列得到状态更新
标准 Kalman 增益为:
Kk=Pk−HkTCν,k−1\mathbf K_k = \mathbf P_k^{-}\mathbf H_k^{\mathrm T} \mathbf C_{\nu,k}^{-1}Kk=Pk−HkTCν,k−1
由:
Pk−HkT=GkSν,kT\mathbf P_k^{-}\mathbf H_k^{\mathrm T} = \mathbf G_k\mathbf S_{\nu,k}^{\mathrm T}Pk−HkT=GkSν,kT
以及:
Cν,k=Sν,kSν,kT\mathbf C_{\nu,k} = \mathbf S_{\nu,k}\mathbf S_{\nu,k}^{\mathrm T}Cν,k=Sν,kSν,kT
可得:
Kk=GkSν,k−1\boxed{ \mathbf K_k = \mathbf G_k\mathbf S_{\nu,k}^{-1} }Kk=GkSν,k−1
实际计算不显式求逆。
先解三角方程:
Sν,kαk=νk\boxed{ \mathbf S_{\nu,k}\boldsymbol\alpha_k = \boldsymbol\nu_k }Sν,kαk=νk
再更新状态:
x^k+=x^k−+Gkαk\boxed{ \hat{\mathbf x}_k^{+} = \hat{\mathbf x}_k^{-} + \mathbf G_k\boldsymbol\alpha_k }x^k+=x^k−+Gkαk
其中:
- αk=Sν,k−1νk\boldsymbol\alpha_k=\mathbf S_{\nu,k}^{-1}\boldsymbol\nu_kαk=Sν,k−1νk;
- 在模型一致时,αk\boldsymbol\alpha_kαk 的协方差为单位矩阵,因此可理解为白化新息。
16. 后验协方差因子为什么正确
由量测阵列:
Pk−=GkGkT+Sk+Sk+T\mathbf P_k^{-} = \mathbf G_k\mathbf G_k^{\mathrm T} + \mathbf S_k^{+}\mathbf S_k^{+\mathrm T}Pk−=GkGkT+Sk+Sk+T
又因为:
KkCν,kKkT=GkGkT\mathbf K_k \mathbf C_{\nu,k} \mathbf K_k^{\mathrm T} = \mathbf G_k\mathbf G_k^{\mathrm T}KkCν,kKkT=GkGkT
所以:
Pk+=Pk−−KkCν,kKkT=Sk+Sk+T\begin{aligned} \mathbf P_k^{+} &= \mathbf P_k^{-} - \mathbf K_k \mathbf C_{\nu,k} \mathbf K_k^{\mathrm T}\\ &= \mathbf S_k^{+}\mathbf S_k^{+\mathrm T} \end{aligned}Pk+=Pk−−KkCν,kKkT=Sk+Sk+T
因此,阵列中得到的 Sk+\mathbf S_k^{+}Sk+ 确实是后验协方差平方根。
17. 标准 Kalman 与 SRKF 的区别
| 对比项 | 标准 Kalman | SRKF |
|---|---|---|
| 不确定度表示 | P\mathbf PP | S\mathbf SS |
| 基本关系 | 直接递推协方差 | P=SST\mathbf P=\mathbf S\mathbf S^{\mathrm T}P=SST |
| 主要运算 | 协方差乘加 | QR、Cholesky、三角回代 |
| 精确算术结果 | 基准 | 与标准 Kalman 等价 |
| 数值稳定性 | 依赖实现 | 通常更好 |
| 协方差半正定性 | 可能受舍入误差影响 | 更容易维护 |
| 实现难度 | 较低 | 较高 |
| 计算量 | 通常较小 | 可能较大 |
| 天然抗粗差 | 否 | 否 |
18. SRKF 优化的是什么
SRKF 不改变 Kalman 滤波的统计目标。
它优化的是:
协方差及其更新过程的数值表示
主要体现在:
- 避免直接对相近的协方差矩阵做减法;
- 避免显式形成普通矩阵逆;
- 使用正交变换处理敏感矩阵运算;
- 更容易保持对称性;
- 更容易保持正定或半正定性质;
- 降低状态尺度差异带来的数值风险。
因此:
SRKF 的主要优势是数值可靠性,而不是理论精度模型发生变化。
19. 条件数怎样理解
若 P\mathbf PP 正定,且:
P=SST\mathbf P=\mathbf S\mathbf S^{\mathrm T}P=SST
则二范数条件数满足:
κ2(P)=κ22(S)\boxed{ \kappa_2(\mathbf P) = \kappa_2^2(\mathbf S) }κ2(P)=κ22(S)
因此:
κ2(S)=κ2(P)\kappa_2(\mathbf S) = \sqrt{\kappa_2(\mathbf P)}κ2(S)=κ2(P)
其中:
- κ2(P)\kappa_2(\mathbf P)κ2(P):协方差矩阵的二范数条件数;
- κ2(S)\kappa_2(\mathbf S)κ2(S):平方根因子的二范数条件数。
该关系说明平方根因子的条件数通常更温和。
但它不表示:
- 状态误差会按平方根比例降低;
- Kalman 增益一定提高同样比例的精度;
- 错误模型会被平方根分解自动修复。
20. SRKF 的完整流程
21. 平方根算法、SRIF 与 UD 分解
平方根 Kalman 滤波有多种实现,例如:
- Potter 平方根滤波;
- Carlson 平方根滤波;
- QR 阵列平方根滤波;
- 平方根 EKF;
- 平方根 UKF。
平方根信息滤波 SRIF 保存:
P−1=RxTRx\mathbf P^{-1} = \mathbf R_x^{\mathrm T}\mathbf R_xP−1=RxTRx
其中:
- Rx\mathbf R_xRx:上三角平方根信息矩阵。
SRIF 更接近白化最小二乘,适合信息累积、观测分块和参数消元。
UD 分解滤波保存:
P=UDUT\mathbf P = \mathbf U\mathbf D\mathbf U^{\mathrm T}P=UDUT
其中:
- U\mathbf UU:单位上三角矩阵;
- D\mathbf DD:非负对角矩阵。
UD 分解属于协方差因子化滤波。虽然可以进一步写成:
P=(UD1/2)(UD1/2)T\mathbf P = \left( \mathbf U\mathbf D^{1/2} \right) \left( \mathbf U\mathbf D^{1/2} \right)^{\mathrm T}P=(UD1/2)(UD1/2)T
但经典 UD 算法直接递推的是 U\mathbf UU 和 D\mathbf DD,通常与直接递推 Cholesky 平方根因子的 SRKF 分开讨论。
22. SRKF 的主要优势
22.1 数值稳定性更好
正交变换通常能减少舍入误差对协方差结构的破坏。
22.2 更容易保持协方差性质
只要因子有效:
P=SST\mathbf P=\mathbf S\mathbf S^{\mathrm T}P=SST
恢复出的 P\mathbf PP 天然对称半正定。
22.3 适合长期递推
数值误差会随时间累积,平方根形式通常更适合长时间连续运行。
22.4 适合状态尺度差异大的系统
例如坐标、钟差、对流层和模糊度具有不同量纲和先验方差。
22.5 适合有限精度硬件
例如:
- 单精度浮点;
- 固定字长;
- 嵌入式处理器;
- 高可靠导航计算机。
23. SRKF 的局限
- 实现复杂度较高;
- 不同文献的上、下三角约定不同;
- QR 分解可能增加计算量;
- 状态动态增删需要专门的因子更新;
- 半正定或秩亏矩阵不能盲目使用普通 Cholesky;
- 不会自动调好 Q\mathbf QQ 和 R\mathbf RR;
- 不天然抵抗粗差、多路径和周跳;
- 非线性系统仍需平方根 EKF、UKF 等扩展。
数值稳定
≠
模型正确
≠
观测没有异常
24. 在 GNSS 参数估计中是否适用
SRKF 很适合以下 GNSS 参数估计问题:
- 长时间连续递推;
- 状态维数较大;
- 状态尺度差异明显;
- 卫星几何较弱;
- 单精度或有限字长计算;
- 对协方差数值可靠性要求较高。
可估状态包括:
- 接收机坐标、速度和加速度;
- 接收机钟差和钟漂;
- 对流层延迟;
- 电离层延迟;
- 整周模糊度;
- 卫星钟差;
- 轨道参数;
- GNSS/INS 误差状态。
25. PPP 状态中的数值尺度问题
以简化的双频非组合 PPP 为例,状态可写为:
x=[rTc δtrTzwdITbϕT]T\mathbf x = \begin{bmatrix} \mathbf r^{\mathrm T} & c\,\delta t_r & T_{\mathrm{zwd}} & \mathbf I^{\mathrm T} & \mathbf b_{\phi}^{\mathrm T} \end{bmatrix}^{\mathrm T}x=[rTcδtrTzwdITbϕT]T
其中:
- r\mathbf rr:接收机三维坐标,常用单位为米;
- ccc:真空光速;
- δtr\delta t_rδtr:接收机钟差,c δtrc\,\delta t_rcδtr 的单位为米;
- TzwdT_{\mathrm{zwd}}Tzwd:天顶湿延迟,单位通常为米;
- I\mathbf II:各卫星电离层延迟状态,其符号和单位由观测模型规定;
- bϕ\mathbf b_{\phi}bϕ:各卫星的载波相位模糊度相关状态。
这里使用 bϕ\mathbf b_{\phi}bϕ 而不是直接写整数 N\mathbf NN,是因为 PPP 浮点状态可能同时吸收:
- 整周模糊度;
- 接收机和卫星相位偏差;
- 初始相位常数;
- 参数化中的波长因子。
只有在偏差产品、参考基准和单位全部一致后,才讨论可恢复的整数模糊度。
多系统 PPP 还可能增加:
- 系统间偏差 ISB;
- 频间偏差;
- 接收机码偏差或其他基准参数。
这些状态具有不同的单位、先验方差、过程噪声和连续性。SRKF 能改善数值递推,但不能替代合理的参数化、基准约束和状态缩放。
26. PPP 与 PPP-AR 中的应用边界
SRKF 可用于:
- 坐标、钟差和对流层递推;
- 电离层状态估计;
- 模糊度浮点估计;
- 长时间静态或动态 PPP;
- 观测中断期间的状态传播;
- 模糊度状态的扩展和删除。
但以下功能仍需独立实现:
- 周跳检测;
- 模糊度整数固定;
- 固定约束注入;
- 错误固定释放;
- 粗差探测;
- 多路径处理;
- 随机模型调整。
26.1 固定约束的数值边界
将模糊度完全固定为精确常数,理论上会使对应方向的后验方差变为零,协方差可能从正定变为半正定。
此时不能盲目使用要求正定的普通 Cholesky 更新。常见处理包括:
- 使用约束型平方根滤波;
- 在 QR 阵列中加入精确约束方程并消元;
- 使用秩揭示分解;
- 使用足够小但非零的约束方差,并评估其数值影响。
SRKF 不会提高卫星几何本身,也不会自动提高模糊度固定成功率。
27. GNSS/INS 组合导航中的应用
GNSS/INS 误差状态可能包括:
- 位置误差;
- 速度误差;
- 姿态误差;
- 陀螺零偏;
- 加速度计零偏;
- 比例因子;
- 杆臂参数;
- 时间同步误差。
长时间递推、弱可观状态和嵌入式有限精度计算,容易放大协方差数值问题。
平方根 EKF 或 SRKF 可以:
- 提高长期递推的数值可靠性;
- 更稳定地维护协方差因子;
- 支持单精度实现;
- 减少弱可观方向的数值退化。
但它不能改变系统的真实可观性。
28. 定轨、钟差和 GNSS 网络解算
高维 GNSS 估计可能包含:
- 多颗卫星的轨道参数;
- 卫星钟差;
- 多测站接收机钟差;
- 对流层参数;
- 模糊度;
- 地球定向和动力学参数。
常见选择包括:
- SRKF:协方差平方根递推;
- SRIF:平方根信息形式和参数消元;
- 稀疏 QR 或因子图:大型稀疏系统。
SRIF 已用于卫星定轨、定位和钟差估计等 GNSS 参数估计问题。
29. 卫星升降与状态增删
GNSS 滤波器经常需要:
- 增加新卫星模糊度;
- 删除落下卫星状态;
- 周跳后重置模糊度;
- 增加或删除电离层状态。
SRKF 必须同步更新平方根因子,常用方法包括:
- 块 Cholesky 扩展;
- QR 更新;
- Cholesky update/downdate;
- Givens 旋转;
- 重新三角化。
一般不能直接删除 S\mathbf SS 的任意一行和一列,因为结果通常不再对应正确的边缘协方差。
一个例外是:待删除状态已经通过置换移动到因子末端,并且因子具有相应块三角结构。实际工程通常先做状态置换,再使用 Givens 旋转、QR 或重新 Cholesky 三角化。
30. SRKF 是否有独有使用场景
严格来说,没有一种状态估计问题只能由 SRKF 解决。
在精确算术下,标准 Kalman 可以得到相同理论结果。
SRKF 最具代表性的应用场景是:
估计模型仍属于 Kalman 框架,但直接协方差递推受到有限精度、病态性或长期误差累积的威胁。
特别适合:
- 高可靠导航;
- 长时间连续运行;
- 单精度或固定字长硬件;
- 弱几何或弱可观条件下容易出现数值退化的系统;
- 大状态维数;
- 状态尺度差异明显;
- 对协方差正定性要求严格。
它的独特工程价值是:
更可靠地实现同一个Kalman估计问题
31. 方法选择流程
32. 常见概念混淆
32.1 SRKF 就是均方根滤波
错误。SRKF 的“平方根”指协方差矩阵因子。
32.2 SRKF 是对状态向量开平方
错误。状态仍保持原物理单位。
32.3 S\mathbf SS 是对 P\mathbf PP 逐元素开平方
错误。它满足 P=SST\mathbf P=\mathbf S\mathbf S^{\mathrm T}P=SST。
32.4 Cholesky 因子就是对称主平方根
错误。Cholesky 因子通常是三角矩阵,满足
P=SST\mathbf P=\mathbf S\mathbf S^{\mathrm T}P=SST,但一般不满足
S2=P\mathbf S^2=\mathbf PS2=P。
32.5 SRKF 的理论精度一定高于标准 Kalman
错误。精确算术下两者等价。
32.6 SRKF 一定更快
错误。QR 和三角化可能增加计算量。
32.7 SRKF 天然抗粗差和多路径
错误。仍需异常检测和鲁棒估计。
32.8 SRKF 可以提高系统可观性
错误。它只能改善数值实现,不能创造新的观测信息。
32.9 使用 SRKF 就不需要调 Q\mathbf QQ 和 R\mathbf RR
错误。平方根实现不能修复错误的随机模型。
32.10 半正定矩阵一定能直接普通 Cholesky 分解
错误。秩亏时需要专门的分解方法。
32.11 UD 分解就是平方根 Kalman
不准确。UD 是相关的协方差因子化方法,但不是严格的平方根形式。
33. 工程实现检查清单
33.1 数学约定
- 明确使用上三角还是下三角因子;
- 全文转置方向保持一致;
- 明确采用 P=SST\mathbf P=\mathbf S\mathbf S^{\mathrm T}P=SST 还是 P=STS\mathbf P=\mathbf S^{\mathrm T}\mathbf SP=STS;
- QR 三角因子的对角线符号是否规范化。
33.2 数值实现
- 使用三角回代代替显式求逆;
- 使用稳定的 QR 和 Cholesky 库;
- 半正定噪声是否使用适当的矩形因子;
- 精确约束是否采用约束型或秩揭示更新;
- 状态是否进行合理缩放;
- 是否避免显式形成病态法方程;
- 是否监测 NaN、负对角线和秩亏。
33.3 GNSS 状态管理
- 新升卫星是否正确扩展因子;
- 落下卫星是否正确降阶;
- 周跳后是否重置对应状态;
- 固定模糊度约束是否正确注入且不会破坏因子秩;
- 状态删除前是否进行了置换和重新三角化;
- 是否保留新息和残差用于质量控制;
- Q\mathbf QQ 和 R\mathbf RR 是否与实际场景匹配。
34. 总结
可以用下面几句话记住全文:
平方根 Kalman 滤波不直接递推协方差 P\mathbf PP,而是递推满足
P=SST\mathbf P=\mathbf S\mathbf S^{\mathrm T}P=SST 的矩阵因子 S\mathbf SS。
“平方根”不是均方根,也不是对状态或矩阵元素逐个开平方;SRKF 通常递推的是 Cholesky 型协方差因子,而不是必须递推对称主平方根。
SRKF 与标准 Kalman 使用相同的统计模型和估计目标;精确算术下结果等价。
SRKF 通过 QR、Cholesky 和三角回代减少舍入误差,更容易维护协方差的对称性和正定性。
SRKF 适合 PPP、PPP-AR、GNSS/INS、精密定轨和实时钟差等长期、高维或数值条件较差的 GNSS 参数估计。
SRKF 的独特工程价值不是产生新的最优解,而是更可靠地实现原有 Kalman 估计。
参考资料
- R. E. Kalman:A New Approach to Linear Filtering and Prediction Problems
- C. L. Thornton:Triangular Covariance Factorizations for Kalman Filtering
- G. J. Bierman:Factorization Methods for Discrete Sequential Estimation
- K. Tracy:A Square-Root Kalman Filter Using Only QR Decompositions
- IGS Workshop:Square Root Information Filter Considering Temporal Correlation of GNSS Observations

93

被折叠的 条评论
为什么被折叠?



