主要内容

无味卡尔曼滤波

基于unscented卡尔曼滤波的离散非线性系统状态估计

  • 库:
  • 控制系统工具箱/状态估计

    系统识别工具箱/估计器

  • ukf_区块

描述

的<年代pan class="block">无味卡尔曼滤波块使用离散时间无迹卡尔曼滤波算法估计离散时间非线性系统的状态。

考虑有状态的植物x,输入u、输出y,过程噪音w,以及测量噪音v.假设你可以将植物表示为一个非线性系统。

利用系统的状态转移和测量功能以及无迹卡尔曼滤波算法,该块产生状态估计<年代pan class="inlineequation"> x 当前时间步长。有关算法的信息,请参见在线状态估计的扩展和无迹卡尔曼滤波算法

你为系统创建非线性状态转移函数和测量函数,并在块中指定这些函数。该块支持以不同采样率万博1manbetx操作的多个传感器的系统状态估计。您可以指定多达五种测量功能,每一种对应于系统中的一个传感器。有关更多信息,请参见状态转换和测量功能

港口

输入

全部展开

与块中指定的每个测量功能相对应的测量系统输出。端口数等于系统中测量功能的数量。最多可以指定五个测量功能。例如,如果系统有两个传感器,则在块中指定两个测量功能。第一个港口<年代trong class="guilabel">日元默认为可用。当你点击<年代trong class="guibutton">应用时,软件生成端口<年代trong class="guilabel">y2对应于第二个测量功能。

指定端口为N-维向量,其中N为相应传感器测量的数量。例如,如果你的系统有一个传感器来测量物体的位置和速度,那么就只有一个端口<年代trong class="guilabel">日元. 端口被指定为二维向量,其值对应于位置和速度。

依赖关系

第一个港口<年代trong class="guilabel">日元默认情况下可用。端口<年代trong class="guilabel">y2来<年代trong class="guilabel">日元是当你点击<年代trong class="guilabel">添加测量,然后单击<年代trong class="guibutton">应用.

数据类型:|双重的

状态转换函数的附加可选输入参数f国家以外x和过程噪声w.有关状态转换函数的信息,请参阅,状态转换和测量功能

假设你的系统有非加性过程噪声和状态转移函数f表格如下:

x(k+1)=f(x(k),w(k),状态转换输入)

在这里k是时间步长,并且StateTransitionFcnInputs是除xw

如果你创造f使用MATLAB<年代up>®作用(.米文件),软件生成端口<年代trong class="guilabel">StateTransitionFcnInputs当你点击<年代trong class="guibutton">应用.您可以将此端口的输入指定为标量、向量或矩阵。

如果状态转移函数有多个额外的输入,请使用万博1manbetx仿真软件的功能(万博1manbetx模型)块来指定函数。当使用<年代pan class="block">万博1manbetx仿真软件的功能块,则直接向<年代pan class="block">万博1manbetx仿真软件的功能块使用输入(万博1manbetx模型)块。的附加输入不生成输入端口<年代pan class="block">无味卡尔曼滤波块。

依赖关系

仅当满足以下两个条件时,才会生成此端口:

  • 你指定f在<年代trong class="guilabel">作用使用MATLAB函数,并f是在MATLAB路径上。

  • f只需要一个额外的输入参数,除了xw

数据类型:|双重的

除了状态外,测量功能的其他可选输入x和测量噪声v. 有关测量功能的信息,请参阅,状态转换和测量功能

MeasurementFcn1Inputs对应于您指定的第一个测量功能,依此类推。例如,假设您的系统有三个传感器和非累加性测量噪声,以及三个测量功能h1h2,及h3有以下形式:

y1 [k] = h1 (x [k], [k], MeasurementFcn1Inputs)

y2[k]=h2(x[k],v[k],测量输入)

y3[k]=h3(x[k],v[k])

在这里k是时间步长,并且MeasurementFcn1InputsMeasurementFcn2Inputs附加的输入参数是h1h2

