Algoritmo / teoría para la eliminación de la fluctuación de posición GPS

Estoy tratando de escribir un GPS de seguimiento (similar a una aplicación de jogging) en el androide y el tema de la localización de GPS jitter ha criado su fea cabeza. Cuando la precisión es FINE y la exactitud está dentro de los 5 metros, la posición es jittering 1-n metros por segundo. ¿Cómo se determina o filtrar esta fluctuación de movimiento legítimo?

Sporypal aplicaciones etc claramente tienen alguna manera que están filtrando este ruido.

¿Alguna idea?

¿Podrías correr las posiciones a través de un filtro de paso bajo?

Algo de la orden

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

dónde

S son sus muestras ruidosas y x, las muestras filtradas paso bajo. K es una constante entre 0 y 1 que probablemente tendría que experimentar con el mejor rendimiento.

Por sugerencia de TK:

Mi pseudocódigo se verá terriblemente C como:

  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, esto es simplemente un integrador de retroalimentación con un retardo de una muestra. Si su entrada tiene un ruido blanco de baja frecuencia encima 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 cerca de cero, dejándole la señal deseada.

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

  • Android: CountDownTimer salta el último onTick ()!
  • Android.database.sqlite.SQLiteException: no hay tal columna
  • Cómo actualizar la vista de lista expandible cuando se cambian los datos del adaptador
  • Android: Llamar a Python Script (a través de SL4A) desde código Java
  • Org.json.JSONArray no se puede convertir a JSONObject
  • Recursos de desarrollo de Android para un novato de Java
  • Utilizar Parcelable con un objeto con Hashmap
  • La función de sustitución de cadena no funciona en android
  • ¿Cómo escribir un mapa en un paquete?
  • ¿Por qué obtengo "debe reemplazar un método de superclase" con @Override?
  • ¿Cómo se juega streaming en directo en la aplicación android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.