主要内容

扩展卡尔曼滤波器

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

  • 图书馆:
  • 控制系统工具箱/状态估计

    系统识别工具箱/估计器

  • ekf_区块

描述

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

考虑有状态的植物x输入U输出Y,过程噪音W,以及测量噪音v. 假设您可以将设备表示为一个非线性系统。

利用系统的状态转移和测量功能以及扩展卡尔曼滤波算法,该块产生状态估计 x ^ 对于当前时间步。有关算法的信息,请参阅在线状态估计的扩展无迹卡尔曼滤波算法

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

港口

输入

全部展开

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

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

依赖性

第一个港口y1.默认情况下可用。端口Y2.y5.当您单击时生成添加测量,然后单击申请

数据类型:单身的|双重的

状态转换函数的附加可选输入参数F国家以外x和过程噪音W.有关状态转换函数的信息,请参阅,状态转换和测量功能

假设您的系统具有非加性过程噪声,并且状态转移函数F表格如下:

x(k+1)=f(x(k),w(k),状态转换输入)

在这里K是时间步长,并且StateTransitionFcnInputs是除xW

如果你创造F使用MATLAB®作用(M文件),软件生成端口StateTransitionFcnInputs当你点击申请。您可以将此端口的输入指定为标量、向量或矩阵。

如果状态转换函数有多个附加输入,请使用金宝appSimulink函数(金宝appSimulink)块来指定函数。当使用金宝appSimulink函数块,则直接向金宝appSimulink函数块使用输入(金宝appSimulink)块。没有为附加输入生成输入端口扩展卡尔曼滤波器

依赖性

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

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

  • F只需要一个额外的输入参数,除了xW

数据类型:单身的|双重的

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

MeasurementFCN1Inputs.对应于您指定的第一个测量功能,依此类推。例如,假设您的系统有三个传感器和非累加性测量噪声,以及三个测量功能h1,h3请填写以下表格:

y1[k]=h1(x[k],v1[k],测量输入)

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

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

在这里K是时间步长,并且MeasurementFCN1Inputs.测量CN2输入是额外的输入参数h1

如果您指定h1,h3使用MATLAB功能(M文件)在作用,软件生成端口MeasurementFCN1Inputs.测量CN2输入当你点击申请。您可以将这些端口的输入指定为标量、向量或矩阵。

如果测量功能有多个附加输入,请使用金宝appSimulink函数(金宝appSimulink)块来指定函数。当你使用金宝appSimulink函数块,则直接向金宝appSimulink函数块使用输入(金宝appSimulink)块。没有为附加输入生成输入端口扩展卡尔曼滤波器

依赖性

与测量功能相对应的端口H仅当满足以下两个条件时生成:

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

  • H只需要一个额外的输入参数,除了xv

数据类型:单身的|双重的

时变处理噪声协方差,指定为标量,向量或矩阵,具体取决于该值的值过程噪声范围:

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

  • 过程噪声非加性- 指定协方差作为一个W-借-W矩阵,W是状态转移函数中过程噪声项的数量。

依赖性

如果将过程噪声协方差指定为时变。单击时将显示该端口申请

数据类型:单身的|双重的

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

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

  • 测量噪声非加性- 指定协方差作为一个v-借-v矩阵,v是相应测量函数中测量噪声项的数量。

依赖性

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

数据类型:单身的|双重的

假设在端口的所有时间点都不提供测量的输出数据y1.对应于第一个测量功能的。使用信号值,而不是0使能1当测量数据可用时,以启用估计状态的端口。指定端口值为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)是当时的估计状态KUS1,...,USN状态转换函数是否需要其他输入参数,如系统输入或样本时间。要查看带有加性过程噪声的状态转移函数的示例,请键入编辑vdpStateFcn在命令行。

  • 过程噪声非加性-状态转换函数还指定状态如何随过程噪声的变化而变化W:

    x(k + 1)= f(x(k),w(k),US1(k),...,USN(k))

有关详细信息,请参阅状态转换和测量功能

您可以创建F使用金宝appSimulink函数(金宝appSimulink)块或作为MATLAB函数(M文件)。

  • 只有在以下情况下才能使用MATLAB函数F有一个额外的输入参数Us1除了xW

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

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

  • 如果你用a金宝appSimulink函数块,指定xW使用参数输入端口(金宝appSimulink)块和附加输入US1,...,USN使用输入(金宝appSimulink)块的金宝appSimulink函数块你不提供US1,...,USN扩展卡尔曼滤波器