如果您指定h1h2,及h3使用MATLAB函数(.米文件)在<年代trong class="guilabel">作用,软件生成端口<年代trong class="guilabel">MeasurementFcn1Inputs和<年代trong class="guilabel">MeasurementFcn2Inputs当你点击<年代trong class="guibutton">应用。您可以将这些端口的输入指定为标量、向量或矩阵。

如果测量函数有不止一个额外的输入,请使用万博1manbetx仿真软件的功能(万博1manbetx模型)块来指定函数。当你使用<年代pan class="block">万博1manbetx仿真软件的功能块,则直接向<年代pan class="block">万博1manbetx仿真软件的功能块使用输入(万博1manbetx模型)块。的附加输入不生成输入端口<年代pan class="block">无味卡尔曼滤波块。

依赖关系

与测量功能相对应的端口h仅当满足以下两个条件时生成:

  • 你指定h在<年代trong class="guilabel">作用使用MATLAB函数,并h是在MATLAB路径上。

  • h只需要一个额外的输入参数,除了xv

数据类型:|双重的

时变过程噪声协方差,指定为标量、矢量或矩阵,取决于的值<年代trong class="guilabel">过程噪声参数:

  • 过程噪声添加剂—指定协方差为标量,anNs元素向量,或Ns-借-Ns矩阵,在哪里Ns是系统的状态数。如果过程噪声项之间没有相互关联,并且所有的项具有相同的方差,则指定一个标量。指定一个长度的向量Ns,如果过程噪声项之间没有互相关,但所有项都有不同的方差。

  • 过程噪声非相加—指定协方差为aW-借-W矩阵,在哪里W是状态转移函数中过程噪声项的数量。

依赖关系

如果将过程噪声协方差指定为<年代trong class="guilabel">时变。单击时将显示该端口<年代trong class="guibutton">应用.

数据类型:|双重的

系统多达五个测量函数的时变测量噪声协方差,指定为矩阵。矩阵的大小取决于矩阵的值<年代trong class="guilabel">测量噪声相应测量功能的参数:

  • 测量噪声添加剂-将协方差指定为N-借-N矩阵,在哪里N是系统的测量次数。

  • 测量噪声非相加—指定协方差为aV-借-V矩阵,在哪里V是相应测量函数中测量噪声项的数量。

依赖关系

如果将测量噪声协方差指定为<年代trong class="guilabel">时变用于相应的测量功能。单击时将显示该端口<年代trong class="guibutton">应用.

数据类型:|双重的

假设测量的输出数据在港口的所有时间点都不可用<年代trong class="guilabel">日元对应于第一个测量功能的。使用信号值,而不是0在<年代trong class="guilabel">使能1当测量数据可用时,允许修正估计状态的端口。指定端口值为0当测量数据不可用时。类似地,如果在端口的所有时间点上测量的输出数据都不可用<年代trong class="guilabel">y对于我<年代up>th测量功能,指定相应的端口<年代trong class="guilabel">启用作为一种价值0

依赖关系

如果选择,将生成与测量功能相对应的端口<年代trong class="guilabel">添加启用端口用于该测量功能。单击时将显示该端口<年代trong class="guibutton">应用.

数据类型:|双重的|布尔值

输出

全部展开

估计状态,返回为大小向量Ns哪里Ns是系统的状态数。要访问各个状态,请使用选择器(万博1manbetx模型)块。

当<年代trong class="guilabel">使用当前度量来改进状态估计参数,则块输出校正的状态估计<年代pan class="inlineequation"> x k | k 在时间步k,使用测量输出直到时间k.如果清除此参数,该块将返回预测的状态估计<年代pan class="inlineequation"> x k | k 1 暂时k,使用前一时间的测量输出进行估计k-1. 如果过滤器处于反馈循环中,并且Simulink中存在代数循环,请清除此参数万博1manbetx<年代up>®模型。

数据类型:|双重的

状态估计误差协方差,作为Ns-借-Ns矩阵,在哪里Ns是系统的状态数。要访问各个协方差,请使用选择器(万博1manbetx模型)块。

