优点
采用递归方法解决线性滤波问题,只需要当前的测量值和前一个采样周期的估计值就能够进行状态估计,不需要大量的存储空间,每一步的计算量小,计算步骤清晰,非常适合计算机处理。
卡尔曼方程式
预测状态方程
- 预测状态方程是根据系统状态变量k-1时刻的最优值和系统输入计算出 k时刻系统预测值。
X k ∣ k − 1 = F k X k − 1 ∣ k − 1 + B k u k X_{k|k-1} = F_kX_{k-1|k-1}+B_ku_k Xk∣k−1=FkXk−1∣k−1+Bkuk
- X k ∣ k − 1 X_{k|k-1} Xk∣k−1是利用k-1时刻预测的当前状态结果
- X k − 1 ∣ k − 1 X_{k-1|k-1} Xk−1∣k−1是K-1时刻最优值
- F k F_k Fk是作用在 X k − 1 ∣ k − 1 X_{k-1|k-1} Xk−1∣k−1状态下的变换矩阵,它是算法对状态变量进行预测的依据
- B k B_k Bk是作用在控制量上的变换矩阵,在大多数实际情况下并没有控制增益
- u k u_k uk是当前状态的控制增益,一般没有这个变量,可以设为0
预测协方差方程
- 预测协方差方程是根据k-1时刻系统协方差矩阵预测k时刻系统协方差矩阵
P k ∣ k − 1 = F k P k − 1 ∣ k − 1 F k T + Q k P_{k|k-1} = F_kP_{k-1|k-1}F^T_k+Q_k Pk∣k−1=FkPk−1∣k−1FkT+Qk
- P k ∣ k − 1 P_{k|k-1} Pk∣k−1是k时刻系统协方差矩阵
- P k − 1 ∣ k − 1 P_{k-1|k-1} Pk−1∣k−1是k-1时刻系统协方差矩阵(LastP)
-
Q
k
Q_k
Qk是系统过程噪声的协方差。(Q)
- 协方差矩阵只要确定了一开始的 P 0 P_0 P0,后面都可以递推出来;
- 而且初始协方差矩阵 P 0 P_0 P0,只要不是为0,它的取值对滤波效果影响很小,都能很快收敛,
卡尔曼增益方程
- 卡尔曼增益方程是根据协方差矩阵预测值计算卡尔曼增益
K k = P k ∣ k − 1 H k T H k P k ∣ k − 1 H k T + R k K_k = \frac{P_{k|k-1}H^T_k} {H_kP_{k|k-1}H^T_k+R_k} Kk=HkPk∣k−1HkT+RkPk∣k−1HkT
- K k K_k Kk是卡尔曼增益,是滤波的中间结果(Kg)
- H k H_k Hk是对象的预测矩阵,P是以为矩阵,H也是1
-
R
k
R_k
Rk是对象测量噪声的协方差矩阵(R),它是一个数值,作为已知条件输入滤波器。注意:
- 这个值过大过小都会使滤波效果变差,
- 且 R k R_k Rk取值越小收敛越快,所以可以通过实验手段寻找合适的 R k R_k Rk值再利用它进行真实的滤波。
更新最优值方程
- 更新最优值方程是根据状态变量预测值和系统测量值计算出k时刻状态变量最优值
X k ∣ k = X k ∣ k − 1 + K k ( Z k − H k X k ∣ k − 1 ) X_{k|k} = X_{k|k-1}+K_k(Z_k-H_kX_{k|k-1}) Xk∣k=Xk∣k−1+Kk(Zk−HkXk∣k−1)
- X k ∣ k X_{k|k} Xk∣k是k时刻状态变量最优估计值(out)
- Z k Z_k Zk是对象的测量值
##更新协方差方程
- 更新协方差方程是求k时刻协方差矩阵方程
P k ∣ k = ( I − K k H k ) P k ∣ k − 1 P_{k|k} = (I-K_kH_k)P_{k|k-1} Pk∣k=(I−KkHk)Pk∣k−1
- P k ∣ k P_{k|k} Pk∣k为k时刻协方差矩阵(Now_P)
- I为单位矩阵
- 作用:用于下一次卡尔曼滤波
卡尔曼滤波参数
序号 | 类型 | 名称 | 描述 | 初始值 |
---|---|---|---|---|
1 | float | LastP | 上次估算协方差 | 0.02 |
2 | float | Now_P | 当前估算协方差 | 0 |
3 | float | out | 卡尔曼滤波器输出值(最优值) | 0 |
4 | float | Kg | 卡尔曼增益 | 0 |
5 | float | Q | 过程噪声协方差 | 0.001 |
6 | float | R | 观测噪声协方差 | 0.543 |
卡尔曼滤波结构体描述
//卡尔曼滤波参数 filter过滤器
struct _1_ekf_filter
{
float LastP;
float Now_P;
float out;
float Kg;
float Q;
float R;
};
扩展知识
1960年,卡尔曼发表了他著名的用递归方法解决离散数据线性滤波问题的论文。从那以后,得益于数字计算技术的进步,卡尔曼滤波器已成为推广研究和应用的主题,尤其是在自主或协助导航领域。
卡尔曼滤波器由一系列递归数学公式描述。它们提供了一种高效可计算的方法来估计过程的状态,并使估计均方误差最小。卡尔曼滤波器应用广泛且功能强大:它可以估计信号的过去和当前状态,甚至能即使并不知i确切性质。