主要内容

卡尔曼

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

    描述

    例子

    kalmflP=卡尔曼(sysRN创建给定植物模型的卡尔曼滤波器sys和噪声协方差数据R,N.该函数计算用于卡尔曼估计器的卡尔曼滤波器,配置如下图所示。

    卡尔曼估计包括植物系统和卡尔曼滤波器。工厂有输入u,噪声输入w,输出yt。卡尔曼滤波器以w和有噪声的植物输出y = yt + v作为输入,滤波器输出为估计的真实植物输出y帽和估计的状态值x帽。

    你构建模型sys已知输入u和白色过程噪声输入w,以致于w由最后一个组成Nw输入sys.“真实”的植物产量yt的所有输出sys.您还提供噪声协方差数据R,N.返回的卡尔曼滤波器kalmf是否采用已知输入的状态空间模型u还有噪声测量y然后做出一个估计 y 工厂的真实产量和估计值 x 植物状态。卡尔曼也返回卡尔曼增益l稳态误差协方差矩阵P

    例子

    kalmflP=卡尔曼(sysRN传感器已知的当下列条件之一或两者同时存在时,计算卡尔曼滤波器。

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

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

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

    kalmflPMxZ我的=卡尔曼(___还回报创新收益Mx我的稳态误差协方差PZ对于离散时间sys.您可以将此语法用于前面的任何输入参数组合。

    kalmflPMxZ我的=卡尔曼(___类型指定离散时间的估计器类型sys

    • Type = 'current'-计算输出估计 y n | n 以及各州的估计 x n | n 使用所有可用的测量到 y n

    • Type = 'delayed'-计算输出估计 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 000 1.0000 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不一样吗植物,因为植物接受输入UN = u + w.你可以构造sys通过为噪声输入创建求和结。

    Sum = sumblk('un = u + w');sys = connect(Plant,Sum,{“u”' w '},“次”);

    同样地,你可以使用sys = Plant*[1 1]

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

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

    设计过滤器。

    [kalmf,L,P] = kalman(sys,Q,R,N);大小(kalmf)
    具有4个输出、2个输入和3个状态的状态空间模型。

    卡尔曼滤波器kalmf是具有两个输入和四个输出的状态空间模型。kalmf以植物输入信号为输入u而工厂的输出噪声很大 y y t + v .第一个输出是估计的真实工厂产量 y ˆ .其余三个输出是状态估计 x ˆ .的输入和输出名称kalmf来看看卡尔曼相应地给它们贴上标签。

    kalmf。我nputName
    ans =2 x1细胞{'u'} {'yt'}
    kalmf。OutputName
    ans =4 x1细胞{'yt_e'} {'x1_e'} {'x2_e'} {'x3_e'}

    检验卡尔曼增益l.对于一个有三个状态的SISO工厂,l是一个三元素列向量。

    l
    L =3×10.3586 0.3798 0.0817

    为一个例子,说明如何使用kalmf要减少由于噪声引起的测量误差,请参见卡尔曼滤波

    考虑一个有三个输入的工厂,其中一个代表过程噪声w,和两个测量输出。工厂有四个状态。

    kalman5.png

    假设有以下状态空间矩阵,创建sys

    A = [-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的方差。将非对角线值设置为零表示两个噪声通道不相关。

    R = [10 0;0 1.3);

    设计卡尔曼滤波器。

    [kalmf,L,P] = kalman(sys,Q,R);

    检查输入和输出。卡尔曼使用InputNameOutputNameInputGroup,OutputGroup的属性kalmf帮助你记录输入和输出kalmf代表。

    kalmf。我nputGroup
    ans =带字段的结构:已知输入:[1 2]测量:[3 4]
    kalmf。我nputName
    ans =4 x1细胞{'u1'} {'u2'} {'y1'} {'y2'}
    kalmf。OutputGroup
    ans =带字段的结构:输出估计:[1 2]状态估计:[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,前两个为估计输出,其余四个为状态估计。为了使用卡尔曼滤波器,以类似于SISO设备的方式将这些输入连接到设备和噪声信号卡尔曼滤波

    考虑一个有四个输入和两个输出的工厂。第一个和第三个输入是已知的,而第二个和第四个输入表示过程噪声。该装置也有两个输出,但只有第二个输出被测量。

    kalman6.png

    使用以下状态空间矩阵创建sys

    A = [-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.95 0 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”};

    使用卡尔曼若要为此系统设计过滤器,请使用已知的传感器Input参数用于指定工厂的哪些输入是已知的,哪些输出是测量的。

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

    指定噪声协方差并设计滤波器。

    Q =眼睛(2);R = 1;N = 0;[kalmf,L,P] = kalman(sys,Q,R,N,传感器,已知);

    的输入和输出标签kalmf显示筛选器期望的输入和它返回的输出。

    kalmf。我nputGroup
    ans =带字段的结构:KnownInput: [1 2
    kalmf。我nputName
    ans =3 x1细胞{'u1'} {'u2'} {'ym'}

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

    kalmf。OutputGroup
    ans =带字段的结构:输出估计:1状态估计:[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高斯噪声是否具有协方差EwwT).当工厂只有一个过程噪声输入时,标量是否等于的方差w.当工厂有多个不相关的噪声输入时,是一个对角矩阵。在实践中,您将确定适当的值通过测量或对系统的噪声特性进行有根据的猜测。

    测量噪声协方差,指定为标量或Ny——- - - - - -Ny矩阵,Ny是工厂产出的数量。卡尔曼假设测量噪声v白噪声是否具有协方差REvvT).当工厂只有一个输出通道时,R标量是否等于的方差v.当设备有多个输出通道且测量噪声不相关时,R是一个对角矩阵。在实践中,您将确定适当的值R通过测量或对系统的噪声特性进行有根据的猜测。

    有关测量噪声协方差的其他约束,请参见限制

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

    测量输出sys,指定为索引向量,用于标识的输出sys测量。例如,假设您的系统有三个输出,但只测量了其中两个,对应于的第一个和第三个输出sys.在本例中,设置传感器= [1 3]

    的已知输入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帽和x帽的卡尔曼滤波器。

    卡尔曼自动设置InputNameOutputNameInputGroup,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 = My = []

    “当前”类型估计量,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卡尔曼求解一个代数Riccati方程,得到

    l P C T + N ¯ R ¯ 1

    在哪里

    R ¯ R + H N + N T H T + H H T N ¯ G H T + N

    P求解相应的代数Riccati方程。

    估计器使用已知的输入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

    卡尔曼求解离散Riccati方程得到增益矩阵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 使用测量仅到yvn1]。该估计器的输出方程为:

      y n | n 1 x n | n 1 C x n | n 1 + D 0 0 0 u n y n

      延迟估计器更容易部署在控制循环中。

    版本历史

    R2006a之前介绍