用于GPS位置抖动消除的算法/理论

时间:2012-02-07 21:41:51

标签: java android gps

我正在尝试在Android上编写GPS跟踪(类似于慢跑应用程序),并且GPS位置抖动的问题已经让人头疼了。当精度精确且精度在5米以内时,位置每秒抖动1-n米。如何确定或过滤掉合法运动中的抖动?

Sporypal等应用程序显然有一些方法可以过滤掉这种噪音。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

你能通过低通滤波器运行这些位置吗?

订单的某些内容

x(n) = (1-K)*x(n-1) + K*S(n)

,其中

S是您的噪声样本,x是低通滤波的样本。 K是0到1之间的常数,您可能需要进行实验以获得最佳性能。

根据TK的建议:

我的伪代码看起来很像C:

    float noisy_lat[128], noisy_long[128];
    float smoothed_lat[128], smoothed_lon[128];
    float lat_delay=0., lon_delay=0.;

    float smooth(float in[], float out[], int n, float K, float delay)
    {
       int i;

       for (i=0; i<n; i++) {
          *out = *in++ * K + delay * (1-K);
          delay = *out++;
       }

       return delay;
    }

loop:    
    Get new samples of position in noisy_lat and noise_lon

    // LPF the noise samples to produce smoother position data

    lat_delay = smooth(noisy_lat, smoothed_lat, 128, K, lat_delay);
    lon_delay = smooth(noisy_lon, smoothed_lon, 128, K, lon_delay);

    // Rinse. Repeat.
    go to loop:

简而言之,这是一个简单的反馈积分器,具有单样本延迟。如果您的输入在所需信号之上具有低频白噪声,则该积分器将随时间平均输入信号,从而使噪声分量平均接近零,从而为您提供所需信号。

它的工作原理将取决于你的信号有多少噪音和滤波器反馈系数K.正如我之前所说的那样,你将不得不玩一下这个值来看看哪个值产生最干净,最可取的结果