主要内容

线性卡尔曼滤波器

卡尔曼滤波器跟踪对象使用一系列检测或测量来估计状态对象的基于对象的运动模型。在运动模型中,国家的数量的集合代表一个对象的状态,比如它的位置,速度,加速度。物体运动模型定义的对象状态的进化。

线性卡尔曼滤波器(trackingKF)是最优的,递归算法估计对象的状态评估系统是线性和高斯。一个评估系统是线性的,如果运动模型和度量模型都是线性的。过滤器是通过递归预测对象状态使用运动模型使用测量和纠正。

运动模型

对于大多数类型的对象跟踪的工具箱,状态向量由一个,两个,或三维位置和速度。

考虑物体的移动x在一个恒定的加速度方向。您可以编写运动方程,利用牛顿方程,为:

x ¨ = f x ¨ = f = 一个

此外,如果你国家定义为:

x 1 = x x 2 = x ˙ ,

您可以编写状态方程形式的运动方程为:

d d t ( x 1 x 2 ] = ( 0 1 0 0 ] ( x 1 x 2 ] + ( 0 1 ] 一个

在大多数情况下,运动模型并不完全模型运动的一个对象,你需要包括过程噪声补偿运动模型的不确定性。恒定的速度模型,您可以添加过程噪声作为一个加速度。

d d t ( x 1 x 2 ] = ( 0 1 0 0 ] ( x 1 x 2 ] + ( 0 1 ] 一个 + ( 0 1 ] v k

在这里,vk的未知噪声扰动加速度。滤波器的最优,必须假设过程噪声是零均值,高斯白噪声。

您可以扩展这种类型的方程多个维度。在二维空间中,方程的形式:

d d t ( x 1 x 2 y 1 y 2 ] = ( 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ] ( x 1 x 2 y 1 y 2 ] + ( 0 一个 x 0 一个 y ] + ( 0 v x 0 v y ]

这个方程的4×4的矩阵状态转移矩阵。独立x -y -动作,这个矩阵是对角块。

当你连续时间模型转换为离散时间模型,对运动方程积分时间间隔的长度。在离散形式,样本区间T,国家代表就变成:

( x 1 , k + 1 x 2 , k + 1 ] = ( 1 T 0 1 ] ( x 1 , k x 2 , k ] + ( 1 2 T 2 T ] 一个 + ( 1 2 T 2 T ] v ˜

在哪里xk+ 1在离散时间是吗k+ 1,xk早些时候的状态离散时间吗k。如果包括噪音,方程变得更复杂,因为噪音的集成不是简单。有关如何获取从连续系统离散过程噪声,明白了[1]

你可以推广状态方程为:

x k + 1 = 一个 k x k + B k u k + G k v k

在哪里一个k状态转移矩阵和吗Bk是控制矩阵。控制矩阵占任何已知的力量作用于对象。vk代表离散过程噪声,意味着0和协方差的高斯分布kGk过程噪声增益矩阵。

测量模型

测量你观察或测量系统中。测量依赖于状态向量,但通常是不一样的状态向量。例如,在雷达系统中,可以将测量球面坐标范围等方位,和高程,而状态向量是笛卡儿的位置和速度。一个线性卡尔曼滤波器假设测量状态向量的线性函数。应用非线性测量模型,您可以选择使用一个扩展卡尔曼滤波器(trackingEKF)或一个无味卡尔曼滤波(trackingUKF)。

你可以代表一个线性测量:

z k = H k x k + w k

在这里,Hk测量矩阵和吗wk代表了测量噪声在当前时间步。对于最优滤波器,必须为测量噪声,高斯白噪声。假设测量噪声的协方差矩阵Rk

过滤循环

过滤器开始最好的估计状态x0 | 0和国家协方差P0 | 0。在递归循环过滤器执行这些步骤。

  1. 传播国家下一步使用运动方程:

    x k + 1 | k = F k x k | k + B k u k

    传播协方差矩阵:

    P k + 1 | k = F k P k | k F k T + G k k G k T

    下标符号k+ 1 |k显示相应的数量的估计k+ 1从一步一步传播k。这个估计通常被称为先天的估计。预测的测量的k+ 1的步骤是

    z k + 1 | k = H k + 1 x k + 1 | k

  2. 使用实际的测量和预测之间的差异测量正确的状态k+ 1的步骤。正确的国家,过滤器必须计算出卡尔曼增益。首先,滤波器计算测量预测协方差(创新):

    年代 k + 1 = H k + 1 P k + 1 | k H k + 1 T + R k + 1

    然后,滤波器计算卡尔曼增益为:

    K k + 1 = P k + 1 | k H k + 1 T 年代 k + 1 1

  3. 过滤器使用测量修正预测估计。修正后的估计,使用测量zk+ 1,是

    x k + 1 | k + 1 = x k + 1 | k + K k + 1 ( z k + 1 z k + 1 | k )

    在哪里Kk+ 1卡尔曼增益。修正后的状态通常被称为后验估计的状态,包括测量后,因为它是派生的。

    过滤器纠正状态协方差矩阵为:

    P k + 1 | k + 1 = P k + 1 | k K k + 1 年代 k + 1 K k + 1 T

这个图总结了卡尔曼循环操作。一旦初始化,卡尔曼滤波回路之间的预测和修正,直到达到仿真的结束。

