主要内容

粒子滤波

利用粒子滤波估计离散非线性系统的状态

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

    系统识别工具箱/估计器

  • pf_block

描述

粒子滤波采用离散粒子滤波算法对离散非线性系统的状态进行块估计。

考虑一个有状态的工厂x、输入u、输出,过程噪声w,和测量y.假设你可以把植物表示成一个非线性系统。

该算法计算状态估计 x 用你指定的状态转换和测量似然函数来计算非线性系统。

您为系统创建非线性状态转换函数和测量似然函数,并在块中指定这些函数。该块支持具有多个以不金宝app同采样率运行的传感器的系统的状态估计。您最多可以指定五个测量似然函数,每个函数对应于系统中的一个传感器。

港口

输入

全部展开

测量系统输出对应于您在块中指定的每个测量似然函数。端口的数量等于系统中测量似然函数的数量。您最多可以指定五个测量似然函数。例如,如果系统有两个传感器,则在块中指定两个测量似然函数。第一个端口日元默认可用。点击添加测量,以生成端口y2对应于第二测量似然函数。

将端口指定为N-维向量,其中N是对应传感器测量的数量。例如,如果您的系统有一个测量物体位置和速度的传感器,那么就只有一个端口日元.端口被指定为一个二维矢量,其值与位置和速度相对应。

依赖关系

第一个端口日元默认可用。港口y2日元是在单击时生成的添加测量

状态转换函数的可选输入参数f除了国家x

如果你创建f使用MATLAB®函数(.米文件),软件生成端口StateTransitionFcnInputs输入函数的名称后,单击应用

如果状态转换函数有多个额外输入,请使用金宝app仿真软件的功能(金宝app模型)块来指定函数。当你使用金宝app仿真软件的功能块时,您可以直接向金宝app仿真软件的功能块使用轮廓尺寸(金宝app模型)块。的附加输入不生成输入端口粒子滤波块。

依赖关系

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

  • 你指定f函数使用MATLAB函数,以及f在MATLAB路径上。

  • f除了粒子,只需要一个额外的输入参数。

状态以外的测量似然函数的可选输入x和测量y

MeasurementLikelihoodFcn1Inputs对应于您指定的第一个测量似然函数,等等。

如果使用MATLAB函数指定两个测量输入(.米文件)函数时,软件生成端口MeasurementLikelihoodFcn1Inputs而且MeasurementLikelihoodFcn2Inputs当你点击应用.您可以将这些端口的输入指定为标量、向量或矩阵。

如果您的测量似然函数有一个以上的额外输入,请使用金宝app仿真软件的功能(金宝app模型)块来指定函数。当你使用金宝app仿真软件的功能块时,您可以直接向金宝app仿真软件的功能块使用轮廓尺寸(金宝app模型)块。的附加输入不生成输入端口粒子滤波块。

依赖关系

对应于测量似然函数的端口h仅当满足以下两个条件时才会生成:

  • 你指定测量输入h函数使用MATLAB函数,以及h在MATLAB路径上。

  • h除了粒子和测量,只需要一个额外的输入参数。

当测量数据可用时,启用估计状态的修正。

例如,假设所测量的输出数据在端口的所有时间点上都是不可用的日元这对应于第一个测量似然函数。然后,使用信号值以外的0Enable1端口,以便在测量数据可用时校正估计状态。指定端口值为0当测量数据不可用时。类似地,如果测量的输出数据在端口上的所有时间点都不可用yth测量似然函数,指定对应端口启用作为一种价值0

依赖关系

如果您选择添加启用端口对于测量似然函数,生成与该测量似然函数对应的端口。单击时将显示端口应用

输出

全部展开

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

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

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

只有当您选择时,才可以输出误差协方差输出状态估计误差协方差块输出,多速率选项卡,单击应用

依赖关系

时,此参数有效块输出,多速率选项卡,状态估计法参数设置为“的意思是”

用于状态估计的粒子值,返回为Ns——- - - - - -NpNp——- - - - - -Ns数组中。Ns系统的状态数,和Np是粒子数。

  • 如果StateOrientation参数被指定为“列”,然后粒子返回为Ns——- - - - - -Np数组中。

  • 如果StateOrientation参数被指定为“行”,然后粒子返回为Np——- - - - - -Ns数组中。

依赖关系

如果选择,则生成该端口输出所有粒子块输出,多速率选项卡,单击应用

