2012-02-07 45 views
7

私はアンドロイドにGPS追跡(ジョギングアプリに似ています)を書こうとしています.GPS位置ジッタの問題はそれが醜い頭を育てました。精度がFINEで精度が5メートル以内の場合、位置は毎秒1-nメートルのジッタがあります。正当な動きからこのジッタをどのように決定し、除外しますか?GPS位置ジッタ除去のアルゴリズム/理論

Sporypalなどのアプリでは、このノイズを除外していることが明らかです。

どのような考えですか?

答えて

4

位置をローパスフィルタで実行できますか?

Sはあなたの騒々しいサンプルとのx、ローパスフィルタリングされたサンプルであるため

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

何か。 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: 

一言で言えば、これは1サンプル遅延を持つ単純フィードバックインテグレータです。入力信号に希望する信号の低周波ホワイトノイズがある場合、この積分器は時間の経過とともに入力信号を平均化し、ノイズ成分をほぼゼロに近づけ、希望する信号を残します。

どれくらいうまく動作するかは、信号のノイズ量とフィルタのフィードバック係数Kに依存します。前にも述べたように、値を少しだけ再生して、望ましい結果。

+1

擬似コードを使用して「インスタンス」を指定できますか?私はそれがOPのためにそれをはるかに明確にすると思います。 –

+0

詳細な例をお寄せいただきありがとうございます...今日これをハッシュして、役立つかどうかを確認してください。 – corrumpu

+0

@corrumpu動作しましたか? – Yankee