【问题标题】:Smoothing of GPS data and removal of outliersGPS数据的平滑和异常值的去除
【发布时间】:2016-03-03 23:49:00
【问题描述】:

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

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

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

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

Smooth GPS data

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

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

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

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

我们将非常感谢您的帮助。

【问题讨论】:

  • 您链接的问题中的example implementation 怎么样?我不知道它处理异常值的效果如何,但我不敢相信该方法需要超过 200 毫秒才能运行。
  • 这样的过滤只能使用应用程序特定的参数来完成。所以你必须决定哪个距离可以被接受为异常值。如果这通常是可以解决的,那么 GPS 芯片制造商就会实施它。 20% 的数据是生涩的?我不相信。贴一张显示坐标的图,你觉得生涩是什么?您的离群值距离预期位置有多少米。为什么需要 5Hz?每秒更多的位置并不意味着更好。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    符号与Wiki article一致

    在更新步骤中,计算

    V = y'*inv(S)*y
    

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

    【讨论】:

    • z 是实际测量值,Scov(y) 所以我怀疑你的意思是y' * inv(S) * y
    猜你喜欢
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多