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.
- Android Maven no inicia el emulador
- No se puede instanciar la actividad ComponentInfo no puede instanciar la clase
- Cómo retrasar un bucle en android sin usar thread.sleep?
- Gráficos Android gran consumo de memoria montón? - LibGDX
- Esperando la devolución de llamada asincrónica en IntentService de Android
¿Alguna idea?
- Acceso a almacenamiento Web o IndexedDB desde fuera del navegador en Android
- Cómo establecer fillColor, StrokeWidth y StrokeColor de vector drawable programatically en Android
- Android: No se llama a solicitud de petición de cadena de volea
- Uso de Quasar Fibers en la aplicación para Android
- Cómo encontrar métodos overridable en eclipse
- Cómo utilizar el widget de NumberPicker Android 4.0
- La aplicación de Android con Facebook no funciona con la aplicación de Facebook instalada
- Appium: Cualquier trabajo alrededor para utilizar los identificadores de un elemento para automatizar la aplicación
¿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.
- ¿Cómo configurar ANDROID_NDK_HOME para que Android Studio no solicite la ubicación de ndk?
- Android: cambia la programación del sistema del dispositivo mediante programación