主要内容

扩展卡尔曼滤波器

基于扩展卡尔曼滤波的离散非线性系统状态估计

  • 库:
  • 控制系统工具箱/状态估计

    系统识别工具箱/评估器

  • ekf_block

描述

扩展卡尔曼滤波器block使用一阶离散时间扩展卡尔曼滤波算法估计离散时间非线性系统的状态。

考虑一个有状态的植物x、输入u输出y、过程噪声w,测量噪声v. 假设您可以将设备表示为一个非线性系统。

利用系统的状态转移和测量函数和扩展卡尔曼滤波算法,块生成状态估计 x 有关当前时间步长的信息,请参阅在线状态估计的扩展无迹卡尔曼滤波算法

您可以为系统创建非线性状态转换函数和测量函数,并在块中指定这些函数。该块支持多个传感器以不同采样率运行的系统的状态估计。您最多可以指定五个测量函数,每个测量函数对应于系统中的一个传感器。Y您还可以指定状态转换函数和测量函数的雅可比数。如果未指定它们,软件将以数字方式计算雅可比数。有关更多金宝app信息,请参阅状态转移和测量函数

港口

输入

全部展开

测量的系统输出对应于您在块中指定的每个测量功能。端口的数量等于系统中测量函数的数量。您最多可以指定五个测量功能。例如,如果系统有两个传感器,则在块中指定两个测量功能。第一个港口y1默认为可用。当你点击应用,软件生成端口y2对应于第二个测量函数。

指定端口为N维向量,N是相应传感器测量的数量。例如,如果系统有一个测量对象位置和速度的传感器,则只有一个端口y1.端口被指定为一个二维矢量,其值对应于位置和速度。

依赖关系

第一个港口y1默认为可用。港口y2y5是当你点击添加测量值,然后单击应用

数据类型:仅有一个的|

状态转换函数的附加可选输入参数f除了国家x工艺噪声w.有关状态转移函数的信息,请参阅:状态转移和测量函数

假设你的系统有非加性过程噪声和状态转移函数f有以下形式:

x (k + 1) = f (x (k), w (k), StateTransitionFcnInputs)

在这里k是时间步长,和StateTransitionFcnInputs是否有其他的输入参数xw

如果您创建f使用MATLAB®函数(.米文件),软件生成端口StateTransitionFcnInputs当你点击应用。您可以将此端口的输入指定为标量、向量或矩阵。

如果状态转移函数有多个额外的输入,请使用金宝app仿真软件的功能(金宝appSimulink)块指定函数。当你使用金宝app仿真软件的功能块,则直接向金宝app仿真软件的功能块使用轮廓尺寸(金宝appSimulink)块。没有为中的其他输入生成输入端口扩展卡尔曼滤波器块。

依赖关系

满足以下两个条件时,才会生成该端口:

  • 你指定f在里面函数使用MATLAB函数,并f是在MATLAB路径上。

  • f只需要一个额外的输入参数xw

数据类型:仅有一个的|

除状态外,测量功能的附加可选输入x测量噪声v.有关测量函数的信息,请参阅:状态转移和测量函数

测量CN1输入对应于您指定的第一个度量函数,等等。例如,假设你的系统有三个传感器和非相加的测量噪声,以及三个测量功能h1,,h3有以下形式:

y1 [k] = h1 (x [k], v1 [k], MeasurementFcn1Inputs)

y2[k]=h2(x[k],v2[k],测量输入)

y3 [k] = h3 (x [k], v3 [k])

在这里k是时间步长,和测量CN1输入测量CN2输入附加的输入参数是h1

如果您指定h1,,h3利用MATLAB函数(.米文件)函数时,软件生成端口测量CN1输入测量CN2输入当你点击应用.您可以将这些端口的输入指定为标量、向量或矩阵。

如果测量功能有多个附加输入,请使用金宝app仿真软件的功能(金宝appSimulink)块来指定函数。当你使用金宝app仿真软件的功能块,则直接向金宝app仿真软件的功能块使用轮廓尺寸(金宝appSimulink)块。没有为中的其他输入生成输入端口扩展卡尔曼滤波器块。

依赖关系

与测量功能相对应的端口h只有满足以下两个条件时才生成:

  • 你指定h在里面函数使用MATLAB函数,并h是在MATLAB路径上。

  • h只需要一个额外的输入参数xv

