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? :
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!
¿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.
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.
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!
Tony Estuardo EE75
Tony Estuardo EE75
Tony Estuardo EE75
bobflux
aarond
aarond
aarond
Tony Estuardo EE75
aarond
aarond