平滑GPS数据并删除异常值

时间:2015-11-30 10:55:42

标签: algorithm gps curve-fitting kalman-filter extrapolation

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

我正在寻找能够实现以下目标的算法:

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

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

Smooth GPS data

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

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

  • 如果偶尔出现异常情况,算法会很顺利。而目标是消除这些异常值,因为它们是错误的数据。

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

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

基本方法可能是这样的:

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

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

答案 1 :(得分:0)

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

我认为你有一个简单的例子,你只有GPS数据,并希望结合一个瞬间的测量,或者把它们全部扔掉(而不是只丢掉纬度)。

符号符合Wiki article

在更新步骤中,计算

V = y'*inv(S)*y

(y是残差向量,S是残差协方差) 如果你的过滤器被正确调整,那么它有一个卡方(2)分布,如果你只使用lat和lon,或卡方(3),如果你也使用高度。如果V超出此分布的0.1%百分位,则拒绝观察,即不计算增益或更新您的州或州协方差。