主要内容

无迹卡尔曼滤波器

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

  • 图书馆:
  • 控制系统工具箱/状态估计

    系统识别工具箱/评估器

  • ukf_区块

描述

这个无迹卡尔曼滤波器块使用离散时间无迹卡尔曼滤波算法估计离散时间非线性系统的状态。

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

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

您可以为系统创建非线性状态转换函数和测量函数,并在块中指定这些函数。该块支持多个传感器以不同采样率运行的系统的状态估计。您最多可以指定五个测量函数,每个测量函数对应于系统中的一个传感器。F有关详细信息,请参阅金宝app状态转移和测量函数

港口

输入

全部展开

测量的系统输出对应于您在块中指定的每个测量功能。端口的数量等于系统中测量函数的数量。您最多可以指定五个测量功能。例如,如果系统有两个传感器,则在块中指定两个测量功能。第一个港口y1默认情况下可用。单击申请时,软件生成端口y2对应于第二个测量功能。

将端口指定为N维向量,N为相应传感器测量的数量。例如,如果你的系统有一个传感器来测量物体的位置和速度,那么就只有一个端口y1. 端口被指定为二维向量,其值对应于位置和速度。

依赖关系

第一个港口y1默认情况下可用。端口y2y5当您单击时生成添加测量值,然后单击申请

数据类型:仅有一个的|

状态转换函数的附加可选输入参数F国家以外x工艺噪声W.有关状态转换函数的信息,请参阅,状态转移和测量函数

假设您的系统具有非加性过程噪声,并且状态转移函数F表格如下:

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

在这里K是时间步长,和StateTransitionFcnInputs是除xW

如果你创造F使用MATLAB®作用(.M文件),软件生成端口StateTransitionFcnInputs当你点击申请.您可以将此端口的输入指定为标量、向量或矩阵。

如果状态转换函数有多个附加输入,请使用金宝appSimulink函数(金宝app模型)块来指定函数。当使用金宝appSimulink函数块,则直接向金宝appSimulink函数块使用输入(金宝app模型)块。没有为中的其他输入生成输入端口无迹卡尔曼滤波器块。

依赖关系

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

  • 你指定F作用使用MATLAB函数,并F在MATLAB路径上。

  • F只需要一个额外的输入参数xW

数据类型:仅有一个的|

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

测量CN1输入对应于您指定的第一个测量功能,依此类推。例如,假设您的系统有三个传感器和非累加性测量噪声,以及三个测量功能h1,h2h3请填写以下表格:

y1[k]=h1(x[k],v[k],测量输入)

y2 [k] = h2 (x [k], [k], MeasurementFcn2Inputs)

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

在这里K是时间步长,和测量CN1输入MeasurementFcn2Inputs附加的输入参数是h1h2

如果您指定h1,h2h3利用MATLAB函数(.M文件)在作用,软件生成端口测量CN1输入MeasurementFcn2Inputs当你点击申请。您可以将这些端口的输入指定为标量、向量或矩阵。

如果测量函数有不止一个额外的输入,请使用金宝appSimulink函数(金宝app模型)块来指定函数。当你使用金宝appSimulink函数块,则直接向金宝appSimulink函数块使用输入(金宝app模型)块。没有为中的其他输入生成输入端口无迹卡尔曼滤波器块。

依赖关系

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

  • 你指定H作用使用MATLAB函数,并H在MATLAB路径上。

  • H只需要一个额外的输入参数xv

数据类型:仅有一个的|

时变过程噪声协方差,指定为标量、矢量或矩阵,具体取决于过程噪声参数:

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

  • 过程噪声非加性-将协方差指定为W——- - - - - -W矩阵,W为状态转移函数中过程噪声项的个数。

依赖关系

如果将过程噪声协方差指定为时变。单击时将显示该端口申请

数据类型:仅有一个的|

系统中多达五个测量函数的时变测量噪声协方差,以矩阵形式指定。矩阵的大小取决于测量噪声参数对应的测量功能:

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

  • 测量噪声非加性-将协方差指定为v——- - - - - -v矩阵,v为相应测量函数中测量噪声项的个数。