数据类型:仅有一个的|

时变过程噪声协方差,指定为标量、矢量或矩阵,具体取决于过程噪声参数:

  • 过程噪声添加剂—指定协方差为标量,anNs-元素向量,或Ns——- - - - - -Ns矩阵,Ns是系统的状态数。如果过程噪声项之间没有相互关联,并且所有的项具有相同的方差,则指定一个标量。指定一个长度的向量Ns,如果过程噪声项之间没有相互关联,但所有的项有不同的方差。

  • 过程噪声非相加-将协方差指定为W——- - - - - -W矩阵,W为状态转移函数中过程噪声项的个数。

依赖关系

如果您指定进程噪声协方差为,则会生成该端口时变.单击时将显示端口应用

数据类型:仅有一个的|

系统中多达五个测量函数的时变测量噪声协方差,以矩阵形式指定。矩阵的大小取决于测量噪声参数对应的测量功能:

  • 测量噪声添加剂—指定协方差为N——- - - - - -N矩阵,N是系统的测量次数。

  • 测量噪声非相加-将协方差指定为V——- - - - - -V矩阵,V为相应测量函数中测量噪声项的个数。

依赖关系

如果您指定测量噪声协方差为,将生成一个端口时变为相应的测量函数。单击时将显示端口应用

数据类型:仅有一个的|

假设测量的输出数据在端口的所有时间点都不可用y1这对应于第一个测量函数。使用其他信号值0Enable1端口,用于在测量数据可用时校正估计状态。将端口值指定为0没有测量数据时。类似地,如果测量的输出数据在港口的所有时间点都不可用yth测量功能,指定相应的端口使可能作为一个值,而不是0

依赖关系

如果选择,会生成与测量功能对应的端口添加启用端口对于这个测量函数。单击时将显示端口应用

数据类型:仅有一个的||布尔

输出

全部展开

估计状态,作为大小向量返回Ns,在那里Ns是系统的状态数。要访问各个状态,请使用选择器(金宝appSimulink)块。

使用当前度量来改进状态估计参数被选择,块输出修正后的状态估计 x k | k ] 时间步长k,使用测量的输出进行估计,直到k.如果清除此参数,该块将返回预测的状态估计 x k | k 1 ] 时间k,使用上一次测量的输出进行估计k - 1.如果你的过滤器在一个反馈循环中,并且在你的Simulink中有一个代数循环,那么清除这个参数金宝app®模型

数据类型:仅有一个的|

状态估计误差协方差,返回为Ns——- - - - - -Ns矩阵,Ns是系统的状态数。要访问单个协方差,请使用选择器(金宝appSimulink)块。

依赖关系

如果选择,则生成该端口输出状态估计误差协方差系统模型选项卡,并单击应用

数据类型:仅有一个的|

参数

全部展开

系统模型选项卡

状态转换

状态转移函数计算Ns-系统在时间步长的元素状态向量k+1,给定时间步的状态向量kNs非线性系统的状态数。创建状态转移函数并在中指定函数名称函数.例如,如果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使用金宝app仿真软件的功能(金宝appSimulink)块或作为MATLAB函数(.米文件)。

  • 您可以使用MATLAB函数,只有当f有一个额外的输入参数Us1除了xw

    x (k + 1) = f (x (k), w (k), Us1 (k))

    该软件生成一个额外的输入端口StateTransitionFcnInputs指定此参数。

  • 如果你用a金宝app仿真软件的功能块,指定xw使用参数尺寸。(金宝appSimulink)块和附加输入Us1,…,Usn使用轮廓尺寸(金宝appSimulink)块的金宝app仿真软件的功能块。你不提供Us1,…,Usn扩展卡尔曼滤波器块。

编程使用

块参数:状态转换
类型:字符向量,字符串
默认值:“myStateTransitionFcn”

