基于IMM算法的目标跟踪
- 格式:doc
- 大小:372.50 KB
- 文档页数:13
基于IMM算法目标跟踪目标跟踪是指通过计算机视觉技术对感兴趣的目标进行实时定位和跟踪。
目标跟踪在许多领域具有广泛的应用,如智能监控、机器人导航、无人驾驶等。
其中,IMM(Interacting Multiple Model)算法是一种常用于目标跟踪的滤波算法,具有良好的鲁棒性和准确性。
IMM算法是一种基于多模型的目标跟踪方法,其原理是通过将多个不同的滤波器模型组合起来,以适应不同运动模型的目标。
IMM算法的核心思想是通过权重的动态调整,在不同的时间步长选择最优的模型来预测目标的状态。
IMM算法的主要步骤如下:1. 初始化:首先,根据已有的传感器测量数据,初始化目标状态的概率分布。
通常使用卡尔曼滤波器(Kalman Filter)或粒子滤波器(ParticleFilter)来估计初始状态。
2. 模型选择:根据当前的目标状态估计,计算每个模型的权重。
权重的计算可以基于目标状态的预测误差或观测误差来进行。
常用的方法有最大似然估计(Maximum LikelihoodEstimation)和卡方检验。
3.滤波更新:对每个模型进行滤波更新,即基于当前观测值对目标状态进行修正。
这一步骤通常使用卡尔曼滤波器或粒子滤波器来计算目标状态的后验概率分布。
4.模型融合:根据各个模型的权重和目标状态的后验概率分布,通过加权平均的方式融合各个模型的估计结果,得到最终的目标状态估计值。
5.状态预测:根据每个模型的状态转移方程,对目标的未来位置进行预测。
预测的结果作为下一时刻的输入。
6.循环迭代:重复步骤2-5,直至目标跟踪结束。
IMM算法具有以下优点:1.鲁棒性好:IMM算法能够自适应地选择最优的模型,对于目标运动模式的变化具有较强的适应性和鲁棒性。
2.精度高:由于采用多模型的方法,IMM算法可以更准确地估计目标的状态,减少滤波误差。
3.实时性强:IMM算法通过对目标状态进行预测,并根据当前的观测值进行修正,能够实现对目标的实时跟踪。
基于IMM-UKF的纯方位机动目标跟踪算法顾晓东;袁志勇;周浩【期刊名称】《数据采集与处理》【年(卷),期】2009(024)0z1【摘要】In nonlinear maneuvering target tracking,filters are liable to diverge or have large tracking errors.To solve the problem,an interacting multiple model with unscented Kalman filter(IMM-UKF)algorithm is designed by introducing UKF into IMM algorithm based on bearings-only tracking for multi-stations.The algorithm is not affected by the linearization errot in extended Kalman filter(EKF)filter.Finally,the algorithm is compared with EKF,IMM-EKF algorithms.Simulations show that the IMM-UKF algorithm is more stable and effective,thus improving the convergence speed and tracking precision.%针对在非线性机动目标跟踪中存在的滤波器易发散、跟踪误差大等问题,本文在多站纯方位跟踪的基础上,把Unscented卡尔曼滤波(Unscented Kalman filter,UKF)引进到交互多模型算法(Interacting multiple model,IMM)中,设计了交互多模型UKF滤波算法,克服了EKF中引入的较大线性化误差对机动目标跟踪算法性能的影响.最后将该算法与扩展卡尔曼滤波(EKF)、IMM-EKF算法进行了比较,仿真结果表明:IMM-UKF 算法增强了EKF滤波器的稳定性,提高了滤波收敛速度和跟踪精度.【总页数】4页(P88-91)【作者】顾晓东;袁志勇;周浩【作者单位】海军工程大学兵器工程系,武汉,430033;海军工程大学兵器工程系,武汉,430033;海军工程大学兵器工程系,武汉,430033【正文语种】中文【中图分类】TN911【相关文献】1.基于IMM—UKF的纯方位机动目标跟踪算法 [J], 顾晓东;袁志勇;周浩2.一种新的双基阵纯方位机动目标跟踪算法 [J], 徐本连;王执铨3.基于MDA-MHT的纯方位多目标跟踪算法 [J], 丁振平;陈秀英;薛雯4.基于MDA-MHT的纯方位多目标跟踪算法 [J], 丁振平; 陈秀英; 薛雯5.基于纯方位的多无人机协同目标跟踪算法 [J], 辛沙欧;陈可;宋震林;桂欣颖;戚国庆因版权原因,仅展示原文概要,查看原文内容请购买。
基于IMM-MHT算法的杂波环境多机动目标跟踪邵俊伟;同伟;单奇【摘要】针对杂波环境下多机动目标的跟踪问题,提出将交互多模型(IMM)算法与多假设跟踪(MHT)算法结合,并运用Murty算法和假设树修剪方法进行假设生成和假设管理,提高IMM-MHT算法的实用性.仿真结果表明,IMM-MHT算法具有较高的正确关联率和较好的跟踪稳定性,且与只使用单模型的MHT算法相比,具有更好的跟踪精度.【期刊名称】《舰船电子对抗》【年(卷),期】2014(037)002【总页数】5页(P87-90,93)【关键词】数据关联;多假设跟踪;交互多模型【作者】邵俊伟;同伟;单奇【作者单位】中国电子科技集团公司第38研究所,合肥230088;陆军驻中电集团38所军事代表室,合肥230088;中国电子科技集团公司第38研究所,合肥230088【正文语种】中文【中图分类】TP957.510 引言随着战场环境的日趋复杂以及目标机动性能的日益提升,如何在杂波环境下跟踪机动目标正成为雷达数据处理系统要应对的关键问题之一。
传统数据关联算法,如最近邻[1](NN)、概率数据关联[2](PDA)、联合概率数据关联[3](JPDA)等,以当前扫描周期内的量测为基础进行数据关联,若某一扫描周期内的关联结果与真实情况有较大差别,则之后的跟踪过程常会发生错误,甚至丢失目标。
多假设跟踪[4](MHT)的关联结果不仅取决于当前扫描周期内的量测数据,而且还与历史量测信息有关。
对不能确定的关联,会形成多种逻辑假设,并用后续的量测数据来解决这种不确定性。
在理想条件下,MHT是最优的数据关联算法,可以有效地解决杂波环境下的数据关联问题。
但是,MHT算法所需的计算和存储资源会随着量测数和跟踪步数的增长呈指数增加,若要实际应用,还需要有效的假设管理技术。
对机动目标,以单一的运动模型来刻画其运动过程,往往和实际情况有偏差,最终会由于模型失配导致跟踪误差增大甚至跟踪失败。
基于VS-IMM算法的A-SMGCS场面运动目标跟踪宫淑丽;陶诚;王帮峰;黄圣国【摘要】为实现先进场面运动引导控制系统中场面监视雷达对运动目标的跟踪,研究了将变结构交互式多模型(Variable structure interacting multiple model,VS-IMM)算法应用到该系统中.首先,根据飞机的真实运动情况建立了飞机的匀速运动、匀加速运动和匀速转弯运动模型;然后,针对固定结构交互式多模型(Fixed structure interactive multiple model,FS-IMM)算法在目标跟踪方面的不足,结合机场地图,将VS-IMM算法应用到机场场面运动目标跟踪中;最后,基于扩展卡尔曼滤波将VS-IMM算法与FS-IMM算法进行仿真比较.结果表明:VS-IMM算法的跟踪精度及模型选择均优于FS-IMM算法,VS-IMM算法在场面跟踪方面具有更大的应用价值.%Aiming at tracking maneuvering target of surface movement radar (SMR) for the advanced surface movement guidance and control system (A-SMGCS), the variable structure interacting multiple model (VS-IMM) algorithm is used in the system. Firstly, according to the real movement of aircraft, a constant velocity motion model is established, as well as a constant acceleration motion model and a constant turn motion model. Then, considering the defects of the fixed structure interacting multiple model (FS-IMM) algorithm, the VS-IMM algorithm is applied to the airport surface movement target tracking by combining with the airport map. Finally, VS-IMM and FS-IMM algorithms are designed by extended Kalman filtering (EKF), and they are compared through computer simulation. Simulation results show that VS-IMM algorithm is more reliable than IMMalgorithm on tracking accuracy. So VS-IMM algorithm has the greater value on surface maneuvering target tracking.【期刊名称】《南京航空航天大学学报》【年(卷),期】2012(044)001【总页数】6页(P118-123)【关键词】目标跟踪;交互式多模型算法;扩展卡尔曼滤波【作者】宫淑丽;陶诚;王帮峰;黄圣国【作者单位】南京航空航天大学民航学院,南京,210016;南京航空航天大学民航学院,南京,210016;南京航空航天大学民航学院,南京,210016;南京航空航天大学民航学院,南京,210016【正文语种】中文【中图分类】V351机场场面监视是保障机场上的航空器和车辆运行安全的基础技术。
immukf算法IMM(交互式多模型)算法是一种用于目标跟踪的算法,它利用多个不同的运动模型来匹配目标的不同运动模式。
这些模型可以通过马尔可夫转移概率进行转移,从而形成一个具有多种可能性的模型概率集合。
然后,利用卡尔曼滤波器对目标的状态进行估计和更新。
在IMM算法中,可以采用多种运动模型,例如匀速模型、匀加速模型、转弯模型等。
同时,为了处理非线性问题,可以采用扩展卡尔曼滤波(EKF)或无迹卡尔曼滤波(UKF)。
其中,UKF算法相对于EKF算法具有更高的精度和稳定性。
具体来说,IMM算法的流程如下:1.初始化:确定初始状态量、初始模型概率和滤波器参数。
2.模型选择:根据当前状态量和模型概率,选择一个最适合的模型进行状态估计。
3.状态估计:利用选择的模型和卡尔曼滤波器对目标的状态进行估计。
4.模型转移:根据已知的马尔可夫转移概率,对模型概率进行更新。
5.判断终止条件:如果满足终止条件,则结束算法;否则,返回步骤2继续执行。
对于IMM-UKF算法的具体步骤如下:1.设定目标监测概率为1,系统采样间隔为T。
2.K时刻的离散运动模型和观测模型分别为跟踪过程中,前20次采样使用传统的无迹卡尔曼算法跟踪目标,然后采用本文设计的IMMUKF算法继续对目标进行跟踪。
3.3个IMM模型的采样概率为μ-1=0.8,μ-2=0.1,μ-3=0.1。
通过两点起始法计算初始状态。
4.为了验证算法性能,通过MATLAB进行算法仿真,模拟目标运动轨迹,同时对附加均值为0、标准差为100的目标观测噪声。
仿真扫描周期设为2s,对目标轨迹进行观测估计。
一、IMM主程序%% 基于IMM算法的目标跟踪%clear all;clc;echo off;%===============================%建立模型%===============================% 仿真参数simTime=100; %仿真迭代次数T=1; %采样时间w2=3*2*pi/360; %模型2转弯率3度w3=-3*2*pi/360; %模型3转弯率-3度H=[1,0,0,0;0,0,1,0]; %模型量测矩阵G=[T^2/2,0;T,0;0,T^2/2;0,T]; %模型过程噪声加权矩阵r=200; %20 2000R=[r,0;0,r]; %模型量测噪声协方差矩阵Q=[10,0;0,10]; %模型过程噪声协方差矩阵F1=[1,T,0,0;0,1,0,0;0,0,1,T;0,0,0,1]; %模型1状态转移矩阵F2=[1,sin(w2*T)/w2,0,(cos(w2*T)-1)/w2;0,cos(w2*T),0,sin(w2*T);0,(1-cos(w2*T))/w2,1,sin(w2*T)/w2;0,-sin(w2*T),0,cos(w2*T)]; %模型2状态转移矩阵左转弯F3=[1,sin(w3*T)/w3,0,(cos(w3*T)-1)/w3;0,cos(w3*T),0,sin(w3*T);0,(1-cos(w3*T))/w3,1,sin(w3*T)/w3;0,-sin(w3*T),0,cos(w3*T)]; %模型3状态转移矩阵右转弯w4=3*2*pi/360; %模型2转弯率3度w5=-3*2*pi/360; %模型3转弯率-3度F4=[1,sin(w4*T)/w4,0,(cos(w4*T)-1)/w4;0,cos(w4*T),0,sin(w4*T);0,(1-cos(w4*T))/w4,1,sin(w4*T)/w4;0,-sin(w4*T),0,cos(w4*T)]; %模型2状态转移矩阵F5=[1,sin(w5*T)/w5,0,(cos(w5*T)-1)/w5;0,cos(w5*T),0,sin(w5*T);0,(1-cos(w5*T))/w5,1,sin(w5*T)/w5;0,-sin(w5*T),0,cos(w5*T)]; %模型3状态转移矩阵x0=[1000,200,1000,200]'; % 初始状态。
基于交互式多模型方法的目标跟踪高海南一、 目标建模我们设定一个目标在二维平面内运动,其状态()X n 由位置、速度和加速度组成,即()[(),(),(),()]TX n x n xn y n y n =&&。
假设采样间隔为T ,目标检测概率1D P =,无虚警存在,在笛卡尔坐标系下目标的离散运动模型和观测模型 (假定在采样时刻k )为:()()()1X k FX k GV k +=+ ()()()()Z k H k X k W k =+目标在二维平面内运动模型如下: 1. CV:近似匀速运动模型C V 模型将加速度看作是随机扰动(状态噪声),取目标状态()[(),(),(),()]T X n x n x n y n y n =&&。
则状态转移矩阵,干扰转移矩阵和观测矩阵分别为:22100/20010000,0010/200010TT F G T T T ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦,10000010H ⎡⎤=⎢⎥⎣⎦2. CT :匀速转弯模型只考虑运动角速度ω已知的CT 模型。
则状态转移矩阵,干扰转移矩阵和观测矩阵分别为:22()1()()sin()1()()sin()()1000010sin T cos T cos T T cos T sin T T cos F T ωωωωωωωωωωωω⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦---22/20000/20T G T T ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦10000010H ⎡⎤=⎢⎥⎣⎦量测噪声协方差矩阵R 由传感器决定。
二、 交互多模算法原理假定有r 个模型:()()()1,1,,j j j k F k G Vk j r +=+=X X K 其中,()j k W 是均值为零、协方差矩阵为j Q 的白噪声序列。
用一个马尔可夫链来控制这些模型之间的转换,马尔可夫链的转移概率矩阵为:1111r r r r p p p p ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦P LM OM L测量模型为:()()()()j jj k H k k W k =+Z XIMM 算法步骤可归纳如下: ①、输入交互()()()()()()(){()()()}()()(){}()111ˆˆ1/11/11/11/1ˆ1/11/11/1ˆˆˆ1/11/11/11/11/,1/ro ji ij i oj ri i ij i Toj i oj k ij i i ij i j k k k k k k k k k k k k k k k k k k k k k k P M k M k p k c μμμμ==---=------⎡=----+--⎣⎤⎡⎤--------⎦⎣⎦--=-=-∑∑XX P P X X X X Z其中1,,j r =,ij p 是模型i 转到模型j 的转移概率,j c 为规一化常数,()11rj ij i i c p k μ==-∑。
②、对应于模型()j M k ,以()ˆ1/1oj k k --X,()1/1oj k k --P 及()k Z 作为输入进行Kalman 滤波。
1)预测()()()0ˆˆ/1,11/1j j j k k F k kk k -=---X X 2)预测误差方差阵()()()()()()()0/1,11/1,1111j j Tj j X X T j j k k F k k k k F kk G k k G k -=----+---P P Q %%3)卡尔曼增益()()()()()()()1/1/1j T j Tj X X k k k H k H k k k H k k -⎡⎤=--+⎣⎦K P P R %% 4)滤波()()()()()()ˆˆˆ//1/1j j j j k k k k k k H k k k ⎡⎤=-+--⎣⎦X X K Z X 5)滤波误差方差阵()()()()//1j jj X X k k k H k k k ⎡⎤=--⎣⎦P I K P %% ③、模型概率更新()(){}()(){}(){}()()()111//,/11/k k k j j j j rj ij i j j i k P M k P k M k P M k k p k k c c c μμ--====Λ-=Λ∑Z Z Z Z其中,c 为归一化常数,且()1rj j j c k c ==Λ∑,而()j k Λ为观测()k Z 的似然函数,()()(){}()()()111/2/211/,exp 22k T j j j j j n j k P k M k k k π--⎧⎫Λ==-⎨⎬⎩⎭Z Z υS υS ()()()()()()()()()ˆ/1/1j j T j j Xk k H k k k k H k k k H k k =--=-+υZ X S P R ,%。
④、输出交互()()()1ˆˆ//rj jj k k k k k μ==∑X X ()()()()(){()()}1ˆˆˆˆ//////rTj j j j j k k k k k k k k k k k k kμ=⎡⎤⎡⎤=+--⎣⎦⎣⎦∑P P X X XX三、 仿真实验设定目标运动起始位置坐标(x ,y )为(1000,1000),初始速度为(10,10),采样间隔T=1s ,CT 模型运动的角速度270πω-=,即做顺时针匀速转弯运动。
x 和y 独立地进行观测,观测标准差为50米。
目标在1~150s 运动模型为CV ,151~270s 运动模型为CT , 271~400s 运动模型为CV 。
目标运动真实轨迹和测量轨迹如图1所示。
图1 目标运动轨迹在IMM 滤波时,使用2个模型集,即CV 、CT ,假设我们已经知道CT 模型的目标运动角速度w ,Markov 转移矩阵⎥⎦⎤⎢⎣⎡=99.001.001.099.01P 。
进行蒙特卡洛仿真,得到IMM 滤波结果。
将此滤波结果与单独的CV 、CT 模型的标准卡尔曼滤波结果对比,如图2所示。
由图可知,CT 模型滤波结果与真实值有较大偏差,在转弯时CV 模型卡尔曼滤波结果偏离偏离真实值,而IMM 算法能较好的跟踪目标。
图2 各种滤波结果图为了定量分析滤波结果,我们将X 、Y 方向的CV 、CT 卡尔曼滤波、IMM 滤波与真实值分别求位置偏差、均方根误差并进行进行对比,如图3、图4所示。
同时作出各个时刻CV 、CT 的模型概率,如图5所示。
可以看到在转弯时刻(151~270s )期间,CT 模型概率大于CV 模型概率,此时IMM 滤波主要取决于CT 模型,而在其他时刻,CT 模型起主要作用,这与我们的经验知识一致。
IMM 算法就是通过各模型概率的自动调整来完成对机动目标的跟踪,相对于单一模型滤波具有较理想的跟踪精度。
图3 位置滤波偏差图4 位置滤波均方根误差图5 各时刻CV 、CT 模型概率1、下面讨论不同的马尔科夫一步转移矩阵对跟踪结果的影响。
(1)⎥⎦⎤⎢⎣⎡=5.05.05.05.02P 时,模型概率和滤波结果如下图所示,此时CV 、CT 模型概率变化趋势不变,但相差不大,显然IMM 算法优于单模型Kalman 滤波算法,但其精度低于当转移矩阵为P1时的结果。
图6 转移矩阵为P2时概率变化图图7 转移矩阵为P2时滤波结果图(2)更极端地,取⎥⎦⎤⎢⎣⎡=1.09.09.01.03P 时,模型概率和滤波结果如下图所示,此时CV 、CT 模型概率变化趋势总体不变,但相差甚微,而IMM 算法总体上仍优于单模型Kalman 滤波算法,但其精度同样低于当转移矩阵为P1和P2时的结果。
图8 转移矩阵为P3时概率变化图图9 转移矩阵为P3时滤波结果图综上所述,Markov 链状态转移矩阵对角线元素越大,即由k-1时刻模型m1转移到k 时刻模型m1概率越大,也就是模型的“惯性”越大,交互式多模型滤波结果精度越高,反之,精度越低。
2、CT 模型角速度ω对滤波结果的影响取Markov 转移矩阵⎥⎦⎤⎢⎣⎡=99.001.001.099.01P ,而角速度360πω-=,其他参数均不变,仿真得到如下结果,与图2对比可知,当角速度ω越接近于真实值,跟踪精度越高,反之跟踪精度有所下降。
图10 角速度ω=-pi/360时滤波结果图通过编写程序和仿真实验结果可以体会到,IMM算法核心在于对做复杂机动运动的目标滤波时,IMM能够通过对各个模型滤波器的输入输出通过混合概率和似然函数计算进行加权综合处理,自动切换模型,实现对目标的较好跟踪。
IMM算法跟踪性能好坏取决于其使用的模型集,模型越精确,模型集越丰富,跟踪效果就越好,但带来了计算量增加的问题,有时反而降低性能。
附:IMM滤波程序produce_data.mclear ;clcN = 400;T = 1;x0 = [1000,10,1000,10]'; xA = [];zA = [x0(1),x0(3)]; %model-1,匀速运动A1 = [1,T,0,0;0,1,0,0;0,0,1,T;0,0,0,1];G1=[T^2/2, 0;T, 0;0, T^2/2;0, T] ;Q1=[0.1^2 0;0 0.1^2];%model-2,匀速转弯模型A2=CreatCTF(-pi/270,T); G2=CreatCTT(T);Q2=[0.0144^2 0;0 0.0144^2];% 产生真实数据x = x0;for k = 1:150%匀速直线x = A1*x + G1*sqrt(Q1)*[randn,randn]';xA =[xA x];endfor k = 1:120%匀速圆周转弯x = A2*x + G2*sqrt(Q2)*[randn,randn]';xA =[xA x];endfor k = 1:130%匀速直线x = A1*x + G1*sqrt(Q1)*[randn,randn]';xA =[xA x];endplot(xA(1,:),xA(3,:),'b-')save('data','xA','A1','N','x0','G1','Q1','A2','G 2','Q2');title('运动轨迹')xlabel('t(s)'),ylabel('位置(m)');function [P_k,P_k_k_1,X_k]=kalman(F,T,H,Q,R,Z,X0,P0) %% KALMAN滤波函数:[P_k,K_k,X_k]=kalman(F,T,H,Q,R,Z,x0,p0) %% 模型为 X(K+1) = F(k)X(k)+ T(k)W(k)%% 输入参数:%% F,T分别为:系统状态转移矩阵、噪声矩阵%% H 为转换到笛卡尔坐标系下的观测矩阵%% Q,R分别是W(k)、V(k)的协方差矩阵%% Z为观测数据%% x0,p0 为一步滤波的起始条件%% 输出参数:%% P_k为k时刻滤波误差协方差阵%% P_k_k_1为对k时刻滤波误差协方差阵的估计%% X_k为滤波更新值%一步提前预测值和预测误差的协方差阵分别是:X_k_k_1 = F * X0; %k-1时刻对k时刻x值的预测P_k_k_1 = F*P0*F' + T*Q*T'; %k-1时刻对k时刻p值的预测K_k = P_k_k_1 * H' * inv(H*P_k_k_1*H' + R);%k时刻kalman滤波增益X_k = X_k_k_1+K_k*(Z - H*X_k_k_1);P_k = P_k_k_1 - P_k_k_1* H' * inv(H*P_k_k_1*H' + R) * H * P_k_k_1;function F=CreatCTF(w,t) %CT模型的状态转移矩阵f1=1;f2=sin(w*t)/w;f3=(1-cos(w*t))/w;f4=cos(w*t);f5=sin(w*t);F=[ f1 f2 0 -f3 ;0 f4 0 -f5 ;0 f3 f1 f2 ;0 f5 0 f4;];function T=CreatCTT(t)%% 函数作用:产生匀加速模型的噪声矩阵T%% 输入参数:t为时间间隔%% 输出参数:噪声矩阵TT=[t^2/2 0 ;t 0 ;0 t^2/2 ;0 t ;]; %噪声矩阵IMM_TEST.mclear all;clc;H = [1 0 0 0;0 0 1 0];R = [2500 0;0 2500];load data.matMC=50;ex1=zeros(MC,N);ex2=zeros(MC,N);ey1=zeros(MC,N);ey2=zeros(MC,N);%蒙特卡罗仿真for mn=1:MC%模型初始化Pi =[0.99,0.01;0.01,0.99];%转移概率u1=1/2; u2=1/2;%2个模型间概率传播参数U0 = [u1,u2];P0 =[ 100 0 0 0;0 1 0 0;0 0 100 0;0 0 0 1;];%初始协方差X1_k_1=x0;X2_k_1=x0; %1-r(r=2)每个模型的状态传播参数P1=P0;P2=P0; %1-r(r=2)每个模型的状态传播参数%CV模型卡尔曼滤波for i=1:400zA(:,i) = H*xA(:,i) + sqrt(R)*[randn,randn]';[P_kv,P_k_k_1v,X1_kv]=kalman(A1,G1,H,Q1,R,zA(:,i),x0,P0);X_kv(:,i)=X1_kv;x0=X1_kv;P0=P_kv;end%CT模型卡尔曼滤波A2=CreatCTF(-pi/270,1);%改变角速度wx0 = [1000,10,1000,10]';P0 = [100 0 0 0;0 1 0 0 ;0 0 100 0;0 0 0 1];for i=1:400[P_kt,P_k_k_1t,X1_kt]=kalman(A2,G2,H,Q2,R,zA(:,i),x0,P0);X_kt(:,i)=X1_kt;x0=X1_kt;P0=P_kt;endex1(mn,:)=X_kv(1,:)-xA(1,:);ey1(mn,:)=X_kv(3,:)-xA(3,:);ex2(mn,:)=X_kt(1,:)-xA(1,:);ey2(mn,:)=X_kt(3,:)-xA(3,:);%%%%%%%%%%IMM滤波初始化参数%%%%%%% %%%%x0 = [1000,10,1000,10]';x1_k_1=x0;x2_k_1=x0; %1-r(r=2)每个模型的状态传播参数P1=P0;P2=P0; %1-r(r=2)每个模型的状态传播参数P0 = [100 0 0 0;0 1 0 0 ;0 0 100 0;0 0 0 1];for k = 1:400%1-400秒%混合概率c1=Pi(1,1)*u1+Pi(2,1)*u2;c2=Pi(1,2)*u1+Pi(2,2)*u2;u11=Pi(1,1)*u1/c1;u12=Pi(1,2)*u1/c2;u21=Pi(2,1)*u2/c1;u22=Pi(2,2)*u2/c2;x1_m = x1_k_1*u11+x2_k_1*u21;x2_m = x1_k_1*u12+x2_k_1*u22;p1_k_1=(P1+(x1_k_1-x1_m)*(x1_k_1-x1_m)')*u11+(P2+(x2_k_1-x1_m)*(x2_k_1-x1_m)')*u21;p2_k_1=(P1+(x1_k_1-x2_m)*(x1_k_1-x2_m)')*u12+(P2+(x2_k_1-x2_m)*(x2_k_1-x2_m)')*u22;%状态预测x1_pk1=A1*x1_m; x2_pk1=A2*x2_m;p1_k=A1*p1_k_1*A1'+G1*Q1*G1';p2_k=A2*p2_k_1*A2'+G2*Q2*G2';%预测残差及协方差计算zk=zA(:,k);v1=zk-H*x1_pk1; v2=zk-H*x2_pk1;Sv1=H*p1_k*H'+R;Sv2=H*p2_k*H'+R;like1=det(2*pi*Sv1)^(-0.5)*exp(-0.5*v1'*inv(Sv1)*v1);like2=det(2*pi*Sv2)^(-0.5)*exp(-0.5*v2'*inv(Sv2)*v2);%滤波更新K1=p1_k*H'*inv(Sv1); K2=p2_k*H'*inv(Sv2);xk1=x1_pk1+K1*v1;xk2=x2_pk1+K2*v2;P1=p1_k-K1*Sv1*K1';P2=p2_k-K2*Sv2*K2';%模型概率更新C=like1*c1+like2*c2;u1=like1*c1/C;u2=like2*c2/C;%估计融合xk=xk1*u1+xk2*u2;%迭代x1_k_1=xk1;x2_k_1=xk2;X_imm(:,k)=xk;um1(k)=u1;um2(k)=u2;endex3(mn,:)=X_imm(1,:)-xA(1,:);ey3(mn,:)=X_imm(3,:)-xA(3,:);UM1(mn,:)=um1;UM2(mn,:)=um2;endEX1=sqrt(sum(ex1.^2,1)/MC);EX2=sqrt(sum(ex2.^2,1)/MC);EX3=sqrt(sum(ex1.^2,1)/MC); EY1=sqrt(sum(ey1.^2,1)/MC);EY2=sqrt(sum(ey2.^2,1)/MC);EY3=sqrt(sum(ey3.^2,1)/MC); mex1=mean(ex1);mey1=mean(ey1);%CVmex2=mean(ex2);mey2=mean(ey2);%CTmex3=mean(ex3);mey3=mean(ey3);%IMMUm1=mean(UM1);Um2=mean(UM2);t=1:400;figure(1)plot(xA(1,t),xA(3,t),'k' ,zA(1,t),zA(2,t),'g-',xA(1,t)+mex3(t),xA(3,t)+mey3(t),...'r',xA(1,t)+mex1(t),xA(3,t)+mey1(t),'b',xA(1,t)+mex2(t),xA(3,t)+mey2(t),'m');legend('真实值', '测量值','IMM滤波','CV模型滤波','CT模型滤波',2);figure(2)subplot(2,1,1)plot(t,mex1(t),'b',t,mex2(t),'m',t,mex3(t),'r' );title('X方向滤波误差')legend('CV模型滤波','CT模型滤波','IMM滤波',3);subplot(2,1,2)plot(t,mey1(t),'b',t,mey2(t),'m',t,mey3(t),'r' );legend('CV模型滤波','CT模型滤波','IMM滤波',4);title('Y方向滤波误差')xlabel('t(s)'),ylabel('位置误差(m)');figure(3)subplot(2,1,1)plot( t,EX1(t),'b',t,EX2(t),'m',t,EX3(t),'r' );title('X方向RMSE')legend('CV模型滤波','CT模型滤波','IMM滤波',2);subplot(2,1,2)plot(t,EY1(t),'b',t,EY2(t),'m',t,EY3(t),'r' );legend('CV模型滤波','CT模型滤波','IMM滤波',2);title('Y方向RMSE')xlabel('t(s)'),ylabel('位置误差(m)');figure(4)plot(t,Um1(t),'b-',t,Um2(t),'m-' );legend('CV模型概率','CT模型概率',1);title('CV、CT模型概率变化')。