主要内容

在模型参数和状态估计使用粒子滤波块万博1manbetx

这个例子演示了使用粒子滤波在系统辨识工具箱™。一个离散时间传递函数参数估计问题是新配方和递归解决了作为状态估计问题。

介绍

系统辨识工具箱有三个模型块非线性状态估计:万博1manbetx

  • 粒子滤波:实现了一个离散粒子滤波算法。

  • 扩展的卡尔曼滤波器:实现了一阶离散时间扩展卡尔曼滤波算法。

  • 无味卡尔曼滤波器,实现了离散时间无味卡尔曼滤波算法。

这些块支持使用多个传感器状万博1manbetx态估计操作在不同的采样率。一个典型的使用这些模块的工作流程如下:

  1. 你们工厂模型和传感器行为使用MATLAB或仿真软件的功能。万博1manbetx

  2. 配置块的参数。

  3. 模拟和分析结果进行筛选,获得信心在滤波器的性能。

  4. 你的硬件上部署过滤器。您可以为这些过滤器生成代码使用仿真软件编码器™软件。万博1manbetx

下面的例子使用了粒子滤波块来演示这个工作流的前两个步骤。最后两个步骤简要的讨论下一个步骤部分。这个例子的目的是估计参数的离散传递函数递归(一个输出误差模型),在每个时间步模型参数的更新,新信息的到来。

如果你有兴趣扩展卡尔曼滤波器,看到的例子“非线性系统的状态估计与多个多重速率的传感器”。无味卡尔曼滤波器的使用遵循相同的步骤扩展卡尔曼滤波器。

植物建模

大多数状态估计算法依赖植物模型(状态转换函数)来描述植物的进化状态从一个时间步。这个函数通常是表示$ x [k + 1] = f (x [k], w [k], u [k])美元其中x是美国,w是过程噪声、u是可选的额外的输入,例如系统输入或参数。粒子滤波块需要你提供这个函数在一个稍有不同的语法,$ X [k + 1] = f {pf} u (X [k], [k])美元。的差异是:

  • 粒子滤波工作遵循的轨迹状态假设(粒子)和块通过状态假设你的函数。具体地说,如果你的状态向量x美元N_s美元你选择元素和N_p美元使用粒子,X美元有尺寸美元[N_s \;N_p]美元在每一列是一个假说。

  • 计算过程中噪声的影响w美元在假设美元$ X [k + 1]在你的函数f {pf}(…)美元美元。块不做任何假设噪声概率分布的过程w美元,不需要w美元作为输入。

这个函数f {pf}(…)美元美元可以限制的MATLAB函数符合MATLAB编码器™,或仿真软件功能块。万博1manbetx在您创建f {pf}(…)美元美元粒子滤波中,您指定的函数名称。

在这个例子中,你调整一个离散时间传递函数参数估计问题作为状态估计问题。这种传递函数可能代表一个离散时间过程的动力学,也可能代表一些连续时间动态耦合信号再现器等零。假设您感兴趣的参数估计一阶离散传递函数:

$ $ y [k] = \压裂{20问^ {1}}{1 - 0.7 - q ^ {1}} u e [k] + [k] $ $

在这里美元$ y [k]是植物输出,u [k]美元是植物输入,美元$ e [k]是测量噪声,美元问^ {1}$时滞运营商,这样吗美元问^ {1}u [k] = [t - 1]美元。用参数表示传递函数$ $ \压裂{n \;问^ {1}}{1 + d \;问^ {1}}$ $,在那里n美元$ d $是参数估计。传递函数和参数可以在必要的多种方式中状态空间形式,通过状态向量的选择。一个选择是$ x [k] = [\;y [k];d [k];n [k] \;]美元在第二个和第三个国家代表的参数估计。然后可以等同于写成传递函数

$ $ x [k + 1]左= \ [& # xA;c \开始{数组}{}& # xA;-x_2 [k] x_1 [k] + x_3 [k] u [k] \ \ & # xA;x_2 [k] \ \ & # xA;x_3 [k] \ \ & # xA;结束\{数组}& # xA;\]$ $

测量噪声项美元$ e [k]在传感器建模处理。在本例中,您在一个MATLAB函数,实现上面的表达式在矢量化计算效率的形式:

类型pfBlockStateTransitionFcnExample
函数xNext = pfBlockStateTransitionFcnExample (x, u) % pfBlockStateTransitionFcnExample粒子状态转换函数%过滤器,估算参数%的输出,一阶,离散时间传递% % %函数模型输入:% x -粒子,NumberOfStates-by-NumberOfParticles矩阵% u -系统输入,一个标量输出% %:% xNext——预测粒子,与相同的维数作为输入x %实现状态转换函数% xNext = [x (1) * (2) + x (3) * u;% x (2);% x (3)];以矢量形式%(所有粒子)。xNext = x;xNext (1) = bsxfun (@times x (1:) - x (2:)) + x (3:) * u;%添加一个小过程噪声(相对于预期每个州的大小),%增加粒子多样性xNext = xNext + bsxfun (@times, [1;1飞行;1 e 1], randn(大小(xNext)));结束

传感器建模

粒子滤波块需要你提供一个测量似然函数,计算每个状态的可能性(概率)的假设。这个函数的形式$ L [k] = h_ {pf} (X [k], [k], u [k])美元L [k]美元是一个N_p美元元素的向量,N_p美元是你选择的粒子数。$ m ^ {th} $元素L [k]美元的可能性吗$ m ^ {th} $粒子(列)美元$ X [k]美元$ y [k]传感器测量。u [k]美元是一个可选的输入参数,不同的输入状态转换函数。

在本例中传感器措施的第一个国家。这个例子假设实际测量值和预测值之间的错误分布根据高斯分布,但任意概率分布或其他方法可以用来计算所说的可能性。您创建美元$ h_ {pf} (…)在粒子滤波,并指定函数名。

类型pfBlockMeasurementLikelihoodFcnExample;
函数= pfBlockMeasurementLikelihoodFcnExample可能性(粒子,测量)% pfBlockMeasurementLikelihoodFcnExample测量粒子滤波% %的似然函数是第一个国家输入% %:% - % NumberOfStates-by-NumberOfParticles矩阵测量粒子系统输出,一个标量输出% %:%的可能性——一个向量与NumberOfParticles元素n %元素是第n个粒子% # codegen %的可能性预测测量yHat =粒子(1:);%计算每个粒子的可能性基于实际测量% % %和预测值之间的错误假设误差分布与% /多元正态分布的均值为零,方差为1。评估相应的%概率密度函数e = bsxfun (@minus yHat,测量(:));%错误numberOfMeasurements = 1;μ= 0;%的意思是σ=眼睛(numberOfMeasurements);%方差measurementErrorProd =点((e-mu)σ\ (e-mu), 1);c = 1 /√(2 *π)^ numberOfMeasurements *侦破(σ));可能性= c * exp (-0.5 * measurementErrorProd);结束

滤波器结构

配置粒子滤波估计的块。您指定的状态转换和测量似然函数名称,数量的粒子,这些粒子的初始分布。

系统模型选项卡的块对话框中,指定以下参数:

状态转换

  1. 指定状态转换函数,pfBlockStateTransitionFcnExample,在函数。当你输入函数名,然后单击应用块检测,你的函数有一个额外的输入,你美元,并创建的输入端口StateTransitionFcnInputs。你联系你的系统输入端口。

初始化

  1. 指定10000年粒子数。更高的粒子数通常对应于更好的估计,增加计算成本。

  2. 指定高斯分布得到一组初始粒子的多元高斯分布。然后指定[0;0;0]的意思是因为你有三个州,这是最好的猜测。指定诊断接头([100]5)协方差指定一个大方差(不确定性)你猜第三状态,和前两个较小的方差。这是至关重要的初始粒子足够广泛传播(大方差)来弥补潜在的真实状态。

测量1

  1. 指定您的测量似然函数的名称,pfBlockMeasurementLikelihoodFcnExample,在函数

样品时间

  1. 底部的块对话框中,输入1样品时间。如果你有一个不同的样本时间状态转换和测量之间的似然函数,或如果您有多个传感器与不同的样本,这些可配置块输出,多重速率的选项卡。

粒子滤波涉及删除粒子可能较低,播种新的粒子使用的可能更高。这是控制下的选项重采样组。这个示例使用默认设置。

默认情况下,块只输出状态的均值假设,加权所说的可能性。看到所有的粒子,权重,或者选择一个不同的方法提取状态估计,查看的选项块输出,多重速率的选项卡。

仿真和结果

对于一个简单的测试,真正的植物模型模拟与白噪声输入。输入和工厂的噪声测量粒子滤波的块。以下仿真软件模型表示这个设置万博1manbetx。

open_system (“pfBlockExample”)

模拟系统和比较估计和真正的参数:

sim卡(“pfBlockExample”)open_system (pfBlockExample /参数估计的)

情节展示了真正的分子和分母参数,及其粒子滤波估计。估计大约10时间步后收敛于真实值。收敛了即使初始状态的猜测是远离真正的价值观。

故障排除

几个潜在的实现问题和故障排除的想法是列在这里,如果粒子滤波为您的应用程序不按预期执行。

故障排除的粒子滤波通常是由观察粒子的集合及其权重,可以通过选择输出所有粒子输出所有重量块输出,多重速率的块对话框的选项卡。

第一次检查是确保状态转换和测量似然函数捕获系统的行为相当不错。如果你有一个为您的系统仿真模型(因此获得模拟的真实状态),你可以试着与真实状态初始化滤波器。然后你可以验证如果状态转换函数计算时的真实状态准确,如果测量似然函数计算这些粒子的可能性高。

初始粒子是很重要的。确保至少有一些粒子的高可能性的开始你的模拟。如果真实状态超出了最初的传播状态的假设,估计可以不准确甚至发散。

如果最初状态估计精度很好,但是恶化随着时间的推移,这个问题可能是粒子退化或粒子贫化[2]。粒子退化发生在颗粒分布太广,而粒子贫穷是因为重采样后的粒子聚集。粒子退化导致粒子贫化的结果直接重采样。状态转换关系函数的人工过程噪音这个示例中所使用的一种实用方法。有大量的文献对解决这些问题和根据您的应用程序更系统化的方法可能是可用的。[1],[2]是两个引用,可以是有益的。

下一个步骤

  1. 验证状态估计:一旦过滤器执行如预期在一个模拟世界中,典型的性能进一步验证使用广泛的蒙特卡罗模拟。有关更多信息,请参见在线状态估计模型进行验证万博1manbetx。您可以使用的选项随机性集团在促进这些模拟粒子滤波块对话框。

  2. 生成代码:粒子滤波块支持C和c++代码生成使用仿真软件编码器™软件。万博1manbetx万博1manbetx您提供的功能这一块必须遵守的限制MATLAB编码器™软件(如果你使用MATLAB函数模型系统)和仿真软件编码器软件(如果您正在使用仿真软件功能块模型系统)。万博1manbetx

总结

这个例子展示了如何使用系统辨识工具箱中的粒子滤波块。你估计递归地离散传递函数的参数,参数的更新在每个时间步,新信息的到来。

close_system (“pfBlockExample”,0)

引用

[1]西门,丹。最优状态估计:卡尔曼,H无穷,非线性方法。约翰威利& Sons, 2006。

[2]Doucet Arnaud,亚当·m·约翰森。“关于粒子滤波和平滑的教程:15年后。”Handbook of nonlinear filtering 12.656-704 (2009): 3.

另请参阅

||

相关的话题