Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从x,y位置流C++中的加速度和速度_C++_Boost_Stream_Velocity_Acceleration - Fatal编程技术网

从x,y位置流C++中的加速度和速度

从x,y位置流C++中的加速度和速度,c++,boost,stream,velocity,acceleration,C++,Boost,Stream,Velocity,Acceleration,我有一个x,y数据流,我想从中确定速度和加速度。这些数据非常典型,可以被认为代表了一辆汽车在周围行驶 每2ms会有一个新的数据点,我不希望积累/存储不必要的值,所以我想使用boost::acculator 有没有更简单的方法来处理这类任务?或者其他已经存在的库已经做到了这一点?或者说我的想法是对的。我还不确定要使用什么标记,但我喜欢容器为给定属性保留更新的值,而不存储旧的位置数据 另一个想法是使用圆形缓冲区,例如大小200,并根据最后50个值计算加速度,根据缓冲区中的所有值计算速度。但是,如果缓

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

每2ms会有一个新的数据点,我不希望积累/存储不必要的值,所以我想使用boost::acculator

有没有更简单的方法来处理这类任务?或者其他已经存在的库已经做到了这一点?或者说我的想法是对的。我还不确定要使用什么标记,但我喜欢容器为给定属性保留更新的值,而不存储旧的位置数据


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

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

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

随着每一个新值的出现。其中权重w调整您对新信息与旧信息的敏感程度。w=1意味着你不关心历史,w=0意味着你根本不关心新信息,显然意味着你永远不会存储任何东西

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

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

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


增压累加器似乎不能满足您的要求。

输入数据的噪音有多大?
X = (1-w) * X + w * x