Kalman Filter

本文介绍了卡尔曼滤波的基本原理与应用实例,详细解释了该算法如何通过预测与观测值的融合来实现最优化估计,并以室内温度估算为例进行具体说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kalman 滤波

摘自博客
知乎来源
卡尔曼原第一手论文
Understanding the Basis of the Kalman Filter
Via a Simple and Intuitive Derivation

Kalman滤波算法的本质就是利用两个正态分布的融合仍是正态分布这一特性进行迭代而已
在著名的阿波罗导航计算机中就试用了卡尔曼滤波,带着阿姆斯特朗在月球和地球之间穿梭。
简单的说 ,卡尔曼滤波器是一个最优化自回归数据处理算法。最优依赖于评价性能的判据,递归式是指卡尔曼不需要保存先前的数据。

卡尔曼滤波器的介绍

生活实例:在海图作业中,船长通常以前一小时的船位为基准,根据航向、船速和海流等一些列因素推算下一个船位,但是他并不轻易认为船位就一定在推算船位上,还要选择适当的方法,通过仪器得到另一个推算船位。观测和推算这两个船位一般不重合,船长需要通过分析和判断选择一个可靠的船位,作为船的当前位置。
基本原理: k1 时刻的最优估计 xk1 为准,预测K时刻的状态变量 x^k/k1 ,同时又对改状态进行观测,得到观测变量 Zk ,再在预测与观测之间进行分析,或者说是以观测量对预测量进行修正,从而得到K时刻的最优状态估计 xk
下面以室内温度道来
以小时为单位,假设要估算k时刻的室内温度,现在我们依据k-1时刻的温度(23℃)及其偏差(±3℃),我们猜测k时刻的温度也应为23℃(自己对自己预测的不确定度假定为±4℃),则预测值(23℃)的高斯噪声为 5=32+42 ℃;然后,我们从温度计那里测得的K时刻温度值为25℃,其高斯噪声为±4℃;
下面,我们就可以根据以上预测值和观测值得到最优估计值 T
Question我们究竟相信预测值(23℃)多一点还是观测值(25℃)多一点?
一、需用到均方误差公式

H=5252+42=0.61

二、最优估计温度值 T=23+0.61(2523)=24.22
三、计算最优估计值的误差 δ
δ=(1H)52=3.12

一般卡尔曼滤波公式
一般卡尔曼滤波公式

### Kalman滤波器在计算机科学与工程中的应用 Kalman滤波是一种高效的递归算法,用于估计动态系统的状态。该方法通过最小化均方误差来预测下一个时间步的状态,并利用观测数据更新当前状态估计。 #### 实现原理 在一个线性高斯模型下,Kalman滤波可以分为两个主要阶段:预测和更新。预测阶段基于前一时刻的状态及其协方差矩阵计算新的先验分布;而在更新阶段,则根据实际测量值调整这些参数得到更精确的结果[^1]。 对于离散时间过程而言,其基本公式如下所示: - **预测**: \[ \hat{x}_{k|k-1} = F_k\hat{x}_{k-1|k-1} \] \[ P_{k|k-1}=F_kP_{k-1|k-1}{F_k}^{T}+Q_k \] - **更新**: \[ K_k=\frac{P_{k|k-1}H_k^T}{H_kP_{k|k-1}H_k^T + R_k} \] \[ \hat{x}_{k|k}=\hat{x}_{k|k-1}+K_k(z_k-H_k\hat{x}_{k|k-1}) \] \[ P_{k|k}=(I-K_k H_k)P_{k|k-1}(I-K_k H_k)^T + K_kR_kK_k^T \] 其中 \(F\) 是状态转移模型,\(H\) 表示观察函数,而 \(Q\) 和 \(R\) 则分别代表过程噪声以及观测量的不确定性。 ```python import numpy as np def kalman_filter(x, P, measurement, Q, R, motion=0., dt=1.): """ Parameters: x : initial state vector [position; velocity]. P : error covariance matrix. measurement : observed position value at current time step. Q : process variance (uncertainty of the model). R : estimate of measurement variance. motion : external motion applied to the system between steps. dt : difference in time (discretization parameter). Returns updated state estimation after applying one iteration of Kalman filter. """ # Prediction update x = np.dot(F, x) + motion P = np.dot(np.dot(F, P), F.T) + Q # Measurement update Z = np.array([measurement]) y = Z - np.dot(H, x) S = R + np.dot(H, np.dot(P, H.T)) K = np.dot(np.dot(P, H.T), np.linalg.inv(S)) # Kalman gain calculation x = x + np.dot(K, y) I = np.eye(F.shape[0]) # Identity Matrix P = np.dot((I-np.dot(K,H)), P) return x, P ``` 此代码片段展示了如何实现简单的卡尔曼过滤器来进行位置跟踪。这里假设已知初始条件 `x` 及相应的不确定度描述符 `P` ,并给定了其他必要的输入参数如运动量、时间间隔等。 #### 应用领域 Kalman滤波广泛应用于多个学科和技术领域内,特别是在机器人导航定位系统中扮演着重要角色。例如,在扩展卡尔曼滤波(EKF)被用来解决非线性的姿态估计问题上取得了显著成效[^2]。此外,它还适用于目标追踪、信号处理等领域,能够有效地提高数据的质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值