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í:
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?
¿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?
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.
usuario253751
Pangus
usuario1850479
keith
Sadat Rafi