依赖关系

如果您指定测量噪声协方差为,将生成一个端口时变为相应的测量函数。单击时将显示端口申请

数据类型:仅有一个的|

假设测量的输出数据在端口的所有时间点都不可用y1这对应于第一个测量函数。使用其他信号值0使能1端口,用于在测量数据可用时校正估计状态。将端口值指定为0没有测量数据时。类似地,如果测量的输出数据在港口的所有时间点都不可用Yth测量功能,指定相应的端口使可能作为一个值,而不是0

依赖关系

如果选择,会生成与测量功能对应的端口添加启用端口用于该测量功能。单击时将显示该端口申请

数据类型:仅有一个的||布尔

输出

全部展开

估计状态,返回为大小向量Ns,在那里Ns是系统的状态数。要访问各个状态,请使用选择器(金宝app模型)块。

使用当前测量值改进状态估计参数被选择,块输出修正后的状态估计 x ^ [ K | K ] 在时间步K,使用测量输出直到时间K。如果清除此参数,块将返回预测状态估计值 x ^ [ K | K 1. ] 时间K,使用前一时间的测量输出进行估计k - 1. 如果过滤器处于反馈循环中,并且Simulink中存在代数循环,请清除此参数金宝app®模型

数据类型:仅有一个的|

状态估计误差协方差,作为Ns——- - - - - -Ns矩阵,Ns是系统的状态数。要访问单个协方差,请使用选择器(金宝app模型)块。

依赖关系

如果选择,则生成该端口输出状态估计误差协方差系统模型选项卡,然后单击申请

数据类型:仅有一个的|

参数

全部展开

系统模型选项卡

状态转换

状态转移函数计算Ns-系统在时间步的元件状态向量K+1,给定时间步长的状态向量KNs是非线性系统的状态数。创建状态转换函数并在中指定函数名作用.例如,如果vdpStateFcn.m是您创建并保存的状态转换函数,请指定作用vdpStateFcn

您创建的函数的输入取决于您是将流程噪声指定为加性的还是非加性的过程噪声

  • 过程噪声添加剂-状态转移函数F指定状态如何根据前一时间步的状态值演变:

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

    哪里x (k)估计的状态是在时间KUs1,…,Usn状态转换函数是否需要其他输入参数,如系统输入或样本时间。要查看带有加性过程噪声的状态转移函数的示例,请键入编辑vdpStateFcn在命令行。

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

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

有关更多信息,请参见状态转移和测量函数

您可以创建F使用一个金宝appSimulink函数(金宝app模型)块或作为MATLAB函数(.M文件)。

  • 只有在以下情况下才能使用MATLAB函数F是否有一个额外的输入参数Us1除了xW

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

    软件生成一个额外的输入端口StateTransitionFcnInputs指定此参数。

  • 如果你用a金宝appSimulink函数块,指定xW使用参数输入端口(金宝app模型)块和附加输入Us1,…,Usn使用输入(金宝app模型)块的金宝appSimulink函数块。你不提供Us1,…,Usn无迹卡尔曼滤波器块。

程序化使用

块参数:状态转换
类型:特征向量,字符串
违约:“myStateTransitionFcn”

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

  • 添加剂——过程噪声W是可加的,状态转移函数F您在中指定的作用表格如下:

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

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

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

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

程序化使用

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

时不变过程噪声协方差,根据过程噪声参数:

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

  • 过程噪声非加性-将协方差指定为W——- - - - - -W矩阵,W为过程噪声项的个数。

如果过程噪声协方差是时变的,请选择时变. 该块生成输入端口Q指定时变协方差。

依赖关系

如果不指定进程噪声为,则启用此参数时变

程序化使用

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

如果选择此参数,则块包含一个额外的输入端口Q指定时变过程噪声协方差。

程序化使用

块参数:黑斯廷梅瓦林噪声
类型:特征向量
价值观:“关闭”,“上”
违约:“关闭”
初始化

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

