2016-03-15 36 views
0

我有一个基于过滤器的程序,其中一个过滤器每〜200ms接收一次数据。当收到新的样本时,会触发相应的事件。我通过卡尔曼滤波器处理数据。之后,我将处理后的数据发送到下一个过滤器。 现在我想用较短的周期(〜30ms)在输出端(卡尔曼滤波输入数据)生成数据。我的问题是,实现这一目标的好方法是什么?在基于事件的系统中通过卡尔曼滤波器以连续间隔发送数据

我的想法是有一个循环定时器(30毫秒)的单独线程。当收到新样本时,它会被添加到队列中。在每个计时器事件中,我都会检查队列中是否有样本。如果是这样,我使用这个值作为卡尔曼滤波器的测量输入。如果不是,我使用循环时间的卡尔曼预测能力。

这是要走的路吗,还是有更好的解决方案?

回答

0

答案是肯定的,不是!您能否使用第一个卡尔曼滤波器在第二个卡尔曼滤波器的30 ms测量间隔之间传播?是的你可以。如果您最后一次测量到第一个滤波器的时间是400 ms,那么30 ms后第一个滤波器输​​出的最佳估计来自将其传播到430 ms。如果状态传播是线性的,则使用相同的转换矩阵(通常表示为Phi)以30 ms的增量时间传播状态。

问题出现在第二个过滤器中。如果假设它正像大多数滤波器实现那样获得具有高斯白噪声的测量结果,那么来自430ms的输出将是严重建模的测量结果,因为430ms处的测量误差将与测量误差高度相关在400毫秒。在这两种情况下,第一个滤波器中处理的最后一次测量结果为400 ms测量结果。

在第二个滤波器中处理时间相关测量噪声有几种可能的方法。它们包括向第二个滤波器添加一个或多个状态以跟踪测量噪声的相关部分,并从第一个滤波器的输入中减去相关噪声的估计。这将测量序列“预白化”到第二个过滤器中。