使用扩展卡尔曼滤波器的离散时间非线性系统的估算状态
控制系统工具箱/状态估计
系统识别工具箱/估计器
这个扩展卡尔曼滤波器块使用一阶离散时间扩展卡尔曼滤波器算法估计离散时间非线性系统的状态。
考虑有状态的植物x输入U输出Y,过程噪音W,以及测量噪音v. 假设您可以将设备表示为一个非线性系统。
利用系统的状态转移和测量功能以及扩展卡尔曼滤波算法,该块产生状态估计 对于当前时间步。有关算法的信息,请参阅在线状态估计的扩展无迹卡尔曼滤波算法.
您可以为系统创建非线性状态转换函数和测量函数,并在块中指定这些函数。该块支持多个传感器以不同采样率运行的系统的状态估计。您最多可以指定五个测量函数,每个测量函数对应于系统中的一个传感器。Y您还可以指定状态转换函数和测量函数的雅可比数。如果未指定它们,软件将以数字方式计算雅可比数。有关更多金宝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函数(金宝appSimulink)块来指定函数。当使用金宝appSimulink函数块,则直接向金宝appSimulink函数块使用输入(金宝appSimulink)块。没有为附加输入生成输入端口扩展卡尔曼滤波器块
仅当满足以下两个条件时,才会生成此端口:
你指定F
在里面作用使用MATLAB函数,并F
在MATLAB路径上。
F
只需要一个额外的输入参数,除了x
和W
.
数据类型:单身的
|双重的
测量CN1输入,测量CN2输入,测量CN3输入,测量CN4输入,测量CN5输入
-每个度量函数的附加可选输入参数除状态外,测量功能的附加可选输入x
测量噪声v
.有关测量函数的信息,请参阅:状态转换和测量功能.
MeasurementFCN1Inputs.对应于您指定的第一个测量功能,依此类推。例如,假设您的系统有三个传感器和非累加性测量噪声,以及三个测量功能h1
,氢
和h3
请填写以下表格:
y1[k]=h1(x[k],v1[k],测量输入)
y2[k]=h2(x[k],v2[k],测量输入)
y3[k]=h3(x[k],v3[k])
在这里K
是时间步长,并且MeasurementFCN1Inputs.
和测量CN2输入
是额外的输入参数h1
和氢
.
如果您指定h1
,氢
和h3
使用MATLAB功能(M
文件)在作用,软件生成端口MeasurementFCN1Inputs.和测量CN2输入当你点击申请。您可以将这些端口的输入指定为标量、向量或矩阵。
如果测量功能有多个附加输入,请使用金宝appSimulink函数(金宝appSimulink)块来指定函数。当你使用金宝appSimulink函数块,则直接向金宝appSimulink函数块使用输入(金宝appSimulink)块。没有为附加输入生成输入端口扩展卡尔曼滤波器块
与测量功能相对应的端口H
仅当满足以下两个条件时生成:
你指定H
在里面作用使用MATLAB函数,并H
在MATLAB路径上。
H
只需要一个额外的输入参数,除了x
和v
.
数据类型:单身的
|双重的
Q
-时变过程噪声协方差时变处理噪声协方差,指定为标量,向量或矩阵,具体取决于该值的值过程噪声范围:
过程噪声是添加剂
-将协方差指定为标量,即Ns-元素向量,或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是系统的状态数。要访问各个状态,请使用选择器(金宝appSimulink)块
当使用当前测量值改进状态估计参数被选择,块输出修正后的状态估计
时间步长K
,使用测量的输出进行估计,直到K
。如果清除此参数,块将返回预测状态估计值
时间K
,使用上一次测量的输出进行估计k-1
. 如果过滤器处于反馈循环中,并且Simulink中存在代数循环,请清除此参数金宝app®模型。
数据类型:单身的
|双重的
P
-状态估计误差协方差状态估计误差协方差,作为Ns-借-Ns矩阵,Ns是系统的状态数。要访问单个协方差,请使用选择器(金宝appSimulink)块
如果选择此选项,将生成此端口输出状态估计误差协方差在系统模型选项卡,然后单击申请.
数据类型:单身的
|双重的
作用
-状态转换函数名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函数(金宝appSimulink)块或作为MATLAB函数(M
文件)。
块参数:StateTransitionFCN. |
类型:字符向量,字符串 |
违约:“myStateTransitionFcn” |
雅可比
-状态转移函数的雅可比矩阵关
(默认)|在…上
雅各比奥的状态转换功能F,指定为以下之一:
关
-软件以数值方式计算雅可比矩阵。这种计算可能会增加处理时间和状态估计的数值精度。
在…上
- 您创建一个函数来计算Jacobian,并指定函数的名称雅可比。例如,如果vdpStateJacobianFcn.m
是雅可比函数,请指定雅可比像vdpStateJacobianFcn
. 如果创建状态转换函数F使用金宝appSimulink函数(金宝appSimulink)块,然后使用金宝appSimulink函数块。如果您创建F使用MATLAB函数(M
文件),然后使用MATLAB函数创建Jacobian。
该函数计算状态转移函数相对于状态和过程噪声的偏导数。雅可比函数的输入数量必须等于状态转移函数的输入数量,并且必须在两个函数中以相同的顺序指定。雅可比函数的输出数量取决于过程噪声范围:
过程噪声是添加剂
- 该功能计算状态转换功能的部分导数F关于美国(
)。输出是一个Ns-借-Ns雅可比矩阵,其中Ns是州数。
要查看加法过程噪声的雅可比函数示例,请键入编辑vdpStateJacobianFcn
在命令行。
过程噪声是非加性
- 该函数还必须返回第二个输出,该输出是状态转换函数的部分导数F关于过程噪声项(
)。第二个输出作为Ns-借-W矩阵,W是状态转移函数中过程噪声项的数量。
块参数:Hasstate转换JacobianFCN |
类型:特征向量 |
价值观:“关” ,“开” |
违约:“关” |
块参数:状态转换JacobianFCN |
类型:字符向量,字符串 |
违约:'' |
过程噪声
-过程噪声特性添加剂
(默认)|非加性
工艺噪声特性,指定为以下值之一:
添加剂
——过程噪声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.
(默认)|标量|向量|矩阵时不变过程噪声协方差,根据过程噪声范围:
过程噪声是添加剂
-将协方差指定为标量,即Ns-元素向量,或Ns-借-Ns矩阵,Ns是系统的状态数。如果过程噪声项之间没有互相关且所有项的方差相同,则指定标量。指定长度的向量Ns,如果过程噪声项之间没有互相关,但所有项都有不同的方差。
过程噪声是非加性
- 指定协方差作为一个W-借-W矩阵,W是过程噪声项的数量。
如果过程噪声协方差是时变的,请选择时变.块生成输入端口Q指定时变协方差。
如果未将过程噪声指定为时变.
块参数:过程噪声 |
类型:字符向量,字符串 |
违约:'1' |
时变
-时变过程噪声协方差“关”
(默认)|“开”
如果选择此参数,则该块包含一个附加输入端口Q指定时变过程噪声协方差。
块参数:HastimeviryingProcessnoise. |
类型:特征向量 |
价值观:“关” ,“开” |
违约:“关” |
初始状态
-初始状态估计0
(默认)|向量初始状态估计值,指定为一个Ns-element矢量,在哪里Ns是系统中的状态数。请根据您对系统的了解指定初始状态值。
块参数:初始状态 |
类型:字符向量,字符串 |
违约:'0' |
初始协方差
-状态估计误差协方差1.
(默认)|标量|向量|矩阵状态估计误差协方差,指定为标量Ns-元素向量,或Ns-借-Ns矩阵,Ns是系统的状态数。如果指定标量或矢量,则软件创建Ns-借-Ns对角线矩阵,对角线上有标量或向量元素。
当您对您指定的初始状态值没有信心时,为协议指定高值初始状态.
块参数:初始状态协方差 |
类型:字符向量,字符串 |
违约:'1' |
作用
- 测量功能名称myMeasurementFcn
(默认)|函数名测量功能计算N-非线性系统时间步的元件输出测量矢量K,给定时间步的状态向量K. 创建测量函数并在中指定函数名称作用。例如,如果vdpMeasurementFcn.m
是您创建并保存的测量函数,请指定作用像vdpMeasurementFcn
.
您创建的函数的输入取决于您是将度量噪声指定为加性的还是非加性的测量噪声.
测量噪声是添加剂
- 测量功能H指定测量值如何发展为状态值的函数:
y(k)= h(x(k),um1(k),...,umn(k))
,
在哪里y(k)
和x (k)
是估计的产出和估计状态K
和Um1,…,Umn
是测量函数所需的任何可选输入参数。例如,如果使用传感器跟踪对象,则传感器位置可能是额外的输入。
要查看具有附加过程噪声的测量函数示例,请键入编辑vdpMeasurementFcn
在命令行。
测量噪声是非加性
-测量功能还指定输出测量如何随测量噪声的变化而变化v
:
y(k)=h(x(k),v(k),Um1(k),…,Umn(k))
.
要查看具有非增多过程噪声的测量功能的示例,请键入编辑VDPMeasurementNoAdditiveNoIseFCN
.
有关详细信息,请参阅状态转换和测量功能.
您可以创建H使用金宝appSimulink函数(金宝appSimulink)块或作为MATLAB函数(M
文件)。
如果系统中有多个传感器,则可以指定多个测量功能。使用添加测量按钮。要去掉测量功能,请使用消除测量.
块参数:测量CN1 ,测量CN2 ,测量CN3 ,测量CN4 ,测量CN5 |
类型:字符向量,字符串 |
违约:“myMeasurementFcn” |
雅可比
- 测量功能的Jacobian关
(默认)|在…上
测量函数的雅可比矩阵H,指定为以下之一:
关
-软件以数值方式计算雅可比矩阵。这种计算可能会增加处理时间和状态估计的数值精度。
在…上
- 创建一个函数来计算测量函数的jacobianH,并在中指定函数的名称雅可比。例如,如果vdpMeasurementJacobianFcn.m
是雅可比函数,请指定测量雅可比函数
像vdpMeasurementJacobianFcn
.如果你创造H使用金宝appSimulink函数(金宝appSimulink)块,然后使用金宝appSimulink函数块。如果您创建H使用MATLAB函数(M
文件),然后使用MATLAB函数创建Jacobian。
该函数计算测量函数的偏导数H关于状态和测量噪声。雅可比函数的输入数量必须等于测量函数的输入数量,并且必须在两个函数中以相同的顺序指定。雅可比函数的输出数量取决于测量噪声范围:
测量噪声是添加剂
-该函数计算测量函数相对于状态的偏导数(
)。输出为N-借-Ns雅可比矩阵,其中N是系统的测量次数,以及Ns是州数。
要查看雅可比函数的示例,用于添加测量噪音,型编辑vdpMeasurementJacobianFcn
在命令行。
测量噪声是非加性
- 该功能还返回第二个输出,该输出是测量噪声术语的测量功能的部分导数(
)。第二个输出作为N-借-v雅可比矩阵,其中v是测量噪声术语的数量。
块参数:HasMeasurementJacobianFcn1 ,HasMeasurementJacobianFcn2 ,HasMeasurementJacobianFcn3 ,HasMeasurementJacobianFcn4 ,HasMeasurementJacobianFcn5 |
类型:特征向量 |
价值观:“关” ,“开” |
违约:“关” |
块参数:测量JacobianFCN1 ,测量JacobianFcn2 ,测量值JacobianFCN3 ,测量值JacobianFcn4 ,测量值JacobianFCN5 |
类型:特征向量 |
违约:'' |
测量噪声
-测量噪声特性添加剂
(默认)|非加性
测量噪声特性,指定为以下值之一:
添加剂
-测量噪声v
是加法,并且具有测量功能H你指定的作用表格如下:
y(k)= h(x(k),um1(k),...,umn(k))
,
在哪里y(k)
和x (k)
是估计的产出和估计状态K
和Um1,…,Umn
是度量函数所需的任何可选输入参数。
非加性
-测量噪声是非累加性的,测量函数指定输出测量如何随状态变化和测量噪声:
y(k)=h(x(k),v(k),Um1(k),…,Umn(k))
.
块参数:HasAdditiveMeasurementNoise1 ,HAS附加测量噪音2 ,HAS附加测量噪音3 ,HAS可加性测量噪音4 ,HAS附加测量噪音5 |
类型:特征向量 |
价值观:“添加剂” ,“非加性” |
违约:“添加剂” |
协方差
- 时间不变的过程噪声协方差1.
(默认)|标量|向量|矩阵时不变过程噪声协方差,根据过程噪声范围:
过程噪声是添加剂
-将协方差指定为标量,即Ns-元素向量,或Ns-借-Ns矩阵,Ns是系统的状态数。如果过程噪声项之间没有互相关且所有项的方差相同,则指定标量。指定长度的向量Ns,如果过程噪声项之间没有互相关,但所有项都有不同的方差。
过程噪声是非加性
- 指定协方差作为一个W-借-W矩阵,W是过程噪声项的数量。
如果过程噪声协方差是时变的,请选择时变.块生成输入端口Q指定时变协方差。
如果未将过程噪声指定为时变.
块参数:过程噪声 |
类型:字符向量,字符串 |
违约:'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
块参数:使用电流估计器 |
类型:特征向量 |
价值观:“关” ,“开” |
违约:“开” |
输出状态估计误差协方差
- 输出状态估计误差协方差关
(默认)|在…上
如果选择此参数,则状态估计误差协方差输出端口P在块中生成。
块参数:outputStatecovariance. |
类型:特征向量 |
价值观:“关” ,“开” |
违约:“关” |
数据类型
-块参数的数据类型双重的
(默认)|单身的
使用此参数可以指定所有块参数的数据类型。
块参数:数据类型 |
类型:特征向量 |
价值观:“单身” ,“双人” |
违约:“双人” |
采样时间
-块样本时间1.
(默认)|正标量块采样时间,指定为正标量。如果状态转换和测量功能的采样时间不同,请选择启用多速率操作在多速率选项卡,并在中指定采样时间多速率标签代替。
如果在中,则此参数可用多速率选项卡,该启用多速率操作参数为关
.
块参数:取样时间 |
类型:字符向量,字符串 |
违约:'1' |
启用多速率操作
- 为状态转换和测量功能启用不同采样时间的规范关
(默认)|在…上
如果状态转换和测量功能的采样时间不同,请选择此参数。您可以在中指定采样时间多速率标签,在采样时间.
块参数:启用倍率 |
类型:特征向量 |
价值观:“关” ,“开” |
违约:“关” |
采样时间
-状态转换和测量函数采样时间如果状态转换和测量功能的采样时间不同,请指定采样时间. 将测量函数的采样时间指定为状态转换采样时间的正整数倍。指定的采样时间对应于以下输入端口:
与状态转换功能相对应的端口-附加输入到状态转换功能StateTransitionFcnInputs和时变的过程噪声协方差Q.这些端口的采样时间必须始终等于状态转换函数采样时间,但可以不同于测量函数的采样时间。
对应于我TH.测量功能 - 测量输出Y我
,测量功能的附加输入测量我
投入,在端口启用信号使能够我
,以及时变测量噪声协方差R我
. 相同测量功能的这些端口的采样时间必须始终相同,但可能不同于状态转换功能和其他测量功能的采样时间。
如果在中,则此参数可用多速率选项卡,该启用多速率操作参数为在…上
.
块参数:StateTransitionFcnSampleTime ,测量CN1样本1 ,测量CN1样本2 ,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开始,在扩展卡尔曼滤波器算法可能会产生与您在以前版本中获得的结果不同的结果。
您指定的状态转换,测量和Jacobian函数必须仅使用支持代码生成的MATLAB命令和SIMULINK块。金宝app金宝app有关支持代码生成的块列表,请参阅金宝app金宝app支持代码生成的Simulink内置块金宝app(金宝appSimulink编码器)。有关支持代码生成的命令列表,请参阅金宝appC/C++代码生成支持的函数和对象金宝app(MATLAB编码器).
生成的代码使用的算法不同于扩展卡尔曼滤波器块本身使用。在使用这两种方法得到的结果中,您可能会看到一些数值上的差异。
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您还可以从以下列表中选择网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区站点不适合您所在位置的访问。