程序化使用

块参数:InitialState
类型:特征向量,字符串
违约:'0'

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

当您对在中指定的初始状态值没有信心时,请为协方差指定一个高值初始状态

程序化使用

块参数:InitialStateCovariance
类型:特征向量,字符串
违约:'1'
无迹变换参数

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

平均状态值周围西格玛点的扩展由两个参数控制阿尔法卡巴.第三个参数,贝塔,在状态和测量协方差计算期间影响变换点的权重:

  • 阿尔法-决定状态均值周围sigma点的分布。指定为0到1之间的标量值(0<阿尔法<=1.).它通常是一个小的正值。点的分布是成比例的阿尔法.较小的值对应于更接近平均状态的西格玛点。

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

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

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

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

程序化使用

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

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

有关详细信息,请参阅的说明阿尔法

程序化使用

块参数:贝塔
类型:特征向量,字符串
违约:'2'

平均状态值周围sigma点的扩展,指定为0和3之间的标量值(0<=卡巴<=3.).卡巴通常指定为0.较小的值对应于更接近平均状态的西格玛点。这个分布与的平方根成正比卡巴. 有关详细信息,请参阅的说明阿尔法

程序化使用

块参数:卡巴
类型:特征向量,字符串
违约:'0'
测量

测量函数计算N-非线性系统在时间步长的单元输出测量向量K,给出时间步长的状态向量K.中创建度量函数并指定函数名作用.例如,如果vdpMeasurementFcn.m您创建并保存的测量函数是否指定作用vdpMeasurementFcn

您创建的函数的输入取决于您是将度量噪声指定为加性的还是非加性的测量噪声

  • 测量噪声添加剂-测量功能H指定测量值如何随状态值的变化而变化:

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

    哪里y(k)x (k)是当时的估计输出和估计状态K听Um1,…,学院您的测量函数需要任何可选的输入参数。例如,如果您使用一个传感器来跟踪一个对象,那么附加的输入可以是传感器位置。

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

  • 测量噪声非加性-测量功能还指定输出测量如何随测量噪声的变化而变化v:

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

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

有关更多信息,请参见状态转移和测量函数

您可以创建H使用一个金宝appSimulink函数(金宝app模型)块或作为MATLAB函数(.M文件)。

  • 只有在以下情况下才能使用MATLAB函数H是否有一个额外的输入参数Um1除了xv

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

    软件生成一个额外的输入端口MeasurementFcnInput指定此参数。

  • 如果你用a金宝appSimulink函数块,指定xv使用参数输入端口(金宝app模型)块和附加输入听Um1,…,学院使用输入(金宝app模型)块的金宝appSimulink函数块。你不提供听Um1,…,学院无迹卡尔曼滤波器块。

如果系统中有多个传感器,则可以指定多个测量功能。使用添加测量值按钮。要去掉测量功能,请使用消除测量

程序化使用

块参数:测量CN1,测量CN2,测量CN3,测量CN4,MeasurementFcn5
类型:特征向量,字符串
违约:“myMeasurementFcn”

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

  • 添加剂——测量噪声v是加法,并且具有测量功能H您在中指定的作用表格如下:

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

    哪里y(k)x (k)是当时的估计输出和估计状态K听Um1,…,学院您的测量函数需要任何可选的输入参数。

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

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

程序化使用

块参数:HasAdditiveMeasurementNoise1,HAS附加测量噪音2,HAS附加测量噪音3,HAS可加性测量噪音4,HAS附加测量噪音5
类型:特征向量
价值观:“添加剂”,“非相加”
违约:“添加剂”

时不变测量噪声协方差,指定为矩阵。矩阵的大小取决于测量噪声参数:

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

  • 测量噪声非加性-将协方差指定为v——- - - - - -v矩阵,v是测量噪声项的数量。

如果测量噪声协方差是时变的,选择时变. 该块生成输入端口R的时变协方差th测量功能。

依赖关系

如果不指定进程噪声为,则启用此参数时变

