2012-02-07 3 views
7

Я пытаюсь написать GPS-трекинг (похоже на приложение для бега трусцой) на андроид, и проблема с джиттером местоположения GPS подняла его уродливую голову. Когда точность FINE и точность находится в пределах 5 метров, положение дрожит 1-м метров в секунду. Как вы определяете или отфильтровываете этот дрожание от законного движения?алгоритм/теория удаления джиттера положения GPS

Приложения Sporypal и т. Д. Явно имеют какой-то способ фильтрации этого шума.

Любые мысли?

ответ

4

Не могли бы вы просто запустить позиции через фильтр нижних частот?

Что-то порядка

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

где

S является ваши шумные сэмплы и х, отфильтрованный фильтром нижних частот образцов. K - постоянная между 0 и 1, которую вам, вероятно, придется экспериментировать с лучшей производительностью.

предложение Per 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. Как я уже говорил, вам придется немного поиграть со значением, чтобы узнать, какое значение производит самый чистый, самый желаемый результат.

+1

Не могли бы вы дать «например», используя псевдокод? Я думаю, что это сделает его намного более ясным для ОП. –

+0

Спасибо за подробный пример ... идя сегодня, чтобы узнать, поможет ли это. – corrumpu

+0

@corrumpu Это сработало? – Yankee