主要内容

undentedkalmanfilter

创建用于在线状态估计的无迹卡尔曼滤波对象

描述

例子

obj= unscentedKalmanFilter (StateTransitionFcnMeasurementFcnInitimstate.建立一个无迹卡尔曼滤波对象,用于离散非线性系统的在线状态估计。StateTransitionFcn是一个计算系统的状态的函数K.,给出时刻的状态向量K.-1。MeasurementFcn是一个计算系统输出测量时间的函数吗K.,考虑到当时的状态K.Initimstate.指定状态估计的初始值。

创建对象后,使用正确的预测命令用离散时间Unscented Kalman滤波器算法和实时数据来更新状态估计和状态估计误差协方差值。

例子

obj= unscentedKalmanFilter (StateTransitionFcnMeasurementFcnInitimstate.名称,值使用一个或多个指定Unscented Kalman Filter对象的其他属性名称,值对论点。

obj= unscentedKalmanFilter (StateTransitionFcnMeasurementFcn使用指定的状态转换和测量功能创建Uncented Kalman筛选对象。在使用之前预测正确的命令,使用点符号指定初始状态值。例如,对于具有初始状态值的双态系统(1, 0),指定obj。状态= (1,0)

obj= unscentedKalmanFilter (StateTransitionFcnMeasurementFcn名称,值使用一个或多个指定Unscented Kalman Filter对象的其他属性名称,值对论点。在使用之前预测正确的命令,使用初始状态值使用名称,值对参数或点表示法。

例子

obj= unscentedKalmanFilter (名称,值使用一个或多个属性创建一个无迹卡尔曼过滤器对象名称,值对论点。在使用之前预测正确的使用命令,指定状态转换函数、度量函数和初始状态值名称,值对参数或点表示法。

对象描述

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

考虑一个州的植物X, 输入、输出y、过程噪声W.,测量噪声V..假设你可以将植物表示为一个非线性系统。

算法计算状态估计 X ^ 用你指定的状态转移和测量函数的非线性系统。该软件允许您指定噪声在这些功能作为加性或非加性:

  • 加性噪声条件-状态转移和测量方程的形式如下:

    X [ K. ] = F X [ K. 1 ] S. [ K. 1 ] + W. [ K. 1 ] y [ K. ] = H X [ K. ] m [ K. ] + V. [ K. ]

    这里F是一个非线性状态转换功能,描述了各国的演变X从一个时间步骤到下一个时间步骤。非线性测量函数H有关X的测量y在时间步K.W.V.是零平均,不相关的过程和测量噪声。这些函数还可以具有所用的其他输入参数S.m在方程式中。例如,附加参数可能是时间步骤K.或输入到非线性系统。可以有多个这样的参数。

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

  • 非相加噪音方面- 该软件还支持状态的更复杂的状态转换和万博1manbetx测量功能X[K.]和测量y[K.]分别为过程噪声和测量噪声的非线性函数。当噪声项为非加性时,状态跃迁和测量方程为:

    X [ K. ] = F X [ K. 1 ] W. [ K. 1 ] S. [ K. 1 ] y [ K. ] = H X [ K. ] V. [ K. ] m [ K. ]

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

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

命令 描述
正确的

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

预测

预测下一时刻的状态和状态估计误差协方差。

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

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

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

undentedkalmanfilter对象属性,看属性

例子

全部折叠

要定义一个用于估计系统状态的无迹卡尔曼滤波对象,需要编写并保存系统的状态转移函数和测量函数。

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

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

initialsteguesuess = [1; 0];

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

obj = Unscentedkalmanfilter(@ vdpstatefcn,@ vdpmeasurementfcn,​​initnstateguess);

该对象具有默认结构,其中进程和测量噪声是附加的。

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

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

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

指定对象构建过程中的噪声协方差。

obj = unscentedKalmanFilter (@vdpStateFcn @vdpMeasurementFcn, (2, 0),...“ProcessNoise”, 0.01);

或者,您可以使用点符号在对象构造后指定噪声covari arce。例如,将测量噪声协方差指定为0.2。

obj.measurementnoise = 0.2;

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

为具有两个状态和一个输出的范德堡尔振荡器创建一个无迹卡尔曼滤波器对象。假设状态转移函数中的过程噪声项是可加的。即状态噪声与过程噪声之间存在线性关系。还假设测量噪声项是非可加性的。即测量与测量噪声之间存在非线性关系。

obj = unscentedKalmanFilter (“HasAdditiveMeasurementNoise”、假);

指定状态转移函数和测量函数。使用先前编写和保存的函数,vdpStateFcn.mVDPMEASURENTENONADDTIVENOISEFCN.M.M.

假设过程噪声是可加的状态转移函数。测量函数是假定测量噪声是非可加性的。

obj。StateTransitionFcn = @vdpStateFcn;obj。measurementFcn = @vdpMeasurementNonAdditiveNoiseFcn;

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

obj。状态= (2;0);

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

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

X [ K. ] = X [ K. - 1 ] + [ K. - 1 ] + W. [ K. - 1 ]

y [ K. ] = X [ K. ] + 2 * [ K. ] + V. [ K. ] 2

过程噪声W.系统的测量噪声是可加性的V.是非过度的。

为系统创建状态转移函数和测量函数。指定带有附加输入的函数

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

FH是分别存储状态转换和度量函数的匿名函数的函数句柄。在测量函数中,由于测量噪声是非可加性的,V.也指定为输入。请注意,V.在附加输入之前指定为输入

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

obj = UnscentedkalmanFilter(F,H,1,“HasAdditiveMeasurementNoise”、假);

指定测量噪声协方差。

obj。measurementNoise = 0.01;

您现在可以使用预测正确的命令。你通过了价值预测正确的,然后分别将它们传递给状态转换函数和测量函数。

测量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状态转换函数是否需要其他输入参数,如系统输入或样本时间。在估计期间,您将这些额外的参数传递给预测命令,然后将它们传递给状态转换函数。

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

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

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

测量功能H,指定为函数句柄。函数计算N-非线性系统在时间步长的单元输出测量向量K.,给出时间步长的状态向量K.N是系统的测量次数。您可以编写并保存测量函数,并使用它来构造对象。例如,如果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,…,学院)

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

初始状态估计,指定为一个Ns元向量,Ns是系统的状态数。根据您对系统的了解,指定初始状态值。

指定的值存储在状态对象的属性。如果您指定Initimstate.作为列向量状态也是列向量吗预测正确的命令将状态估计作为列向量。否则,返回行向量。

如果您希望使用单精度浮点变量的筛选器,请指定Initimstate.作为一个单精度向量变量。例如,对于具有状态转移和测量功能的双态系统vdpStateFcn.mvdpMeasurementFcn.m,创建具有初始状态的无迹卡尔曼滤波对象[1, 2]如下:

obj = unscentedKalmanFilter (@vdpStateFcn @vdpMeasurementFcn、单([1,2]))

数据类型:双倍的|

名称-值对的观点

指定可选的逗号分隔的对名称,值论点。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

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

obj = unscentedKalmanFilter (StateTransitionFcn MeasurementFcn InitialState,“ProcessNoise”, 0.01);

属性

全部折叠

undentedkalmanfilter对象属性具有三种类型:

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

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

    可调性属性是状态StateCovarianceProcessNoise测量管理Αβ,卡巴

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

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

围绕状态均值的σ点分布,指定为0到1之间的标量值(0.<Α<=1).

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

σ点在状态均值周围的分布由两个参数控制Α卡巴.第三个参数,β,影响状态和测量协方差计算期间转换点的权重:

  • Α- 确定围绕平均状态值周围的Sigma点的扩展。它通常是一个小的正价值。Sigma点的蔓延成比例Α.较小的值对应于更接近均值状态的点。

  • 卡巴-第二个缩放参数,通常设置为0。较小的值对应于更接近均值状态的点。扩散与的平方根成正比卡巴

  • β-整合了州分布的先验知识。为高斯分布,β= 2是最优的。

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

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

Α是一个可调性的财产。您可以使用点表示法更改它。

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

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

β是一个可调性的财产。您可以使用点表示法更改它。

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

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

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

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

  • -测量噪声是非附加的。度量函数指定输出度量如何演化为状态函数测量噪声:

    y (k) = h (x (k), v (k),听Um1,…,学院)

HasAdditiveMeasurementNoise是一个不可调优属性,只能在对象构造期间指定它。你不能用点符号来改变它。

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

  • 真正的——过程噪声W.是添加剂。状态转移函数F中指定的StateTransitionFcn有以下形式:

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

    在哪里x (k)是时间的估计状态K.,Us1,…,Usn状态转换函数是否需要任何额外的输入参数。

  • -过程噪声是非附加的。状态转移函数指定状态如何作为状态的函数演化处理前一时间步噪声:

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

HasAdditiveProcessNoise是一个不可调优属性,只能在对象构造期间指定它。你不能用点符号来改变它。

Sigma点围绕平均状态值传播,指定为0到3之间的标量值(0.<=卡巴<=3.).卡巴通常被指定为0..较小的值对应于更接近均值状态的点。扩散与的平方根成正比卡巴.有关更多信息,请参阅Α属性描述。

卡巴是一个可调性的财产。您可以使用点表示法更改它。

测量功能H,指定为函数句柄。函数计算N-非线性系统在时间步长的单元输出测量向量K.,给出时间步长的状态向量K.N是系统的测量次数。您编写并保存测量功能并使用它来构造对象。例如,如果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,…,学院)

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

MeasurementFcn是一个不可调优的属性。可以在使用之前指定一次正确的命令可以在对象构造期间执行,也可以在对象构造之后使用点表示法。属性后不能更改正确的命令。

测量噪声协方差,指定为标量或矩阵,取决于的值HasAdditiveMeasurementNoise属性:

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

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

测量管理是一个可调性的财产。您可以使用点表示法更改它。

处理噪声协方差,指定为标量或矩阵,取决于的值HasAdditiveProcessNoise属性:

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

  • HasAdditiveProcessNoise是假的-指定协方差为W.-经过-W.矩阵,W.是过程噪声术语的数量。ProcessNoise必须在使用前指定预测.当你指定ProcessNoise作为第一次矩阵,然后改变ProcessNoise还可以将其指定为标量。如果过程噪声术语与所有术语之间没有互相关,则指定标量则具有相同的方差。该软件将标量扩展到aW.-经过-W.对角矩阵。

ProcessNoise是一个可调性的财产。您可以使用点表示法更改它。

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

当你使用的时候预测命令,状态在时间步用预测值更新K.在时间步骤中使用状态值K.-1。当你使用的时候正确的命令,状态以时间步骤更新估计值K.采用时间步长测量数据K.

的初始值状态您指定的价值是您所在的价值Initimstate.对象创建期间的输入参数。如果您指定Initimstate.作为列向量状态也是一列栏矢量,还有预测正确的命令将状态估计作为列向量。否则,返回行向量。如果您想要一个单精度浮点变量的过滤器,则必须指定状态作为一个单精度变量在使用Initimstate.输入参数。

状态是一个可调性的财产。您可以使用点表示法更改它。

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

属性中指定的初始状态值不可信时,请为协方差指定一个高值Initimstate.输入参数。

当你使用的时候预测命令,StateCovariance在时间步用预测值更新K.在时间步骤中使用状态值K.-1。当你使用的时候正确的命令,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状态转换函数是否需要其他输入参数,如系统输入或样本时间。在估计期间,您将这些额外的参数传递给预测命令,然后将它们传递给状态转换函数。

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

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

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

StateTransitionFcn是一个不可调优的属性。可以在使用之前指定一次预测命令可以在对象构造期间执行,也可以在对象构造之后使用点表示法。属性后不能更改预测命令。

输出参数

全部折叠

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

当你使用预测obj。状态obj。StateCovariance在时间步用预测值更新K.在时间步骤中使用状态值K.-1。当你使用正确的obj。状态obj。StateCovariance在时间步骤更新估计值K.采用时间步长测量数据K.

兼容性的考虑

展开全部

行为在R2020b中改变

扩展功能

介绍在R2016B.