How to design and implement a digital low-pass filter on an Arduino

How to design and implement a digital low-pass filter on an Arduino

Diseño e Implementación de un Filtro Pasa Bajo en Arduino

Introducción al Proyecto

  • En este video se abordará el uso de sensores en proyectos de Arduino, destacando la presencia de ruido en las mediciones.
  • Se mostrará cómo diseñar e implementar un filtro pasa bajo adecuado para eliminar el ruido.

Creación de Señales Artificiales

  • Para probar el filtro, se comenzará creando una señal artificial que consiste en una onda sinusoidal de 2 Hz como componente fundamental.
  • Se añadirá una onda sinusoidal de 50 Hz para representar el ruido no deseado.

Transformada Discreta de Fourier (DFT)

  • La DFT permite visualizar las señales en el dominio de Fourier, donde cada curva sinusoidal aparece como un pico.
  • Se aislarán las señales a 2 Hz y 50 Hz, mostrando cómo se comportan en este dominio.

Implementación del Filtro Pasa Bajo

  • Un filtro pasa bajo de primer orden se representa mediante la función de transferencia: ω₀ / (s + ω₀).
  • La frecuencia de corte se establece en 5 Hz para preservar la señal a 2 Hz y atenuar la señal a 50 Hz.

Análisis del Comportamiento del Filtro

  • Al pasar una señal a 2 Hz por el filtro, esta permanece casi sin cambios; sin embargo, la señal a 50 Hz es significativamente reducida.
  • El gráfico Bode muestra cómo varía la magnitud según la frecuencia. A 5 Hz, hay una atenuación del 50% y a frecuencias más altas, como 500 Hz, solo queda el 1% del signal original.

Retardo y Efectos del Filtro

  • La segunda parte del gráfico Bode ilustra el retardo introducido por el filtro. A frecuencias bajas hay poco retardo; sin embargo, aumenta con frecuencias más altas.

Preparativos para Implementación en Arduino

  • La forma continua de la función de transferencia no es adecuada para procesamiento en tiempo real con Arduino; se requiere realizar cálculos adicionales.
  • Se utilizará un script en Python que ya contiene los cálculos necesarios para facilitar la creación del filtro.

Formas Discretas y Ecuaciones Diferenciales

  • Es necesario obtener la forma discreta de la función transferente debido al procesamiento digital que ocurre en tiempo discreto.

Construcción y Prueba del Filtro

  • La ecuación diferencial depende tanto de la señal filtrada (y_n), como también de las señales crudas (x_n).

Resultados Finales

  • El resultado muestra que el filtro elimina mayormente los componentes altos mientras preserva los bajos; aunque hay cierta atenuación y un pequeño retardo presente.

Limitaciones y Ajustes Necesarios

¿Cómo funciona un filtro Butterworth de paso bajo?

Ajuste de la frecuencia de corte y señal de prueba

  • Se cambia la frecuencia de corte en el script a 30 Hz para preservar señales entre 0 y 20 Hz.
  • El espectro de potencia muestra la señal de prueba, y se genera la función de transferencia continua del filtro, junto con su diagrama Bode.
  • Se explica que el filtro pasa bajo tiene una banda de transición amplia, donde las señales no son completamente eliminadas ni preservadas.

Comprendiendo las bandas del filtro

  • La banda pasante es donde el filtro mantiene la señal; para este caso, es entre 0 y 2 Hz.
  • En un mundo ideal, un filtro pasa bajo eliminaría perfectamente todas las señales por encima de los 5 Hz sin banda de transición.
  • Un filtro Butterworth de segundo orden ofrece mayor atenuación y una banda de transición más pequeña en comparación con uno de primer orden.

Implementación del Filtro Butterworth

  • Aumentar el orden del filtro a 50 hace que su respuesta sea muy cercana a un filtro pasa bajo perfecto.
  • La función de transferencia del filtro Butterworth se basa en un polinomio cuyo denominador es del orden n.
  • Se utiliza Python para calcular los coeficientes necesarios para definir la función continua del filtro.

Comparativa entre filtros

  • Al implementar el segundo orden Butterworth, se observa que retiene mejor componentes bajas frecuencias mientras atenúa más las altas.
  • Sin embargo, esto introduce más retraso en la señal filtrada comparado con el primer orden.

Análisis del retraso en filtros

  • El gráfico Bode muestra que hay poco retraso en el primer orden pero aumenta significativamente al usar filtros de órdenes superiores.
  • Un cuarto orden puede tener hasta 45 grados de retraso dentro de la banda pasante; esto significa que la señal filtrada puede estar desfasada considerablemente.

Consideraciones finales sobre diseño

  • Es crucial equilibrar las características de atenuación y el retraso al diseñar filtros pasa bajos.
  • Los filtros Butterworth no son los únicos disponibles; explorar otras opciones puede ser beneficioso dependiendo del proyecto específico.
Video description

In this video, you'll learn how a low-pass filter works and how to implement it on an Arduino to process signals in real-time. You don't have to be a mathematician to design your low-pass filter. You can use libraries to do the work for you. The python scripts linked below can help you to get started. https://github.com/curiores/ArduinoTutorials/blob/main/BasicFilters/Design/LowPass/LowPassFilter.ipynb https://github.com/curiores/ArduinoTutorials/blob/main/BasicFilters/Design/LowPass/ButterworthFilter.ipynb The Arduino examples are also available: https://github.com/curiores/ArduinoTutorials/tree/main/BasicFilters/ArduinoImplementations/LowPass/SimpleExamples There's also a high-pass version now: https://github.com/curiores/ArduinoTutorials/blob/main/BasicFilters/ArduinoImplementations/HighPass/HighPass.ino with a few details about the derivation here: https://github.com/curiores/ArduinoTutorials/tree/main/BasicFilters/Design/HighPass To use the Jupyter Notebook, start by following the instructions to download Python: https://wiki.python.org/moin/BeginnersGuide/Download and then follow the instructions to install Jupyter: https://jupyter.org/install.html Correction(s): @ 9:28, the Butterworth filter sum should be from 0 to n.