状态转移函数的雅可比矩阵f,指定为以下内容之一:

  • -软件计算雅可比矩阵的数值。这种计算可能会增加状态估计的处理时间和数值误差。

  • -创建一个函数来计算雅可比矩阵,并在中指定函数的名称雅可比.例如,如果vdpStateJacobianFcn.m雅可比函数是指定的吗雅可比作为vdpStateJacobianFcn. 如果你创造the state transition functionf使用金宝app仿真软件的功能(金宝appSimulink)块,然后使用金宝app仿真软件的功能块。如果您创建f使用MATLAB函数(.米文件),然后使用MATLAB函数创建雅可比矩阵。

    该函数计算状态转移函数对状态和过程噪声的偏导数。雅可比函数的输入数必须等于状态转移函数的输入数并且在两个函数中必须以相同的顺序指定。雅可比函数的输出数取决于过程噪声参数:

    • 过程噪声添加剂-该函数计算状态转移函数的偏导数f就各州而言( f / x )。输出为Ns——- - - - - -Ns雅可比矩阵,Ns是状态数。

      要查看加法过程噪声的雅可比函数示例,请键入编辑vdpStateJacobianFcn在命令行。

    • 过程噪声非相加-该函数还必须返回第二个输出,该输出是状态转换函数的偏导数f关于过程噪声项( f / w ).第二个输出作为Ns——- - - - - -W矩阵,W为状态转移函数中过程噪声项的个数。

编程使用

块参数:HasStateTransitionJacobianFcn
类型:特征向量
价值观:“关闭”,“上”
默认值:“关闭”
块参数:状态转换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
类型:特征向量
价值观:“添加剂”,“非加性”
默认值:“添加剂”

的值指定为标量、矢量或矩阵的时不变过程噪声协方差过程噪声参数:

  • 过程噪声添加剂—指定协方差为标量,anNs-元素向量,或Ns——- - - - - -Ns矩阵,Ns是系统的状态数。如果过程噪声项之间没有互相关且所有项的方差相同,则指定标量。指定长度的向量Ns,如果过程噪声项之间没有相互关系,但所有的项有不同的方差。

  • 过程噪声非相加-将协方差指定为W——- - - - - -W矩阵,W为过程噪声项的个数。

如果过程噪声协方差是时变的,选择时变. 该块生成输入端口来指定时变协方差。

依赖关系

如果未将过程噪声指定为时变

编程使用

块参数:ProcessNoise
类型:字符向量,字符串
默认值:' 1 '

如果选择此参数,则块包含一个额外的输入端口指定时变过程噪声协方差。

编程使用

块参数:黑斯廷梅瓦林噪声
类型:特征向量
价值观:“关闭”,“上”
默认值:“关闭”
初始化

初始状态估计值,指定为Ns-元素向量,其中Ns是系统的状态数。根据您对系统的了解,指定初始状态值。

编程使用

块参数:InitialState
类型:字符向量,字符串
默认值:' 0 '

状态估计误差协方差,指定为标量Ns-元素向量,或Ns——- - - - - -Ns矩阵,Ns是系统的状态数。如果指定标量或矢量,则软件创建Ns——- - - - - -Ns在对角线上有标量或向量元素的对角矩阵。

当您对在中指定的初始状态值没有信心时,请为协方差指定一个高值初始状态

编程使用

块参数:InitialStateCovariance
类型:字符向量,字符串
默认值:' 1 '
测量

测量函数计算N-非线性系统时间步的元件输出测量矢量k,给定时间步的状态向量k. 创建测量函数并在中指定函数名称函数.例如,如果vdpMeasurementFcn.m您创建并保存的测量函数是否指定函数作为vdpMeasurementFcn

您创建的函数的输入取决于您是将度量噪声指定为加性的还是非加性的测量噪声

  • 测量噪声添加剂-测量功能h指定测量值如何随状态值的变化而变化:

    y(k)=h(x(k),Um1(k),…,Umn(k)),

    哪里y (k)x (k)估计的输出和估计的状态是否在同一时间k,听Um1,…,学院您的测量函数需要任何可选的输入参数。例如,如果您使用一个传感器来跟踪一个对象,那么附加的输入可以是传感器位置。

    要查看带有附加过程噪声的测量函数的示例,请键入编辑vdpMeasurementFcn在命令行。

  • 测量噪声非相加-测量函数还指定输出测量如何演变为测量噪声的函数v

    y (k) = h (x (k), v (k),听Um1 (k),…,学院(k))

    要查看具有非累加过程噪声的测量函数示例,请键入编辑vdpMeasurementNonAdditiveNoiseFcn

有关更多信息,请参见状态转移和测量函数

