Contrarrestar el acoplamiento de CA de la tarjeta de sonido para leer datos digitales

Descargo de responsabilidad: soy nuevo en EE. Todo lo que he aprendido hasta ahora lo he aprendido leyendo en línea y publicando preguntas como esta mientras trabajaba en este proyecto. Pido disculpas si hago un mal trabajo al explicar mi problema, ya que probablemente carezco del conocimiento técnico para hacerlo correctamente.

Estoy intentando leer dos medidores de flujo a través del puerto de micrófono de un teléfono/tableta. Los pines de pulso de los medidores de flujo alternan entre +0V y +5V a medida que giran sus molinetes.

Estoy usando el siguiente esquema para mezclar las señales de los dos medidores de flujo y enviarlas a través de un puerto de micrófono:

esquemático

Mezclo los dos pines de pulso usando un R-2R. Esto me permite observar los cambios de voltaje y saber cuál de los dos medidores de flujo cambió de estado según la magnitud del cambio de voltaje. Por ejemplo, si veo un cambio de voltaje de 2,5 V, sé que el medidor de flujo 1 se ha encendido. Si veo un cambio de voltaje de -1.25V, sé que el medidor de flujo 2 se apagó. Luego uso un divisor de voltaje para bajar el voltaje dentro del rango de voltaje de la tarjeta de sonido.

La tarjeta de sonido está acoplada a CA y convierte los cambios de voltaje en un cambio de amplitud con una fórmula similar a amplitude change = (voltage change)/(voltage range). El acoplamiento de CA también reduce lentamente la amplitud a 0. Entonces, si la tarjeta de sonido de mi PC tiene un rango de voltaje de 2 V y los medidores de flujo provocan un cambio de voltaje de -1.5 V, leo a través del puerto del micrófono un cambio de amplitud de -1.5V/2V = -0.75. Mi algoritmo ve este cambio de amplitud y, en función de algunos umbrales, determina si fue causado por el medidor de flujo 1 o 2. Esto se puede ver en estas capturas de pantalla de mi programa Java ejecutándose en mi PC:

Lectura de señal sin procesar desde el puerto de micrófono de la PC: (fuente: awesomebox.net )Señal del medidor de flujo de PC

Programa que resalta los cambios de estado del medidor de flujo detectados:Detección de cambio de estado de señal del medidor de flujo de PC

Como puede ver, el programa está identificando con éxito los cambios de estado del medidor de flujo; los cambios de amplitud más pequeños son causados ​​por el medidor de flujo 1 y los cambios de amplitud más grandes son causados ​​por el medidor de flujo 2.


Los problemas comienzan al enviar la misma señal a mi tableta Android Galaxy Note 8. Así es como se ve la señal cuando se lee a través del puerto de micrófono de la tableta: (fuente: awesomebox.net )señal del medidor de flujo de la tableta

Tenga en cuenta que todos los cambios de amplitud que se ven arriba son causados ​​por el mismo cambio de voltaje (todos los cambios de estado son del mismo medidor de flujo). Los cambios de voltaje solos o poco frecuentes aparecen como cambios de amplitud muy pequeños, mientras que los cambios de voltaje agrupados estrechamente (de la misma magnitud) aparecen como cambios de amplitud más grandes y más cercanos a lo que esperaría. Parece que cuanto más cerca está un cambio de voltaje de otros cambios de voltaje, mayor es el cambio de amplitud que crea.

Esto es lo que leo del puerto de micrófono de mi PC y lo que espero. Tenga en cuenta que todos los cambios de amplitud son aproximadamente de la misma magnitud: (fuente: awesomebox.net )Señal esperada del medidor de flujo de PC

Previsto: un cambio de voltaje de 1,5 V o -1,5 V siempre debe causar un cambio de amplitud de 0,75 o -0,75.
Real: un solo cambio de voltaje de 1,5 V o -1,5 V provoca un cambio de amplitud de 0,1 o -0,1. Una serie de 10 cambios de voltaje de 1.5V y -1.5V en corta secesión provoca cambios de amplitud de 0.75 y -0.75.

Esta inconsistencia hace que sea imposible que mi algoritmo identifique qué medidor de flujo fue causado por un cambio de amplitud. ¿Por qué estos cambios de voltaje únicos causan cambios de amplitud tan pequeños? ¿Hay alguna forma de hacer que los cambios de amplitud siempre sean consistentes con los cambios de voltaje?

Además, en lugar de que la señal vuelva lentamente a 0 como esperaría del acoplamiento de CA (y se ve en la señal leída a través del puerto de audio de mi PC), parece volver a 0 inmediatamente y oscila varias veces antes de finalmente volver a establecerse. 0. La oscilación agrega mucho ruido a la señal y hace que sea difícil determinar si un cambio de amplitud fue causado por un cambio de voltaje o es simplemente una oscilación de volver a 0. ¿Hay alguna forma de eliminar estas oscilaciones?


Perdón por la novela corta y gracias por cualquier consejo,
- Mike

