无迹卡尔曼滤波是在卡尔曼滤波的基础上,进行了一系列的改进,得到的一种新的滤波算法。无迹卡尔曼滤波中不需要假设状态变量的变化是线性的,也不用假设观测变量和状态变量的关系是线性的。所以需要我们指定变化的函数。但是,无迹卡尔曼滤波也不是没有限制条件。卡尔曼滤波中观测变量和测量变量都需要服从正态分布,这个条件在这里也是需要的。关于卡尔曼滤波,可以参考之前的博客,这里不再赘述。
无迹变换(Unscented Transform)
根据卡尔曼滤波的计算公式,我们知道,卡尔曼滤波会根据之前的状态变量xt−1x_{t-1}xt−1来预测当前的状态变量xtx_txt。然后根据观测变量yty_tyt来预测当前的状态变量xtx_txt。然后根据两者的协方差矩阵来确定卡尔曼增益KKK,用来判断当前的预测中,根据状态变量的预测的可信度大小以及根据测量变量预测的可信度大小。然后找到一个最优解,即卡尔曼滤波的预测结果。但是对于无迹卡尔曼滤波来讲,协方差矩阵的计算并不容易。因为状态变量的变化以及观测变量和状态变量的关系不是线性的。无法通过矩阵计算直接得到协方差矩阵。那么如何去计算当前的协方差矩阵。目前有两种解决方案:
首先是利用蒙特卡罗方法模拟大量数据点,得到转换后数据的分布均值和方差,然后计算协方差矩阵。这种方法计算的精确程度和模拟数据点数量有关。但是大量的模拟数据点会增加计算量。所以不是一个好的选择。然后就是无迹变换,这种方法能通过很少的采样点数据,计算出转换后数据的分布均值和方差,从而计算协方差矩阵。
对于一组数据x={ x1,x2,...,xn}x=\{x_1, x_2, ..., x_n\}x={ x1,x2,...,xn},经过一个变换fff后,得到了另外一组数据y={ y1,y2,...,yn}y=\{y_1, y_2, ..., y_n\}y={ y1,y2,...,yn}。x∼N(x‾,Q)x \sim N(\overline{x}, Q)x∼N(x,Q),且y∼N(y‾,R)y \sim N(\overline{y}, R)y∼N(y,R)。
UT变换需要用到以下几个参数:
首先是采样点的权值分配参数:
wm0=λn+λwc0=λn+λ+(1−α2+β)wmi=wci=n2(n+λ),i=1,...,2n w_m^0 = \frac{\lambda}{n+\lambda}\\w_c^0 = \frac{\lambda}{n+\lambda} + (1-\alpha^2+\beta)\\w_m^i = w_c^i= \frac{n}{2(n+\lambda)}, i=1,...,2n wm0=n+λλwc0=n+λλ+(1−α2+β)wmi=wci=2(n+λ)n,i=1,...,2n
其中nnn表示 xxx的维度,λ\lambdaλ是一个常数,一般可以表示为λ=α2(n+k)−n\lambda=\alpha^2(n+k)-nλ=α2(n+k)−n。其中k≥0k\geq0k≥0,且一般取值为k=3−nk=3-nk=3−n,α∈(0,1]\alpha \in (0, 1]α∈(0,1],α\alphaα主要用来调节高阶项对模型的影响,一般取值α=0.01\alpha=0.01α=0.01。对于高斯分布, β=2\beta=2β=2时效果是最优的。
然后是无迹变换的采样,一般无迹变换的采样点个数为2n+12n+12n