Estoy trabajando en un robot móvil controlado a través de un enlace inalámbrico de 2,4 GHz. El receptor está conectado al Arduino Uno, que sirve a bordo como controlador principal. El canal de entrada más crítico (y principal) que proviene del receptor produce una señal muy ruidosa, lo que conduce a muchos cambios menores en la salida de los actuadores, aunque estos no son necesarios.
Trazado de la entrada del Arduino en un intervalo de 30 segundos.
Estoy buscando bibliotecas que puedan realizar un suavizado eficiente. ¿Hay alguna biblioteca de suavizado de señal disponible para Arduino (Uno)?
library
signal-processing
Asheeshr
fuente
fuente
Respuestas:
Microsmooth es una biblioteca de suavizado de señales liviana que estoy desarrollando actualmente.
Todavía se está trabajando y el objetivo es hacerlo ligero en términos de memoria y rápido. La biblioteca proporciona múltiples filtros para suavizar:
Para usar la biblioteca, descárguela y agréguela al directorio de origen. Además, agregue la siguiente línea a su archivo fuente:
fuente
Creo que veo muchos picos de ruido de muestra única en su señal ruidosa.
El filtro mediano funciona mejor para eliminar los picos de ruido de muestra única que cualquier filtro lineal. (Es mejor que cualquier filtro de paso bajo, promedio móvil, promedio móvil ponderado, etc. en términos de su tiempo de respuesta y su capacidad para ignorar tales valores atípicos de pico de ruido de muestra única).
De hecho, hay muchas bibliotecas de suavizado de señal para Arduino, muchas de las cuales incluyen un filtro mediano.
bibliotecas de suavizado de señal en arduino.cc:
bibliotecas de suavizado de señal en github:
¿Algo como esto funcionaría en tu robot? (La mediana de 3 requiere muy poca potencia de CPU y, por lo tanto, es rápida):
fuente
¿Has probado un filtro de paso bajo? Encontré un ejemplo aquí y otro aquí .
Ambas bibliotecas tienen una lista de datos que se leen desde el sensor analógico de su elección que se promedia. Cada nuevo valor del sensor se agrega a la lista, y el último se descarta de esta manera:
fuente
Puede filtrar esto digitalmente usando un filtro de paso bajo:
Cambie 0.99 para cambiar la frecuencia de corte (más cerca de 1.0 es la frecuencia más baja). La expresión real para ese valor es exp (-2 * pi * f / fs) donde f es la frecuencia de corte que desea y fs es la frecuencia con la que se muestrean los datos.
Otro tipo de "filtro digital" es un filtro de eventos. Funciona bien en datos que tienen valores atípicos; por ejemplo, 9,9,8,10,9,25,9. Un filtro de eventos devuelve el valor más frecuente. Estadísticamente este es el modo.
Los promedios estadísticos como la media, el modo, etc. se pueden calcular utilizando la biblioteca de Arduino Average .
Un ejemplo tomado de la página de la Biblioteca Arduino se refiere a:
fuente