程序化使用

块参数:StateTransitionFCN.
类型:字符向量,字符串
违约:“myStateTransitionFcn”

雅各比奥的状态转换功能F,指定为以下之一:

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

  • 在…上- 您创建一个函数来计算Jacobian,并指定函数的名称雅可比。例如,如果vdpStateJacobianFcn.m是雅可比函数,请指定雅可比vdpStateJacobianFcn. 如果创建状态转换函数F使用金宝appSimulink函数(金宝appSimulink)块,然后使用金宝appSimulink函数块。如果您创建F使用MATLAB函数(M文件),然后使用MATLAB函数创建Jacobian。

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

    • 过程噪声添加剂- 该功能计算状态转换功能的部分导数F关于美国( F / x )。输出是一个Ns-借-Ns雅可比矩阵,其中Ns是州数。

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

    • 过程噪声非加性- 该函数还必须返回第二个输出,该输出是状态转换函数的部分导数F关于过程噪声项( F / W )。第二个输出作为Ns-借-W矩阵,W是状态转移函数中过程噪声项的数量。

程序化使用

块参数:Hasstate转换JacobianFCN
类型:特征向量
价值观:“关”,“开”
违约:“关”
块参数:状态转换JacobianFCN
类型:字符向量,字符串
违约:''

工艺噪声特性,指定为以下值之一:

  • 添加剂——过程噪声W是可加的,状态转移函数F你指定的作用表格如下:

    x(k+1)=f(x(k),Us1(k),…,Usn(k)),

    在哪里x (k)是当时的估计状态KUS1,...,USN是状态转换函数所需的任何其他输入参数。

  • 非加性- 流程噪声是非一个,并且状态转换函数指定状态如何随着状态的函数而发展上一时间步的过程噪声:

    x(k + 1)= f(x(k),w(k),US1(k),...,USN(k))

程序化使用

块参数:HasAdditiveProcessNoise
类型:特征向量
价值观:“添加剂”,“非加性”
违约:“添加剂”

时不变过程噪声协方差,根据过程噪声范围:

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

  • 过程噪声非加性- 指定协方差作为一个W-借-W矩阵,W是过程噪声项的数量。

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

依赖性

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

程序化使用

块参数:过程噪声
类型:字符向量,字符串
违约:'1'

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

程序化使用

块参数:HastimeviryingProcessnoise.
类型:特征向量
价值观:“关”,“开”
违约:“关”
初始化

初始状态估计值,指定为一个Ns-element矢量,在哪里Ns是系统中的状态数。请根据您对系统的了解指定初始状态值。

程序化使用

块参数:初始状态
类型:字符向量,字符串
违约:'0'

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

当您对您指定的初始状态值没有信心时,为协议指定高值初始状态

程序化使用

块参数:初始状态协方差
类型:字符向量,字符串
违约:'1'
测量

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

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

  • 测量噪声添加剂- 测量功能H指定测量值如何发展为状态值的函数:

    y(k)= h(x(k),um1(k),...,umn(k)),

    在哪里y(k)x (k)是估计的产出和估计状态KUm1,…,Umn是测量函数所需的任何可选输入参数。例如,如果使用传感器跟踪对象,则传感器位置可能是额外的输入。

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

  • 测量噪声非加性-测量功能还指定输出测量如何随测量噪声的变化而变化v:

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

    要查看具有非增多过程噪声的测量功能的示例,请键入编辑VDPMeasurementNoAdditiveNoIseFCN

有关详细信息,请参阅状态转换和测量功能

您可以创建H使用金宝appSimulink函数(金宝appSimulink)块或作为MATLAB函数(M文件)。

  • 只有在以下情况下才能使用MATLAB函数H有一个额外的输入参数Um1除了xv

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

    软件生成一个额外的输入端口测量投入测量功能。

  • 如果你用a金宝appSimulink函数块,指定xv使用参数输入端口(金宝appSimulink)块和附加输入Um1,…,Umn使用输入(金宝appSimulink)块的金宝appSimulink函数块你不提供Um1,…,Umn扩展卡尔曼滤波器

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

程序化使用

