X,Y位置流C++的加速度和速度
Acceleration and Velocity from X,Y Position Stream C++
我有一个(x,y)数据流,我想从中确定速度和加速度。这些数据非常典型,可以被认为代表一辆汽车四处行驶。
每2ms就会有一个新的数据点出现,我不想累积/存储不必要的值,所以我想使用boost::accumulator
。
有没有一种更简单的方法来处理这种类型的任务?或者其他已经存在的图书馆已经这样做了?还是我的思维走在了正确的轨道上。还不确定我将使用什么标签,但我喜欢容器为给定属性保留更新值,而不存储旧的位置数据的想法。
另一个想法是使用圆形缓冲器(例如大小200),并根据最后50个值计算加速度,并根据缓冲器中的所有值计算速度。然而,如果缓冲区存储原始位置数据,则需要每次在所有元素上循环以计算加速度和速度。这可以通过保留某种滚动加速度和速度值来改进,该值通过删除末端元素中的值并添加要插入的新元素中的值来重新计算(缓冲区中的权重为1/元素)。然而,在我看来,这似乎是某种助推滚动加权累加器。
您可能想要对数据应用某种卡尔曼滤波器。旧数据需要存在以帮助减少噪声的影响,新数据需要存在并加权更高,以便答案对最新信息敏感。
一个相当简单的定位方法,让我们称之为X,其中每个新样本是X是:
X = (1-w) * X + w * x
当每个新值出现时。其中权重w调整您对新信息与旧信息的敏感度w=1意味着您不关心历史,w=0表示您根本不关心新信息(显然意味着您永远不会存储任何信息)。
瞬时速度可以通过计算连续点之间的差值并将该差值除以时间间隔来计算。这又可以用卡尔曼滤波器进行滤波。
加速度是顺序速度的差值,再次除以时间间隔。你也可以过滤这些。
分割后的差异将比位置对噪声更敏感。例如,如果您正在监视其位置的对象停止,您将继续获取位置测量值。连续测量的速度矢量将指向随机方向。
升压蓄能器似乎无法执行您想要的操作。
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 查找标准::hash_map与标准::矢量的速度
- 加快在C++中读取/处理日志文件的速度
- 为什么这些算法的运行速度比它们应该的要快?
- 如何提高文件的读取速度?
- 通过libpqxx提高PostgreSQL数据库的更新速度
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- MFC:你能在CDateTimeCtrl中改变自旋的加速度吗?
- 如何加快大字符串的解析速度?
- 如何比较两个函数的速度和性能
- X,Y位置流C++的加速度和速度
- 根据加速度计数据测量速度和距离
- 如何根据现有的加速度/速度规则计算所需的加速度
- 为什么我的球用加速度作为速度