IMM交互多模型介绍

  • 1. 简介
    • (1)IMM(Interacting Multiple Model)
    • (2)马尔科夫概率转移矩阵
  • 2. 算法流程
    • (1)输入交互(模型j)
    • (2)卡尔曼滤波(模型j)
    • (3)模型概率更新
    • (4)输出交互

1. 简介

(1)IMM(Interacting Multiple Model)

IMM算法采用多个Kalman滤波器进行并行处理。每个滤波器对应不同的状态空间模型,不同的状态空间模型描述不同的目标运行模式,所以每个滤波器对目标状态的估计结果不同。IMM算法的基本思想是在每一时刻,假设某个模型在现在时刻有效的条件下,通过混合前一时刻所有滤波器的状态估计值来获得与这个特定模型匹配的滤波器的初始条件,然后对每个模型并行实现正规滤波(预测和修正)步骤;最后,以模型匹配似然函数为基础更新模型概率,并组合所有滤波器修正后的状态估计值(加权和)以得到状态估计。因此IMM算法的估计结果是对不同模型所得估计的混合,而不是仅仅在每一个时刻选择完全正确的模型来估计。

(2)马尔科夫概率转移矩阵

假定某大学有1万学生,每人每月用1支牙膏,并且只使用“中华”牙膏与“黑妹”牙膏两者之一。根据本月(12月)调查,有3000人使用黑妹牙膏,7000人使用中华牙膏。又据调查,使用黑妹牙膏的3000人中,有60%的人下月将继续使用黑妹牙膏,40%的人将改用中华牙膏; 使用中华牙膏的7000人中, 有70%的人下月将继续使用中华牙膏,30%的人将改用黑妹牙膏。据此,可以得到如表-1所示的统计表。

上表中的4个概率就称为状态的转移概率,而这四个转移概率组成的矩阵
P=[60%40%30%70%]P = \left[ \begin{array}{ccc} \ 60 \% & 40 \% \\ \ 30 \% & 70 \% \end{array} \right]P=[ 60% 30%​40%70%​]

称为转移概率矩阵。可以看出, 转移概率矩阵的一个特点是其各行元素之和为1。 在本例中,其经济意义是:现在使用某种牙膏的人中,将来使用各种品牌牙膏的人数百分比之和为1。

用转移概率矩阵预测市场占有率的变化

有了转移概率矩阵,就可以预测,到下个月(1月份)使用黑妹牙膏和中华牙膏的人数,计算过程如下:
300060%+700030% = 3900个
300040%+700070% = 6100个

即:1月份使用黑妹牙膏的人数将为3900,而使用中华牙膏的人数将为6100个。

在IMM中,各模型之间的转移由马尔科夫概率转移矩阵确定,其中的元素pijp_{ij}pij​表示目标由第iii个运动模型转移到第jjj个运动模型的概率,概率转移矩阵如下:
P=[p11...p1r.........pr1...prr]P = \left[ \begin{array}{ccc} \ p_{11} & ...& p_{1r} \\ \ ... & ... &...\\ \ p_{r1}&...&p_{rr}\\ \end{array} \right]P=⎣⎡​ p11​ ... pr1​​.........​p1r​...prr​​⎦⎤​

2. 算法流程

IMM算法是以递推方式进行的,每次递推主要分为以下四个步骤:

(1)输入交互(模型j)

由目标的状态估计Xi^(k−1∣k−1)\hat{X_i}(k-1|k-1)Xi​^​(k−1∣k−1)与上一步中每个滤波器的模型概率μj(k−1)μ_j(k-1)μj​(k−1)得到混合估计
X0j^(k−1∣k−1)\hat{X_{0j}}(k-1|k-1)X0j​^​(k−1∣k−1)和协方差P0j(k−1∣k−1)P_{0j}(k-1|k-1)P0j​(k−1∣k−1),将混合估计作为当前循环的初始状态。具体的参数计算如下:

模型j的预测概率(归一化常数)为
cjˉ=∑i=1rpijμi(k−1)\bar{c_j} = \sum_{{i=1}}^{r}p_{ij}μ_i(k-1)cj​ˉ​=i=1∑r​pij​μi​(k−1)

模型iii到模型jjj的混合概率
μij(k−1∣k−1)=∑i=1rpijμi(k−1)/cjˉμ_{ij}(k-1|k-1) = \sum_{i=1}^{r}p_{ij}μ_i(k-1)/\bar{c_j}μij​(k−1∣k−1)=i=1∑r​pij​μi​(k−1)/cj​ˉ​

模型j的混合状态估计
X0j^(k−1∣k−1)=∑i=1rXi^(k−1∣k−1)μij(k−1∣k−1)\hat{X_{0j}}(k-1|k-1) = \sum_{i=1}^{r}\hat{X_i}(k-1|k-1)μ_{ij}(k-1|k-1)X0j​^​(k−1∣k−1)=i=1∑r​Xi​^​(k−1∣k−1)μij​(k−1∣k−1)

模型j的混合协方差估计
P0j(k−1∣k−1)=∑i=1rμij(k−1∣k−1){Pi(k−1∣k−1)+[Xi^(k−1∣k−1)−Xi^(k−1∣k−1)]∗[Xi^(k−1∣k−1)−Xi^(k−1∣k−1)]T}P_{0j}(k-1|k-1) = \sum_{i=1}^{r}μ_{ij}(k-1|k-1)\{P_i(k-1|k-1)\\+[\hat{X_i}(k-1|k-1) - \hat{X_i}(k-1|k-1)]*[\hat{X_i}(k-1|k-1) - \hat{X_i}(k-1|k-1)]^T\}P0j​(k−1∣k−1)=i=1∑r​μij​(k−1∣k−1){Pi​(k−1∣k−1)+[Xi​^​(k−1∣k−1)−Xi​^​(k−1∣k−1)]∗[Xi​^​(k−1∣k−1)−Xi​^​(k−1∣k−1)]T}
式中,pijp_{ij}pij​为模型iii到模型jjj的转移概率;μj(k−1)μ_j(k-1)μj​(k−1)为模型j在k−1k-1k−1时刻的概率。

(2)卡尔曼滤波(模型j)

以X0j^(k−1∣k−1)\hat{X_{0j}}(k-1|k-1)X0j​^​(k−1∣k−1)、P0j^(k−1∣k−1)\hat{P_{0j}}(k-1|k-1)P0j​^​(k−1∣k−1)及Z(k)Z(k)Z(k)作为输入进行Kalman滤波,来更新预测状态Xj^(k∣k)\hat{X_j}(k|k)Xj​^​(k∣k)和滤波协方差Pj(k∣k)P_j(k|k)Pj​(k∣k)。

预测
Xj^=Φj(k−1)X0j^(k−1∣k−1)\hat{X_j} = Φ_j(k-1)\hat{X_{0j}}(k-1|k-1)Xj​^​=Φj​(k−1)X0j​^​(k−1∣k−1)

预测误差协方差
Pj(k∣k−1)=ΦjP0j(k−1∣k−1)ΦjT+GjQjGjTP_j(k|k-1)=Φ_jP_{0j}(k-1|k-1)Φ_j^T+G_jQ_jG_j^TPj​(k∣k−1)=Φj​P0j​(k−1∣k−1)ΦjT​+Gj​Qj​GjT​

Kalman增益
Kj(k)=Pj(k∣k−1)HT[HPj(k∣k−1)HT+R]−1K_j(k) = P_j(k|k-1)H^T[HP_j(k|k-1)H^T+R]^{-1}Kj​(k)=Pj​(k∣k−1)HT[HPj​(k∣k−1)HT+R]−1

滤波
Xj(k∣k)^=Xj^(k∣k−1)+Kj(k)[Z(k)−H(k)Xj(k∣k−1)]\hat{X_j(k|k)} = \hat{X_j}(k|k-1) + K_j(k)[Z(k)-H(k)X_j(k|k-1)]Xj​(k∣k)^​=Xj​^​(k∣k−1)+Kj​(k)[Z(k)−H(k)Xj​(k∣k−1)]