您可以创建h使用金宝app仿真软件的功能(金宝appSimulink)块或作为MATLAB函数(.米文件)。

  • 您可以使用MATLAB函数,只有当h有一个额外的输入参数听Um1除了xv

    y[k]=h(x[k],v[k],Um1(k))

    该软件生成一个额外的输入端口测量投入为。指定此参数测量功能。

  • 如果你用a金宝app仿真软件的功能块,指定xv使用参数尺寸。(金宝appSimulink)块和附加输入听Um1,…,学院使用轮廓尺寸(金宝appSimulink)块的金宝app仿真软件的功能块。你不提供听Um1,…,学院扩展卡尔曼滤波器块。

如果您的系统中有多个传感器,您可以指定多个测量功能。您可以指定多达五个测量功能使用添加测量值按钮。要去掉测量功能,请使用删除测量

编程使用

块参数:MeasurementFcn1,MeasurementFcn2,MeasurementFcn3,MeasurementFcn4,测量CN5
类型:字符向量,字符串
默认值:“myMeasurementFcn”

测量函数的雅可比矩阵h,指定为以下内容之一:

  • -软件计算雅可比矩阵的数值。这种计算可能会增加状态估计的处理时间和数值误差。

  • -创建一个函数来计算测量函数的雅可比矩阵h,并在中指定函数的名称雅可比.例如,如果vdpMeasurementJacobianFcn.m雅可比函数是指定的吗MeasurementJacobianFcn作为vdpMeasurementJacobianFcn. 如果你创造h使用金宝app仿真软件的功能(金宝appSimulink)块,然后使用金宝app仿真软件的功能块。如果您创建h使用MATLAB函数(.米文件),然后使用MATLAB函数创建雅可比矩阵。

    函数计算测量函数的偏导数h关于状态和测量噪声。雅可比函数的输入数量必须等于测量函数的输入数量,并且必须在两个函数中以相同的顺序指定。雅可比函数的输出数量取决于测量噪声参数:

    • 测量噪声添加剂-该函数计算测量函数相对于状态的偏导数( h / x )。输出为N——- - - - - -Ns雅可比矩阵,N系统的测量次数是多少Ns是状态数。

      要查看加法测量噪声的雅可比函数示例,请键入编辑vdpMeasurementJacobianFcn在命令行。

    • 测量噪声非相加-该函数还返回第二个输出,该输出是测量函数相对于测量噪声项的偏导数( h / v ).第二个输出作为N——- - - - - -V雅可比矩阵,V是测量噪声项的数量。

编程使用

块参数:HasMeasurementJacobianFcn1,HasMeasurementJacobianFcn2,HasMeasurementJacobianFcn3,HasMeasurementJacobianFcn4,HasMeasurementJacobianFcn5
类型:特征向量
价值观:“关闭”,“上”
默认值:“关闭”
块参数:MeasurementJacobianFcn1,MeasurementJacobianFcn2,MeasurementJacobianFcn3,MeasurementJacobianFcn4,MeasurementJacobianFcn5
类型:特征向量
默认值:''

测量噪声特性,指定为以下值之一:

  • 添加剂——测量噪声v是可加的,还是测量函数h您在中指定的函数有以下形式:

    y(k)=h(x(k),Um1(k),…,Umn(k)),

    哪里y (k)x (k)估计的输出和估计的状态是否在同一时间k,听Um1,…,学院您的测量函数需要任何可选的输入参数。

  • 非相加-测量噪声是非附加的,测量函数指定输出测量如何演化为状态函数测量噪声:

    y (k) = h (x (k), v (k),听Um1 (k),…,学院(k))

编程使用

块参数:HasAdditiveMeasurementNoise1,HasAdditiveMeasurementNoise2,HasAdditiveMeasurementNoise3,HasAdditiveMeasurementNoise4,HasAdditiveMeasurementNoise5
类型:特征向量
价值观:“添加剂”,“非加性”
默认值:“添加剂”

的值指定为标量、矢量或矩阵的时不变过程噪声协方差过程噪声参数:

  • 过程噪声添加剂—指定协方差为标量,anNs-元素向量,或Ns——- - - - - -Ns矩阵,Ns是系统的状态数。如果过程噪声项之间没有互相关且所有项的方差相同,则指定标量。指定长度的向量Ns,如果过程噪声项之间没有相互关系,但所有的项有不同的方差。

  • 过程噪声非相加-将协方差指定为W——- - - - - -W矩阵,W为过程噪声项的个数。

