#Kalman filter
一个线性时不变系统如下:
xk+1=Axk+Buk+wkyk=Cxk+vk
x_{k+1} = Ax_k+Bu_k+w_k\\
y_k = Cx_k+v_k
xk+1=Axk+Buk+wkyk=Cxk+vk
其中,wkw_kwk是process noise, wk∈Rnw_k\in\mathbb{R}^nwk∈Rn, wk∼N(0,Q)w_k\sim \mathcal{N}(0, Q)wk∼N(0,Q), vkv_kvk是mearsurement , vk∼Rmv_k\sim\mathbb{R}^{m}vk∼Rm vk∈N(0,R)v_k\in\mathcal{N}(0,R)vk∈N(0,R), A,B,CA,B,CA,B,C分别为系统参数,xk+1x_{k+1}xk+1代表 k+1k+1k+1 时刻状态变量的值,yky_kyk表示 kkk 时刻测量值。
以下内容参考维基百科:
卡尔曼滤波是一种递归的估计,即只要获知上一时刻状态的估计值以及当前状态的观测值就可以计算出当前状态的估计值,因此不需要记录观测或者估计的历史信息。卡尔曼滤波器与大多数滤波器不同之处,在于它是一种纯粹的时域滤波器,它不需要像低通滤波器等频域滤波器那样,需要在频域设计再转换到时域实现。
卡尔曼滤波器的状态由以下两个变量表示:
$\hat x_{k|k} $,在时刻k的状态的估计;
Pk∣k{\textbf {P}}_{k|k}Pk∣k,后验估计误差协方差矩阵,度量估计值的精确程度。
卡尔曼滤波器的操作包括两个阶段:预测与更新。在预测阶段,滤波器使用上一状态的估计,做出对当前状态的估计。在更新阶段,滤波器利用对当前状态的观测值优化在预测阶段获得的预测值,以获得一个更精确的新估计值。
首先定义几个接下来需要用的的变量。
Pk∣k=cov(xk−x^k∣k){\textbf {P}}_{k|k} = cov(x_k-\hat x_{k|k})Pk∣k=cov(xk−x^k∣k)
Pk∣k=cov(xk−x^k∣k−1){\textbf {P}}_{k|k} = cov(x_k-\hat x_{k|k-1})Pk∣k=cov(xk−x^k∣k−1)
Sk=cov(yk−Cx^k∣k−1){\textbf {S}}_{k} = cov(y_{k}-C\hat x_{k|k-1})Sk=cov(yk−Cx^k∣k−1)