主要内容

卡尔曼

设计卡尔曼滤波器的状态估计

    描述

    例子

    (kalmf,l,P)=卡尔曼(sys,,R,N)创建了一个卡尔曼滤波器模型考虑到工厂sys和噪声协方差数据,R,N。函数计算一个卡尔曼滤波器中使用的卡尔曼滤波估计的配置如下图所示。

    卡尔曼滤波估计包括植物sys和卡尔曼滤波器kalmf。工厂输入u,欧美噪声输入w和输出。卡尔曼滤波将作为输入w和嘈杂的工厂产出y =刘日东+ v y-hat滤波器输出后,估计真正的工厂产出,x帽,估计状态值。

    您构建模型sys与已知的输入u和白噪声输入过程w,这样w由过去的Nw输入sys。“真正”的植物的输出yt包括的所有输出sys。你也提供噪声协方差数据,R,N。返回的卡尔曼滤波器kalmf这需要已知的输入状态空间模型吗u和噪声测量y并产生估计 y ^ 真正的工厂产出和估计 x ^ 植物状态。卡尔曼还返回卡尔曼增益l和稳态误差协方差矩阵P

    例子

    (kalmf,l,P)=卡尔曼(sys,,R,N,传感器,已知的)计算一个卡尔曼滤波器在下列一个或两个条件存在。

    • 并非所有的输出sys测量。

    • 扰动的输入w不是最后的输入sys

    索引向量传感器指定的输出sys测量。这些输出组成y。索引向量已知的指定输入是已知的(确定性)。已知的输入组成u。的卡尔曼命令将其余的输入sys随机输入w

    (kalmf,l,P,Mx,Z,我的)=卡尔曼(___)还返回创新收益Mx我的和稳态误差协方差PZ一个离散时间sys。您可以使用该语法与任何以前的输入参数组合。

    (kalmf,l,P,Mx,Z,我的)=卡尔曼(___,类型)指定了离散时间的估计式sys

    • 类型=“当前”——计算输出估计 y ^ ( n | n ] 和状态估计 x ^ ( n | n ] 使用所有可用的测量 y ( n ]

    • 类型=“延迟”——计算输出估计 y ^ ( n | n 1 ] 和状态估计 x ^ ( n | n 1 ] 只使用测量 y ( n 1 ] 。延迟估计更容易实现内部控制循环。

    您可以使用类型输入参数与以前的任何输入参数组合。

    例子

    全部折叠

    设计一个卡尔曼滤波器对加性白噪声的一种植物w在输入和v输出,如下列图所示。

    kalman4.png

    假设植物具有以下是一个离散状态方程矩阵和植物,样品时间(不详Ts = 1)。

    A = [1.1269 -0.4940 0.1129 1.0000 1.0000 0 0 0 0];B = (-0.3832 0.5919 0.5191);C = (1 0 0);D = 0;工厂= ss (A, B, C, D, 1);工厂。我nputName =“联合国”;工厂。OutputName =“次”;

    使用卡尔曼,你必须提供一个模型sys有一个输入噪声w。因此,sys是不一样的植物,因为植物需要输入联合国= u + w。您可以构造sys通过创建一个求和点噪声的输入。

    和= sumblk (“联合国= u + w”);sys =连接(植物,和,{“u”,' w '},“次”);

    同样,您可以使用sys =植物* [1]

    指定噪声协方差。因为工厂有一个输入和一个输出噪声,这些值是标量。在实践中,这些值属性系统的噪声来源,您确定的测量或其他系统的知识。对于这个示例,假设两个噪声源有单位协方差和不相关(N= 0)。

    Q = 1;R = 1;N = 0;

    设计滤波器。

    [kalmf L P] =卡尔曼(sys, Q, R, N);大小(kalmf)
    4输出,状态空间模型2的输入,3。

    的卡尔曼滤波器kalmf是一个有两个输入和四个输出状态空间模型。kalmf将输入信号作为输入的工厂u和嘈杂的工厂产出 y = y t + v 。第一个输出估计是真的工厂产出 y ˆ 。剩下的三个输出状态估计 x ˆ 。检查输入和输出的名称kalmf来看看卡尔曼相应地标签。

    kalmf.InputName
    ans =2 x1细胞{' u '}{“欧美”}
    kalmf.OutputName
    ans =4 x1细胞{' yt_e} {‘x1_e} {‘x2_e} {' x3_e '}

    检查卡尔曼增益l。输出工厂的三个州,l是一个三元素列向量。

    l
    L =3×10.3586 0.3798 0.0817

    为例,展示了如何使用kalmf由于噪音,减少测量误差卡尔曼滤波

    考虑植物与三个输入,一个代表过程的噪声w,两个测量输出。植物有四个州。

    kalman5.png

    假设以下状态矩阵,创造sys

    (-0.71 0.06 -0.19 = -0.17;0.06 -0.52 -0.03 0.30;-0.19 -0.03 -0.24 -0.02;-0.17 0.30 -0.02 -0.41);B = (1.44 - 2.91 0;-1.97 0.83 -0.27;-0.20 1.39 1.10;-1.2 0 -0.28];C = [0 -0.36 -1.58 0.28;-2.05 0 0.51 0.03); D = zeros(2,3); sys = ss(A,B,C,D); sys.InputName = {‘u1’,“u2”,' w '};sys。OutputName = {“日元”,“日元”};

    因为工厂只有一个过程噪声输入,协方差是一个标量。对于这个示例,假设过程噪声协方差单位。

    Q = 1;

    卡尔曼使用的尺寸,以确定哪些输入是已知的和噪声的输入。对于标量,卡尔曼假设一个噪声输入,并使用过去的输入,除非你指定否则(见植物,无边无际的输出)。

    测量噪声的两个输出,指定一个2×2噪声协方差矩阵。对于这个示例,使用单位第一输出方差,方差为1.3的第二输出。非对角的值设置为0,表明这两个噪声通道是不相关的。

    R = [1 0;0 1.3);

    设计卡尔曼滤波器。

    [kalmf L P] =卡尔曼(sys, Q, R);

    检查输入和输出。卡尔曼使用InputName,OutputName,InputGroup,OutputGroup的属性kalmf帮助你跟踪的输入和输出kalmf代表。

    kalmf.InputGroup
    ans =结构体字段:KnownInput(1 2):测量:[3 - 4]
    kalmf.InputName
    ans =4 x1细胞{‘u1’} {“u2”}{“日元”}{y2的}
    kalmf.OutputGroup
    ans =结构体字段:OutputEstimate: [1] StateEstimate: [3 4 5 6)
    kalmf.OutputName
    ans =6 x1细胞{' y1_e} {‘y2_e} {‘x1_e} {‘x2_e} {‘x3_e} {' x4_e '}

    因此,两个已知输入u1u2是第一个两个输入的kalmf两个测量输出日元y2最后两个输入吗kalmf。的输出kalmf,前两个是估计的输出,其余四个状态估计。使用卡尔曼滤波器,将这些输入连接到工厂和噪音信号的方式类似于所示的输出装置卡尔曼滤波

    考虑植物有四个输入和两个输出。第一个和第三个输入是已知的,而第二个和第四个输入代表过程噪声。植物也有两个输出,但是只有第二测量。

    kalman6.png

    使用下面的整数矩阵的创建sys

    (-0.37 0.14 -0.01 = 0.04;0.14 -1.89 0.98 -0.11;-0.01 0.98 -0.96 -0.14;0.04 -0.11 -0.14 -0.95);B = [-0.07 - -2.32 0.68 - 0.10;-2.49 - 0.08 0 0.83;0 0 -0.95 0.54;-2.19 0.41 0.45 0.90);C = [0 0 -0.50 - -0.38;-0.15 -2.12 -1.27 0.65); D = zeros(2,4); sys = ss(A,B,C,D,-1);%离散与未指明的样品时间sys。我nputName = {‘u1’,“w1”,“u2”,“那”};sys。OutputName = {“云”,“ym”};

    使用卡尔曼为该系统设计一个滤波器,使用已知的传感器输入参数指定哪个输入输出的植物是已知的和测量。

    知道= [1 3];传感器= [2];

    指定过滤噪声协方差和设计。

    Q =眼(2);R = 1;N = 0;(kalmf L P) =卡尔曼(sys, Q, R, N,传感器,已知);

    检查输入和输出的标签kalmf显示了输入滤波器期望和输出它的回报。

    kalmf.InputGroup
    ans =结构体字段:KnownInput(1 2):测量:3
    kalmf.InputName
    ans =3 x1细胞{‘u1’} {“u2”} {“ym”}

    kalmf作为输入的两个已知输入sys噪声的测量输出sys

    kalmf.OutputGroup
    ans =结构体字段:OutputEstimate: 1 StateEstimate:(2 3 4 5)

    第一个输出的kalmf是它的真正价值的估计测量装置的输出。剩下的输出状态估计。

    输入参数

    全部折叠

    植物模型与过程噪声、指定为非整数(党卫军)模型。植物已知输入u和白噪声输入过程w。工厂的产量yt不包括测量噪声。

    图显示系统包括植物动力学和过程噪声输入,而不是植物上的加性噪声输出。

    您可以编写这样一个植物模型的状态矩阵为:

    一个 , ( B G ] , C , ( D H ]

    卡尔曼假设高斯噪声v在输出。因此,在连续时间,状态空间方程卡尔曼适用于:

    x ˙ = 一个 x + B u + G w y = C x + D u + H w + v

    在离散时间状态空间方程是:

    x ( n + 1 ] = 一个 x ( n ] + B u ( n ] + G w ( n ] y ( n ] = C x ( n ] + D u ( n ] + H w ( n ] + v ( n ]

    如果你不使用已知的输入参数,卡尔曼使用的大小,以确定哪些输入的sys噪声的输入。在这种情况下,卡尔曼把最后一个Nw=大小(Q, 1)输入噪声的输入。当噪声的输入w不是最后的输入sys,你可以使用已知的输入参数指定哪个工厂输入是已知的。卡尔曼将剩下的输入视为随机。

    额外的限制植物的属性矩阵,明白了限制

    过程噪声协方差,指定为一个标量或Nw——- - - - - -Nw矩阵,Nw是噪声输入的数量。卡尔曼使用的大小,以确定哪些输入的sys噪声输入,带过去Nw=大小(Q, 1)输入噪声的输入,除非你指定否则已知的输入参数。

    卡尔曼假设噪声过程w与协方差高斯噪声=E(wwT)。当植物只有一个过程噪声输入,一个标量等于方差的w。当植物有多个不相关的噪声输入,是一个对角矩阵。在实践中,您确定适当的值通过测量或猜测关于你的系统的噪声特性。

    测量噪声协方差,指定为一个标量或Ny——- - - - - -Ny矩阵,Ny是植物的数量输出。卡尔曼假设测量噪声v和协方差是白噪音吗R=E(vvT)。当植物只有一个输出通道,R一个标量等于方差的v。当植物有多个输出通道与不相关的测量噪声,R是一个对角矩阵。在实践中,您确定适当的值R通过测量或猜测关于你的系统的噪声特性。

    额外的测量噪声协方差约束,明白了限制

    噪声协方差交叉,指定为一个标量或Ny——- - - - - -Nw矩阵。卡尔曼假设噪声过程w和测量噪声v满足N=E(西弗吉尼亚州T)。如果两个噪声源不相关,你可以省略N,相当于设置N = 0。在实践中,您确定适当的值N通过测量或猜测关于你的系统的噪声特性。

    测量的输出sys指定为一个向量的指标确定的输出sys测量。例如,假设您的系统有三个输出,但只有其中两个,对应于第一和第三输出sys。在这种情况下,集传感器= 3 [1]

    已知输入的sys指定为一个向量指标确定的输入是已知的(确定性)。例如,假设您的系统有三个输入,但只有第一和第二输入是已知的。在这种情况下,集知道= [1 - 2]卡尔曼解释任何剩余的输入sys随机。

    类型的离散时间估计量来计算,指定为“当前”“延迟”。这对离散时间只输入相关sys

    • “当前”——计算输出估计 y ^ ( n | n ] 和状态估计 x ^ ( n | n ] 使用所有可用的测量 y ( n ]

    • “延迟”——计算输出估计 y ^ ( n | n 1 ] 和状态估计 x ^ ( n | n 1 ] 只使用测量 y ( n 1 ] 。延迟估计更容易实现内部控制循环。

    有关详细信息,如何卡尔曼计算当前和延迟估计,明白了离散时间估计

    输出参数

    全部折叠

    卡尔曼滤波估计或卡尔曼滤波器,返回一个整数(党卫军)模型。得到的估计量输入 ( u ; y ] 和输出 ( y ^ ; x ^ ] 。换句话说,kalmf作为输入装置输入u和嘈杂的工厂产出y,并产生输出估计无噪声的装置的输出 y ^ 和估计的状态值 x ^

    图显示卡尔曼滤波器输入u和y和输出y-hat和x帽。

    卡尔曼自动设置InputName,OutputName,InputGroup,OutputGroup的属性kalmf为了帮助您跟踪的输入和输出信号对应。

    为国家和输出方程kalmf,请参阅连续时间估计离散时间估计

    过滤器,返回的数组的大小Nx——- - - - - -Ny,在那里Nx植物的状态数Ny是植物的数量输出。在连续时间,卡尔曼滤波器的状态方程是:

    x ^ ˙ = 一个 x ^ + B u + l ( y C x ^ D u )

    在离散时间,状态方程是:

    x ^ ( n + 1 | n ] = 一个 x ^ ( n | n 1 ] + B u ( n ] + l ( y ( n ] C x ^ ( n | n 1 ] D u ( n ] )

    这些表达式的细节以及如何l计算,看连续时间估计离散时间估计

    稳态误差协方差,返回Nx——- - - - - -Nx,在那里Nx在植物的状态数。卡尔曼滤波计算状态估计最小化P。在连续时间,稳态误差协方差是由:

    P = lim t E ( { x x ^ } { x x ^ } T )

    在离散时间,给出了稳态误差协方差:

    P = lim n E ( { x ( n ] x ^ ( n | n 1 ] } { x ( n ] x ^ ( n | n 1 ] } T ) , Z = lim n E ( { x ( n ] x ^ ( n | n ] } { x ( n ] x ^ ( n | n ] } T )

    为进一步的细节以及如何对这些数量卡尔曼使用它们,看连续时间估计离散时间估计

    创新收益的状态估计对于离散时间系统,作为一个数组返回。

    Mx我的只有当相关类型= '现在'离散时间系统,这是默认的估计量。对连续时间sys类型=“延迟”,然后Mx =我= []

    “当前”类型估计量,Mx我的创新成果的更新方程:

    x ^ ( n | n ] = x ^ ( n | n 1 ] + x ( y ( n ] C x ^ ( n | n 1 ] D u ( n ] )

    y ^ ( n | n ] = C x ^ ( n | n 1 ] + D u ( n ] + y ( y ( n ] C x ^ ( n | n 1 ] D u ( n ] )

    当没有直接从噪声输入引线w工厂的产量y(也就是说,当H= 0,看到离散时间估计),然后 y = C x ,输出估计简化 y ^ ( n | n ] = C x ^ ( n | n ] + D u ( n ]

    数组的尺寸Mx我的依赖的尺寸sys如下。

    • Mx- - - - - -Nx——- - - - - -Ny,在那里Nx植物的状态数Ny是输出的数量。

    • 我的- - - - - -Ny——- - - - - -Ny

    有关详细信息,如何卡尔曼获得Mx我的,请参阅离散时间估计

    限制

    植物和噪声数据必须满足:

    • (C,一个)检测,地点:

    • R ¯ > 0 ( ¯ N ¯ ; N ¯ R ¯ ] 0 ,在那里

      ( ¯ N ¯ N ¯ R ¯ ] = ( G 0 H ] ( N N R ] ( G 0 H ]

    • ( 一个 N ¯ R ¯ 1 C , ¯ N ¯ R ¯ 1 N ¯ T ) 没有无法控制模式在连续时间的虚轴,或在离散时间在单位圆上。

    算法

    全部折叠

    连续时间估计

    考虑一个连续时间与已知输入植物u、白噪声过程w,测量白噪声v:

    x ˙ = 一个 x + B u + G w y = C x + D u + H w + v

    噪声信号wv满足:

    E ( w ) = E ( v ) = 0 , E ( w w T ) = , E ( v v T ) = R , E ( w v T ) = N

    卡尔曼滤波,卡尔曼估计,计算状态估计 x ^ ( t ) 最大限度地减少稳态误差协方差:

    P = lim t E ( { x x ^ } { x x ^ } T )

    卡尔曼滤波器的状态和输出方程如下:

    d x ^ d t = 一个 x ^ + B u + l ( y C x ^ D u ) ( y ^ x ^ ] = ( C ] x ^ + ( D 0 ] u

    获得滤波器增益l,卡尔曼解决了一个代数黎卡提微分方程获得

    l = ( P C T + N ¯ ) R ¯ 1

    在哪里

    R ¯ = R + H N + N T H T + H H T N ¯ = G ( H T + N )

    P解决相应的代数黎卡提微分方程。

    估计使用已知的输入u和测量y生成的输出和状态估计 y ^ x ^

    离散时间估计

    离散植物是由:

    x ( n + 1 ] = 一个 x ( n ] + B u ( n ] + G w ( n ] y ( n ] = C x ( n ] + D u ( n ] + H w ( n ] + v ( n ]

    在离散时间,噪音信号wv满足:

    E ( w ( n ] w ( n ] T ) = , E ( v ( n ] v ( n ] T ) = R , E ( w ( n ] v ( n ] T ) = N

    离散时间估计有以下状态方程:

    x ^ ( n + 1 | n ] = 一个 x ^ ( n | n 1 ] + B u ( n ] + l ( y ( n ] C x ^ ( n | n 1 ] D u ( n ] )

    卡尔曼解决了一个离散的黎卡提微分方程获得增益矩阵l:

    l = ( 一个 P C T + N ¯ ) ( C P C T + R ¯ ) 1

    在哪里

    R ¯ = R + H N + N T H T + H H T N ¯ = G ( H T + N )

    卡尔曼可以计算两个变量的离散卡尔曼估计,当前估计量(类型=“当前”)和延迟估计量(类型=“延迟”)。

    • 目前的估计量,估计生成输出 y ^ ( n | n ] 和状态估计 x ^ ( n | n ] 使用所有可用的测量 y ( n ] 。这个估计量的输出方程

      ( y ^ ( n | n ] x ^ ( n | n ] ] = ( ( y ) C x C ] x ^ ( n | n 1 ] + ( ( y ) D y x D x ] ( u ( n ] y ( n ] ]

      创新的收益xy被定义为:

      x = P C T ( C P C T + R ¯ ) 1 , y = ( C P C T + H H T + H N ) ( C P C T + R ¯ ) 1

      因此,x更新状态估计 x ^ ( n | n 1 ] 使用新的测量 y ( n ] :

      x ^ ( n | n ] = x ^ ( n | n 1 ] + x ( y ( n ] C x ^ ( n | n 1 ] D u ( n ] )

      同样的,y计算更新后的输出估计:

      y ^ ( n | n ] = C x ^ ( n | n 1 ] + D u ( n ] + y ( y ( n ] C x ^ ( n | n 1 ] D u ( n ] )

      H= 0,那么 y = C x ,输出估计简化 y ^ ( n | n ] = C x ^ ( n | n ] + D u ( n ]

    • 延迟估计量,估计生成输出 y ^ ( n | n 1 ] 和状态估计 x ^ ( n | n 1 ] 只使用测量yv(n1]。这个估计量的输出方程:

      ( y ^ ( n | n 1 ] x ^ ( n | n 1 ] ] = ( C ] x ^ ( n | n 1 ] + ( D 0 0 0 ] ( u ( n ] y ( n ] ]

      延迟估计更容易部署内部控制循环。

    版本历史

    之前介绍过的R2006a