主要内容

预测

预测状态和状态估计误差协方差的线性卡尔曼滤波器

自从R2021a

描述

语法为预定义的运动模型

如果你使用这些语法指定一个预定义的运动模型MotionModel财产的trackingKF对象。

(xpred,ppr)=预测(过滤器)返回状态预测xpred和预测状态估计误差协方差ppr后一秒使用中指定的运动模型过滤器。预测的值覆盖的内部状态和状态估计误差协方差过滤器

例子

(xpred,ppr)=预测(过滤器,dt)预测状态和状态估计误差协方差在指定的时间步dt

语法没有控制输入自定义运动模型

如果你指定使用这些语法MotionModel财产“自定义”和不使用控制输入。

(xpred,ppr)=预测(过滤器)返回状态预测xpred和预测状态估计误差协方差ppr使用中指定的状态转移矩阵StateTransitionModel财产的过滤器。预测的值覆盖的内部状态和状态估计误差协方差过滤器

(xpred,ppr)=预测(过滤器,一个)指定了状态转换模型一个。使用这个语法时时变状态转移模型。

(xpred,ppr)=预测(过滤器,一个,)指定了状态转换模型一个和过程噪声协方差。使用这个语法时,状态转换模型和噪声时变过程。

语法与控制输入自定义的运动模型

如果你指定使用这些语法MotionModel财产“自定义”和使用控制输入。

例子

(xpred,ppr)=预测(过滤器,u)返回状态预测xpred和预测状态估计误差协方差ppr使用状态转换模型中指定StateTransitionModel财产的过滤器和一个控制输入u

(xpred,ppr)=预测(过滤器,u,一个,B)指定的力或控制输入u,状态转换模型一个和控制模型B。使用这个语法时,状态转换模型和控制模型是时变的。

(xpred,ppr)=预测(过滤器,u,一个,B,)指定的力或控制输入u,状态转换模型一个,控制模型B,这个过程噪声协方差。使用这个语法时,状态转换模型,控制模型和过程噪声是时变的。

例子

全部折叠

创建一个线性卡尔曼滤波器,使用一个2 d匀速运动模型。假设测量包括xy -对象的位置。

指定初始状态估计零速度。

x = 5.3;y = 3.6;initialState = [x; 0; y; 0];KF = trackingKF (“MotionModel”,“二维恒定速度”,“状态”,initialState);

创建对象的测量位置常速轨迹。

vx = 0.2;v = 0.1;T = 0.5;pos = [0: vx * T: 2;5:v * T: 6];

正确预测和对象的状态。

k = 1:尺寸(pos, 1) pstates (k,:) =预测(KF, T);cstates (k) =正确(KF, pos (k,:));结束

画出痕迹。

情节(pos (: 1), pos (:, 2),“k”。pstates (: 1), pstates (:, 3),“+”,cstates (: 1), cstates (:, 3),“o”)包含(“x [m]”)ylabel (“y [m]”)网格xt = [x - 2, pos (1,1) + 0.1, pos(结束,1)+ 0.1);欧美= [y, pos (1、2), pos (, 2)];文本(xt,欧美,“第一测量”,“第一位置”,“最后的位置”])传说(“对象位置”,“预测位置”,“纠正位置”)

图包含一个坐标轴对象。坐标轴对象包含x [m], ylabel y [m]包含6行类型的对象,文本。一个或多个行显示的值只使用这些对象标记代表对象的位置,预测位置,纠正位置。

指定一个仿真时间10秒的时间步1秒。

rng (2021)%的可重复的结果simulationTime = 20;dt = 1;tspan = 0: dt: simulationTime;步骤=长度(tspan);

指定运动模型的二维恒定速度模型的状态(x;vx;y;v]。测量(x;y]。

A1D = [1 dt;0 1];一个= kron(眼(2),A1D)%状态transiton模型
一个=4×41 1 0 0 0 1 0 0 0 0 1 1 0 0 0 1)
H1D = [1 0];H = kron(眼(2),H1D)%的度量模型
H =2×41 1 0 0 0 0 0 0
σ= 0.2;R =σ^ 2 *眼(2);%测量噪声协方差

指定一个控制模型矩阵。

B1D = [0;1);B = kron(眼(2),B1D)%控制模型矩阵
B =4×20 0 1 0 0 0 0 1)

假设控制输入正弦速度分量,vxv

获得= 5;用户体验=获得* sin (tspan(2:结束);Uy =获得* cos (tspan(2:结束);U =[用户体验;Uy];%控制输入

假设真正的初始状态是(1 1 1 1),模拟系统获得真实状态和测量。

initialState = [1 1 1 1] ';% (m m / s m m / s)trueStates =南(步骤4);trueStates (: 1) = initialState;我= 2:步骤trueStates(:,我)= A * trueStates(张:,)+ B * U(张:,);结束测量= H * trueStates +胆固醇(R) * randn(步骤);

可视化的真实轨迹和测量。

图绘制(trueStates (1:), trueStates (3:)“DisplayName”,“真相”)举行情节(测量(1:),测量(2:)“x”,“DisplayName”,“测量”)包含(“x”(m))ylabel (“y (m)”传说)

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

创建一个trackingKF过滤器与一个定制的运动模型。使指定控制模型的控制输入。在过滤器中指定初始状态的基础上,首先测量。

initialFilterState =[测量(1,1);0;测量(2,1);0);过滤器= trackingKF (“MotionModel”,“自定义”,“StateTransitionModel”一个,“MeasurementModel”H,“ControlModel”B“状态”,initialFilterState);

用估计状态预测正确的对象的功能。

estimateStates =南(步骤4);estimateStates (: 1) = initialFilterState;我= 2:步骤预测(过滤器,U(张:,));estimateStates (:, i) =正确(过滤器,测量(:,我));结束

可视化状态估计。

情节(estimateStates (1:), estimateStates (3:)“g”,“DisplayName”,“估计”);

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

输入参数

全部折叠

线性卡尔曼滤波跟踪的对象,指定为一个trackingKF对象。

时间步,指定为一个积极的标量。单位是秒。

状态转换模型,指定为一个实值——- - - - - -矩阵,状态向量的大小。

过程噪声的协方差,指定为负的标量、半正定D——- - - - - -D矩阵,或半正定——- - - - - -矩阵。

  • MotionModel财产的过滤器被指定为一个预定义的运动模型,指定吗作为半正定D——- - - - - -D矩阵,D是尺寸的数量目标的运动。例如,D= 2的“二维恒定速度”或者是“二维恒定加速度”运动模型。

    在这种情况下,如果你指定作为一个负的标量,标量扩展到了一个对角协方差矩阵的对角元素,其大小D——- - - - - -D

  • MotionModel财产的过滤器被指定为“自定义”,指定作为半正定——- - - - - -矩阵,过滤器的大小状态。例如,= 6如果你定制的三维运动模型状态(x,vx,y,vy,z,vz)。

    在这种情况下,如果你指定作为一个负的标量,标量扩展到了一个对角协方差矩阵的对角元素,其大小——- - - - - -

控制向量,指定为一个实值l元向量。

控制模型,指定为一个实值——- - - - - -l矩阵。状态向量的大小。l是独立的数量控制。

输出参数

全部折叠

预测状态,作为一个实值返回元向量。预测状态代表可推论的状态向量的估计,从之前的传播状态使用状态转换和控制模型。

预测协方差矩阵,作为实值返回——- - - - - -矩阵。状态向量的大小。预测状态协方差矩阵代表可推论的估计的协方差矩阵向量。过滤器传播先前估计的协方差矩阵。

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

版本历史

介绍了R2021a