3

我有实时 GPS 数据,每秒更新 5 次。平均而言,80% 的数据相当准确;但大约 20% 的数据是生涩的。此外,有时我们还会得到一个异常值,即远离实际轨迹的错误数据点。

我正在寻找一种可以实现以下目标的算法:

  • 平滑数据以消除抖动。
  • 不是为了平滑异常数据,而是消除那些错误的数据点并用一些外推值替换。

为了提供一些背景信息,我首先在 stackoverflow.com 网站上搜索了一些类似的主题,并找到了以下链接:

流畅的 GPS 数据

我的软件工程师实现了上面链接中提供的 KalmanLatLong 例程;但是我们遇到了以下问题:

  • 当算法生成外推值时,算法落后于意义,更多的 GPS 数据点到达(请记住数据是实时的)。

  • 在偶尔出现异常值的情况下,算法可以很好地平滑它。而我们的目标是消除这些异常值,因为它们是错误的数据。

我正在寻找一种可以实时工作并以 5 Hz 处理 GPS 更新并在消除异常值的同时平滑数据的算法。

您的帮助将不胜感激。

4

2 回答 2

1

一个基本的方法可能是这样的:

  • 取最后的 x 点并计算平均增量向量。
  • 将其应用于最后一个点以获得推断的新点(您期望新点所在的位置)。
  • 将推断点与您从 GPS 获得的点进行比较。
  • 如果外推节点与您获得的节点之间的距离小于某个阈值,那么您可以认为这是一个很好的数据点并将其与外推节点混合(新点是 P* GPS_point + (1-P) * extrapolated_point对于一些介于 0 和 1 之间的 P)。
  • 如果距离超过阈值,那么它可能是一个异常值,所以完全放弃它并只使用外推点。

您需要试验 X、P 和阈值的值,看看哪些对您有用。对高速赛车有利的东西对步行应用不利。如果您有太多外推节点,还要添加一个检查,因为这意味着该算法认为大部分数据是错误的并且不应该是正确的。您可以清空点列表并从头开始。

于 2015-11-30T16:36:38.230 回答
0

您可以在卡尔曼滤波器本身中加入观察拒绝。这有时称为数据窥探。

我假设您有一个简单的情况,您只有 GPS 数据,并且想要合并瞬间的测量值,或者将它们全部丢弃(而不是仅仅丢弃纬度)。

该符号与Wiki 文章一致

在更新步骤中,计算

V = y'*inv(S)*y

(y 是残差向量,S 是残差协方差)如果您的滤波器经过正确调整,如果您仅使用 lat 和 lon,则它具有卡方 (2) 分布,或者如果您使用的是卡方 (3)高度也。如果 V 超过了这个分布的上百分位 0.1%,拒绝观察,即不计算增益或更新你的状态或状态协方差。

于 2015-12-01T14:10:47.630 回答