基于unscented卡尔曼滤波的离散非线性系统状态估计
控制系统工具箱/状态估计
系统识别工具箱/评估器
这个无迹卡尔曼滤波器块使用离散时间无迹卡尔曼滤波算法估计离散时间非线性系统的状态。
考虑一个有状态的植物x、输入U、输出Y,过程噪音W,以及测量噪音v.假设你可以将植物表示为一个非线性系统。
利用系统的状态转移和测量功能以及无迹卡尔曼滤波算法,该块产生状态估计 对于当前时间步长。有关该算法的信息,请参见在线状态估计的扩展和无迹卡尔曼滤波算法.
您可以为系统创建非线性状态转换函数和测量函数,并在块中指定这些函数。该块支持多个传感器以不同采样率运行的系统的状态估计。您最多可以指定五个测量函数,每个测量函数对应于系统中的一个传感器。F有关详细信息,请参阅金宝app状态转移和测量函数.
y1,y2,y3,y4,y5
-测量系统输出测量的系统输出对应于您在块中指定的每个测量功能。端口的数量等于系统中测量函数的数量。您最多可以指定五个测量功能。例如,如果系统有两个传感器,则在块中指定两个测量功能。第一个港口y1默认情况下可用。单击申请时,软件生成端口y2对应于第二个测量功能。
将端口指定为N维向量,N为相应传感器测量的数量。例如,如果你的系统有一个传感器来测量物体的位置和速度,那么就只有一个端口y1. 端口被指定为二维向量,其值对应于位置和速度。
第一个港口y1默认情况下可用。端口y2到y5当您单击时生成添加测量值,然后单击申请.
数据类型:仅有一个的
|双
StateTransitionFcnInputs
-状态转换函数的附加可选输入参数状态转换函数的附加可选输入参数F
国家以外x
工艺噪声W
.有关状态转换函数的信息,请参阅,状态转移和测量函数.
假设您的系统具有非加性过程噪声,并且状态转移函数F
表格如下:
x(k+1)=f(x(k),w(k),状态转换输入)
.
在这里K
是时间步长,和StateTransitionFcnInputs
是除x
和W
.
如果你创造F
使用MATLAB®作用(.M
文件),软件生成端口StateTransitionFcnInputs当你点击申请.您可以将此端口的输入指定为标量、向量或矩阵。
如果状态转换函数有多个附加输入,请使用金宝appSimulink函数(金宝app模型)块来指定函数。当使用金宝appSimulink函数块,则直接向金宝appSimulink函数块使用输入(金宝app模型)块。没有为中的其他输入生成输入端口无迹卡尔曼滤波器块。
满足以下两个条件时,才会生成该端口:
你指定F
在作用使用MATLAB函数,并F
在MATLAB路径上。
F
只需要一个额外的输入参数x
和W
.
数据类型:仅有一个的
|双
MeasurementFcn1Inputs、MeasurementFcn2Inputs MeasurementFcn3Inputs、MeasurementFcn4Inputs MeasurementFcn5Inputs
-每个测量函数的附加可选输入参数除了状态外,测量功能的其他可选输入x
和测量噪声v
.有关测量函数的信息,请参阅:状态转移和测量函数.
测量CN1输入对应于您指定的第一个测量功能,依此类推。例如,假设您的系统有三个传感器和非累加性测量噪声,以及三个测量功能h1
,h2
和h3
请填写以下表格:
y1[k]=h1(x[k],v[k],测量输入)
y2 [k] = h2 (x [k], [k], MeasurementFcn2Inputs)
y3 [k] = h3 (x [k], v [k])
在这里K
是时间步长,和测量CN1输入
和MeasurementFcn2Inputs
附加的输入参数是h1
和h2
.
如果您指定h1
,h2
和h3
利用MATLAB函数(.M
文件)在作用,软件生成端口测量CN1输入和MeasurementFcn2Inputs当你点击申请。您可以将这些端口的输入指定为标量、向量或矩阵。
如果测量函数有不止一个额外的输入,请使用金宝appSimulink函数(金宝app模型)块来指定函数。当你使用金宝appSimulink函数块,则直接向金宝appSimulink函数块使用输入(金宝app模型)块。没有为中的其他输入生成输入端口无迹卡尔曼滤波器块。
与测量功能相对应的端口H
仅当满足以下两个条件时生成:
你指定H
在作用使用MATLAB函数,并H
在MATLAB路径上。
H
只需要一个额外的输入参数x
和v
.
数据类型:仅有一个的
|双
Q
-时变过程噪声协方差时变过程噪声协方差,指定为标量、矢量或矩阵,具体取决于过程噪声参数:
过程噪声是添加剂
—指定协方差为标量,anNs元素向量,或Ns——- - - - - -Ns矩阵,Ns是系统的状态数。如果过程噪声项之间没有相互关联,并且所有的项具有相同的方差,则指定一个标量。指定一个长度的向量Ns,如果过程噪声项之间没有互相关,但所有项都有不同的方差。
过程噪声是非加性
-将协方差指定为W——- - - - - -W矩阵,W为状态转移函数中过程噪声项的个数。
如果将过程噪声协方差指定为时变。单击时将显示该端口申请.
数据类型:仅有一个的
|双
R1、R2、R3、R4 R5
-时变测量噪声协方差系统中多达五个测量函数的时变测量噪声协方差,以矩阵形式指定。矩阵的大小取决于测量噪声参数对应的测量功能:
测量噪声是添加剂
-将协方差指定为N——- - - - - -N矩阵,N是系统的测量次数。
测量噪声是非加性
-将协方差指定为v——- - - - - -v矩阵,v为相应测量函数中测量噪声项的个数。
如果您指定测量噪声协方差为,将生成一个端口时变为相应的测量函数。单击时将显示端口申请.
数据类型:仅有一个的
|双
启用码1,启用码2,启用码3,启用码4,启用码5
—当有测量数据时,允许对估计状态进行校正假设测量的输出数据在端口的所有时间点都不可用y1这对应于第一个测量函数。使用其他信号值0
在使能1端口,用于在测量数据可用时校正估计状态。将端口值指定为0
没有测量数据时。类似地,如果测量的输出数据在港口的所有时间点都不可用Y我
为我th测量功能,指定相应的端口使可能我
作为一个值,而不是0
.
如果选择,会生成与测量功能对应的端口添加启用端口用于该测量功能。单击时将显示该端口申请.
数据类型:仅有一个的
|双
|布尔
xhat
——估计状态估计状态,返回为大小向量Ns,在那里Ns是系统的状态数。要访问各个状态,请使用选择器(金宝app模型)块。
当使用当前测量值改进状态估计参数被选择,块输出修正后的状态估计
在时间步K
,使用测量输出直到时间K
。如果清除此参数,块将返回预测状态估计值
时间K
,使用前一时间的测量输出进行估计k - 1
. 如果过滤器处于反馈循环中,并且Simulink中存在代数循环,请清除此参数金宝app®模型
数据类型:仅有一个的
|双
P
-状态估计误差协方差状态估计误差协方差,作为Ns——- - - - - -Ns矩阵,Ns是系统的状态数。要访问单个协方差,请使用选择器(金宝app模型)块。
如果选择,则生成该端口输出状态估计误差协方差在系统模型选项卡,然后单击申请.
数据类型:仅有一个的
|双
作用
—状态转移函数名称myStateTransitionFcn
(默认)|函数名状态转移函数计算Ns-系统在时间步的元件状态向量K+1,给定时间步长的状态向量K.Ns是非线性系统的状态数。创建状态转换函数并在中指定函数名作用.例如,如果vdpStateFcn.m
是您创建并保存的状态转换函数,请指定作用像vdpStateFcn
.
您创建的函数的输入取决于您是将流程噪声指定为加性的还是非加性的过程噪声.
过程噪声是添加剂
-状态转移函数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使用一个金宝appSimulink函数(金宝app模型)块或作为MATLAB函数(.M
文件)。
块参数:状态转换 |
类型:特征向量,字符串 |
违约:“myStateTransitionFcn” |
过程噪声
-过程噪声特性添加剂
(默认)|非加性
过程噪声特性,指定为下列值之一:
添加剂
——过程噪声W
是可加的,状态转移函数F您在中指定的作用表格如下:
x (k + 1) = f (x (k), Us1 (k),…,Usn (k))
,
哪里x (k)
估计的状态是在时间K
和Us1,…,Usn
状态转换函数是否需要任何额外的输入参数。
非加性
-过程噪声是非加性的,状态转移函数指定状态如何作为状态的函数演化和处理前一时间步噪声:
x(k+1)=f(x(k),w(k),Us1(k),…,Usn(k))
.
块参数:HasAdditiveProcessNoise |
类型:特征向量 |
价值观:“添加剂” ,“非相加” |
违约:“添加剂” |
协方差
-时不变过程噪声协方差1.
(默认)|标量|向量|矩阵时不变过程噪声协方差,根据过程噪声参数:
过程噪声是添加剂
—指定协方差为标量,anNs元素向量,或Ns——- - - - - -Ns矩阵,Ns是系统的状态数。如果过程噪声项之间没有相互关联且所有项的方差相同,则指定一个标量。指定一个长度的向量Ns,如果过程噪声项之间没有互相关,但所有项都有不同的方差。
过程噪声是非加性
-将协方差指定为W——- - - - - -W矩阵,W为过程噪声项的个数。
如果过程噪声协方差是时变的,请选择时变. 该块生成输入端口Q指定时变协方差。
如果不指定进程噪声为,则启用此参数时变.
块参数:过程噪声 |
类型:特征向量,字符串 |
违约:'1' |
时变
-时变过程噪声协方差“关闭”
(默认)|“上”
如果选择此参数,则块包含一个额外的输入端口Q指定时变过程噪声协方差。
块参数:黑斯廷梅瓦林噪声 |
类型:特征向量 |
价值观:“关闭” ,“上” |
违约:“关闭” |
初始状态
-初始状态估计0
(默认)|向量初始状态估计值,指定为Ns-元素向量,其中Ns是系统中的状态数。请根据您对系统的了解指定初始状态值。
块参数:InitialState |
类型:特征向量,字符串 |
违约:'0' |
最初的协方差
-状态估计误差协方差1.
(默认)|标量|向量|矩阵状态估计误差协方差,指定为标量Ns元素向量,或Ns——- - - - - -Ns矩阵,Ns是系统的状态数。如果指定标量或矢量,则软件创建Ns——- - - - - -Ns对角线矩阵,对角线上有标量或向量元素。
当您对在中指定的初始状态值没有信心时,请为协方差指定一个高值初始状态.
块参数:InitialStateCovariance |
类型:特征向量,字符串 |
违约:'1' |
阿尔法
-西格玛点的扩散1e-3
(默认值)| 0和1之间的标量值无迹卡尔曼滤波算法将系统状态视为具有平均状态值和方差的随机变量。为了在下一个时间步计算状态及其统计特性,该算法首先使用unscented变换生成一组分布在平均值周围的状态值。这些生成的状态值称为sigma点。该算法使用每个sigma点作为状态转换和测量函数的输入,以获得一组新的转换状态点和测量值。变换点用于在下一时间步计算状态和状态估计误差协方差值。
平均状态值周围西格玛点的扩展由两个参数控制阿尔法和卡巴.第三个参数,贝塔,在状态和测量协方差计算期间影响变换点的权重:
阿尔法-决定状态均值周围sigma点的分布。指定为0到1之间的标量值(0
<阿尔法<=1.
).它通常是一个小的正值。点的分布是成比例的阿尔法.较小的值对应于更接近平均状态的西格玛点。
卡巴-第二个缩放参数,通常设置为0。较小的值对应于更接近平均状态的西格玛点。价差与价格的平方根成正比卡巴
.
贝塔-整合了州分布的先验知识。为高斯分布,贝塔= 2是最优的。
如果您知道状态和状态协方差的分布,则可以调整这些参数以捕获分布的高阶矩的变换。该算法只能跟踪状态概率分布中的一个峰值。如果系统的状态分布中有多个峰值,则可以调整这些参数参数,使sigma点保持在一个峰值附近。例如,选择一个小的阿尔法生成接近状态均值的点。
有关更多信息,请参见无迹卡尔曼滤波算法.
块参数:阿尔法 |
类型:特征向量,字符串 |
违约:“1e-3” |
贝塔
-状态分布的表征2.
(默认)|大于或等于0的标量值用于调整转换后的σ点权重的状态分布的表征,指定为大于或等于0的标量值。为高斯分布,贝塔
= 2是最优选择。
有关详细信息,请参阅的说明阿尔法.
块参数:贝塔 |
类型:特征向量,字符串 |
违约:'2' |
卡巴
-西格玛点的扩散0
(默认值)| 0和3之间的标量值平均状态值周围sigma点的扩展,指定为0和3之间的标量值(0
<=卡巴<=3.
).卡巴通常指定为0
.较小的值对应于更接近平均状态的西格玛点。这个分布与的平方根成正比卡巴. 有关详细信息,请参阅的说明阿尔法.
块参数:卡巴 |
类型:特征向量,字符串 |
违约:'0' |
作用
-测量函数名myMeasurementFcn
(默认)|函数名测量函数计算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
文件)。
如果系统中有多个传感器,则可以指定多个测量功能。使用添加测量值按钮。要去掉测量功能,请使用消除测量.
块参数:测量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 |
类型:特征向量 |
价值观:“添加剂” ,“非相加” |
违约:“添加剂” |
协方差
-时不变测量噪声协方差1.
(默认)|矩阵时不变测量噪声协方差,指定为矩阵。矩阵的大小取决于测量噪声参数:
测量噪声是添加剂
-将协方差指定为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.在这个端口上使用一个信号,只有当测量数据可用时,才能校正估计的状态。类似地,如果测量的输出数据在港口的所有时间点都不可用Y我
为我th测量功能,选择相应的添加启用端口.
块参数:HasMeasurementEnablePort1 ,HasMeasurementEnablePort2 ,HasMeasurementEnablePort3 ,HasMeasurementEnablePort4 ,HasMeasurementEnablePort5 |
类型:特征向量 |
价值观:“关闭” ,“上” |
违约:“关闭” |
使用当前测量值改进状态估计
-在修正或预测状态估计之间进行选择在…上
(默认)|从
选择此参数时,块输出校正的状态估计
在时间步K
,使用测量输出直到时间K
。如果清除此参数,块将返回预测状态估计值
时间K
,使用前一时间的测量输出进行估计k - 1
. 如果过滤器处于反馈循环中,并且Simulink模型中存在代数循环,请清除此参数。金宝app
块参数:UseCurrentEstimator |
类型:特征向量 |
价值观:“关闭” ,“上” |
违约:“上” |
输出状态估计误差协方差
-输出状态估计误差协方差从
(默认)|在…上
如果选择此参数,则状态估计误差协方差输出端口P在块中生成。
块参数:输出状态协方差 |
类型:特征向量 |
价值观:“关闭” ,“上” |
违约:“关闭” |
数据类型
—块参数的数据类型双
(默认)|仅有一个的
使用此参数可以指定所有块参数的数据类型。
块参数:数据类型 |
类型:特征向量 |
价值观:“单一” ,“双” |
违约:“双” |
采样时间
-块样本时间1.
(默认)|正标量块采样时间,指定为正标量。如果状态转换和测量函数的采样时间不同,请选择使多重速率的操作在多速率选项卡,并在中指定采样时间多速率标签代替。
如果在中,则此参数可用多速率选项卡,该使多重速率的操作参数是从
.
块参数:SampleTime |
类型:特征向量,字符串 |
违约:'1' |
使多重速率的操作
-启用状态转换和测量功能的不同采样时间规格从
(默认)|在…上
如果状态转换和测量功能的采样时间不同,请选择此参数。您可以在中指定采样时间多速率标签,在采样时间.
块参数:EnableMultirate |
类型:特征向量 |
价值观:“关闭” ,“上” |
违约:“关闭” |
采样时间
-状态转移和测量函数的采样时间如果状态转换的采样时间和测量函数不同,请指定采样时间.指定测量函数的采样时间为状态转换采样时间的正整数倍。您指定的采样次数对应以下输入端口:
状态转换函数对应的端口-状态转换函数的附加输入StateTransitionFcnInputs和时变过程噪声协方差Q.这些端口的采样时间必须始终等于状态转换函数采样时间,但可以不同于测量函数的采样时间。
对应于我th测量功能-测量输出Y我
,测量功能的附加输入MeasurementFcn我
输入,在端口启用信号使可能我
,以及时变测量噪声协方差R我
.对于相同的测量函数,这些端口的采样时间必须总是相同的,但可以与状态转移函数和其他测量函数的采样时间不同。
如果在中,则此参数可用多速率选项卡,该使多重速率的操作参数是在…上
.
块参数:StateTransitionFcnSampleTime ,MeasurementFcn1SampleTime1 ,MeasurementFcn1SampleTime2 ,MeasurementFcn1SampleTime3 ,MeasurementFcn1SampleTime4 ,MeasurementFcn1SampleTime5 |
类型:特征向量,字符串 |
违约:'1' |
该算法计算状态估计 使用您指定的状态转换和测量函数的非线性系统。您最多可以指定五个测量函数,每个函数对应于系统中的传感器。软件允许您将这些函数中的噪声指定为加法或非加法。
加性噪声项-状态转移和测量方程的形式如下:
在这里F是描述状态演化的非线性状态转移函数吗x
从一个时间步到下一个时间步。非线性测量函数H有关x
根据测量结果Y
在时间步K
.W
和v
分别为零均值、不相关过程和测量噪声。这些函数还可以具有其他可选输入参数,这些参数由Us
和UM
在方程。例如,附加参数可以是时间步长K
或输入U
对于非线性系统,可以有多个这样的参数。
注意,两个方程中的噪声项都是加性的。也就是说,x(k+1)
是否与过程噪声线性相关w (k)
和y(k)
与测量噪声线性相关v (k)
. 对于附加噪波项,不需要在状态转换和测量函数中指定噪波项。软件将术语添加到函数的输出中。
非相加噪音方面-该软件还支持更复杂的状态转换和测量功能金宝app,其中x[K)和测量Y[K]分别为过程噪声和测量噪声的非线性函数。当噪声项为非加性时,状态跃迁和测量方程为:
R2020b中的行为发生了变化
从R2020b开始,在无迹卡尔曼滤波器算法可能会产生与您在以前版本中获得的结果不同的结果。
您指定的状态转换和测量函数必须仅使用MATLAB命令和支持代码生成的Simulink模块。金宝app金宝app有关支持代码生成的块列表,请参见金宝app金宝app支持代码生成的Simulink内置块金宝app(金宝appSimulink编码器)。有关支持代码生成的命令列表,请参阅金宝appC/C++代码生成支持的函数和对象金宝app(MATLAB编码器).
生成的代码使用的算法不同于无迹卡尔曼滤波器块本身使用。在使用这两种方法得到的结果中,您可能会看到一些数值上的差异。
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您还可以从以下列表中选择网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区站点不适合您所在位置的访问。