依赖关系

如果选择此选项,将生成此端口<年代trong class="guilabel">输出状态估计误差协方差在<年代trong class="guilabel">系统模型选项卡,然后单击<年代trong class="guibutton">应用.

数据类型:|双重的

参数

全部展开

系统模型选项卡

状态转换

状态转换函数计算Ns-系统在时间步的元件状态向量k+1,给定时间步长的状态向量kNs为非线性系统的状态数。中创建状态转换函数并指定函数名<年代trong class="guilabel">作用。例如,如果vdpStateFcn.m是您创建并保存的状态转换函数,请指定<年代trong class="guilabel">作用作为vdpStateFcn

创建的函数的输入取决于在中是将过程噪波指定为加法还是非加法<年代trong class="guilabel">过程噪声.

  • 过程噪声添加剂—状态转移函数f指定状态如何演化为状态值在前一个时间步骤的函数:

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

    在哪里x(k)是当时的估计状态k,及Us1,…,Usn是状态转换函数所需的任何其他输入参数,例如系统输入或采样时间。要查看具有附加过程噪声的状态转换函数的示例,请键入编辑vdpStateFcn在命令行。

  • 过程噪声非相加-状态转移函数还指定状态如何演化为过程噪声的函数w

    x(k+1)=f(x(k),w(k),Us1(k),…,Usn(k))

有关更多信息,请参见状态转换和测量功能

您可以创建f使用一个万博1manbetx仿真软件的功能(万博1manbetx模型)块或作为MATLAB函数(.米文件)。

  • 您可以使用MATLAB函数,只有当f是否有一个额外的输入参数Us1除了xw

    x (k + 1) = f (x (k), w (k), Us1 (k))

    该软件生成一个额外的输入端口<年代trong class="guilabel">StateTransitionFcnInputs指定此参数。

  • 如果您使用的是<年代pan class="block">万博1manbetx仿真软件的功能块,指定xw使用参数尺寸。(万博1manbetx模型)块和额外的输入Us1,…,Usn使用输入(万博1manbetx模型)街区<年代pan class="block">万博1manbetx仿真软件的功能块你不提供Us1,…,Usn到<年代pan class="block">无味卡尔曼滤波块。

编程使用

块参数:StateTransitionFcn
类型:特征向量,字符串
默认值:“myStateTransitionFcn”

工艺噪声特性,指定为以下值之一:

  • 添加剂-过程噪声w是可加的,状态转移函数f你在<年代trong class="guilabel">作用表格如下:

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

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

  • 非相加—过程噪声是非可加性的,状态转移函数指定状态如何作为状态的函数演化<年代pan class="emphasis">处理前一时间步噪声:

    x(k+1)=f(x(k),w(k),Us1(k),…,Usn(k))

编程使用

块参数:HasAdditiveProcessNoise
类型:特征向量
价值观:“添加剂”“非相加”
默认值:“添加剂”

的值指定为标量、矢量或矩阵的时不变过程噪声协方差<年代trong class="guilabel">过程噪声参数:

  • 过程噪声添加剂—指定协方差为标量,anNs元素向量,或Ns-借-Ns矩阵,在哪里Ns是系统的状态数。如果过程噪声项之间没有相互关联且所有项的方差相同,则指定一个标量。指定一个长度的向量Ns,如果过程噪声项之间没有互相关,但所有项都有不同的方差。

  • 过程噪声非相加—指定协方差为aW-借-W矩阵,在哪里W是过程噪声项的数量。

如果过程噪声协方差是时变的,选择<年代trong class="guilabel">时变. 该块生成输入端口<年代trong class="guilabel">问来指定时变协方差。

依赖关系

如果不指定进程噪声为,则启用此参数<年代trong class="guilabel">时变.

编程使用

块参数:过程噪声
类型:特征向量,字符串
默认值:' 1 '

如果选择此参数,则该块包含一个附加输入端口<年代trong class="guilabel">问指定时变过程噪声协方差。

