主要内容

unscentedKalmanFilter

为在线状态估计创建Uncented Kalman筛选对象

描述

例子

obj= UnscentedkalmanFilter(StateTransitionFcnMeasurementFcnInitimstate.创建用于在线状态估计离散时间非线性系统的联机的Kalman滤波器对象。StateTransitionFcn是一个计算系统的状态的函数k,给出时刻的状态向量k-1。MeasurementFcn是一种函数,可以在时间计算系统的输出测量k,鉴于当时的国家kInitimstate.指定状态估计的初始值。

创建对象后,使用正确的预测命令更新状态估计和状态估计误差协方差值使用离散时间无气味卡尔曼滤波算法和实时数据。

例子

obj= UnscentedkalmanFilter(StateTransitionFcnMeasurementFcnInitimstate.名称,值使用一个或多个unscented卡尔曼筛选器对象指定其他属性名称,值对参数。

obj= UnscentedkalmanFilter(StateTransitionFcnMeasurementFcn使用指定的状态转换和测量功能创建Uncented Kalman筛选对象。在使用之前预测正确的命令,使用点表示法指定初始状态值。例如,对于具有初始状态值的两态系统[1; 0], 指定obj.state = [1; 0]

obj= UnscentedkalmanFilter(StateTransitionFcnMeasurementFcn名称,值使用一个或多个unscented卡尔曼筛选器对象指定其他属性名称,值对参数。在使用之前预测正确的命令中指定初始状态值名称,值对参数或点符号。

例子

obj= UnscentedkalmanFilter(名称,值创建一个具有使用一个或多个指定的属性的Uncented Kalman筛选对象名称,值对参数。在使用之前预测正确的命令,指定状态转换函数,测量功能和初始状态值使用名称,值对参数或点符号。

对象描述

unscentedKalmanFilter利用离散时间无迹卡尔曼滤波算法,为离散时间非线性系统的在线状态估计创建一个对象。

考虑一个州的植物x, 输入u、输出y,过程噪声w,测量噪声v.假设你可以把这个物体表示成一个非线性系统。

该算法计算状态估计值<年代pan class="inlineequation"> x 利用你指定的状态转移和测量函数的非线性系统。该软件允许你指定这些函数中的噪声为附加的或非附加的:

  • 添加剂噪声术语- 状态转换和测量方程具有以下形式:

    x k f x k 1 u 年代 k 1 + w k 1 y k h x k u k + v k

    在这里f是一个非线性状态转换功能,描述了各国的演变x从一个时间步骤到下一个。非线性测量函数h有关x的测量y在时间步kwv分别为零均值、不相关过程噪声和测量噪声。这些函数还可以有其他的输入参数,由u<年代ub>年代u<年代ub>米在方程式中。例如,附加参数可能是时间步骤k或输入u到非线性系统。可以有多个这样的参数。

    注意,两个方程中的噪声术语都是添加剂。那是,x(k)是否与过程噪声线性相关w(k-1), 和y (k)与测量噪声是否线性相关v(k)

  • 非相加噪音方面-该软件还支持更复杂的状态转换和测量功能金宝app的状态xk]和测量yk]分别是过程噪声和测量噪声的非线性函数。当噪声项非相加时,状态转移和测量方程有如下形式:

    x k f x k 1 w k 1 u 年代 k 1 y k h x k v k u k

在进行在线状态估计时,首先要创建非线性状态转移函数f和测量功能h.然后构造unscentedKalmanFilter对象,并指定噪声项是加性的还是非加性的。创建对象后,使用预测命令来预测下一个时间步的状态估计,并且正确的使用无迹卡尔曼滤波算法和实时数据校正状态估计。有关算法的信息,请参见扩展和Unstented Kalman滤波器算法用于在线状态估计

您可以使用以下命令unscentedKalmanFilter对象:

命令 描述
正确的

在时间步骤纠正状态和状态估计错误协方差k使用测量数据在时间步长k

预测

下次步骤预测状态和状态估计错误协方差。

剩余 返回实际和预测测量之间的差异。
克隆

使用相同的对象属性值创建另一个对象。

不使用语法创建其他对象methoda = obj.对以这种方式创建的新对象的属性所做的任何更改(methoda)也改变原始对象的属性(obj).

unscentedKalmanFilter对象属性,见属性

例子

全部折叠

要定义一个Unspented Kalman筛选对象,用于估计系统状态,可以为系统编写和保存状态转换功能和测量功能。

在此示例中,使用先前写入和保存的状态转换和测量功能,vdpstatefcn.m.vdpMeasurementFcn.m.这些函数描述了与Van der Pol振荡器的离散近似,具有非线性参数MU,等于1.振荡器具有两个状态。

指定这两种状态的初始猜测。你指定初始态的猜想为-element行或列矢量,在哪里是州的数量。

initialsteguesuess = [1; 0];

创建Uncented Kalman Filter对象。使用功能处理将状态转换和测量函数提供给对象。

obj = unscentedKalmanFilter (@vdpStateFcn @vdpMeasurementFcn initialStateGuess);

该对象有一个默认结构,其中过程和测量噪声是相加的。

要估计来自构造对象的状态和状态估计误差协方差,请使用正确的预测命令和实时数据。

为具有两个状态和一个输出的范德堡尔振荡器创建一个无气味卡尔曼滤波器对象。使用之前编写和保存的状态转换和度量函数,vdpstatefcn.m.vdpMeasurementFcn.m.这些功能是为添加过程和测量噪声术语编写的。指定两个状态的初始状态值为[2;0]。

由于系统具有两个状态并且过程噪声是附加的,因此过程噪声是2元件向量,并且过程噪声协方差是2×2矩阵。假设过程噪声术语之间没有互相关,并且两个术语都具有相同的方差0.01。您可以将过程噪声协方差指定为标量。该软件使用标量值以在对角线上创建一个2×2对角线矩阵。

在对象构造过程中指定过程噪声协方差。

obj = UnscentedkalmanFilter(@ vdpstatefcn,@ vdpmeasurementfcn,​​[2; 0],<年代pan style="color:#0000FF">...“ProcessNoise”, 0.01);

或者,您可以在对象构造后使用点表示法指定噪声协方差。例如,指定测量噪声协方差为0.2。

obj.measurementnoise = 0.2;

由于系统只有一个输出,测量噪声是一个一元向量和测量管理性质表示测量噪声的方差。

为具有两个状态和一个输出的范德堡尔振荡器创建一个无气味卡尔曼滤波器对象。假设状态转换功能中的过程噪声术语是添加剂。也就是说,状态和过程噪声之间存在线性关系。还假设测量噪声术语是非一个。也就是说,测量和测量噪声之间存在非线性关系。

obj = unscentedKalmanFilter (<年代pan style="color:#A020F0">'hasadditivemeasurementnoise',错误的);

指定状态转换函数和测量函数。使用之前编写和保存的函数,vdpstatefcn.m.VDPMEASURENTENONADDTIVENOISEFCN.M.M.

假设过程噪声是附加的,写入状态转换功能。假设测量噪声是非吸收的,写入测量功能。

obj。StateTransitionFcn = @vdpStateFcn;obj。米easurementFcn = @vdpMeasurementNonAdditiveNoiseFcn;

指定两个状态的初始状态值为[2;0]。

obj。状态= (2;0);

你现在可以使用正确的预测命令估算构造对象的状态和状态估计错误协方差值。

考虑一个有输入的非线性系统u的状态x和测量y根据以下状态转换和测量方程演化:

x k x k - 1 + u k - 1 + w k - 1

y k x k + 2 u k + v k 2

过程噪声w在测量噪声时,系统是附加的v非相加。

为系统创建状态转换功能和测量功能。使用额外输入指定函数u

f = @ (x, u) (sqrt (x + u));h = @ (x, v, u) (x + 2 * u + v ^ 2);

fh是否分别为存储状态转换和测量功能的匿名函数的功能处理。在测量函数中,因为测量噪声是非一个,v也被指定为输入。注意v被指定为附加输入之前的输入u

创建一个unscented卡尔曼滤波器对象,用于使用指定的函数估计非线性系统的状态。指定状态的初始值为1,测量噪声为非相加。

obj = unscentedKalmanFilter (f、h 1<年代pan style="color:#A020F0">'hasadditivemeasurementnoise',错误的);

指定测量噪声协方差。

obj。米easurementNoise = 0.01;

您现在可以使用该系统估算系统的状态预测正确的命令。你通过了价值u预测正确的,其分别将它们传递给状态转换和测量功能。

用测量y [k]校正状态估计= 0.8并在时间步骤k输入u [k] = 0.2。

正确(OBJ,0.8,0.2)

预测下一个时间步的状态,给定u[k]=0.2。

预测(obj, 0.2)

输入参数

全部折叠

状态转换功能f,指定为函数句柄。函数计算ns.- 时间步骤中系统的状态向量k,给出时间步长的状态向量k-1。ns.是非线性系统的状态。

您为非线性系统编写并保存状态转移函数,并使用它来构造对象。例如,如果vdpstatefcn.m.是否指定状态转换函数StateTransitionFcn作为@vdpStateFcn.你也可以指定StateTransitionFcn作为匿名函数的函数句柄。

所编写的函数的输入取决于将过程噪声指定为附加的还是非附加的HasAdditiveProcessNoise对象属性:

  • HasAdditiveProcessNoise是真的-过程噪音w是附加的,状态转移函数指定状态如何演变为前一个时间步的状态值的函数:

    x (k) = f (x (k - 1), Us1,…,Usn)

    在哪里x(k)是时间的估计状态k, 和Us1,…,Usn状态转换函数所需的任何其他输入参数,例如系统输入或样本时间。在评估期间,将这些附加参数传递给预测命令,然后将它们传递给状态转换函数。

  • HasAdditiveProcessNoise是false -过程噪声是非加性的,状态转移函数也指定了状态如何作为过程噪声的函数演化:

    x(k)= f(x(k-1),w(k-1),US1,...,USN)

要查看带有附加过程噪声的状态转移函数的示例,请键入编辑vdpstatefcn.在命令行。

测量功能h,指定为函数句柄。函数计算N-非线性系统在时间步长时的元件输出测量矢量k,给出时间步长的状态向量kN是系统的测量数。您编写并保存测量功能,并使用它来构造对象。例如,如果vdpMeasurementFcn.m是测量功能,指定MeasurementFcn作为@vdpmeasurementfcn..你也可以指定MeasurementFcn作为匿名函数的函数句柄。

函数的输入取决于您是否将测量噪声指定为附加或非资金hasadditivemeasurementnoise.对象属性:

  • hasadditivemeasurementnoise.是真的 - 测量噪声v是添加剂,测量函数指定测量如何随着状态值的函数而发展:

    Y(k)= h(x(k),um1,...,umn)

    在哪里y (k)x(k)是估计的产出和估计状态k, 和UM1,......,Umn是度量函数所需的任何可选输入参数。例如,如果您使用多个传感器来跟踪一个对象,那么额外的输入可能是传感器位置。在评估期间,将这些附加参数传递给正确的命令又将它们传递给测量功能。

  • hasadditivemeasurementnoise.-测量噪声是非相加的,测量函数还规定了输出测量如何演变为测量噪声的函数:

    Y(k)= h(x(k),v(k),um1,...,umn)

要查看带有附加过程噪声的测量函数的示例,请键入编辑vdpMeasurementFcn在命令行。要查看具有非增多过程噪声的测量功能的示例,请键入编辑vdpmeasurementnonadditivenoisefcn.

初始状态估计,指定为一个ns.元向量,ns.是系统中的状态数量。根据您对系统的知识指定初始状态值。

指定的值存储在状态物品的财产。如果您指定Initimstate.作为列向量状态也是一个列向量预测正确的命令以列向量的形式返回状态估计数。否则,返回行向量。

如果您想要一个具有单精度浮点变量的过滤器,请指定Initimstate.作为一个单精度矢量变量。例如,对于具有状态转换和测量函数的两态系统vdpstatefcn.m.vdpMeasurementFcn.m,使用初始状态创建Uncented Kalman筛选对象[1; 2]如下:

obj = UnscentedkalmanFilter(@ vdpstatefcn,@ vdpmeasurementfcn,​​单个([1; 2]))

数据类型:双倍的|

名称-值对的观点

指定可选的逗号分隔对名称,值论点。的名字参数名和价值是相应的价值。的名字必须出现在引号内。您可以按如下顺序指定几个名称和值对参数name1,value1,...,namen,valuen

名称,值指定的参数特性unscentedKalmanFilter对象创建期间的对象。例如,要创建Unspented Kalman筛选对象,并将过程噪声协方差指定为0.01:

obj = UnscentedkalmanFilter(StateTransitionFCN,MeasurementFCN,InitialState,<年代pan style="color:#A020F0">“ProcessNoise”, 0.01);

属性

全部折叠

unscentedKalmanFilter对象属性有三种类型:

  • 可调谐属性,您可以多次指定,无论是在对象构造期间名称,值参数,或在状态估计期间的任何时间。创建对象之后,使用点符号来修改可调属性。

    obj = UnscentedkalmanFilter(StateTransitionFCN,MeasurementFCN,InitialState);obj.processnoise = 0.01;

    可调属性是状态StateCovarianceprocessnoise.测量管理Αβ, 和kappa.

  • 您可以在对象构造期间或使用DOT概念后向后指定一次的难度属性。在使用状态估计之前指定这些属性正确的预测.的StateTransitionFcnMeasurementFcn属性属于此类别。

  • 必须在对象构造期间指定的不可调优属性。的HasAdditiveProcessNoisehasadditivemeasurementnoise.属性属于此类别。

Sigma点围绕平均状态值传播,指定为0到1之间的标量值(0<Α<=1).

无迹卡尔曼滤波算法将系统状态视为一个具有均值的随机变量状态和方差StateCovariance.为了在下一个时间步计算状态及其统计属性,算法首先生成一组分布在平均值附近的状态值状态值。这些生成的状态值称为sigma点。该算法使用每个σ点作为状态转换和测量函数的输入,以获得一组新的转换状态点和测量值。利用变换后的点计算下一时间步的状态和状态估计误差协方差。

σ点在平均状态值附近的分布由两个参数控制Αkappa..第三个参数,β,影响状态和测量协方差计算时变换点的权值:

  • Α-确定平均状态值周围的西格玛点的分布。它通常是一个小的正值。σ点的分布正比于Α.较小的值对应于更接近平均状态的sigma点。

  • kappa.- 通常设置为0的第二缩放参数。较小的值对应于靠近平均状态的Sigma点。的平方根kappa.

  • β-结合国家分布的先验知识。为高斯分布,β= 2是最佳的。

如果您知道状态和州协方差的分发,您可以调整这些参数以捕获分布的高阶矩的转换。该算法只能在状态的概率分布中跟踪单个峰值。如果系统的状态分布中有多个峰值,则可以调整这些参数,以便Sigma点保持在单个峰值周围。例如,选择一个小Α生成接近平均状态值的sigma点。

有关更多信息,请参阅无迹卡尔曼滤波算法

Α是可调属性。你可以用点符号来改变它。

用于调节变换的Sigma点重量的状态分布的表征,指定为大于或等于0的标量值。对于高斯分布,β= 2是最佳选择。

有关更多信息,请参见Α属性描述。

β是可调属性。你可以用点符号来改变它。

测量噪声特性,指定为以下值之一:

  • 真的- 测量噪声v是添加剂。测量功能h那是指定的MeasurementFcn有以下形式:

    Y(k)= h(x(k),um1,...,umn)

    在哪里y (k)x(k)是估计的产出和估计状态k, 和UM1,......,Umn是度量函数所需的任何可选输入参数。

  • - 测量噪声是非吸收的。测量函数指定输出测量如何随着状态的函数而发展<年代pan class="emphasis">测量噪声:

    Y(k)= h(x(k),v(k),um1,...,umn)

hasadditivemeasurementnoise.是一个不可调优的属性,您只能在对象构造期间指定它。不能使用点表示法更改它。

过程噪声特性,指定为以下值之一:

  • 真的- 过程噪声w是添加剂。状态转移函数f指定StateTransitionFcn有以下形式:

    x (k) = f (x (k - 1), Us1,…,Usn)

    在哪里x(k)是时间的估计状态k, 和Us1,…,Usn是状态转换函数所需的任何其他输入参数。

  • -过程噪音是非添加性的。状态转换函数指定状态如何作为状态函数演化<年代pan class="emphasis">前一个时间步长的过程噪声:

    x(k)= f(x(k-1),w(k-1),US1,...,USN)

HasAdditiveProcessNoise是一个不可调优的属性,您只能在对象构造期间指定它。不能使用点表示法更改它。

均值状态值附近sigma点的散布,指定为0到3之间的标量值(0<=kappa.<=3.).kappa.通常指定为0.较小的值对应于更接近平均状态的sigma点。的平方根kappa..有关更多信息,请参见Α属性描述。

kappa.是可调属性。你可以用点符号来改变它。

测量功能h,指定为函数句柄。函数计算N-非线性系统在时间步长时的元件输出测量矢量k,给出时间步长的状态向量kN是系统的测量数。您编写并保存测量函数,并使用它来构造对象。例如,如果vdpMeasurementFcn.m是测量功能,指定MeasurementFcn作为@vdpmeasurementfcn..你也可以指定MeasurementFcn作为匿名函数的函数句柄。

函数的输入取决于您是否将测量噪声指定为附加或非资金hasadditivemeasurementnoise.对象属性:

  • hasadditivemeasurementnoise.是真的 - 测量噪声v是添加剂,测量函数指定测量如何随着状态值的函数而发展:

    Y(k)= h(x(k),um1,...,umn)

    在哪里y (k)x(k)是估计的产出和估计状态k, 和UM1,......,Umn是度量函数所需的任何可选输入参数。例如,如果您使用多个传感器来跟踪一个对象,那么额外的输入可能是传感器位置。在评估期间,将这些附加参数传递给正确的又将它们传递给测量功能。

  • hasadditivemeasurementnoise.-测量噪声是非相加的,测量函数还规定了输出测量如何演变为测量噪声的函数:

    Y(k)= h(x(k),v(k),um1,...,umn)

要查看带有附加过程噪声的测量函数的示例,请键入编辑vdpMeasurementFcn在命令行。要查看具有非增多过程噪声的测量功能的示例,请键入编辑vdpmeasurementnonadditivenoisefcn.

MeasurementFcn是一个不可努力的财产。您可以在使用之前指定一次正确的在对象构造期间或在对象构造之后使用点符号命令。属性后不能更改它正确的命令。

测量噪声协方差,用标量或矩阵表示,取决于hasadditivemeasurementnoise.财产:

  • hasadditivemeasurementnoise.是真的-指定协方差为标量或N-经过-N矩阵,其中N是系统的测量数。如果测量噪声项之间没有互相关,且所有项具有相同的方差,则指定一个标量。该软件使用标量值来创建N-经过-N对角矩阵。

  • hasadditivemeasurementnoise.是false -指定协方差为aV-经过-V矩阵,其中V是测量噪声术语的数量。测量管理必须在使用前指定正确的.当你指定测量管理第一次作为矩阵,再来改变测量管理你也可以把它指定为一个标量。如果测量噪声项之间没有互相关,且所有项具有相同的方差,则指定为标量。该软件将标量扩展为V-经过-V对角线上的标量角矩阵。

测量管理是可调属性。你可以用点符号来改变它。

过程噪声协方差,指定为标量或矩阵,取决于的值HasAdditiveProcessNoise财产:

  • HasAdditiveProcessNoise是真的-指定协方差为标量或ns.-经过-ns.矩阵,其中ns.是系统的状态数量。如果过程噪声术语之间没有互相关,则指定标量,并且所有术语都具有相同的方差。该软件使用标量值来创建ns.-经过-ns.对角矩阵。

  • HasAdditiveProcessNoise是false -指定协方差为aW-经过-W矩阵,其中W是过程噪声术语的数量。processnoise.必须在使用前指定预测.当你指定processnoise.第一次作为矩阵,再来改变processnoise.你也可以把它指定为一个标量。如果过程噪声项之间没有互相关,并且所有项具有相同的方差,则指定为标量。该软件将标量扩展为W-经过-W对角矩阵。

processnoise.是可调属性。你可以用点符号来改变它。

非线性系统的状态,指定为大小的矢量ns., 在哪里ns.是系统的状态数量。

当你使用预测命令,状态在时间步骤更新预测值k使用时间步长的状态值k1。当你使用正确的命令,状态是否在时间步长更新了估计值k使用测量数据在时间步长k

初始价值状态属性中指定的值是Initimstate.对象创建期间的输入参数。如果您指定Initimstate.作为一个列向量状态也是一个列向量,那么预测正确的命令以列向量的形式返回状态估计数。否则,返回行向量。如果您想要一个具有单精度浮点变量的过滤器,您必须指定状态在使用该物体结构期间的单精度变量Initimstate.输入参数。

状态是可调属性。你可以用点符号来改变它。

状态估计误差协方差,指定为标量或ns.-经过-ns.矩阵,其中ns.是系统的状态数量。如果指定标量,则软件使用标量值来创建一个ns.-经过-ns.对角矩阵。

当您对初始状态值没有信心时,请为协方差指定一个高值Initimstate.输入参数。

当你使用预测命令,StateCovariance在时间步骤更新预测值k使用时间步长的状态值k1。当你使用正确的命令,StateCovariance是否在时间步长更新了估计值k使用测量数据在时间步长k

StateCovariance是可调属性。使用后,您可以使用点表示法更改它正确的或者预测命令。

状态转换功能f,指定为函数句柄。函数计算ns.- 时间步骤中系统的状态向量k,给出时间步长的状态向量k-1。ns.是非线性系统的状态。

您为非线性系统编写并保存状态转换函数,并使用它来构造对象。例如,如果vdpstatefcn.m.是否指定状态转换函数StateTransitionFcn作为@vdpStateFcn.你也可以指定StateTransitionFcn作为匿名函数的函数句柄。

所编写的函数的输入取决于将过程噪声指定为附加的还是非附加的HasAdditiveProcessNoise对象属性:

  • HasAdditiveProcessNoise是真的-过程噪音w是添加剂,状态转换函数指定状态如何在前一时间步骤中作为状态值的函数演变:

    x (k) = f (x (k - 1), Us1,…,Usn)

    在哪里x(k)是时间的估计状态k, 和Us1,…,Usn状态转换函数所需的任何其他输入参数,例如系统输入或样本时间。在评估期间,将这些附加参数传递给预测命令,然后将它们传递给状态转换函数。

  • HasAdditiveProcessNoise是false -过程噪声是非加性的,状态转移函数也指定了状态如何作为过程噪声的函数演化:

    x(k)= f(x(k-1),w(k-1),US1,...,USN)

要查看带有附加过程噪声的状态转移函数的示例,请键入编辑vdpstatefcn.在命令行。

StateTransitionFcn是一个不可努力的财产。您可以在使用之前指定一次预测在对象构造期间或在对象构造之后使用点符号命令。属性后不能更改它预测命令。

输出参数

全部折叠

用于在线状态估计的无迹卡尔曼滤波对象,返回为unscentedKalmanFilter对象。此对象使用指定的特性.使用正确的预测使用Unscented Kalman滤波器算法估算状态和状态估计错误协方差的命令。

当你使用预测obj。状态obj.statecovariance.是否在时间步长使用预测值进行更新k使用时间步长的状态值k1。当你使用正确的obj。状态obj.statecovariance.在时间步骤更新估计值k使用测量数据在时间步长k

兼容性考虑因素

展开全部

R2020B的行为更改

扩展功能

另请参阅

功能

  • |<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">

介绍了R2016b