¿Latencia de loopback de un CODEC de audio?

Estoy pensando mucho en un posible proyecto futuro que contendrá, entre muchas otras cosas, una especie de "audífono casero". Micrófonos que alimentan auriculares con algo de DSP en el medio, todo en un espacio físicamente pequeño. No porque tenga problemas de audición, sino para dar cuenta de un paso bajo acústico causado por una parte diferente del proyecto.

Tengo algo de experiencia en el uso de sistemas de audio digital en vivo que reclaman una latencia de aproximadamente 1 ms desde los ADC, todo el camino a través del (bastante complicado) DSP, hasta los DAC. En otras palabras, una grabadora estéreo conectada a un divisor en Y en la entrada del ADC para un canal de grabación y la salida del DAC para el otro canal de grabación mediría aproximadamente 1 ms de compensación entre ellos. (ver el circuito de prueba a continuación)

Eso está bien para un concierto, donde fácilmente puede tener más desplazamiento físico que eso (~ 1 pie) entre los micrófonos y los parlantes, pero para mi proyecto, estoy buscando varias pulgadas como máximo.

Entonces, para tener una idea de lo que estoy atascado y cuánto necesito optimizar y dominar mi código DSP para que quepa en el tiempo restante ( pequeños búferes, incluso hasta una sola muestra solo para sacarlo AHORA!, lo que significa que no puedo usar las instrucciones SIMD (velocidad de muestreo aumentada, no para calidad de "audiofool" sino solo para acortar el tiempo de respuesta, etc.) , ¿qué latencia puedo esperar para un chip CODEC de audio típico en este circuito de prueba? :

esquemático

simular este circuito : esquema creado con CircuitLab

Espero un mínimo de 2 muestras, solo por cómo funciona I2S: enganche y cambie del ADC, luego cambie al DAC y enganche nuevamente, pero imagino que las conversiones en sí mismas tampoco son instantáneas.

He mirado algunas hojas de datos y, al menos para las baratas, no puedo encontrar un parámetro que me diga la latencia general. Para su aplicación prevista de audio de PC, puedo entender que no es importante, pero para este proyecto, lo es.

¿Qué parámetro(s) debo buscar en una buena hoja de datos? ¿Y hay alguna regla general/conocimiento tribal que también sería útil, en términos de DSP en tiempo real donde la salida podría combinarse con la entrada original, después de un pequeño retraso de la velocidad de la onda de la entrada original? (1's de muestras a 48kHz)


Por supuesto, es posible que todo esto ni siquiera importe, dependiendo del paso bajo acústico con el que termine, para lo cual este DSP debe ser un paso alto complementario con corrección de transductor y limitación de picos. No tengo idea de cuál será ese paso bajo acústico, así que estoy buscando suficiente información general para poder evaluarlo cuando llegue el momento.

(Si la frecuencia de cruce termina siendo lo suficientemente baja y pronunciada (la latencia general es una pequeña fracción de una sola onda), todo esto puede ser un punto discutible; de ​​todos modos, no voy a escuchar el original, donde importa, así que simplemente arroja un código prefabricado y llámalo bueno. O el cruce podría ser lo suficientemente alto o gradual como para que sí importe...)

De todos modos, estoy buscando suficiente información general para poder evaluarla cuando llegue el momento. ¡Gracias!

¿Por qué no usar el modo analógico puro para medir el cambio de fase con la distancia y usar un ecualizador gráfico para los auriculares con cable? Entonces, la latencia solo está limitada por su electrónica (cerca de 0) y 10 a 90% Risetime = 35% de BW 1/f. ¿Cuál es el resultado final?
¿Un espectro ecualizado de qué medio? Los ecualizadores gráficos se pueden hacer bastante pequeños.
Si no puede hacer que funcione con puro analógico, será aún más difícil con un DSP.
El filtro digital en el DAC/ADC también agrega una latencia sustancial. Podría estar mejor con un SAR ADC, o usando el flujo de bits del sigma delta directamente.
@TonyStewartEE75 Sí, sería posible en analógico puro, y esa fue mi idea original, pero no podré acceder físicamente mientras se está ejecutando, por lo que también se requiere algún tipo de ajuste remoto. (En teoría, acérquelo y luego tápelo "en vivo") Eso es muy fácil de agregar a un diseño digital, pero representa un aumento bastante grande en la complejidad y opciones muy limitadas en analógico, ya que no todas las topologías son fáciles o incluso posibles. para ajustar eléctricamente. (Los DAC-fed-VCA y los digipots solo hacen mucho)
Entonces te das cuenta de que no pensaste en todas las opciones que realmente necesitas, y tienes que hacer otra placa para obtenerlas, en lugar de simplemente reprogramar un chip. El lado administrativo de las cosas sería MUCHO más fácil si fuera todo digital, así que estoy tratando de encontrar una manera de hacer que los efectos secundarios sean aceptables, mucho antes de comprometerme con algo y construir el resto del diseño sobre eso.
Si la respuesta es que la conversión es intrínsecamente demasiado larga para que esto funcione, incluso sin ningún código DSP (según mi circuito de prueba anterior), entonces está bien, pero me gustaría que alguien lo demuestre si es cierto.
Desearía poder ver su aplicación y las especificaciones que tiene en mente y por qué la latencia es importante para una fase de unas pocas pulgadas en micrófonos duales. ¿Es eso para simular el espacio entre las orejas para una agudeza especial?
@TonyStewartEE75 Es un disfraz teatral bastante complicado que cubre la cabeza del actor, de ahí el paso bajo acústico. Solo quiero reemplazar lo que se pierde, sin filtro de peine. No sé por qué es necesario medir el retraso de ida y vuelta de un par ADC/DAC. Como dije, estoy buscando suficiente información para evaluarlo por mi cuenta, cuando llegue el momento, que definitivamente aún no lo ha hecho. Muuuucho también puede haber incógnitas en este punto para que cualquiera pueda dar una respuesta sólida de sí o no, por lo que estoy buscando una idea más general de lo que hacen las herramientas en sí. No si encajan bien o no.
El monitoreo en el oído también es una opción, pero ME ENCANTARÍA si pudiera hacer ambas cosas: usar el IEM en el escenario y la amplificación autónoma para interactuar con la audiencia en el vestíbulo o en la calle, etc. Estoy no me preocupa la latencia del IEM, ya que es una señal diferente a la que hay en el aire. El micrófono local y el procesamiento forman una ruta paralela con el sonido directo, y eso importa una diferencia en la latencia, o crea un filtro de peine.

Respuestas (2)

¿No acabas de especificar la respuesta?

Dijiste un espacio de "un par de pulgadas". El sonido es de aproximadamente 1 ms por pie. Supongamos 4 pulgadas, lo que significa aproximadamente 400 us (estoy siendo MUY flexible para facilitar las matemáticas).

A 48 KHz, las muestras son aproximadamente cada 20 us, por lo que obtienes 20 muestras (400 us/20 us) para mantenerte dentro de tu presupuesto de latencia.

Si ejecuta eso hasta 192 KHz, obtiene 80 muestras.

Los códecs probablemente estén cerca de 1 muestra de latencia en DAC y ADC si desactiva el procesamiento DSP integrado. En realidad, nadie intenta retrasar las cosas (a menos que tenga un procesamiento integrado y se lo pida), pero debe tener una muestra completa para transmitir/recibir en el bus digital.

En cuanto a las instrucciones vectoriales, incluso si solo tuviera 1 muestra de tiempo actual para trabajar, tiene muchos algoritmos DSP que funcionan con bastantes muestras de tiempo pasado, por lo que las instrucciones vectoriales SIMD aún serían una victoria.

También le advertiría que no sea demasiado estricto en sus especificaciones de audio. La mayoría de la gente tiene... una audición bastante imperfecta. Creé sistemas de audio donde había un cambio de tono variable de 5-8% (por razones de compensación de retraso en casos realmente malos). Fue doloroso para mí escucharlo, pero la gran mayoría de la gente ni siquiera se dio cuenta incluso después de que lo señalé.

Le recomiendo que ajuste sus especificaciones al promedio de percepción humana y permita ajustes para aquellos que están fuera de la norma.

Espero que esto ayude.

Hmm... tu anécdota acerca de que la mayoría de la gente no escucha un problema que es obvio para ti, incluso después de que lo señalaste, es alentador... excepto que yo soy uno de los que tiende a notar ese tipo de cosas. :-/ Mirar los modos de falla también parece un poco alentador incluso entonces: si mi sistema es inadecuado, será un filtro de peine, y nuestros oídos parecen ser bastante buenos para ignorarlos, ya que ocurren todo el tiempo en la naturaleza de todos modos. Así que tal vez pueda funcionar simplemente dejar que haga lo que va a hacer, con un código base conocido.
Sé que nadie retrasa intencionalmente estas cosas, pero también sé que inherentemente se requiere algo solo por cómo funciona el proceso. Así que estoy preguntando sobre eso, más que cualquier otra cosa. En el circuito de prueba que se muestra en la pregunta, ¿cuánto tiempo tarda un impulso, un cambio de paso u otra característica reconocible en completarse? No solo la mecánica de la comunicación en serie, sino crear una representación digital en primer lugar y luego usarla al final. Un ADC SAR, por ejemplo, no es instantáneo, pero el audio probablemente sea delta-sigma...
Está discutiendo con la hoja de datos sobre la "tasa de muestreo". La hoja de datos dice que una muestra cae cada 20 ms a 48 KHz, así que eso es lo que sucede. Estos no son ADC de RF de megavelocidad que se canalizan profundamente porque la frecuencia de muestreo analógica y la frecuencia de datos digitales son similares. Nadie mantiene una tubería de muestras analógicas a velocidades de audio, eso sería una pérdida de silicio. Los convertidores delta-sigma se sincronizan internamente a muchos MHz (más de 20 MHz), no a KHz, y funcionan con una muestra de audio a la vez. El audio es muy lento en relación con los bloques digitales. En consecuencia, la latencia del reloj de audio delta-sigma es 1.
" Nadie mantiene una canalización de muestras analógicas a velocidades de audio, eso sería un desperdicio de silicio ". No intencionalmente, no. Nunca dije que alguien lo hiciera. " ...y trabajar con una muestra de audio a la vez ". Sabía que eran convertidores de baja resolución súper rápidos que se "aumentaban" a propósito (todas las frecuencias altas) y luego pasaban bajo para completar los bits menores y elimine ese ruido antes de tomar cada muestra número 1000 o lo que sea y tirar el resto, pero teniendo en cuenta que 1) eso es algo de trabajo DSP en el convertidor mismo , y 2) DSP generalmente implica una latencia distinta de cero ...
De todos modos, ¿está diciendo que mi circuito de prueba dará una compensación de dos períodos de muestra I2S entre los canales de la grabadora analógica estéreo, independientemente de la frecuencia del reloj de muestra? Eso implica que usan filtros IIR internamente, ya que los FIR tienden a comportarse mal de otras maneras si los optimiza para una latencia súper baja. Eso me parece plausible, incluso si los FIR se prestan perfectamente a la conversión de frecuencia de muestreo en un solo paso, como un paso bajo que solo calcula las muestras de salida requeridas y no todo. Si te interpreté correctamente, entonces esto suena como la primera respuesta real.
Eso espero, si. Sin embargo, le recomendaría que busque convertidores delta-sigma. Tiene algunos conceptos erróneos sobre ellos que probablemente quiera corregir antes de lanzar algoritmos DSP sobre sus salidas/entradas. Los convertidores delta-sigma no tiran las muestras, las sobremuestrean bastante y sus comparadores tienen una resolución muy alta. Delta-sigma no agrega ruido inherentemente, pero da forma al ruido base. Finalmente, agregar ruido (llamado tramado) de hecho aumenta el ruido de fondo general incluso a bajas frecuencias, pero rompe los artefactos de muestreo. Buena suerte.
Tal vez tengamos una diferencia en la comprensión de los términos entonces. (+1 por ese comentario) "Sobremuestreo" para mí, necesariamente requiere tirar algo (diezmar) más tarde, y eso está bien si la señal no contiene nada más alto que el corte de Nyquist resultante. Si va a pasar bajos digitalmente, entonces la frecuencia de muestreo mínima de la entrada es más alta que la frecuencia de muestreo mínima de la salida. Esta aniquilación podría no ser necesariamente un paso explícito, solo un efecto secundario de otra cosa. Por ejemplo...
...uno de mis proyectos anteriores tenía un ADC SAR de 10 bits funcionando tan rápido como podía (~100 ksps), midiendo el control de un operador manual con mucho ruido electrónico no correlacionado, y la rutina de interrupción del ADC hizo un paso bajo IIR de primer orden en él (también llamado "promedio exponencial") con un corte de ~ 10 Hz (calculado a partir de la frecuencia de muestreo, por supuesto, el DSP solo entiende las muestras, no el tiempo) antes de escribirlo en una variable global de 16 bits, que sería un bucle PID tomar como su punto de ajuste cada vez que lo alcance. Muchas muestras de ADC por escaneo PID.
Todos los principios que describí están ahí: sobremuestreo con ruido, paso bajo para convertir ese ruido a una mejor resolución y luego usar el resultado a una frecuencia de muestreo más baja. Las explicaciones que he visto de delta-sigma son más o menos eso, excepto que la mayoría de ellos usan un convertidor de 1 bit (comparador analógico o usando el bit digital directamente; un "DAC de 1 bit" es solo un cable) con tal vez una interfaz digital de 8 bits. Los diseños del mundo real probablemente usen algunos bits más, como quizás 8 más o menos como un ADC flash o un DAC R-2R, ya que son prácticamente instantáneos, pero mi entendimiento es más o menos eso.