编程使用

块参数:HasTimeVaryingProcessNoise
类型:特征向量
价值观:“关”“上”
默认值:“关”
初始化

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

编程使用

块参数:初始状态
类型:特征向量,字符串
默认值:' 0 '

状态估计误差协方差,指定为标量Ns元素向量,或Ns-借-Ns矩阵,在哪里Ns是系统的状态数。如果指定标量或向量,软件将创建Ns-借-Ns在对角线上有标量或向量元素的对角矩阵。

当您对在中指定的初始状态值没有信心时,请为协方差指定一个高值<年代trong class="guilabel">初始状态.

编程使用

块参数:初始状态协方差
类型:特征向量,字符串
默认值:' 1 '
无香味的转换参数

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

σ点在状态均值周围的分布由两个参数控制<年代trong class="guilabel">阿尔法和<年代trong class="guilabel">卡巴.第三个参数,<年代trong class="guilabel">贝塔,在状态和测量协方差计算时影响变换点的权重:

  • 阿尔法-确定平均状态值周围sigma点的分布。指定为介于0和1之间的标量值(0<<年代trong class="guilabel">阿尔法<=1).它通常是一个小的正值。点的分布是成比例的<年代trong class="guilabel">阿尔法.较小的值对应于更接近均值状态的点。

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

  • 贝塔-整合了州分布的先验知识。为高斯分布,<年代trong class="guilabel">贝塔= 2是最优的。

如果你知道状态和状态协方差的分布,你可以调整这些参数来捕捉分布的高阶矩的变换。该算法只能跟踪状态概率分布中的单个峰值。如果在你的系统的状态分布中有多个峰值,你可以调整这些参数,使σ点停留在一个峰值附近。例如,选择一个小的<年代trong class="guilabel">阿尔法生成接近状态均值的点。

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

编程使用

块参数:阿尔法
类型:特征向量,字符串
默认值:“1e-3”

状态分布的特征,用于调整变换后的sigma点的权重,指定为大于或等于0的标量值。对于高斯分布,贝塔= 2是最优选择。

有关更多信息,请参阅有关的说明<年代trong class="guilabel">阿尔法.

编程使用

块参数:贝塔
类型:特征向量,字符串
默认值:' 2 '

围绕状态均值的σ点分布,指定为0到3之间的标量值(0<=<年代trong class="guilabel">卡巴<=3.).<年代trong class="guilabel">卡巴通常被指定为0. 较小的值对应于更接近平均状态的西格玛点。价差与价格的平方根成正比<年代trong class="guilabel">卡巴.有关更多信息,请参阅有关的说明<年代trong class="guilabel">阿尔法.

编程使用

块参数:卡巴
类型:特征向量,字符串
默认值:' 0 '
测量

测量功能计算N-非线性系统在时间步长的单元输出测量向量k,给出时间步长的状态向量k.中创建度量函数并指定函数名<年代trong class="guilabel">作用。例如,如果vdpMeasurementFcn.m是您创建并保存的测量函数,请指定<年代trong class="guilabel">作用作为vdpMeasurementFcn

创建的函数的输入取决于在中是将测量噪声指定为加法还是非加法<年代trong class="guilabel">测量噪声.

  • 测量噪声添加剂-测量功能h指定度量如何演变为状态值的函数:

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

    在哪里y (k)x(k)估计的输出和估计的状态是否在同一时间k,及Um1,…,Umn是度量函数所需的任何可选输入参数。例如,如果使用传感器跟踪对象,则传感器位置可能是一个额外的输入。

    要查看具有附加过程噪声的测量函数示例,请键入编辑vdpMeasurementFcn在命令行。

  • 测量噪声非相加-测量函数还指定输出测量如何演变为测量噪声的函数v

    y(k)=h(x(k),v(k),Um1(k),…,Umn(k))

    要查看具有非累加过程噪声的测量函数示例,请键入编辑VDPMeasurementNoAdditiveNoIseFCN

