最近利用卡尔曼滤波来做tracking的东西,然后随手推导了一下。网上大都是只有例子源代码和约定俗成的公式,不太方便使用,毕竟不能保证你遇到的问题恰好能用现有模型来套。所以对滤波器的来由需要深刻地理解一下。
(一)Kalman Filter原理
定义1.1
由 m×1 维随机向量 y∈Rm 的线性函数估计 n×1 维随机变量 x∈Rn ,估计值记为
x^=b+Ay,b∈Rn,A∈Rn×m
若估计值极小化的指标函数为J=E[(x−x^)T(x−x^)]
则称 x^ 为随机变量的线性最小方差估计。由观测值 y 求随机变量 x^=E(x)+Cov(x,y)Var(y)−1(y−E(y))
虽然这个公式好像好难懂,不过暂时不需要完全理解它,后面在推导时可以慢慢领会。同时这个 x^ 有三个性质
(1)无偏性,E(x^)=E(x)
(2)正交性,E[(x−x^)yT]=0
(3)不相关性,x−x^ 与 y 不相关
定义1.2
定义1.3
基于随机变量 y(1),y(2),...,y(k)∈Rm,对随机变量 x∈Rm 的线性最小方差估计 x^ 定义为
x^=proj(x|w)=proj(x|y(1),y(2),...,y(k))
也称 x^ 为 x 在线性流型 定义1.4
设 y(1),y(2),...,y(k)∈Rm 是存在二阶矩的随机序列,它的新息序列(不用纠结名字,其实后面推导里它就是误差序列)定义为
ϵ(k)=y(k)−proj(y(k)|y(1),y(2),...,y(k−1)),k=1,2,...
并定义的一步最优预报估计值为 y^(k|k−1)=proj(y(k)|y(1),y(2),...,y(k−1))
因此新息序列可重新写成 ϵ(k)=y(k)−y^(k|k−1),k=1,2,...
需要规定 y^(1|0)=E[y(1)] ,这保证了E[ϵ(1)]=0,所以有ϵ(k)⊥L(y(1),y(2),...,y(k−1))
定义1.5
设随机变量 x∈Rn ,随机序列 y(k)∈Rm ,而且随机序列存在二阶矩,则有递推公式(证明以后再补好了(-。-;))
proj(x|y(1),y(2),...,y(k))=proj(x|y(1),y(2),...,y(k−1))+E[xϵT(k)]E[ϵ(k)ϵT(k)]−1ϵ(k)