用于状态估计的粒子权重,返回为1 × -NpNp-by-1向量,其中Np用于状态估计的粒子数。

  • 如果StateOrientation参数被指定为“列”,然后权重返回为1-by-Np向量,其中每个权重与粒子在同一列中的粒子数组中。

  • 如果StateOrientation参数被指定为“行”,然后权重返回为Np-by-1向量,其中每个权重都与元素中同一行中的粒子相关粒子数组中。

依赖关系

如果选择,则生成该端口输出权值块输出,多速率选项卡,单击应用

参数

全部展开

系统模型页

状态转换

粒子滤波状态转换函数计算时间步上的粒子k + 1,给定时间步长的粒子k根据您的系统动态和过程噪声。这个函数的语法是:

particlesNext = f(粒子,param1, param2,…)

在那里,粒子而且particlesNext有尺寸Ns——- - - - - -Np如果国家取向指定为“列”,或Np——- - - - - -Ns如果国家取向指定为“行”.同时,param_i表示您可以指定的可选输入参数。有关可选输入参数的详细信息,请参见StateTransitionFcnInputs

中创建状态转换函数并指定函数名函数.例如,如果vdpParticleFilterStateFcn.m您创建并保存的状态转换函数是否指定函数作为“vdpParticleFilterStateFcn”

你可以创建函数使用一个金宝app仿真软件的功能(金宝app模型)块或作为MATLAB函数(.米文件)。

编程使用

块参数:StateTransitionFcn
类型:字符向量,字符串
默认值:“vdpParticleFilterStateFcn”
初始化

过滤器中使用的粒子数,指定为正标量整数。每个粒子代表系统中的一个状态假设。更高数量的粒子增加了状态估计精度,但也增加了运行滤波器所需的计算工作量。

编程使用

块参数:NumberOfParticles
类型:正标量整数
默认值:1000

粒子的初始分布,指定为“高斯”“统一”,或“自定义”

如果你愿意“高斯”,初始粒子集或状态假设按多元高斯分布分布,其中指定的意思是而且协方差.假定所有粒子的初始重量相等。

如果你愿意“统一”,初始粒子集按均匀分布分布,其中指定上、下国家边界.假定所有粒子的初始重量相等。

“自定义”允许您指定自己的初始粒子集及其权重。你可以使用任意的概率分布粒子而且权重初始化筛选器。

编程使用

块参数:InitialDistribution
类型:特征向量
价值观:“高斯”“统一”“自定义”
默认值:“高斯”

粒子的初始平均值,以矢量表示。要估计的状态数定义了向量的长度。

依赖关系

时,此参数有效系统模型选项卡,分布参数设置为高斯

编程使用

块参数:InitialMean
类型:数组
默认值:(0,0)

粒子的初始协方差,用标量、向量或矩阵表示。