有关更多信息,请参见状态转换和测量功能

您可以创建h使用一个万博1manbetx仿真软件的功能(万博1manbetx模型)块或作为MATLAB函数(.米文件)。

  • 您可以使用MATLAB函数,只有当h是否有一个额外的输入参数听Um1除了xv

    y [k] = h (x [k], [k],听Um1 (k))

    该软件生成一个额外的输入端口<年代trong class="guilabel">MeasurementFcnInput指定此参数。

  • 如果您使用的是<年代pan class="block">万博1manbetx仿真软件的功能块,指定xv使用参数尺寸。(万博1manbetx模型)块和额外的输入Um1,…,Umn使用输入(万博1manbetx模型)街区<年代pan class="block">万博1manbetx仿真软件的功能块你不提供Um1,…,Umn到<年代pan class="block">无味卡尔曼滤波块。

如果系统中有多个传感器,则可以指定多个测量功能。使用<年代trong class="guilabel">添加测量按钮要删除测量功能,请使用<年代trong class="guilabel">删除测量.

编程使用

块参数:MeasurementFcn1MeasurementFcn2MeasurementFcn3MeasurementFcn4MeasurementFcn5
类型:特征向量,字符串
默认值:“myMeasurementFcn”

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

  • 添加剂-测量噪声v是加法,并且具有测量功能h你在<年代trong class="guilabel">作用表格如下:

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

    在哪里y (k)x(k)估计的输出和估计的状态是否在同一时间k,及Um1,…,Umn是度量函数所需的任何可选输入参数。

  • 非相加-测量噪声是非累加性的,测量函数指定输出测量如何随状态变化<年代pan class="emphasis">测量噪声:

    y(k)=h(x(k),v(k),Um1(k),…,Umn(k))

编程使用

块参数:HasAdditiveMeasurementNoise1HasAdditiveMeasurementNoise2HasAdditiveMeasurementNoise3HasAdditiveMeasurementNoise4HasAdditiveMeasurementNoise5
类型:特征向量
价值观:“添加剂”“非相加”
默认值:“添加剂”

定常测量噪声协方差,指定为矩阵。矩阵的大小取决于<年代trong class="guilabel">测量噪声参数:

  • 测量噪声添加剂-将协方差指定为N-借-N矩阵,在哪里N是系统的测量次数。

  • 测量噪声非相加—指定协方差为aV-借-V矩阵,在哪里V为测量噪声项的个数。

如果测量噪声协方差是时变的,选择<年代trong class="guilabel">时变. 该块生成输入端口<年代trong class="guilabel">R要指定时间变量的时变协方差,请执行以下操作:我<年代up>th测量功能。

依赖关系

如果不指定进程噪声为,则启用此参数<年代trong class="guilabel">时变.

编程使用

块参数:MeasurementNoise1MeasurementNoise2MeasurementNoise3MeasurementNoise4MeasurementNoise5
类型:特征向量,字符串
默认值:' 1 '

如果您为第一个测量功能的测量噪声协方差选择此参数,则块包括一个额外的输入端口<年代trong class="guilabel">R1.你指定时间变化的测量噪声协方差<年代trong class="guilabel">R1. 同样,如果您选择<年代trong class="guilabel">时变对于我<年代up>th测量功能,该模块包括一个额外的输入端口<年代trong class="guilabel">R指定该函数的时变测量噪声协方差。

编程使用

块参数:HasTimeVaryingMeasurementNoise1HasTimeVaryingMeasurementNoise2HasTimeVaryingMeasurementNoise3HasTimeVaryingMeasurementNoise4HasTimeVaryingMeasurementNoise5
类型:特征向量
价值观:“关”“上”
默认值:“关”

假设测量的输出数据在港口的所有时间点都不可用<年代trong class="guilabel">日元这对应于第一个测量函数。选择<年代trong class="guilabel">添加启用端口生成输入端口的步骤<年代trong class="guilabel">使能1. 仅当测量数据可用时,使用此端口的信号来启用估计状态的校正。类似地,如果在端口的所有时间点上测量的输出数据都不可用<年代trong class="guilabel">y对于我<年代up>th测量功能,选择相应的<年代trong class="guilabel">添加启用端口.

