2012-02-07 8 views
7

Estoy tratando de escribir un seguimiento GPS (similar a una aplicación para correr) en Android y la cuestión de la inestabilidad de la ubicación GPS ha criado su cabeza fea. Cuando la precisión es FINA y la precisión está dentro de los 5 metros, la posición oscila entre 1 y n metros por segundo. ¿Cómo se determina o se filtra esta inestabilidad del movimiento legítimo?Algoritmo/teoría para la eliminación de la inestabilidad de la posición GPS

Las aplicaciones de Sporypal etc. tienen una clara forma de filtrar este ruido.

¿Alguna idea?

Respuesta

4

¿Podría simplemente ejecutar las posiciones a través de un filtro de paso bajo?

algo del orden

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

donde

S es sus muestras y x ruidosos, las muestras filtrada en paso bajo. K es una constante entre 0 y 1 con la que probablemente tendrías que experimentar para obtener el mejor rendimiento.

por sugerencia de los conocimientos tradicionales:

Mi pseudocódigo se verá terriblemente C gustan:

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: 

En pocas palabras, este es un simplemente un integrador de retroalimentación con un retraso de una muestra. Si su entrada tiene un ruido blanco de baja frecuencia en la parte superior de la señal deseada, este integrador promediará la señal de entrada a lo largo del tiempo, haciendo que los componentes de ruido promedien casi cero, dejándole la señal deseada.

Lo bien que funcione dependerá de la cantidad de ruido que tenga su señal y del factor de retroalimentación K. Como dije antes, tendrá que jugar un poco con el valor para ver qué valor produce el más limpio, más resultado deseable

+1

¿Podría dar un "por ejemplo" usando un pseudocódigo? Creo que eso lo haría mucho más claro para el OP. –

+0

Gracias por el ejemplo detallado ... vamos a solucionar esto hoy y ver si ayuda. – corrumpu

+0

@corrumpu ¿Funcionó? – Yankee

Cuestiones relacionadas