如果协方差被指定为:

  • 一个标量,那么它一定是正的。协方差假设为a [NsNs]矩阵与这个标量对角线。在这里,Ns是状态数。

  • 一个向量,那么每个元素都必须是正的。协方差假设为a [NsNs矩阵的元素在对角线上。

  • 一个矩阵,那么它一定是正的半定的。

依赖关系

时,此参数有效系统模型选项卡,分布参数设置为高斯

编程使用

块参数:InitialCovariance
类型:标量、向量或矩阵
默认值:1

用于状态估计的循环变量,指定为标量或Ns-element vector,其中Ns是状态数。

如果循环变量指定为标量时,软件将其扩展为每个元素都等于该标量的向量。圆形(或角)分布使用范围为[的概率密度函数- - - - - -ππ].如果系统中的某些状态表示角度量,如对象的方向,则使用循环变量。

编程使用

块参数:CircularVariables
类型:标量、矢量
默认值:0

系统状态的方向,指定为“列”“行”

如果国家取向被指定为:

  • “列”,则状态转移和测量似然函数的第一个输入参数为[NsNp].在这种情况下,th这个矩阵的列是th粒子(状态假设)。此外,各州估计xhat输出为[Ns(1)向量。在这里,Ns状态数,和Np是粒子数。

  • “行”,则状态转移和测量似然函数的第一个输入参数为[NpNs],矩阵的每一行都包含一个粒子。此外,各州估计xhat输出是[1Ns)向量。

编程使用

块参数:StateOrientation
类型:特征向量
价值观:“列”“行”
默认值:“列”

系统状态的初始边界,指定为Ns-by-2数组,其中Ns是状态数。

th的粒子初始分布的均匀分布的下界和上界th状态。

依赖关系

时,此参数有效系统模型选项卡,分布参数设置为统一的

编程使用

块参数:InitialStateBounds
类型:数组
默认值:[-3 3;-3 3]

状态估计的自定义粒子分布,指定为Ns——- - - - - -NpNp——- - - - - -Ns数组中。Ns系统的状态数,和Np是粒子数。

  • 如果StateOrientation参数被指定为“列”,然后粒子是一个Ns——- - - - - -Np数组中。

  • 如果StateOrientation参数被指定为“行”,然后粒子是一个Np——- - - - - -Ns数组中。

依赖关系

时,此参数有效系统模型选项卡,分布参数设置为自定义

编程使用

块参数:InitialParticles
类型:数组
默认值:[]

用于状态估计的自定义粒子权重值,指定为1 × -NpNp-by-1正向量,其中Np用于状态估计的粒子数。

  • 如果StateOrientation参数被指定为“列”,然后权重是1 × -吗Np向量。向量中的每个权重都与向量中同一列中的粒子相关联粒子数组中。

  • 如果StateOrientation参数被指定为“行”,然后权重是一个Np1的向量。向量中的每个权重都与向量中同一行中的粒子相关联粒子数组中。

依赖关系

时,此参数有效系统模型选项卡,分布参数设置为自定义

编程使用

块参数:InitialWeights
类型:积极的向量
默认值:[]
测量

测量似然函数使用传感器测量计算粒子的似然(状态假设)。对于每个状态假设(粒子),函数首先计算一个纳米-元素测量假设向量。然后根据传感器测量值和测量噪声概率分布计算各测量假设的似然值。这个函数的语法是:

似然= h(粒子,测量,param1, param2,…)
在那里,可能性是一个Np-element vector,其中Np是粒子数。粒子有尺寸Ns——- - - - - -Np如果国家取向指定为“列”,或Np——- - - - - -Ns如果国家取向指定为“行”测量是一个纳米-元素向量纳米是传感器提供的测量数。param_i表示您可以指定的可选输入参数。有关可选输入参数的详细信息,请参见MeasurementLikelihoodFcn1Inputs,…,MeasurementLikelihoodFcn5Inputs

创建度量似然函数并在中指定函数名称函数.例如,如果vdpMeasurementLikelihoodFcn.m您创建并保存的度量似然函数是否明确函数作为“vdpMeasurementLikelihoodFcn”

你可以创建函数使用一个金宝app仿真软件的功能(金宝app模型)块或作为MATLAB函数(.米文件)。

  • 你可以使用MATLAB函数只有当h有零或一个额外的输入参数param_i除了粒子而且测量

    软件生成一个额外的输入端口MeasurementLikelihoodFcn输入属性的此参数th测量似然函数,并单击应用

  • 如果你正在使用金宝app仿真软件的功能块,指定x而且y使用参数尺寸。(金宝app模型)块和额外的输入param_i使用轮廓尺寸(金宝app模型)块的金宝app仿真软件的功能块。你没有提供param_i粒子滤波块。

如果您的系统中有多个传感器,您可以指定多个测量似然函数。方法可以指定最多五个测量似然函数添加测量按钮。去除测量似然函数,使用删除测量

编程使用

块参数:MeasurementLikelihoodFcn1MeasurementLikelihoodFcn2MeasurementLikelihoodFcn3MeasurementLikelihoodFcn4MeasurementLikelihoodFcn5
类型:字符向量,字符串
默认值:“vdpMeasurementLikelihoodFcn”

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

编程使用

块参数:HasMeasurementEnablePort1HasMeasurementEnablePort2HasMeasurementEnablePort3HasMeasurementEnablePort4HasMeasurementEnablePort5
类型:特征向量
价值观:“关闭”“上”
默认值:“关闭”
重采样

用于粒子重采样的方法,指定为以下之一:

  • 多项式的

  • “系统”

  • “分层”

编程使用

块参数:ResamplingMethod
类型:特征向量
价值观:多项式的“系统性”“分层”
默认值:多项式的

方法来确定何时发生重新采样,指定为任意一种“比”“间隔”.的“比”值触发基于有效总粒子的比率重新采样。的“间隔”值触发在粒子滤波操作的规则时间步重采样。

编程使用

块参数:TriggerMethod
类型:特征向量
价值观:“比”“间隔”
默认值:“比”

有效粒子数与粒子总数的最小期望比率,指定为正标量。有效粒子数是衡量当前粒子集逼近后验分布的程度。较低的有效粒子比意味着较低数量的粒子有助于估计,需要重新采样。

如果有效粒子数与总粒子数的比率低于最小有效粒子比,则触发重新采样步骤。

指定最小有效粒子比为0到1之间的任意值。

依赖关系

时,此参数有效系统模型选项卡,触发方法参数设置为

编程使用

块参数:MinEffectiveParticleRatio
类型:标量
价值观:范围[0, 1]
默认值:0.5

重新采样之间的固定间隔,指定为正标量整数。采样间隔决定在哪些校正步骤中执行重新采样。例如,值为2意味着每隔一个修正步骤执行一次重新采样。值为意味着永远不会执行重新采样。

依赖关系

时,此参数有效系统模型选项卡,触发方法参数设置为时间间隔

编程使用

块参数:SamplingInterval
类型:正标量整数
默认值:1
随机数生成器选项

随机数是否可重复,指定为任意一个“重复”不可重复的.如果您希望能够多次产生相同的结果,请设置随机性“重复”中指定相同的随机数生成器种子值种子

编程使用

块参数:随机性
类型:特征向量
价值观:“重复”不可重复的
默认值:“重复”

可重复随机数的种子值,指定为标量。

依赖关系

时,此参数有效系统模型选项卡,随机性参数设置为“重复”

编程使用

块参数:种子
类型:标量
默认值:0
设置

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

编程使用

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

块采样时间,指定为正标量。

使用样品时间如果您的状态转换和所有测量似然函数具有相同的采样时间,则为该参数。否则,选择启用多速率操作选项中的多重速率的选项卡,并在同一选项卡中指定采样时间。

依赖关系

时,此参数有效块输出,多速率选项卡,启用多速率操作参数是

编程使用

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

块输出,多速率标签

输出

从粒子中提取状态估计的方法,指定为下列之一:

  • “的意思是”- - -粒子滤波Block根据参数输出粒子的加权平均值权重而且粒子据国家估计。

  • “Maxweight”- - -粒子滤波块输出具有最高权重的粒子作为状态估计。

  • “没有”-使用此选项可通过访问所有粒子来实现自定义状态估计方法输出所有粒子参数。块输出,多速率选项卡。

编程使用

块参数:StateEstimationMethod
类型:字符向量,字符串
价值观:“的意思是”“MaxWeight”“没有”
默认值:“的意思是”

如果您选择该参数,用于估计的粒子的输出端口,粒子在块中生成。

  • 如果StateOrientation参数被指定为“列”,则粒子输出为anNs——- - - - - -Np数组中。Ns系统的状态数,和Np是粒子数。

  • 如果StateOrientation参数被指定为“行”,则粒子输出为anNp——- - - - - -Ns数组中。

编程使用

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

如果选择此参数,则用于估计颗粒权重的输出端口,权重在块中生成。

  • 如果StateOrientation参数被指定为“列”,则以1 × -的形式输出粒子权值Np向量。在这里,每个权重都与同一列中的粒子相关联粒子数组中。Np用于状态估计的粒子数。

  • 如果StateOrientation参数被指定为“行”,则将粒子权值输出为aNp1的向量。

编程使用

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

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

依赖关系

时,此参数有效块输出,多速率选项卡,状态估计法参数设置为“的意思是”

编程使用

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

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

编程使用

块参数:UseCurrentEstimator
类型:特征向量
价值观:“上”“关闭”
默认值:“上”
多重速率的

如果状态转换的采样次数或任何测量似然函数与其他函数不同,则选择此参数。中指定采样时间多重速率的选项卡,在样品时间

编程使用

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

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

  • 状态转换函数对应的端口-状态转换函数的附加输入StateTransitionFcnInputs.这些端口的采样时间必须总是等于状态转移函数采样时间,但可以不同于测量似然函数的采样时间。

  • 对应的端口th测量似然函数-测量输出y,测量似然函数的额外输入MeasurementLikelihoodFcn输入,使能端口信号启用.对于相同的测量似然函数,这些端口的采样时间必须始终相同,但对于状态转移函数和其他测量似然函数,这些端口的采样时间可能不同。

依赖关系

时,此参数有效块输出,多速率选项卡,启用多速率操作参数是

编程使用

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

扩展功能

在R2018a中引入