La mayoría de los textos de Procesamiento Digital de Señales hacen una descripción matemática del proceso de diseño, pero no una explicación de cómo implementar las ecuaciones matemáticas como algoritmos para usar en un microcontrolador....
moreLa mayoría de los textos de Procesamiento Digital de Señales hacen una descripción matemática
del proceso de diseño, pero no una explicación de cómo implementar las ecuaciones matemáticas
como algoritmos para usar en un microcontrolador. Adicionalmente, los ejemplos suelen utilizar
funciones ya desarrolladas en lenguajes de programación para computador, que no permiten
aplicar esas funciones en tiempo real mediante microcontroladores.
No se pretende realizar la explicación de la forma de diseñar sistemas de Procesamiento Digital de
Señal, sino aplicar estos diseños para que funcionen en tiempo real usando microcontroladores.
Actualmente, la gran mayoría de los sistemas electrónicos transforman las señales del
mundo real (analógicas y continuas) en señales digitales discretas, para luego procesarlas y/o
almacenarlas.
Los procesadores de 32 bits ARM Cortex, sobre todo las familias M4 y M7 tienen la capacidad de
realizar procesamiento digital de señales en tiempo real, que se pueden aplicar a señales como
biopotenciales, audio, vibración, etc.
Esta tecnología es accesible actualmente debido al rápido crecimiento los procesadores ARM
Cortex-M, se consiguen fácilmente en el mercado local, a un bajo precio, tienen un conjunto de
herramientas de código abierto y son parte del contenido de la materia de Microprocesadores
2 que se enseña en la Facultad de Informática y Electrónica del a Universidad Privada del Valle.
Este texto trata de mostrar la forma de aplicar el procesamiento digital de señales, usando
microcontroladores, en este caso de 32 bits, específicamente un STM32F411RE (ARM Cortex-M4).
Se aplican filtros digitales de respuesta finita (FIR) e infinita (IIR) y Transformada Rápida de Fourier
(FFT). No se realiza el diseño de los filtros, sino que se utiliza Python para generar los coeficientes
del filtro y se aplican directamente con el microcontrolador, siguiendo las estructuras conocidas
de los filtros. En el caso de la FFT, no se desarrolla la teoría, sino que se aplican dos algoritmos
conocidos.
Los filtros y la FFT de aplican en tiempo real a un conjunto de señales de entrada, para demostrar
una aplicación práctica de estas operaciones. Se trabaja con números de punto flotante y no se
realizan optimizaciones. Tampoco se utilizan las librerías ARM-CMSIS-DSP.
En el Capítulo 1 se describe el entorno de desarrollo implementado para realizar pruebas de
funcionamiento de los programas de procesamiento digital de señales. Se utiliza un STM32F103C8
con dos DAC MCP4921, como generador de tres señales senoidales, que se suman mediante un
circuito sumador y se pasan por un filtro de reconstrucción. La frecuencia de las tres señales
generadas se puede controlar desde el computador mediante un programa en Python y el
puerto USB. Se utiliza otro STM32F103C8 para tomar muestras de dos señales y se grafican en
el computador, usando nuevamente Python y el puerto USB, que en ambos casos se configura
para emular un puerto serial.
En el Capítulo 2 se desarrolla la forma de aplicar filtros FIR usando un STM32F411RE. Los coeficientes
del filtro se generan usando Python, el módulo SciPy y el módulo Matplotlib. Se generan señales
en distintas frecuencias con el generador implementado, descrito en el Capítulo 1, y se muestran
las señales de entrada y salida del filtro, usando un osciloscopio y el sistema de captura también
del Capítulo 1, para observar el comportamiento del filtro.
En el Capítulo 3 se aplican filtros FIR a una señal de entrada. Nuevamente el filtrado lo realiza el
microcontrolador y los coeficientes del filtro se generan usando Python. Se aplican distintos tipos
de filtros y distintas topologías.
En el Capítulo 4 se aplican dos algoritmos de FFT (números flotantes) y se muestran los resultados
mediante un programa en Python, que recibe los datos de la FFT calculada y los grafica. El
microcontrolador envía los valores de la señal muestreada y los valores de la FFT calculada,
tanto la parte real, la parte compleja y el módulo.