¿Qué parámetro(s) debo buscar en una buena hoja de datos?

Creo que finalmente encontré la respuesta para esta. Se llama "Retardo de grupo", como en las páginas 16 y 20 de esta hoja de datos . Parece medirse en muestras, aunque la hoja de datos da la unidad en segundos y el número como x/Fs.
La página 21 proporciona las frecuencias de muestreo válidas para cada modo.

Tuve que buscar en Google "retraso de grupo", porque no era algo con lo que estuviera familiarizado, y encontré esta explicación útil . Entonces, en el contexto de un filtro ADC o DAC, parece que el convertidor en sí mismo retrasa la señal en esa cantidad de muestras.

En el caso del enlace aquí, son 12 o 9 muestras para el ADC a 48kHz o 96kHz, respectivamente, y 10 o 5 muestras para DAC, para un total de ida y vuelta de 22 o 14 muestras desde la entrada analógica a la salida analógica, solo en el propio chip convertidor.

La conversión a tiempo y luego a distancia en el aire da ~460us|~6in|~15cm o ~150us|~2in|~5cm.

¡Creo que puedo trabajar con el más corto de esos, siempre que pueda seguir el ritmo con el doble de muestras! Incluso si tiene un filtro de peine en el extremo superior (la longitud de onda de 20kHz en el aire es ~5/8in|~1.5cm), está bastante bien atenuado acústicamente (la razón por la que este proyecto existe en primer lugar), por lo que probablemente no sea perceptible. Siempre que se alinee lo suficientemente cerca a través de la región de cruce (paso bajo acústico, paso alto DSP), seré feliz.

Curiosamente, la cifra de retraso para 48 kHz es casi la mitad del 1 ms que anuncian los equipos comerciales de sonido en vivo para su latencia total. Supongo que sería razonable que algunas rutas complejas y un puñado de transportes tomaran las otras 26 muestras más o menos.

¿Y hay alguna regla general / conocimiento tribal que también sería útil para evitar un filtro de peine acústico de un DSP en vivo / en tiempo real ...?

Bueno, una obvia, dada la primera parte de esta respuesta, es ejecutar el sistema tan rápido como tenga suficientes relojes por muestra en el DSP. Cuál es ese número, depende de cuál sea su DSP, cuál es el procesamiento y cómo optimiza ese procesamiento.

96kHz no va a sonar diferente de 48kHz, pero con el códec mencionado anteriormente, ¡da como resultado ~ 1/3 de latencia!