如果过程噪声协方差是时变的,选择时变. 该块生成输入端口来指定时变协方差。

依赖关系

如果未将过程噪声指定为时变

编程使用

块参数:ProcessNoise
类型:字符向量,字符串
默认值:' 1 '

如果为第一个测量函数的测量噪声协方差选择此参数,则该块包括一个附加输入端口R1. 可以在中指定时变测量噪声协方差R1.类似地,如果您选择时变th测量功能,该模块包括一个额外的输入端口R为该函数指定时变测量噪声协方差。

编程使用

块参数:HasTimeVaryingMeasurementNoise1,HasTimeVaryingMeasurementNoise2,HasTimeVaryingMeasurementNoise3,HasTimeVaryingMeasurementNoise4,HasTimeVaryingMeasurementNoise5
类型:特征向量
价值观:“关闭”,“上”
默认值:“关闭”

假设测量的输出数据在端口的所有时间点都不可用y1对应于第一个测量功能的。选择添加启用端口生成输入端口Enable1.在这个端口上使用一个信号,只有当测量数据可用时,才能校正估计的状态。类似地,如果测量的输出数据在港口的所有时间点都不可用yth测量功能,选择相应的添加启用端口

编程使用

块参数:HasMeasurementEnablePort1,HasMeasurementEnablePort2,HasMeasurementEnablePort3,HasMeasurementEnablePort4,HasMeasurementEnablePort5
类型:特征向量
价值观:“关闭”,“上”
默认值:“关闭”
设置

当选择此参数时,块输出修正后的状态估计 x k | k ] 时间步长k,使用测量的输出进行估计,直到k.如果清除此参数,该块将返回预测的状态估计 x k | k 1 ] 时间k,使用上一次测量的输出进行估计k - 1.如果您的过滤器处于反馈循环中,并且在您的Simulink模型中存在代数循环,则清除此参数。金宝app

编程使用

块参数:使用电流估计器
类型:特征向量
价值观:“关闭”,“上”
默认值:“上”

选择此参数,表示状态估计误差协方差输出端口P在块中生成。

编程使用

块参数:输出状态协方差
类型:特征向量
价值观:“关闭”,“上”
默认值:“关闭”

使用此参数指定所有块参数的数据类型。

编程使用

块参数:数据类型
类型:特征向量
价值观:“单一”,“双人”
默认值:“双人”

块采样时间,指定为正标量。如果状态转换和测量函数的采样时间不同,请选择启用多速率操作多重速率的选项卡,并在多重速率的选项卡。

依赖关系

中,该参数可用多重速率的选项卡,启用多速率操作参数为

编程使用

块参数:取样时间
类型:字符向量,字符串
默认值:' 1 '

多速率选项卡

如果状态转换和测量函数的采样次数不同,请选择此参数。的示例时间多重速率的选项卡,在采样时间

编程使用

块参数:EnableMultirate
类型:特征向量
价值观:“关闭”,“上”
默认值:“关闭”

如果状态转换和测量功能的采样时间不同,请指定采样时间.指定测量函数的采样时间为状态转换采样时间的正整数倍。您指定的采样次数对应以下输入端口:

  • 状态转换函数对应的端口-状态转换函数的附加输入StateTransitionFcnInputs和时变过程噪声协方差.这些端口的采样时间必须总是等于状态转移函数的采样时间,但可以与测量函数的采样时间不同。

  • 相对应的端口th测量功能-测量输出y,增加测量功能的输入测量投入,在端口启用信号使可能,以及时变测量噪声协方差R.对于相同的测量函数,这些端口的采样时间必须总是相同的,但可以与状态转移函数和其他测量函数的采样时间不同。

依赖关系

中,该参数可用多重速率的选项卡,启用多速率操作参数为

编程使用

块参数:StateTransitionFcnSampleTime,MeasurementFcn1SampleTime1,MeasurementFcn1SampleTime2,MeasurementFcn1SampleTime3,MeasurementFcn1SampleTime4,MeasurementFcn1SampleTime5
类型:字符向量,字符串
默认值:' 1 '

更多关于

全部展开

兼容性的考虑

全部展开

行为在R2020b中改变

扩展能力

介绍了R2017a