滤波协方差
Pj(k∣k)=[I−Kj(k)H(k)]Pj(k∣k−1)P_j(k|k) = [I - K_j(k)H(k)]P_j(k|k-1)Pj​(k∣k)=[I−Kj​(k)H(k)]Pj​(k∣k−1)

(3)模型概率更新

采用似然函数来更新模型概率μj(k)μ_j(k)μj​(k),模型j的似然函数为
Λj(k)=1(2π)n/2∣Sj(k)∣1/2exp{−12νjTSj−1(k)νj}Λ_j(k) = \frac{1}{(2π)^{n/2}|S_j(k)|^{1/2}}exp\{-\frac{1}{2}ν_j^{T}S_j^{-1}(k)ν_j\}Λj​(k)=(2π)n/2∣Sj​(k)∣1/21​exp{−21​νjT​Sj−1​(k)νj​}
式中,
νj(k)=Z(k)−H(k)Xj^(k∣k−1)ν_j(k) = Z(k) - H(k)\hat{X_j}(k|k-1)νj​(k)=Z(k)−H(k)Xj​^​(k∣k−1)
Sj(k)=H(k)Pj(k∣k−1)H(k)T+R(k)S_j(k) = H(k)P_j(k|k-1)H(k)^T+R(k)Sj​(k)=H(k)Pj​(k∣k−1)H(k)T+R(k)

则模型jjj的概率为
μj(k)=Λj(k)cjˉ/cμ_j(k) = Λ_j(k)\bar{c_j}/cμj​(k)=Λj​(k)cj​ˉ​/c

式中,ccc为归一化常数,且c=∑j=1rΛj(k)cjˉc = \sum_{j=1}^{r}Λ_j(k)\bar{c_j}c=∑j=1r​Λj​(k)cj​ˉ​。

(4)输出交互

基于模型概率,对每个滤波器的估计结果加权合并,得到总的状态估计X^(k∣k)\hat{X}(k|k)X^(k∣k)和总的协方差估计P(k∣k)P(k|k)P(k∣k)。

总的状态估计
X^(k∣k)=∑j=1rXj^(k∣k)μj(k)\hat{X}(k|k) = \sum_{j=1}^{r}\hat{X_j}(k|k)μ_j(k)X^(k∣k)=j=1∑r​Xj​^​(k∣k)μj​(k)

总的协方差估计
P(k∣k)=∑j=1rμj(k){Pj(k∣k)+[Xj^(k∣k)−X^(k∣k)]∗[Xj(k∣k)−X^(k∣k)^]T}P(k|k) = \sum_{j=1}^{r}μ_j(k)\{P_j(k|k)+[\hat{X_j}(k|k) - \hat{X}(k|k)]*[\hat{X_j(k|k)- \hat{X}(k|k)}]^T\}P(k∣k)=j=1∑r​μj​(k){Pj​(k∣k)+[Xj​^​(k∣k)−X^(k∣k)]∗[Xj​(k∣k)−X^(k∣k)^​]T}

所以,滤波器的总输出是多个滤波器估计结果的加权平均值。权重即为该时刻模型正确描述目标运动的概率,简称为模型概率。

选取滤波器的目标运动模型,可以从下面3个方面考虑:

①选择一定个数的IMM滤波器,包括较为精确的模型和较为粗糙的模型。IMM滤波算法不仅描述了目标的连续运动状态,而且描述了目标的机动性。

②马尔科夫链状态转移概率的选取对IMM滤波器的性能有较大影响。马尔科夫链状态转移概率矩阵实际上相当于模型状态方程的状态转移矩阵,它将直接影响模型误差和模型概率估计的准确性。一般情况下,当马尔科夫链状态转移概率呈现一定程度的模型性时,IMM滤波器能够更稳健地描述目标运动。

③IMM滤波算法具有模块化的特性。当对目标的运动规律较为清楚时,滤波器可以选择能够比较精确地描述目标运动的模型。当无法预料目标的运动规律时,就应该选择更一般的模型,即该模型应具有较强的鲁棒性。

