2012-02-07 17 views
7

Sto cercando di scrivere un tracciamento GPS (simile a un'applicazione di jogging) su Android e il problema di jitter di posizione GPS ha allevato la sua brutta testa. Quando la precisione è FINE e la precisione è entro 5 metri, la posizione sta tremolando di 1-n metri al secondo. Come si determina o si filtra questo jitter dal movimento legittimo?algoritmo/teoria per la rimozione del jitter di posizione GPS

Le app di Sporypal ecc hanno chiaramente un modo in cui filtrano questo rumore.

Qualche idea?

risposta

4

Potresti semplicemente eseguire le posizioni attraverso un filtro passa basso?

Qualcosa dell'ordine

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

dove

S è i vostri campioni e x rumorosi, i campioni filtrati passa-basso. K è una costante tra 0 e 1 che probabilmente dovresti sperimentare per ottenere le migliori prestazioni.

suggerimento di Per TK:

mio pseudocodice avrà un aspetto terribilmente c come:

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: 

In poche parole, questo è un semplicemente un integratore di retroazione con un ritardo di un campione. Se il tuo ingresso ha un rumore bianco di bassa frequenza sulla parte superiore del segnale desiderato, questo integratore calcolerà la media del segnale di ingresso nel tempo, causando così una media dei componenti di rumore fino allo zero vicino, lasciandoti con il segnale desiderato.

come funziona dipenderà da quanto rumore il segnale ha e il fattore di feedback filtro di K. Come ho detto prima, si dovrà giocare un po 'con il valore per vedere quale valore produce il più pulito, più risultato desiderabile.

+1

Puoi dare un "per esempio" usando lo pseudocodice? Penso che lo renderebbe molto più chiaro per l'OP. –

+0

Grazie per l'esempio dettagliato ... andando ad hash questo oggi e vedere se aiuta. – corrumpu

+0

@corrumpu Ha funzionato? – Yankee

Problemi correlati