卡尔曼滤波方程

内置的运动模型trackingKF

当你只需要使用标准的一维,二维,三维恒定速度或加速度恒定运动模型,您可以指定MotionModel的属性trackingKF作为其中的一个:

  • “一维恒定速度”

  • “一维恒定加速度”

  • “二维恒定速度”

  • “二维恒定加速度”

  • “3 d恒定速度”

  • “3 d恒定加速度”

定制你自己的运动模型,指定MotionModel财产“自定义”,然后指定的状态转移矩阵StateTransitionModel财产的过滤器。

三维恒定速度模型的状态方程是:

( x k + 1 v x , k + 1 y k + 1 v y , k + 1 z k + 1 v z , k + 1 ] = ( 1 T 0 0 0 0 0 1 0 0 0 0 0 0 1 T 0 0 0 0 0 1 0 0 0 0 0 0 1 T 0 0 0 0 0 1 ] ( x k v x , k y k v y , k z k v z , k ]

三维恒定加速度模型的状态方程是:

( x k + 1 v x , k + 1 一个 x , k + 1 y k + 1 v y , k + 1 一个 y , k + 1 z k + 1 v z , k + 1 一个 z , k + 1 ] = ( 1 T 1 2 T 2 0 0 0 0 0 0 0 1 T 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 T 1 2 T 2 0 0 0 0 0 0 0 1 T 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 T 1 2 T 2 0 0 0 0 0 0 0 1 T 0 0 0 0 0 0 0 0 1 ] ( x k v x , k 一个 x , k y k v y , k 一个 y , k z k v z , k 一个 z , k ]

例子:估计二维目标状态使用trackingKF

初始化估计模型

指定一个初始位置和速度的目标假设在二维移动。仿真持续20秒采样时间为0.2秒。

rng (2021);%的可重复的结果dt = 0.2;%秒simTime = 20;%秒tspan = 0: dt: simTime;trueInitialState = [30;2;40;2);% (x, vx; y; v)processNoise =诊断接头([0;1;0;1);%过程噪声矩阵

创建一个测量噪声协方差矩阵,假设目标测量包括它的位置状态。

measureNoise =诊断接头(4 [4]);%测量噪声矩阵

2米的矩阵指定一个标准偏差在x和y方向。

Preallocate变量保存的评估结果。

numSteps =长度(tspan);numSteps trueStates =南(4日);trueStates (: 1) = trueInitialState;estimateStates =南(大小(trueStates));

获得真正的状态和测量

恒定的速度传播模型,并生成与噪声的测量。

F = [1 dt 0 0;0 1 0 0;0 0 1 dt;0 0 0 1);H = [1 0 0 0;0 0 1 0);我= 2:长度(tspan) trueStates (:, i) = F * trueStates(张:,)+ sqrt (processNoise) * randn (4,1);结束测量= H * trueStates +√measureNoise * randn (2, numSteps);

真正的轨迹和测量的阴谋。

图绘制(trueStates (1, 1), trueStates (3,1),“r *”DisplayName =“真正的初始”)举行情节(trueStates (1:), trueStates (3:)“r”DisplayName =“真相”)情节(测量(1:),测量(2:)“kx”DisplayName =“测量”)包含(“x”(m))ylabel (“y (m)”)轴图像

图包含一个坐标轴对象。坐标轴对象包含x (m), ylabel y (m)包含3线类型的对象。一个或多个行显示的值只使用这些对象标记代表真正的初始,真理,测量。

初始化线性卡尔曼滤波器

初始化滤波器的状态[40;0;160;0],这是远离真实的初始状态。通常,您可以使用初始计量来构造一个初始状态(测量(1,1);0;测量(2,1);0]。这里,我们使用一个错误的初始状态,这使您能够测试过滤器可以快速收敛的真理。

过滤器= trackingKF (MotionModel =“二维恒定速度”状态= [40;0;160;0],MeasurementModel = H, MeasurementNoise = measureNoise)
过滤器= trackingKF属性:状态:x1双[4]StateCovariance: [4 x4双]MotionModel:“二维恒定速度”ProcessNoise: [2 x2双]MeasurementModel: [2 x4双]MeasurementNoise: [2 x2双]MaxNumOOSMSteps: 0 EnableSmoothing: 0
estimateStates (: 1) = filter.State;

运行线性卡尔曼滤波器,并显示结果

通过递归地调用过滤器运行预测正确的对象的功能。从结果,估计很快聚集在真相。实际上,线性卡尔曼滤波器具有指数收敛速度。

我= 2:长度(tspan)预测(过滤器,dt) estimateStates正确(:,我)=(过滤器,测量(:,我));结束情节(estimateStates (1, 1), estimateStates (3,1),“g *”DisplayName =“初步估计”)情节(estimateStates (1:), estimateStates (3:)“g”DisplayName =“估计”传奇(位置=“东南”)

图包含一个坐标轴对象。坐标轴对象包含x (m), ylabel y (m)包含5类型的对象。一个或多个行显示的值只使用这些对象标记代表真正的初始,真理,测量,初步估计,估计。

另请参阅

||||

引用

[1],x荣,Vesselin Jilkov页。“机动目标跟踪调查:动态模型”。编辑奥利弗·e·德拉蒙德,2000年,页。212 - 35。DOI.org (Crossref), https://doi.org/10.1117/12.391979。