注意:关于“牙膏”的例子通俗介绍了什么是马尔科夫转移矩阵,例子中涉及到的“转移”是在时间序列上的转移,但是在IMM的输入交互步骤中,“转移”更多的是一种空间状态的转移,是我们为了混合模型而对模型进行“转移”,进而实现模型的混合。其中,模型j的预测概率(归一化常数)为IMM中每个滤波器模型向模型j转移之后得到的概率,它是一种“混合态”概率。如假设IMM使用了两个滤波器,马尔科夫转移矩阵如下:

P=[0.980.020.020.98]P = \left[ \begin{array}{ccc} \ 0.98 & 0.02 \\ \ 0.02 & 0.98 \end{array} \right]P=[ 0.98 0.02​0.020.98​]

滤波器1的概率为0.8,滤波器2的概率为0.2,则滤波器1的预测概率经过状态“转移”之后由两部分组成,一部分来自于转移前的滤波器1,值为p00∗0.8=0.784p_{00}*0.8 = 0.784p00​∗0.8=0.784;另一部分来自滤波器2,值为p10∗0.2=0.004p_{10}*0.2 = 0.004p10​∗0.2=0.004,最终,滤波器1的预测概率为0.788。进一步,模型i到模型j的混合概率指的是得到模型j的预测概率过程中,模型i贡献了多少百分比。对应到上例中,模型0到模型0的混合概率为0.784/0.788=0.994920.784/0.788=0.994920.784/0.788=0.99492;模型1到模型0的混合概率为0.004/0.788=0.0050760.004/0.788=0.0050760.004/0.788=0.005076,这也是模型j的预测概率被称为归一化常数的原因。以上均是模型混合过程中关于概率的操作,概率与状态相乘则得到“混合态”状态,如模型0的混合状态估计X0j^(k−1∣k−1)\hat{X_{0j}}(k-1|k-1)X0j​^​(k−1∣k−1)等于模型0的状态估计X0^(k−1∣k−1)\hat{X_0}(k-1|k-1)X0​^​(k−1∣k−1)乘以模型0到模型0的混合概率与模型1的状态估计X1^(k−1∣k−1)\hat{X_1}(k-1|k-1)X1​^​(k−1∣k−1)乘以模型1到模型0的混合概率之和。

模型jjj的混合协方差估计与混合状态估计类似,但需要注意的是公式中加上了概率转移过程中产生的协方差。
模型概率更新公式中,νj(k)ν_j(k)νj​(k)为观测值与先验估计之差,该值越大,意味着滤波器jjj预测的值与实际值偏差比较大,即该滤波器的表现不好,进一步Λj(k)Λ_j(k)Λj​(k)越小,模型jjj的概率越小。