Parece que la entrada del micrófono está siendo filtrada. Tal vez sería mejor usar el puerto de entrada de línea en lugar del micrófono.
Esta es una pregunta interesante y muy bien escrita. ¡Gracias por publicarlo!
Solo por curiosidad, qué sucede si ambos medidores de flujo cambiaran exactamente al mismo tiempo (o muy cerca). ¿Buscas esto? Sin relación con la pregunta, lo sé, pero fue una lectura interesante y me hizo preguntarme.
Recuerda que esos micrófonos tienen algo de filtrado para mejorar la calidad de la voz y para cancelar el ruido. Algunos incluso pueden tener 2-3 micrófonos diferentes ubicados en el dispositivo. Una cosa que puede hacer es intentar comprar una tarjeta de sonido USB y conectarla al teléfono celular. Luego, si la tarjeta de sonido lo permite, puede usar los puertos de entrada de micrófono/línea para enviar las señales.

Respuestas (4)

La forma más fácil de superar el acoplamiento de CA es convertir sus señales de CC en CA. Parece lógico, ¿no?

Un método simple es simplemente cortar su señal de entrada a alguna frecuencia nominal. En algún lugar entre 500 Hz y 1 KHz parece razonable.

Lo que termina es una señal de CA (onda cuadrada) de cualquier amplitud que fuera su señal de CC original.

Hay varias formas sencillas de hacer esto.

1) El método más simple es usar un temporizador CMOS 555 como TLC555. No estoy en mi computadora en este momento, pero ingresaré un esquema cuando llegue a casa. Pero sigue una descripción verbal:

Conecte los pines 2 y 6 juntos y a su condensador de tiempo. La resistencia de temporización se conecta entre los pines 2/6 y el pin 3. Los pines 4 y 8 van a su fuente de alimentación (5-15 V CC). El pin 1 va a tierra.

Conecte su señal de CC de entrada a través de una resistencia de 4.7k al pin 7 de 555. Este pin también alimenta la entrada analógica en su computadora.

Elija la red RC de temporización para su frecuencia deseada.

Hecho. . .

Hay otros métodos de chopper, pero este es realmente simple y económico.

[Editar]

Al volver a leer la pregunta original y los comentarios y respuestas posteriores, cambiaré ligeramente mi respuesta.

Debido a que está enviando pulsos (no niveles de CC) de amplitud variable al teléfono inteligente / PC, le sugiero que trate la señal de corte como un portador. Por lo tanto, establecería que la frecuencia de corte sea bastante alta, por encima de 10 KHz pero por debajo de 20 KHz. No sé qué tan nítidos son los filtros anti-aliasing en las entradas analógicas modernas de computadoras / teléfonos inteligentes, pero creo que desea estar bien alejado de ellos. Tal vez pueda obtener la frecuencia de corte hasta 16 o 18 KHz, sinceramente, no lo sé.

Luego, simplemente realice un esquema de detección de envolvente en el software para recuperar las amplitudes de la señal de CC original.

Aquí está el esquema que prometí antes. Tenga en cuenta que esto funciona bien con un temporizador CMOS 555, no con una de las piezas bipolares originales. TLC555 es mi temporizador 555 estándar.

El pin 7 funciona para cortar la señal de entrada porque es una salida de drenaje abierto. Tomamos nuestra retroalimentación de tiempo del pin de salida (Pin 3) - esto funciona bien porque el Pin 3 es una salida CMOS simétrica con un nivel Vout-HI casi igual a Vdd y un nivel Vout-LO casi igual a Vss.

Ninguna de estas funciones es posible si se utiliza un bipolar 555 original.

esquemático

simular este circuito : esquema creado con CircuitLab

Buena respuesta, pero sería valiosa una breve descripción de cómo demodular.
Por lo que puedo decir, el OP no está buscando eso. Sólo buscaba amplitud.
¿eh? Por demodular me refiero a recuperar los datos originales de la señal modulada.
Gracias por esto. De hecho, comencé a seguir este camino antes y lo abandoné porque no podía entenderlo. Lo intentaré de nuevo y, afortunadamente, ya tengo un par de temporizadores 555 por ahí. Desafortunadamente, todavía no sigo la mayor parte de lo que dijiste. ¿Podría explicarme más o indicarme un recurso que cubra la teoría de "cortar" la señal? Los conceptos básicos que me gustaría saber son: ¿Cómo afecta la variación de voltaje a la frecuencia de la señal? ¿Es una frecuencia constante o pulsos? ¿Qué es un "portador" ("tratar la señal de corte como un portador")?
El corte simplemente cambia su señal de CC en una señal de CA de la misma amplitud. Dijiste que estás combinando dos sensores con una red R-2R. Esto le da 4 niveles de voltaje discretos. El proceso de corte simplemente convierte esos niveles de señal en CA a cualquier frecuencia portadora que elija.
@DwayneReid Probé el esquema anterior, pero esto es lo que leí a través del puerto del micrófono en mi PC: awesomebox.net/share/ReadingWith555.png - No parece correcto. Como puede ver, ahora hay una oscilación constante, pero es muy leve y los pulsos de los medidores de flujo tienen el mismo aspecto. Revisé dos veces mi cableado y todo se ve bien. ¿Algunas ideas?