程序化使用

块参数:MeasurementNoise1,MeasurementNoise2,MeasurementNoise3,MeasurementNoise4,MeasurementNoise5
类型:特征向量,字符串
违约:'1'

如果您为第一个测量功能的测量噪声协方差选择此参数,则块包括一个额外的输入端口R1.你指定时间变化的测量噪声协方差R1. 同样,如果您选择时变th测量功能,该模块包括一个额外的输入端口R为该函数指定时变测量噪声协方差。

程序化使用

块参数:HastinmevaryingMeasurementNoise1,HastinmevaryingMeasurementNoise2,HastinmevaryingMeasurementNoise3,HastinmevaryingMeasurementNoise4,HastinmevaryingMeasurementNoise5
类型:特征向量
价值观:“关闭”,“上”
违约:“关闭”

假设测量的输出数据在端口的所有时间点都不可用y1对应于第一个测量功能的。选择添加启用端口生成输入端口的步骤使能1.在这个端口上使用一个信号,只有当测量数据可用时,才能校正估计的状态。类似地,如果测量的输出数据在港口的所有时间点都不可用Yth测量功能,选择相应的添加启用端口

程序化使用

块参数:HasMeasurementEnablePort1,HasMeasurementEnablePort2,HasMeasurementEnablePort3,HasMeasurementEnablePort4,HasMeasurementEnablePort5
类型:特征向量
价值观:“关闭”,“上”
违约:“关闭”
设置

选择此参数时,块输出校正的状态估计 x ^ [ K | K ] 在时间步K,使用测量输出直到时间K。如果清除此参数,块将返回预测状态估计值 x ^ [ K | K 1. ] 时间K,使用前一时间的测量输出进行估计k - 1. 如果过滤器处于反馈循环中,并且Simulink模型中存在代数循环,请清除此参数。金宝app

程序化使用

块参数:UseCurrentEstimator
类型:特征向量
价值观:“关闭”,“上”
违约:“上”

如果选择此参数,则状态估计误差协方差输出端口P在块中生成。

程序化使用

块参数:输出状态协方差
类型:特征向量
价值观:“关闭”,“上”
违约:“关闭”

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

程序化使用

块参数:数据类型
类型:特征向量
价值观:“单一”,“双”
违约:“双”

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

依赖关系

如果在中,则此参数可用多速率选项卡,该使多重速率的操作参数是

程序化使用

块参数:SampleTime
类型:特征向量,字符串
违约:'1'

多重速率的选项卡

如果状态转换和测量功能的采样时间不同,请选择此参数。您可以在中指定采样时间多速率标签,在采样时间

程序化使用

块参数:EnableMultirate
类型:特征向量
价值观:“关闭”,“上”
违约:“关闭”

如果状态转换的采样时间和测量函数不同,请指定采样时间.指定测量函数的采样时间为状态转换采样时间的正整数倍。您指定的采样次数对应以下输入端口:

  • 状态转换函数对应的端口-状态转换函数的附加输入StateTransitionFcnInputs和时变过程噪声协方差Q.这些端口的采样时间必须始终等于状态转换函数采样时间,但可以不同于测量函数的采样时间。

  • 对应于th测量功能-测量输出Y,测量功能的附加输入MeasurementFcn输入,在端口启用信号使可能,以及时变测量噪声协方差R.对于相同的测量函数,这些端口的采样时间必须总是相同的,但可以与状态转移函数和其他测量函数的采样时间不同。

依赖关系

如果在中,则此参数可用多速率选项卡,该使多重速率的操作参数是在…上

程序化使用

块参数:StateTransitionFcnSampleTime,MeasurementFcn1SampleTime1,MeasurementFcn1SampleTime2,MeasurementFcn1SampleTime3,MeasurementFcn1SampleTime4,MeasurementFcn1SampleTime5
类型:特征向量,字符串
违约:'1'

更多关于

全部展开

兼容性考虑

全部展开

R2020b中的行为发生了变化

扩展能力

R2017a中引入