卡尔曼滤波器
估计离散时间或连续时间线性系统的状态
- 库:
控制系统工具箱/状态估计
系统识别工具箱/估计器
描述
使用卡尔曼滤波器块对给定过程和测量噪声协方差数据的状态空间工厂模型进行状态估计。状态空间模型可以时变。如果状态空间模型和噪声协方差矩阵都是时不变的,则使用稳态卡尔曼滤波器实现,否则使用时变卡尔曼滤波器。
卡尔曼滤波器为连续或离散估计问题提供了最优解连续时间估计(系统识别工具箱)而且离散时间估计(系统识别工具箱).
的卡尔曼滤波器块不同于卡尔曼
可以通过以下方式执行命令:
当你打电话时
卡尔曼(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
-过程和测量噪声交叉协方差矩阵
标量|向量|矩阵
过程噪声与测量噪声的互协方差矩阵,指定为a西北——- - - - - -纽约矩阵。矩阵[Q N;NTR一定是正定的。
依赖关系
若要启用此端口,请取消选择定常N参数。
P0
-初始状态估计误差协方差
标量|向量|矩阵
P初始时间的矩阵。
依赖关系
若要启用此端口,请设置源模型参数输入端口并设置源参数输入端口.
X0
-初始状态估计
标量|向量
初始时间的估计状态。
依赖关系
若要启用此端口,请设置源参数输入端口.
启用
-控制信号,以启用测量更新
标量
此端口控制测量更新并接受标量信号。
依赖关系
若要启用此端口,请选择添加输入端口Enable,控制测量更新参数。
重置
-控制信号重置状态估计
标量
输出
xhat
-预估状态
标量|向量
线性系统的估计状态。
yhat
-估计产出
标量|向量
线性系统的估计输出。
依赖关系
若要启用此端口,请选择输出估计模型输出y参数。
Z
-状态估计误差协方差
矩阵
添加Z输出端口到块。
若要启用此端口,请选择输出状态估计误差协方差Z参数。
依赖关系
若要启用此端口,请设置时间域参数离散时间并选择使用电流测量y[n]来改进xhat[n]参数。
P
-状态估计误差协方差
矩阵
添加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
(默认)|非负的标量
|向量
|矩阵
将此参数指定为西北——- - - - - -纽约矩阵。矩阵[Q N;NTR一定是正定的。
依赖关系
若要启用此参数,请选择定常N参数。
编程使用
块参数:N |
类型:字符串,字符向量 |
价值观:标量|向量|矩阵 |
默认值:“0” |
定常N
-指定N矩阵是否是时不变的
在
(默认)|从
如果取消选择此参数,则块包含一个额外的输入端口N.
编程使用
块参数:TimeInvariantN |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“上” |
选项
额外的港口添加输入端口u
-指定模型是否包含已知输入
在
(默认)|从
如果您的模型包含已知的输入,则选择此选项u (t)
或u [k]
.默认为勾选。取消选择此参数将删除输入端口u从块中删除B,D而且输入数量参数从块对话框。
编程使用
块参数:AddInputPort |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“上” |
添加输入端口Enable,控制测量更新
-控制测量数据更新
从
(默认)|在
如果希望控制度量更新,则选择此选项。该块包含一个附加的导入启用.的启用输入端口接受标量信号。默认不勾选。
默认情况下,该块在每个时间步骤进行测量更新,以改进状态和输出估计
而且
基于测量的输出。中的信号时,将跳过当前采样时间的测量更新启用端口是0
.具体来说,状态估计方程变成
为连续时间卡尔曼滤波器和
离散时间。
请注意
使启用端口允许控制测量更新。默认情况下,卡尔曼滤波器进行测量更新。
编程使用
块参数:AddEnablePort |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“关闭” |
外部复位
-选项重置估计状态和参数协方差矩阵使用指定的初始值
没有一个
(默认)|不断上升的
|下降
|要么
|水平
|保持水平
该参数帮助控制块何时重置。假设你按时间步重设这个块,t
.如果块在t
,软件使用块对话框或输入端口中指定的初始参数值P0而且X0来估计状态。换句话说,att
,块执行时间更新,如果启用,复位后执行度量更新。该块输出这些更新的估算值。
指定以下其中之一:
没有一个
(默认)-估计状态 状态估计误差协方差矩阵P不重置值。不断上升的
—当控制信号从负值或零上升到正值时,触发复位。如果初始值为负数,上升到零触发重置。下降
—当控制信号从正或零下降到负值时,触发复位。如果初始值为正,则下降到零触发重置。要么
—当控制信号上升或下降时触发复位。水平
-在以下情况下触发重置:控制信号在当前时间步长处非零。
控制信号从上一个时间步的非零变为当前时间步的零。
保持水平
—当控制信号在当前时间步长非零时触发复位。
当你选择了其他选项没有一个
,一个重置将输入端口添加到块中,以提供复位控制输入信号。
编程使用
块参数:ExternalReset |
类型:字符串,字符向量 |
价值观:“没有” |“上升” |“下降” |“不是” |“水平” |“持有” |
默认值:“没有” |
输出估计模型输出y
-包括估计的模型输出
从
(默认)|在
添加一个 输出端口到块输出估计的模型输出。默认不勾选。
编程使用
块参数:OutputEstimatedY |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“关闭” |
输出状态估计误差协方差Z
—添加Z输出端口到块中
从
(默认)|在
添加一个Z输出端口到块。的Z矩阵仅在时间域是离散时间和使用电流测量y[n]来改进xhat[n]参数。否则,P矩阵中所描述的算法(系统识别工具箱)部分提供。
默认不勾选。
编程使用
块参数:OutputZ |
类型:字符串,字符向量 |
价值观:“关闭” |“上” |
默认值:“关闭” |
输出状态估计误差协方差P
—添加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国家网站没有针对从您的位置访问进行优化。