La respuesta rápida es no. Estás viendo dos efectos diferentes.

De hecho, la entrada de micrófono de Android está acoplada a CA, pero la frecuencia de corte es mucho más alta que la frecuencia de su sensor. Dado que no proporciona ninguna información sobre las bases de tiempo para las diferentes trazas, es imposible darle números concretos sobre cómo es la respuesta de frecuencia de la entrada de Android.

La PC también tiene un corte de baja frecuencia que es demasiado alto, pero está un poco más cerca de los datos de su sensor que el Android. Además, tiene una impedancia de entrada de aproximadamente 1 kilohm, lo que carga su red de resistencias y provoca la baja amplitud.

No hay una forma práctica de evitar los efectos del acoplamiento de CA (tenga en cuenta que dije práctico: podría construir un filtro de preénfasis, pero no creo que quiera ir allí). La impedancia de entrada de la PC se puede compensar construyendo un amplificador de búfer con un amplificador operacional.

Una excelente pregunta, en presentación y contenido. Y su análisis de cómo obtener lo que desea de un solo canal de entrada (mono) es admirable.

Sospecho que el problema es que la constante de tiempo de filtrado del teléfono es más corta que la de la PC (es decir, el corte de baja frecuencia del teléfono es más alto que el de las PC), y eso probablemente se deba a que el acoplamiento de CA limita el espectro completo. El audio de 20-20 kHz tiende a ser relativamente grande, más grande de lo que cabría cómodamente en un teléfono. Apuesto dinero a que el teléfono tendrá una sensibilidad más baja a la baja frecuencia (una especificación que probablemente nunca verás publicada para un teléfono), y es posible que estén haciendo un impulso de gama baja para tratar de compensar esta realidad.

Creo que estaría de nuevo en camino para procesar primero los datos de su sensor en un esquema de modulación compatible con CA, como sugirió Dwayne.

Si todo lo que se le hace a la señal es un filtro de bloqueo de CC (es decir, un filtro de paso alto), en principio puede recuperar la señal original mediante integración. Este método es susceptible de amplificar el ruido y puede divergir fácilmente si sus constantes no se seleccionan cuidadosamente, pero es teóricamente posible.

La buena noticia es que no tiene que reconstruir la señal original. Si bien los pulsos pueden ocurrir con muy poca frecuencia, en principio solo está interesado en el flanco ascendente o descendente, que es en sí mismo un componente de alta frecuencia y se registra bien, incluso si el voltaje vuelve a caer a cero.

La mala noticia es que parece que aquí están en juego otros efectos además de un simple filtro de bloqueo de CC. Puede haber AGC (control automático de ganancia) o intentos de cancelación de ruido, especialmente en la señal de Android, lo que podría explicar la rampa lenta de la amplitud. Una respuesta de StackOverflow sugiere que estas cosas no se pueden desactivar, mientras que un comentario a esa respuesta sugiere que VOICE_RECOGNITIONse supone que la constante le brinda la transmisión de audio sin procesar, pero es posible que no siempre lo haga. Tal vez haya un circuito analógico en la tableta que simplemente no se puede apagar.

Es posible que desee repensar el esquema de modulación por completo. De manera similar a la respuesta de Dwayne, podría considerar configurar un 555 u otro circuito para producir un breve chirrido, o tren de pulsos, en cada pulso, a diferentes frecuencias para los dos sensores. Luego, los pulsos se pueden detectar analizando la señal en el software utilizando filtros de paso de banda en las dos frecuencias seleccionadas. Luego, el detector busca un pulso en la frecuencia especificada más larga que un cierto umbral y lo cuenta como un pulso del sensor respectivo. Este debería ser un esquema muy robusto, que no depende de las amplitudes absolutas de la señal.

Idealmente, las frecuencias deben elegirse de modo que la frecuencia superior no sea un sobretono de la inferior, por lo que puede producir lecturas falsas. Un temporizador 555 creará por defecto salidas de pulso, pero las salidas pueden pasarse individualmente a nivel bajo para eliminar algunos de sus sobretonos si es necesario. DTMF , por ejemplo, utiliza frecuencias espaciadas por un factor de 1,1.

Además, la frecuencia y la duración deben elegirse para que sean quizás un orden de magnitud más altas y más cortas, respectivamente, que la salida más rápida del sensor, para evitar que un nuevo tren de pulsos comience antes o demasiado cerca de cuando finalizó el anterior. .

Alternativamente, podría usar un esquema de modulación de frecuencia, nuevamente similar a DTMF, donde el estado del sensor modula la frecuencia de un oscilador, que se puede detectar usando un filtro de paso de banda como se sugirió anteriormente. Esto tiene el beneficio adicional de brindar una onda portadora que siempre está activa, lo que le permite detectar si un sensor está conectado.

Si opta por un esquema activado por borde, podría salirse con la suya disparando solo un chirrido en pulsos positivos, lo que debería brindarle un circuito de activación un poco más simple y una mayor indulgencia en la elección de frecuencia, ya que los pulsos ahora están más lejos aparte.