块参数:测量CN1,测量CN2,测量CN3,测量CN4,测量CN5
类型:字符向量,字符串
违约:“myMeasurementFcn”

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

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

  • 在…上- 创建一个函数来计算测量函数的jacobianH,并在中指定函数的名称雅可比。例如,如果vdpMeasurementJacobianFcn.m是雅可比函数,请指定测量雅可比函数vdpMeasurementJacobianFcn.如果你创造H使用金宝appSimulink函数(金宝appSimulink)块,然后使用金宝appSimulink函数块。如果您创建H使用MATLAB函数(M文件),然后使用MATLAB函数创建Jacobian。

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

    • 测量噪声添加剂-该函数计算测量函数相对于状态的偏导数( H / x )。输出为N-借-Ns雅可比矩阵,其中N是系统的测量次数,以及Ns是州数。

      要查看雅可比函数的示例,用于添加测量噪音,型编辑vdpMeasurementJacobianFcn在命令行。

    • 测量噪声非加性- 该功能还返回第二个输出,该输出是测量噪声术语的测量功能的部分导数( H / v )。第二个输出作为N-借-v雅可比矩阵,其中v是测量噪声术语的数量。

程序化使用

块参数:HasMeasurementJacobianFcn1,HasMeasurementJacobianFcn2,HasMeasurementJacobianFcn3,HasMeasurementJacobianFcn4,HasMeasurementJacobianFcn5
类型:特征向量
价值观:“关”,“开”
违约:“关”
块参数:测量JacobianFCN1,测量JacobianFcn2,测量值JacobianFCN3,测量值JacobianFcn4,测量值JacobianFCN5
类型:特征向量
违约:''

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

  • 添加剂-测量噪声v是加法,并且具有测量功能H你指定的作用表格如下:

    y(k)= h(x(k),um1(k),...,umn(k)),

    在哪里y(k)x (k)是估计的产出和估计状态KUm1,…,Umn是度量函数所需的任何可选输入参数。

  • 非加性-测量噪声是非累加性的,测量函数指定输出测量如何随状态变化测量噪声:

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

程序化使用

块参数:HasAdditiveMeasurementNoise1,HAS附加测量噪音2,HAS附加测量噪音3,HAS可加性测量噪音4,HAS附加测量噪音5
类型:特征向量
价值观:“添加剂”,“非加性”
违约:“添加剂”

时不变过程噪声协方差,根据过程噪声范围:

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

  • 过程噪声非加性- 指定协方差作为一个W-借-W矩阵,W是过程噪声项的数量。

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

依赖性

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

程序化使用

块参数:过程噪声
类型:字符向量,字符串
违约:'1'

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

程序化使用

块参数:HastinmevaryingMeasurementNoise1,HastinmevaryingMeasurementNoise2,HastinmevaryingMeasurementNoise3,HastinmevaryingMeasurementNoise4,HastinmevaryingMeasurementNoise5
类型:特征向量
价值观:“关”,“开”
违约:“关”

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

程序化使用

块参数:HasMeasurementEnablePort1,HasMeasurementEnablePort2,HasMeasurementEnablePort3,HasMeasurementEnablePort4,HasMeasurementEnablePort5
类型:特征向量
价值观:“关”,“开”
违约:“关”
设置

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

程序化使用

块参数:使用电流估计器
类型:特征向量
价值观:“关”,“开”
违约:“开”

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

程序化使用

块参数:outputStatecovariance.
类型:特征向量
价值观:“关”,“开”
违约:“关”

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

程序化使用

块参数:数据类型
类型:特征向量
价值观:“单身”,“双人”
违约:“双人”

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

依赖性

如果在中,则此参数可用多速率选项卡,该启用多速率操作参数为

程序化使用

块参数:取样时间
类型:字符向量,字符串
违约:'1'

多速率选项卡

如果状态转换和测量功能的采样时间不同,请选择此参数。您可以在中指定采样时间多速率标签,在采样时间

程序化使用

块参数:启用倍率
类型:特征向量
价值观:“关”,“开”
违约:“关”

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

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

  • 对应于TH.测量功能 - 测量输出Y,测量功能的附加输入测量投入,在端口启用信号使能够,以及时变测量噪声协方差R. 相同测量功能的这些端口的采样时间必须始终相同,但可能不同于状态转换功能和其他测量功能的采样时间。

依赖性

如果在中,则此参数可用多速率选项卡,该启用多速率操作参数为在…上

程序化使用

块参数:StateTransitionFcnSampleTime,测量CN1样本1,测量CN1样本2,MeasurementFcn1SampleTime3,MeasurementFcn1SampleTime4,MeasurementFcn1SampleTime5
类型:字符向量,字符串
违约:'1'

更多关于

全部展开

兼容性考虑

全部展开

R2020b中的行为发生了变化

扩展能力

R2017a中引入