Filtrado digital después de la conversión de analógico a digital (ADC)

Estoy haciendo un PCB que recibe una señal con una banda de frecuencia de 3-50 Hz y picos de hasta 10 de uV. He implementado filtros analógicos LP y HP (paso de banda) adecuados y estoy usando un ADC aislado de 16 bits para enviar los datos a una computadora.

Estoy usando Python para leer las líneas (comunicación derial) del ADC (que actúa como un esclavo de mi MCU). El diagrama del sistema se vería así:

esquemático

simular este circuito : esquema creado con CircuitLab

Cuando obtengo mis datos y hago FFT en tiempo real (dado que es una señal no estacionaria), una característica obvia es un pico a 50 Hz (la red eléctrica tiene una frecuencia de 50 Hz en el Reino Unido) y para eso puedo agregue un filtro de muesca para rechazar el componente de 50 Hz, pero eso significaría un costo adicional y tiempo para implementarlo.

No tengo mucha experiencia con el filtrado digital, pero estaba pensando, en lugar de implementar un filtro analógico basado en hardware, ¿es posible realizar el siguiente procedimiento?

  1. Realice la FFT.
  2. Rechace y suprima el componente de 50 Hz.
  3. Convierta la señal de nuevo en el dominio del tiempo.
  4. Realice el análisis.

¿La demora de tiempo para este tipo de filtrado será solo la cantidad de ciclos de máquina por los que pasa la computadora para realizar esta tarea?

Si esto es plausible, ¿hay algo malo en simplemente amplificar la señal y deshacerse de los ruidos y picos de alta frecuencia con un filtro pasivo y realizar todo el filtrado mencionado (muesca, LP y HP) en la computadora con Python o cualquier otro? metodología de software para el caso?

En términos de resolución, ¿es correcto suponer que la resolución final de la señal bajo análisis es la multiplicación de la resolución del ADC por la resolución del filtrado digital, ya que en mi código los valores se guardan como flotantes de 32 bits?

Por lo general, los filtros digitales son más como simulaciones de software de filtros analógicos. No hay necesidad de hacer una FFT completa para eliminar una frecuencia.
¿Qué quieres decir en la última parte sobre la resolución? Si entiendo bien, no ganarás bits de precisión porque almacenas el valor con más bits que el ADC
Si la amplitud de 50 Hz es inferior a un par por ciento de su rango A/D, el filtrado digital con un filtro FIR de orden superior es probablemente la solución más práctica. Si la amplitud del ruido es grande, podría investigar por qué y asegurarme de que no haya un problema mayor en otro lugar de su sistema.
Podría procesar las muestras con un filtro de muesca bicuadrático digital a 50 Hz y ver qué sucede. Tratar de sacar los 50 Hz de su entrada también sería algo bueno.
Si está utilizando una PC, hay muchas bibliotecas disponibles para el procesamiento de señales digitales. Si no está dispuesto a crear su propio software, entonces puede usar Matlab u Octave (código abierto) para FFT.

Respuestas (3)

Si su banda deseada es de 3 a 50 Hz, entonces no será posible eliminar 50 Hz con ningún filtro práctico sin perder parte del extremo superior de su banda.

¿Puedes usar un filtro digital o debes usar uno analógico? Depende de la relación señal/ruido en el ADC. Si su interferencia de 50 Hz está en tal nivel que le hace bajar la ganancia antes del ADC de tal manera que su señal se vuelve ruidosa, entonces necesita un filtro analógico antes. Si recibe tanto la interferencia como la señal con una ganancia adecuada sin sobrecargar el ADC, entonces puede usar un filtro digital después del ADC.

Hay una implementación trivialmente simple de una muesca de 50 Hz que puede aplicar, ya sea en MCU o en Python, no es necesario usar una operación FFT relativamente costosa. Si agrega muestras durante un período de 20 mS, se eliminarán 50 Hz. No es necesario hacer todas estas adiciones para cada muestra de salida. Es más eficiente tener un registro de desplazamiento de 20 mS de largo y un acumulador, agregar la muestra actual al acumulador y restar la muestra de hace 20 mS.

Este filtro simple le dará una respuesta de frecuencia descendente en su banda de paso. ¿Necesitará corrección antes de su análisis? Depende, ¿cuál es su análisis, cuál es la especificación sobre la planitud en la banda? La corrección podría variar desde el proceso simple/complicado de agregar un poco de pendiente a la respuesta con un par de toques, hasta diseñar un filtro de muesca adecuado. La complejidad de esa tarea dependerá de su frecuencia de muestreo, su planeidad y cualquier especificación de retraso de grupo. Los filtros IIR son buenos cuando hay algo de sobremuestreo y no hay especificación de retardo de grupo.

Si termina con un filtro FIR que tiene más de una docena de toques de largo, puede ser apropiado usar la convolución de Fourrier para implementarlo más rápido que el enfoque más ingenuo de acumulación múltiple.

Debe usar la técnica de protección activa para eliminar el ingreso de CM de 50 Hz y lograr un CMRR no tan bueno como INA pero lo suficientemente bueno para EEG.

A esto lo llaman Right Leg Guard o manejan RLD. Para usar la retroalimentación de señales CM al GND del cuerpo activo, de modo que el ruido de 50 Hz se retroalimente a RLD.

¿El tiempo de demora para este tipo de filtrado será solo el número de ciclos de la máquina por los que pasa la computadora para realizar esta tarea?

Sí, agregará un retraso. Realmente depende de si necesita que los datos se filtren en tiempo real (con un retraso mínimo). Con el filtrado digital en tiempo real, el retraso está relacionado con la velocidad del procesador, cuánto tarda el procesador en realizar operaciones de multiplicación y suma, si el procesador tiene que buscar memoria para la FFT (quiere que la FFT esté en la memoria caché del procesador para haga que la demora sea lo más pequeña posible, si no es así, el procesador va a la memoria, lo que puede demorar varios ciclos de reloj para recuperar). También es posible que desee considerar un filtro de paso de banda FIR o IIR que puede ser mucho menos recursos informáticos para un filtrado similar.

Si esto es plausible, ¿hay algo malo en simplemente amplificar la señal y deshacerse de los ruidos y picos de alta frecuencia con un filtro pasivo y realizar todo el filtrado mencionado (muesca, LP y HP) en la computadora con Python o cualquier otro? metodología de software para el caso?

El procesamiento posterior de los datos es bastante fácil con los filtros digitales, lo bueno de esto es que el filtrado digital se puede configurar a través del software. El filtrado analógico no es tan configurable. La verdadera pregunta es: ¿es necesario filtrar los datos en tiempo real? (para los bucles de control u otra retroalimentación, los retrasos son malos, por lo que el filtrado digital puede ser un problema). Un filtro anti alasing antes de un ADC es una forma común de reducir el ruido antes de enviarlo a una computadora.

En términos de resolución, ¿es correcto suponer que la resolución final de la señal bajo análisis es la multiplicación de la resolución del ADC por la resolución del filtrado digital, ya que en mi código los valores se guardan como flotantes de 32 bits?

Los filtros digitales pueden introducir ruido de cuantificación, calcular este ruido es toda una ciencia en sí mismo. Dependiendo de los recursos informáticos disponibles, la conversión a dobles o flotantes puede reducir el ruido de cuantificación.