0

我有一个 (x,y) 数据流,我想从中确定速度和加速度。这些数据非常典型,可以被认为代表了一辆正在四处行驶的汽车。

每 2ms 出现一个新数据点,我不想累积/存储不必要的值,所以我想使用boost::accumulator.

有没有更简单的方法来处理这类任务?或者可能已经存在的其他库已经这样做了?或者我的想法是否正确。尚不确定我将使用哪些标签,但我喜欢容器为给定属性保留更新值并且不存储旧位置数据的想法。

另一个想法是使用循环缓冲区(例如大小 200)并根据最后 50 个值计算加速度,并根据缓冲区中的所有值计算速度。但是,如果缓冲区存储原始位置数据,则每次都需要循环遍历所有元素以计算加速度和速度。这可以通过保留某种滚动加速度和速度值来改进,该值通过从最终元素中删除值并添加新元素中的值来重新计算以插入(重量为 1/缓冲区中的元素)。然而,这对我来说似乎是某种增强滚动加权累加器。

4

1 回答 1

0

您可能希望对数据应用某种卡尔曼滤波器。旧数据需要存在以帮助减少噪音的影响,新数据需要存在并且权重更高,以便答案对最新信息敏感。

一个相当简单的位置方法,我们称之为X,其中每个新样本都是x是:

X = (1-w) * X + w * x

随着每个新值的出现。权重w调整您对新信息与旧信息的敏感程度。 w = 1表示您不关心历史,w = 0表示您根本不关心新信息(显然意味着您永远不会存储任何内容)。

瞬时速度可以通过计算连续点之间的差并将该差除以时间间隔来计算。这又可以用卡尔曼滤波器过滤。

加速度是连续速度的差,再次除以时间间隔。您也可以过滤这些。

被划分的差异将比位置对噪声更敏感。例如,如果您正在监视其位置的对象停止,您将继续获得位置测量值。连续测量的速度矢量将指向随机方向。

升压累加器似乎没有做你想做的事。

于 2015-03-02T15:55:19.060 回答