卡尔曼滤波器
离散时间或连续时间线性系统的状态估计
- 库:
控制系统工具箱/状态估计
系统识别工具箱/估计器
描述
使用卡尔曼滤波器块来估计状态空间工厂模型给定过程和测量噪声协方差数据的状态。状态空间模型可以是时变的。如果状态空间模型和噪声协方差矩阵都是时不变的,则使用稳态卡尔曼滤波器实现,否则使用时变卡尔曼滤波器。
卡尔曼滤波器为连续或离散估计问题提供了最优解连续时间估计而且离散时间估计.
的卡尔曼滤波器块不同于卡尔曼
(控制系统工具箱)可以通过以下方式执行命令:
当你打电话时
卡尔曼(sys,…)
,它假设sys
包括G
而且H
矩阵。具体地说,sys。B
形式是(B G)
而且sys。D
形式是[D H]
.类提供LTI变量时卡尔曼滤波器块,它不假设提供的LTI变量包含G
而且H
.它们是可选的和独立的。属性创建的筛选器
卡尔曼
命令输出[yhat; xhat]
默认情况下。块只输出xhat
默认情况下。的
卡尔曼
命令可以同时输出P
而且Z
离散系统的协方差矩阵。该块只能输出P
或Z
对于这样的系统。
限制
植物和噪声数据必须满足以下约束条件:
(C,一个)是可检测的。
而且 .
在虚轴(或离散时间的单位圆)上没有不可控模态,在哪里
连续时间卡尔曼滤波器不能用于函数调用子系统或触发子系统。
港口
输入
u
-已知输入
标量|向量
已知输入u (t)
或u [k]
.
依赖关系
要启用此端口,请选择增加输入端口u参数。默认勾选。
y
-测量输出
标量|向量
测量输出y [n]
更新估计的状态。
一个
-状态矩阵
真正的矩阵
n——- - - - - -n状态(或系统)矩阵。
依赖关系
若要启用此端口,请设置源模型参数输入端口.
B
-输入矩阵
真正的矩阵
n——- - - - - -p输入矩阵。
依赖关系
若要启用此端口,请设置源模型参数输入端口并选择增加输入端口u参数。
C
-输出矩阵
真正的矩阵
问——- - - - - -p输出矩阵。
依赖关系
若要启用此端口,请设置源模型参数输入端口.
D
-馈通矩阵
真正的矩阵
问——- - - - - -p馈通(或前馈)矩阵。在系统模型没有直接馈通的情况下,D是零矩阵。
依赖关系
若要启用此端口,请设置源模型参数输入端口并选择增加输入端口u参数。
G
-测量输出
真正的矩阵
状态空间方程中的噪声变换。
依赖关系
若要启用此端口,请选择使用G和H矩阵(默认G=I和H=0)参数。
H
-测量输出
真正的矩阵
状态空间方程中的噪声变换。
依赖关系
若要启用此端口,请选择使用G和H矩阵(默认G=I和H=0)参数。
问
-过程噪声协方差矩阵
标量|向量|矩阵
过程噪声协方差矩阵,指定为下列之一:
实非负标量。问是一个西北——- - - - - -西北对角线上有标量的对角线矩阵。西北是模型中过程噪声输入的数量。
实非负标量的向量。问是一个西北——- - - - - -西北对角线矩阵与元素向量对角线上的问.
西北——- - - - - -西北正半定矩阵。
依赖关系
如果要启用该端口,请取消选择定常问参数。
R
-测量噪声协方差矩阵
标量|向量|矩阵
测量噪声协方差矩阵,指定为下列之一:
实正标量。R是一个纽约——- - - - - -纽约对角线上有标量的对角线矩阵。纽约是模型中测量输出的数量。
实正标量的向量。R是一个纽约——- - - - - -纽约对角线矩阵与元素向量对角线上的R.
纽约——- - - - - -纽约正定矩阵。
依赖关系
如果要启用该端口,请取消选择定常R参数。
N
-过程和测量噪声交叉协方差矩阵
标量|向量|矩阵
过程和测量噪声的交叉协方差矩阵,指定为西北——- - - - - -纽约矩阵。矩阵[Q N;NTR必须是肯定的。
依赖关系
如果要启用该端口,请取消选择定常N参数。
P0
-初始状态估计误差协方差
标量|向量|矩阵
P初始时刻的矩阵。
依赖关系
若要启用此端口,请设置源模型参数输入端口并设置源参数输入端口.
X0
-初始状态估计
标量|向量
初始时刻的估计状态。
依赖关系
若要启用此端口,请设置源参数输入端口.
启用
-控制信号以启用测量更新
标量
该端口控制测量更新并接收标量信号。
依赖关系
若要启用此端口,请选择增加输入端口使能控制测量更新参数。
重置
-控制信号重置状态估计
标量
输出
xhat
-预估州
标量|向量
线性系统的估计状态。
yhat
-预计产出
标量|向量
线性系统的估计输出。
依赖关系
若要启用此端口,请选择输出估计模型输出y参数。
Z
-状态估计误差协方差
矩阵
添加Z输出端口到块。
若要启用此端口,请选择输出状态估计误差协方差Z参数。
依赖关系
若要启用此端口,请设置时间域参数离散时间并选择利用当前测量值y[n]改进xhat[n]参数。
P
-状态估计误差协方差
矩阵
添加P输出端口到块。
若要启用此端口,请选择输出状态估计误差协方差参数。
依赖关系
若要启用此端口,请设置时间域参数连续时间或设置时间域参数离散时间和取消选择利用当前测量值y[n]改进xhat[n]参数。
请注意
所有输入端口启用而且重置必须具有相同的数据类型(单类型或双类型)。
启用而且重置端口支持
单
,双
,int8
,uint8
,int16
,uint16
,int32
,uint32
,布尔数据类型。
参数
过滤器设置
时间域
—是估计连续时间状态还是估计离散时间状态
离散时间
(默认)|连续时间
离散时间
(默认)-块估计离散时间状态。连续时间
-块估计连续时间状态。当卡尔曼滤波器块位于具有同步状态控制的模型中(请参阅国家控制(高密度脂蛋白编码器)块),则不能选择连续时间.
编程使用
块参数:TimeDomain |
类型:字符串,字符向量 |
价值观:“离散” |“连续时间” |
默认值:“离散” |
利用当前测量值y[n]改进xhat[n]
-使用测量输出更新输出状态估计
在
(默认)|从
使用离散时间卡尔曼滤波器的电流估计变量。当未选择此参数时,将使用延迟估计器(变体)。
仅当时间域是离散时间.
编程使用
块参数:UseCurrentEstimator |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“上” |
样品时间
-分段采样时间
-1
(默认)|非负的标量
块采样时间,指定为-1
或者一个正标量。
默认值为-1
,这意味着该块根据模型中块的上下文继承其采样时间。所有块输入端口必须具有相同的采样时间。
依赖关系
仅当时间域是离散时间而且源模型是单独的A B C D矩阵或输入端口.采样时间由LTI状态空间变量获得源模型是状态空间变量.
编程使用
块参数:Ts |
类型:字符串,字符向量 |
价值观:“1” |标量 |
默认值:“1” |
模型参数
系统模型源模型
-指定如何向块提供A, B, C, D矩阵
状态空间变量
(默认)|单独的A B C D矩阵
|输入端口
状态空间变量
—使用中指定的型号变量.默认值为党卫军(0.95,1 1 0)
.模型的采样时间必须匹配时间域参数;也就是说,模型必须是离散时间的,如果时间域是离散的。单独的A B C D矩阵
—指定一个,B,C,D在块参数中。输入端口
—指定一个,B,C,D矩阵作为卡尔曼滤波器块的输入信号。如果选择此选项,则块包含其他输入端口一个,B,C,D.您还必须指定状态数,输入数量,输出数在块参数中。
编程使用
块参数:ModelSource |
类型:字符串,字符向量 |
价值观:“LTI状态空间变量” |"单独的A, B, C, D矩阵" |“输入端口” |
默认值:“LTI状态空间变量” |
一个
-状态矩阵
0.95
(默认)
指定一个矩阵。它必须是真实的和方形的。默认值为0.95
.
依赖关系
若要启用此端口,请设置源模型参数单独的A B C D矩阵.
编程使用
块参数:一个 |
类型:字符串,字符向量 |
价值观:“真正的矩阵” |
默认值:“0.95” |
B
-输入矩阵
1
(默认)
指定B矩阵。它必须是实数并且行数与一个矩阵。默认值为1
.
依赖关系
若要启用此端口,请设置源模型参数单独的A B C D矩阵.
编程使用
块参数:B |
类型:字符串,字符向量 |
价值观:“真正的矩阵” |
默认值:“1” |
C
-输出矩阵
1
(默认)
指定C矩阵。它必须是实数并且有和一个矩阵。默认值为1
.
依赖关系
若要启用此端口,请设置源模型参数单独的A B C D矩阵.
编程使用
块参数:C |
类型:字符串,字符向量 |
价值观:“真正的矩阵” |
默认值:“1” |
D
-馈通矩阵
0
(默认)
指定D矩阵。它必须是实数并且行数必须和C矩阵和相同多的列B矩阵。默认值为0
.
依赖关系
若要启用此端口,请设置源模型参数单独的A B C D矩阵.
编程使用
块参数:D |
类型:字符串,字符向量 |
价值观:“真正的矩阵” |
默认值:“0” |
状态数
-估计的州数
1
(默认)|非负的标量
要估计的状态数,指定为正整数。默认值为1
.
依赖关系
若要启用此端口,请设置源模型参数输入端口.
编程使用
块参数:NumberOfStates |
类型:字符串,字符向量 |
价值观:“1” |标量 |
默认值:“1” |
输入数量
-已知输入数
1
(默认)|非负的标量
模型中已知输入的数量,指定为正整数。默认值为1
.
依赖关系
若要启用此端口,请设置源模型参数输入端口.
编程使用
块参数:NumberOfInputs |
类型:字符串,字符向量 |
价值观:“1” |标量 |
默认值:“1” |
输出数
-测量输出数
1
(默认)|非负的标量
模型中测量输出的数量,指定为正整数。默认值为1
.
依赖关系
若要启用此端口,请设置源模型参数输入端口.
编程使用
块参数:NumberOfOutputs |
类型:字符串,字符向量 |
价值观:“1” |标量 |
默认值:“1” |
源
-指定如何输入初始状态估计和初始状态估计误差协方差
对话框
(默认)|输入端口
对话框
—在对话框中直接指定。输入端口
—从输入端口继承。默认为10
.该块包括一个额外的输入端口X0.第二个额外的输入端口P0当使用时变卡尔曼滤波器时,则添加。X0而且P0必须满足与参数初始状态x[0]和状态估计误差协方差P[0]相同的条件。
编程使用
块参数:InitialEstimateSource |
类型:字符串,字符向量 |
价值观:“对话框” |“输入端口” |
默认值:“对话框” |
初始状态x[0]
—初始状态估计
0
(默认)|标量
|向量
将初始状态估计指定为实标量或向量。如果指定一个标量,则所有初始状态估计都将设置为该标量。如果指定了一个向量,那么向量的长度必须与模型中的状态数相匹配。默认为0
.
依赖关系
若要启用此端口,请设置源参数对话框.
编程使用
块参数:X0 |
类型:字符串,字符向量 |
价值观:“0” |标量 |向量 |
默认值:“0” |
状态估计误差协方差P[0]
—初始状态估计误差协方差
10
(默认)|标量
|向量
|矩阵
为离散卡尔曼滤波器指定初始状态估计误差协方差P[0],为连续卡尔曼滤波器指定初始状态估计误差协方差P(0)。此参数必须指定为以下之一:
实非负标量。P是一个Ns——- - - - - -Ns对角线上有标量的对角线矩阵。Ns是模型中的状态数。
实非负标量的向量。P是一个Ns——- - - - - -Ns对角线矩阵与元素向量对角线上的P.
Ns——- - - - - -Ns正半定矩阵。
依赖关系
若要启用此端口,请设置源模型参数输入端口而且源参数对话框.
编程使用
块参数:P0 |
类型:字符串,字符向量 |
价值观:“10” |标量 |向量 |矩阵 |
默认值:“10” |
使用模型变量的卡尔曼增益K
-是否使用状态空间植物模型中包含的预先识别的卡尔曼增益
从
(默认)|在
指定是否使用状态空间模型中预先识别的卡尔曼增益变量.
依赖关系
启用该参数需要满足以下条件:
的源模型设置为状态空间变量而且变量是已标识的状态空间模型(
中的难点
)与非零K矩阵。选择时不变Q,时不变R,时不变N参数。
如果使用G和H矩阵(默认G=I和H=0)参数时,则时不变G而且时不变H还必须选择参数。
编程使用
块参数:UseK |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“关闭” |
使用G和H矩阵(默认G=I和H=0)
—G、H矩阵是否使用非默认值
从
(默认)|在
默认情况下G =我
而且H = 0
.如果选择此选项,则必须指定G而且H参数。
编程使用
块参数:UseGH |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“关闭” |
G
-指定G矩阵
1
(默认)|非负的标量
|向量
|矩阵
它必须是一个行数和矩阵一样多的实矩阵一个矩阵。默认值为1
.
依赖关系
若要启用该参数,请选中使用G和H矩阵(默认G=I和H=0)参数。
编程使用
块参数:G |
类型:字符串,字符向量 |
价值观:标量|向量|矩阵 |
默认值:“1” |
定常G
-指定G矩阵是时不变的
在
(默认)|从
如果取消选择此选项,则该块包含一个额外的输入端口G.
编程使用
块参数:TimeInvariantG |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“上” |
H
—指定H矩阵
0
(默认)|非负的标量
|向量
|矩阵
它必须是一个行数和矩阵一样多的实矩阵C矩阵和相同多的列G矩阵。默认值为0
.
依赖关系
若要启用该参数,请选中使用G和H矩阵(默认G=I和H=0)参数。
编程使用
块参数:H |
类型:字符串,字符向量 |
价值观:标量|向量|矩阵 |
默认值:“0” |
定常H
-指定H矩阵为时不变矩阵
在
(默认)|从
如果取消选择此选项,则该块包含一个额外的输入端口H.
编程使用
块参数:TimeInvariantH |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“上” |
过程噪声输入的数量
-过程噪声输入
1
(默认)|非负的标量
在模型中指定过程噪声输入的数量。默认值为1
.
依赖关系
仅当定常G而且定常H去掉的时候。否则,此信息将从G或H矩阵。
编程使用
块参数:NumberOfProcessNoiseInputs |
类型:字符串,字符向量 |
价值观:标量 |
默认值:“1” |
问
-过程噪声协方差矩阵
0.05
(默认)|非负的标量
|向量
|矩阵
指定的:指定为下列之一的:
实非负标量。问是一个西北——- - - - - -西北对角线上有标量的对角线矩阵。西北是模型中过程噪声输入的数量。
实非负标量的向量。问是一个西北——- - - - - -西北对角线矩阵与元素向量对角线上的问.
西北——- - - - - -西北正半定矩阵。
依赖关系
要启用此参数,请选择定常问参数。
编程使用
块参数:问 |
类型:字符串,字符向量 |
价值观:标量|向量|矩阵 |
默认值:“0.05” |
定常问
- Q矩阵是否时不变
在
(默认)|从
如果取消选择该参数,则该块包含一个额外的输入端口问.
编程使用
块参数:TimeInvariantQ |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“上” |
R
-测量噪声协方差矩阵
1
(默认)|非负的标量
|向量
|矩阵
指定的:指定为下列之一的:
实正标量。R是一个纽约——- - - - - -纽约对角线上有标量的对角线矩阵。纽约是模型中测量输出的数量。
实正标量的向量。R是一个纽约——- - - - - -纽约对角线矩阵与元素向量对角线上的R.
纽约——- - - - - -纽约正定矩阵。
依赖关系
要启用此参数,请选择定常R参数。
编程使用
块参数:R |
类型:字符串,字符向量 |
价值观:标量|向量|矩阵 |
默认值:“1” |
定常R
-指定R矩阵是否时不变
在
(默认)|从
如果取消选择该参数,则该块包含一个额外的输入端口R.
编程使用
块参数:TimeInvariantR |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“上” |
N
-过程和测量噪声交叉协方差矩阵
0
(默认)|非负的标量
|向量
|矩阵
指定此参数为a西北——- - - - - -纽约矩阵。矩阵[Q N;NTR必须是肯定的。
依赖关系
要启用此参数,请选择定常N参数。
编程使用
块参数:N |
类型:字符串,字符向量 |
价值观:标量|向量|矩阵 |
默认值:“0” |
定常N
-指定N矩阵是否时不变
在
(默认)|从
如果取消选择该参数,则该块包含一个额外的输入端口N.
编程使用
块参数:TimeInvariantN |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“上” |
选项
额外的港口增加输入端口u
-指定模型是否包含已知输入
在
(默认)|从
如果您的模型包含已知输入,则选择此选项u (t)
或u [k]
.该参数默认为选中。取消选择该参数将删除输入端口u,并删除B,D而且输入数量块对话框中的参数。
编程使用
块参数:AddInputPort |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“上” |
增加输入端口使能控制测量更新
-控制测量更新
从
(默认)|在
如果要控制度量更新,请选择此选项。该块包括一个额外的导入启用.的启用输入端口接受标量信号。默认不勾选。
默认情况下,块在每个时间步骤进行测量更新,以改进状态和输出估计
而且
基于测量输出。测量更新是跳过当前采样时间,当信号在启用端口是0
.具体地说,状态估计方程变成
为连续时间卡尔曼滤波器和
离散时间。
请注意
使启用端口允许控制测量更新。默认情况下,卡尔曼滤波器进行测量更新。
编程使用
块参数:AddEnablePort |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“关闭” |
外部复位
-选项重置估计的状态和参数协方差矩阵使用指定的初始值
没有一个
(默认)|不断上升的
|下降
|要么
|水平
|保持水平
该参数帮助控制何时重置块。假设你在某个时间步重设这个块,t
.如果块在t
时,软件使用块对话框或输入端口中指定的初始参数值P0而且X0来估计状态。换句话说,在t
,该块执行时间更新,如果启用,则在重置后进行测量更新。该块输出这些更新的估计。
指定下列之一:
没有一个
(默认)-估计状态 和状态估计误差协方差矩阵P不重置值。不断上升的
—当控制信号从负值或零值上升到正值时触发复位。如果初始值为负,上升到零将触发重置。下降
—当控制信号从正值或零值降到负值时触发复位。如果初始值为正,则降为零触发重置。要么
—当控制信号上升或下降时触发复位。水平
-在以下两种情况下触发重置:控制信号在当前时间步长为非零。
控制信号由上一时间步的非零变为当前时间步的零。
保持水平
—当当前时间步长控制信号非零时触发复位。
当你选择了没有一个
,一个重置输入端口被添加到块提供复位控制输入信号。
编程使用
块参数:ExternalReset |
类型:字符串,字符向量 |
价值观:“没有” |“上升” |“下降” |“不是” |“水平” |“持有” |
默认值:“没有” |
输出估计模型输出y
-包括估计的模型输出
从
(默认)|在
添加一个 输出端口到块,以输出估计的模型输出。默认不选择。
编程使用
块参数:OutputEstimatedY |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“关闭” |
输出状态估计误差协方差Z
—添加Z输出端口到块中
从
(默认)|在
添加一个Z输出端口到块。的Z仅当时间域是离散时间和利用当前测量值y[n]改进xhat[n]参数选中。否则,P矩阵中所描述的算法节提供。
默认不勾选。
编程使用
块参数:OutputZ |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“关闭” |
输出状态估计误差协方差
—添加P个输出端口到块中
从
(默认)|在
添加一个P输出端口到块。默认不勾选。
依赖关系
若要启用此端口,请设置时间域参数连续时间或设置时间域参数离散时间和取消选择利用当前测量值y[n]改进xhat[n]参数。
编程使用
块参数:OutputP |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“关闭” |
算法
连续时间估计
考虑到连续植物
已知输入u,过程白噪声w,白测量噪声v令人满意的
构建一个状态估计 使状态估计误差协方差最小化 .
最优解是带方程的卡尔曼滤波
在哪里
卡尔曼滤波器使用已知输入u和测量y生成状态估计 .如果需要,该块还可以输出估算的真实工厂产量 .
当系统矩阵为((t)
,B (t)
,C (t)
,D (t)
,G (t)
,H (t)
)和噪声协方差矩阵(问(t)
,R (t)
,N (t)
)为常量(在块参数对话框中指定)。稳态卡尔曼滤波器使用常数矩阵P
使稳态估计误差协方差最小化,并求解相关的连续时间代数Riccati方程:
离散时间估计
考虑离散植物
已知输入u,过程白噪声w,白测量噪声v令人满意的
估计器的状态方程如下
收益在哪里L [n]
通过离散Riccati方程计算:
其中I是适当大小的单位矩阵
稳态卡尔曼滤波器使用常数矩阵P
使稳态估计误差协方差最小化,并求解相关的离散时间代数Riccati方程。
离散时间卡尔曼滤波器有两种变体:
当前估计器生成状态估计 使用所有可用的测量方法,包括y[n].过滤器更新 与y[n],输出:
延迟估计器生成状态估计 使用高达y[n1]。过滤器输出 与前面定义的一样,以及可选输出
电流估计器比延迟估计器有更好的估计精度,这对于慢采样时间很重要。但是,它具有较高的计算成本,因此在控制循环中实现它比较困难。更具体地说,它具有直接馈通,如果卡尔曼滤波器用于不包含任何延迟的反馈循环中,则会导致代数循环(反馈循环本身也具有直接馈通)。这种代数循环会影响模拟的速度,如果模型包含代数循环,则无法生成代码。
参考文献
[1]富兰克林,吉恩F, J.大卫鲍威尔,迈克尔L.沃克曼。动态系统的数字控制“,.第二版。Reading, Mass: Addison-Wesley, 1990。
[2]刘易斯,弗兰克L。最优估计:随机控制理论导论.纽约:Wiley出版社,1986年。
扩展功能
C/ c++代码生成
使用Simulink®Coder™生成C和c++代码。
PLC代码生成
使用Simulink®PLC Coder™生成结构化文本代码。
版本历史
在R2014b中引入R2021a:卡尔曼滤波块:数值变化
从2021a开始,在算法上的数值改进卡尔曼滤波器块生成的结果可能与使用以前版本获得的结果不同。
另请参阅
功能
块
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。