¿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
¿Podría dar un "por ejemplo" usando un pseudocódigo? Creo que eso lo haría mucho más claro para el OP. –
Gracias por el ejemplo detallado ... vamos a solucionar esto hoy y ver si ayuda. – corrumpu
@corrumpu ¿Funcionó? – Yankee