2010-11-24 27 views
6

Estoy haciendo algunos cálculos matemáticos en los datos del giroscopio y el acelerómetro combinados y me gustaría pasar el filtro de bajo nivel de los datos resultantes. Entonces, ¿podría alguien publicar un código genérico para un filtro de paso bajo?¿Cómo implementar un filtro LowPass?

+0

¿Quieres que el código para generar coeficientes o simplemente realizar el filtrado? debería ser un IIR o un filtro FIR? – Guy

+0

Bueno, me gustaría un filtro similar al que Apple usa para filtrar los datos del acelerómetro. Solo su código no funciona para mí. – cgossain

+0

¿de qué manera no funciona? – Guy

Respuesta

6

Un filtro de paso bajo de 1er orden IIR puede ser de la forma:

output_value = rate * input_value + (1.0 - rate) * previous_output_value; 

que es más o menos lo que hay dentro Ejemplo de AccelerometerGraph de Apple. Seleccione el parámetro de velocidad en función de la frecuencia (muy, muy bruscamente, por segundo) que desea atenuar o de atenuar para obtener un resultado más uniforme y la frecuencia de muestreo de los datos de entrada.

2

Un filtro de paso bajo simplemente suaviza los resultados para eliminar las frecuencias altas. El filtro de paso bajo más simple es un filtro de caja que se hace promediando n muestras juntas.

Para un promedio de 2 muestras juntas esto es tan simple como hacer:

sample[n] (sample[n] + sample[n + 1])/2; 
2

Si el ejemplo de AccelerometerGraph de Apple es demasiado complejo para que lo entienda, creé un ejemplo de acelerómetro más simple para mi clase que puede descargar here. Esto implementa un filtro simple de paso bajo y paso alto para valores de acelerómetro sin formato, luego registra los resultados en la pantalla.

Como hotpaw2 y Goz describir, este utiliza un muy simple media móvil ponderada para el cálculo del filtro:

UIAccelerationValue lowPassFilteredXAcceleration = (currentXAcceleration * kLowPassFilteringFactor) + (previousLowPassFilteredXAcceleration * (1.0 - kLowPassFilteringFactor)); 
Cuestiones relacionadas