编程使用

块参数:HasMeasurementEnablePort1HasMeasurementEnablePort2HasMeasurementEnablePort3HasMeasurementEnablePort4HasMeasurementEnablePort5
类型:特征向量
价值观:“关”“上”
默认值:“关”
设置

选择此参数时,块输出校正的状态估计<年代pan class="inlineequation"> x k | k 在时间步k,使用测量输出直到时间k.如果清除此参数,该块将返回预测的状态估计<年代pan class="inlineequation"> x k | k 1 暂时k,使用前一时间的测量输出进行估计k-1. 如果过滤器处于反馈循环中,并且Simulink中存在代数循环,请清除此参数万博1manbetx模型。

编程使用

块参数:UseCurrentEstimator
类型:特征向量
价值观:“关”“上”
默认值:“上”

选择此参数,表示状态估计误差协方差输出端口<年代trong class="guilabel">P在块中生成。

编程使用

块参数:OutputStateCovariance
类型:特征向量
价值观:“关”“上”
默认值:“关”

使用此参数可以指定所有块参数的数据类型。

编程使用

块参数:数据类型
类型:特征向量
价值观:“单身”“双”
默认值:“双”

块采样时间,指定为正标量。如果状态转换和测量函数的采样时间不同,请选择<年代trong class="guilabel">使多重速率的操作在<年代trong class="guilabel">多速率选项卡,并在<年代trong class="guilabel">多速率标签代替。

依赖关系

如果在中,则此参数可用<年代trong class="guilabel">多速率选项卡,<年代trong class="guilabel">使多重速率的操作参数是

编程使用

块参数:SampleTime
类型:特征向量,字符串
默认值:' 1 '

多重速率的选项卡

如果状态转换和测量函数的采样次数不同,请选择此参数。的示例时间<年代trong class="guilabel">多速率标签,在<年代trong class="guilabel">样品时间.

编程使用

块参数:启用倍率
类型:特征向量
价值观:“关”“上”
默认值:“关”

如果状态转换的采样时间和测量函数不同,请指定<年代trong class="guilabel">样品时间. 将测量函数的采样时间指定为状态转换采样时间的正整数倍。指定的采样时间对应于以下输入端口:

  • 与状态转换功能相对应的端口-附加输入到状态转换功能<年代trong class="guilabel">StateTransitionFcnInputs和时变过程噪声协方差<年代trong class="guilabel">问.这些端口的采样时间必须始终等于状态转换函数采样时间,但可以不同于测量函数的采样时间。

  • 相对应的端口我<年代up>th测量功能-测量输出<年代trong class="guilabel">y,增加测量功能的输入<年代trong class="guilabel">MeasurementFcn输入,在端口启用信号<年代trong class="guilabel">启用,以及时变测量噪声协方差<年代trong class="guilabel">R. 相同测量功能的这些端口的采样时间必须始终相同,但可能不同于状态转换功能和其他测量功能的采样时间。

依赖关系

如果在中,则此参数可用<年代trong class="guilabel">多速率选项卡,<年代trong class="guilabel">使多重速率的操作参数是在…上

编程使用

块参数:StateTransitionFcnSampleTime测量CN1样本1测量CN1样本2测量CN1样本3测量CN1样本4测量CN1样本5
类型:特征向量,字符串
默认值:' 1 '

更多关于

全部展开

兼容性考虑

全部展开

R2020b中的行为发生了变化

扩展功能

另请参阅

阻碍

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

功能

  • |<年代pan itemscope itemtype="//www.tianjin-qmedu.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">|<年代pan itemscope itemtype="//www.tianjin-qmedu.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">|<年代pan itemscope itemtype="//www.tianjin-qmedu.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">|<年代pan itemscope itemtype="//www.tianjin-qmedu.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">
介绍了R2017a