Recuperación de reloj de audio digital desde UDP

1

Mi pregunta es ¿cómo puedo recuperar la sincronización del reloj del audio digital transmitido a través de Ethernet utilizando UDP?

Estoy transmitiendo audio en vivo a través de Ethernet usando UDP. Mi configuración utiliza dos tableros de descubrimiento STM32F407, uno para transmitir el otro recibe. Puedo escuchar los datos de audio que estoy emitiendo desde el códec de la placa de descubrimiento. Cuando uso el analizador lógico puedo ver que la selección de palabras no está sincronizada con los datos. El retraso entre la transmisión y la recepción es de 1 ms. 32 bits, 44kHz de reloj de muestra. El audio suena bien cuando las personas están hablando, pero los ruidos fuertes crean distorsión. Cuando se reproduce música, las frecuencias más altas se distorsionan. A niveles de voz moderados, el sistema suena bien.

¿Alguno tiene o sabe algún algoritmo para recuperar el reloj de los datos UDP? ¿La sincronización cuidadosa de los cuadros transmitidos facilitaría las cosas?

Gracias de antemano David

    
pregunta david simmonett

1 respuesta

3

Si su selección de palabras no está sincronizada con los datos, no tiene la interfaz de hardware configurada correctamente. Necesitas arreglar ese problema primero. No podemos ayudarte con eso ya que no compartiste el código que estás usando. Pero una vez que lo haya arreglado, aquí hay algunas pautas generales con respecto a la configuración de la frecuencia de muestreo en el receptor.

En el lado de transmisión, pones el audio entrante en un búfer FIFO. Cuando ese búfer se llena a un cierto nivel, o una vez que ha pasado una cierta cantidad de tiempo, toma un conjunto de muestras de audio de ese búfer y las transmite en un paquete UDP.

Los paquetes UDP pueden perderse o llegar fuera de orden, por lo que incluye un número de secuencia en el paquete para que el lado receptor pueda detectar cualquiera de estos eventos. Los paquetes también experimentan retrasos aleatorios en un rango que generalmente está limitado.

En el lado de recepción, saca los datos de muestra de audio del paquete, verifica el número de secuencia y coloca los datos en otro FIFO. Cuando este FIFO alcanza un nivel que representa el rango de los retrasos típicos de los paquetes, comienza a leer las muestras de audio y las envía a su DAC de audio a la frecuencia de muestreo nominal. Si el FIFO se "agota", establezca el umbral de (re) inicio más alto.

Sin embargo, los relojes de muestra de transmisión y recepción no estarán perfectamente sincronizados. Esto significa que la cantidad promedio de datos en el FIFO del lado de recepción comenzará a tender hacia arriba o hacia abajo con el tiempo. Si la profundidad FIFO está aumentando, es necesario aumentar ligeramente la frecuencia de muestreo de audio de salida para que coincida. Del mismo modo, si está disminuyendo, es necesario disminuir la frecuencia de muestreo. Estos ajustes harán que la frecuencia de muestreo promedio a largo plazo del receptor coincida exactamente con la del transmisor.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas