在你使用扩展卡尔曼滤波器,无味卡尔曼滤波或粒子滤波块用于非线性系统的在线状态估计,在应用程序中部署代码之前验证估计。如果验证表明估计的置信度较低,那么请参阅在线状态估计故障排除为下一个步骤。在您验证了在线估计结果之后,您可以为使用的块生成C/ c++代码金宝app®编码器™软件
要验证过滤器的性能,请使用来自这些场景的测量或模拟输出数据执行状态估计。
获取系统在不同操作条件下的输出数据和输入值-确保估算在所有感兴趣的操作条件下都能很好地工作。例如,假设您想要使用噪声位置测量来跟踪车辆的位置和速度。测量不同车速、慢速和急转弯的数据。
对于每个感兴趣的操作条件,获得具有不同噪声实现的多组实验或模拟数据-确保不同噪声值不会恶化估计性能。
对于每一个场景,通过检查残差和状态估计误差来测试过滤器的性能。
残差,或输出估计误差,是测量系统输出之间的差异yMeasured [k]
,以及估计的系统输出yPredicted (k | k - 1)
在时间步k
.在这里,yPredicted (k | k - 1)
估计的输出是否在时间步长k
,在时间步长之前使用输出测量进行预测k - 1
.
块不显式输出yPredicted (k | k - 1)
,但是您可以使用估计的状态值以及状态转换和度量函数来计算输出。例如,请参见计算残差和状态估计误差.
残差必须具有以下特征:
小幅度-相对于输出大小的小误差增加了估计值的置信度。
零均值
低自相关,除了在零时间滞后-要计算自相关,您可以使用自相关(DSP系统工具箱)block from DSP System Toolbox™软件。
当您模拟非线性系统的输出数据并使用该数据进行状态估计时,您就知道了真正的状态值。您可以计算估计状态值和真实状态值之间的误差,并分析这些误差。的位置输出任意时间步长的估计状态值xhat区块的港口。状态估计误差必须满足以下特征:
小的大小
零均值
低自相关性,除了在零时滞
你也可以计算状态估计误差的协方差,并将其与块输出的状态估计误差协方差进行比较P区块的港口。类似的值增加了对滤波器性能的信心。
这个例子展示了如何估计一个离散时间范德堡尔振荡器的状态,并计算状态估计误差和残差来验证估计。残差是输出估计误差,即测量输出与估计输出之间的差值。
在Simuli金宝appnk™模型中vdpStateEstimModel
,范德堡尔振荡器块实现了非线性参数mu = 1的振荡器。振子有两个状态。第一状态的噪声测量x1
是可用的。
该模型使用Unscented卡尔曼滤波块来估计振荡器的状态。由于块需要离散时间输入,速率跃迁块样本x1
给出离散化的输出测量值yMeasured [k]
在时间步k
.Unscented卡尔曼滤波块输出状态估计值xhat (k | k)
在时间步k
,使用yMeasured
直到时间k
.滤波器块使用先前写入和保存的状态转换和测量功能,vdpStateFcn.m
和vdpMeasurementFcn.m
.有关这些函数的信息,请参见基于无迹卡尔曼滤波和粒子滤波的非线性状态估计.
为了验证状态估计,模型计算生成残差块中的残差。此外,由于真实状态值已知,该模型还计算状态估计误差。
为了计算残差,生成残差块首先计算估计输出yPredicted (k | k - 1)
使用估计的状态和状态转移和测量函数。在这里,yPredicted (k | k - 1)
估计的输出是否在时间步长k
,使用输出测量直到时间步长进行预测k - 1
.然后块计算残差在时间步长k
作为yMeasured [k]
-yPredicted (k | k - 1)
.
检查残差和状态估计误差,并确保它们具有小幅度、零均值和低自相关性。
在这个例子中,Unscented卡尔曼滤波块输出xhat (k | k)
因为使用当前度量来改进状态估计块的参数被选中。如果清除此参数,则输出块xhat (k | k - 1)
时步的预测状态值k
,使用yMeasured
直到时间k - 1
.在这种情况下,计算yPredicted [k | k - 1] = MeasurementFcn (xhat [k | k - 1])
,在那里MeasurementFcn
是系统的测量功能。