自动驾驶算法-滤波器系列(八)——IMM交互多模型介绍相关推荐

  1. 自动驾驶算法-滤波器系列(七)——ESKF(error-state Kalman Filter)介绍

    IMM(Interacting Multiple Model) 1. ESKF是什么? 2. ESKF如何演变出来的? 3. ESKF主要解决什么问题? 4. ESKF算法原理 5. 总结 1. ES ...

  2. 自动驾驶算法-滤波器系列(二)—— 卡尔曼滤波简介及其变种(EKF、UKF、PF)介绍

    KF&EKF&UKF&PF 1. 基础知识概要 协方差矩阵 多维高斯分布 状态空间表达式 2. 什么是卡尔曼滤波器 3. 五个重要的公式 公式介绍 公式推导过程 4. 卡尔曼滤 ...

  3. 自动驾驶算法-滤波器系列(六)——10+种经典滤波算法

    经典滤波器介绍 1.限幅滤波法(又称程序判断滤波法) 2.中位值滤波法 3.算术平均滤波法 4.递推平均滤波法(又称滑动平均滤波法) 5.中位值平均滤波法(又称防脉冲干扰平均滤波法) 6.限幅平均滤波 ...

  4. 自动驾驶算法-滤波器系列(五)——高级运动模型在UKF中的应用

    CTRV_UKF, CTRA_UKF 1. 基于CTRV的UKF 1.1 CTRV模型 1.2 UKF模型 2. 基于CTRA的UKF 2.1 CTRA模型 扩展卡尔曼滤波算法是对非线性的系统方程或者 ...

  5. 自动驾驶算法-滤波器系列(四)——不同运动模型在KF/EKF中的应用

    不同运动模型应用于KF/EKF 1. 基于匀速(CV)运动模型的KF 2. 基于匀加速(CA)运动模型的KF 3. 基于CTRV的EKF 4. 基于CTRA的EKF 上一篇文章中,笔者针对四种不同的运 ...

  6. 自动驾驶算法-滤波器系列(三)——不同运动模型(CV、CA、CTRV、CTRA)的建模和推导

    CV & CA & CTRV & CTRA 0. 运动模型简介 1. CV模型 2. CA模型 3. CTRV模型 4. CTRA模型 上一篇文章主要讲解了不同卡尔曼滤波的原理 ...

  7. 自动驾驶算法-滤波器系列(一)——详解卡尔曼滤波原理

    详解卡尔曼滤波原理 什么是卡尔曼滤波? 我们能用卡尔曼滤波做什么? 卡尔曼滤波是如何看到你的问题的 使用矩阵来描述问题 外部控制量 外部干扰 用测量量来修正估计值 融合高斯分布 将所有公式整合起来 总 ...

  8. 自动驾驶采标系列七:复杂场景语义理解-可行驶区域检测

        标注猿的第58篇原创        一个用数据视角看AI世界的标注猿   本篇文章我们继续学习自动驾驶采标系列的算法基础理论,关于复杂场景语义理解中的可行驶区域检测部分. 车辆可行驶区域包括结 ...

  9. 自动驾驶采标系列三:基于图像的目标检测技术

        标注猿的第54篇原创        一个用数据视角看AI世界的标注猿    上一篇文章我们从"环境感知"数据的采集设备上进行了详细说明,已经了解了相应设备采集的数据及采集前 ...

最新文章

  1. 1.6 Number类
  2. 从零开始入门 K8s | etcd 性能优化实践
  3. Flex布局里的align-self属性
  4. react中redux的store.js样板文件
  5. bzoj 4002: [JLOI2015]有意义的字符串(特征根法+矩阵快速幂)
  6. win7计算机怎么优化驱动器,win7电脑怎么优化
  7. JavaGUI——背景图片设置
  8. python刷博客点击量
  9. 2020暨南大学计算机专硕考研经验分享
  10. K8S集群安装Pod网络附加组件
  11. 关于MySQL中insert ignore,insert on duplicate和replace into,你可能没想过区别
  12. Tomcat虚拟主机配置示例
  13. 单页双曲面 matlab,如何画双叶双曲面
  14. Adobe After Effect (AE) cc2020 安装教程【64位】
  15. C语言:输出两位数中能同时被3和5整除的数
  16. SpringBoot+AOP(@Around)
  17. 蚁剑有时候连不上webshell
  18. 物联网,已经到来的产业“风口”
  19. 魔界战记修复服务器,《魔界战记6》评测:突破天际的刷刷刷
  20. @NotNull, @NotEmpty和@NotBlank之间的区别是什么?

热门文章

  1. 改变灰度图像直方图的均值和标准差
  2. [debug] PyCharm 退出 pytest in XXX.py,恢复run XXX.py
  3. matlab2c使用c++实现matlab函数系列教程-atan函数
  4. 数组和指针(sizeof两者的关系)
  5. uva 540 (Team Queue UVA - 540)
  6. Proc恢复数据文件
  7. (转)细说JDK动态代理的实现原理
  8. 一看就懂ReactJS
  9. [转载] 莫烦python学习笔记之numpy.array,dtype,empty,zeros,ones,arrange,linspace
  10. [转载] python中日期和时间格式化输出的方法