La Transformada Lapeada de Energía Restringida ( CELT ) es un formato de compresión de audio con pérdida abierto, libre de regalías y un códec de software gratuito con un retraso algorítmico especialmente bajo para su uso en comunicaciones de audio de baja latencia . Los algoritmos están documentados abiertamente y pueden utilizarse sin restricciones de patentes de software . El desarrollo del formato estuvo a cargo de la Fundación Xiph.Org (como parte de la familia de códecs Ogg ) y luego fue coordinado por el grupo de trabajo Opus del Internet Engineering Task Force (IETF).
CELT estaba destinado a cerrar la brecha entre Vorbis y Speex para aplicaciones donde se desea audio de alta calidad y bajo retardo. [1] Es adecuado tanto para habla como para música. Toma prestadas ideas del algoritmo CELP , pero evita algunas de sus limitaciones al operar exclusivamente en el dominio de la frecuencia . [1]
El CELT independiente original se ha fusionado con Opus . Por lo tanto, CELT como formato independiente está actualmente abandonado y obsoleto. El desarrollo continúa únicamente para su forma hibridada como una capa de Opus, integrada con SILK . Este artículo cubre el formato histórico e independiente; para la forma integrada y su evolución desde la integración en Opus ver el artículo sobre Opus.
La característica central de CELT es el bajo retraso algorítmico. Permite latencias típicas de 3 a 9 ms, pero se puede configurar por debajo de 2 ms al precio de una mayor tasa de bits para alcanzar una calidad de audio similar. [2] CELT admite audio mono y estéreo y es aplicable tanto a voz como a música. Puede utilizar una frecuencia de muestreo de 32 kHz a 48 kHz y superior y una velocidad de bits adaptativa de 24 kbit/s a 128 kbit/s por canal y superior. [2]
No se conocen problemas de propiedad intelectual relacionados con el algoritmo CELT y su implementación de referencia se publica bajo una licencia permisiva de código abierto ( BSD de 2 cláusulas ). [1] [3]
Al igual que Vorbis , CELT es un códec de uso general de banda completa (todo el rango de audición humana ), es decir, no está especializado para tipos especiales de señales de audio y, por lo tanto, es diferente de su proyecto hermano Speex . El formato permite obtener resultados transparentes a velocidades de bits altas, así como una calidad muy decente a velocidades de bits más bajas. Con todo, se dice que las capacidades de compresión son significativamente superiores a las de MP3 y, como otra característica útil para aplicaciones en tiempo real como telefonía, la calidad de audio de CELT a tasas de bits más bajas está incluso a la par con HE-AAC v1, gracias al plegado de banda. . [4] [5] En pruebas comparativas de escucha doble ciego demostró ser notablemente superior a HE-AACv1 a ~64 kbit/s. [6]
Tiene una complejidad computacional comparativamente baja que se asemeja a la de la variante de bajo retardo de AAC (AAC-LD) y se mantiene significativamente por debajo de la complejidad de Vorbis. [7]
Permite una tasa de bits constante y variable . Si la señal desaparece en el fondo de ruido en pausas del habla y casos similares, la transmisión puede limitarse para señalar la salida de ruido de confort al decodificador. La mayoría de las configuraciones del formato naturalmente habilitado para transmisión se pueden cambiar sobre la marcha sin interrumpir la transmisión.
El formato es resistente a los errores de transmisión. La pérdida de paquetes completos, así como los errores de bits, se pueden enmascarar con una degradación constante de la calidad del audio ( ocultación de pérdida de paquetes , PLC).
CELT es un códec de transformación basado en la transformada de coseno discreta modificada (MDCT) y conceptos de CELP (con un libro de códigos para excitación, pero en el dominio de la frecuencia).
La señal inicial codificada en PCM se maneja en bloques superpuestos relativamente pequeños para la MDCT ( función de ventana ) y se transforma en coeficientes de frecuencia. La elección de un tamaño de bloque especialmente corto permite, por un lado, una baja latencia, pero también conduce a una mala resolución de frecuencia que debe compensarse. Para una mayor reducción del retraso algorítmico a expensas de un menor sacrificio en la calidad del audio, el 50% de superposición natural entre los bloques se reduce prácticamente a la mitad silenciando la señal durante un ocho en ambos extremos de un bloque, respectivamente. . [2]
Los coeficientes están agrupados para parecerse a las bandas críticas del sistema auditivo humano. Se analiza la cantidad total de energía de cada grupo y los valores se cuantifican para la reducción de datos y se comprimen mediante predicción transmitiendo solo la diferencia a los valores predichos ( codificación delta ).
Los valores de energía de banda (no cuantificados) se eliminan de los coeficientes DCT sin procesar (normalización). Los coeficientes de la señal residual resultante (la llamada "forma de banda") se codifican mediante la cuantificación vectorial piramidal (PVQ, una cuantificación vectorial esférica ). [8] Esta codificación conduce a palabras de código de longitud fija (predecible), lo que a su vez permite robustez contra errores de bits y no deja necesidad de codificación de entropía . [5] Finalmente, todas las salidas del codificador se codifican en un flujo de bits mediante un codificador de rango . [9] En relación con el PVQ, CELT utiliza una técnica conocida como plegado de bandas, que ofrece un efecto similar a la replicación de bandas espectrales (SBR) al reutilizar coeficientes de bandas inferiores para otras superiores, pero tiene mucho menos impacto en el retraso algorítmico y complejidad computacional que el SBR. Esto actúa contra los artefactos de “pajaritos” al preservar una mayor riqueza en las bandas de frecuencia apropiadas.
El decodificador descomprime los componentes individuales del flujo de bits codificado en rango, multiplica la energía de la banda por los coeficientes de forma de la banda y los transforma nuevamente (a través de iMDCT) en datos PCM. Los bloques individuales se vuelven a unir mediante superposición ponderada (WOLA). Muchos parámetros no se codifican explícitamente, sino que se reconstruyen utilizando las mismas funciones que el codificador.
Para el acoplamiento de canales CELT podrá utilizar M/S estéreo o estéreo de intensidad . Los bloques se pueden describir independientemente de los marcos adyacentes ( Intra-frame ); por ejemplo, para permitir que un decodificador salte a una secuencia en ejecución. Con los códecs de transformación, los llamados artefactos de preeco pueden volverse audibles, porque el error de cuantificación de los sonidos agudos y con mucha energía ( transitorios ) puede extenderse por todo el bloque DCT y el transitorio no los enmascara ni hacia atrás ni hacia adelante en el tiempo. . Con CELT cada bloque se puede dividir aún más para frustrar tales artefactos.
El primer trabajo sobre planes y borradores para un sucesor de Vorbis se realizó en 2005 en Xiph.org como parte del proyecto Ghost (inicialmente denominado “Vorbis II”). Esta discusión junto con el creador de Vorbis, Christopher Montgomery, despertó el interés de Jean-Marc Valin en un códec de latencia particularmente baja. Valin ha trabajado en CELT desde 2007. [5] En diciembre de 2007, se publicó el primer borrador de libcelt como versión 0.0.1, inicialmente denominada "Transformación superpuesta excitada por código". [10] [11] CELT se estableció como una tecnología IETF en julio de 2009 [3] [12] [13] [14] bajo el grupo de trabajo "ietfcodec". En mayo de 2009, se publicó un borrador del formato de carga útil RTP para el códec CELT . [15]
En la versión 0.9, la predicción del tono que operaba en el dominio de la frecuencia utilizada hasta entonces fue reemplazada por una solución menos compleja con un par de filtro previo y posterior en el dominio del tiempo, [16] que fue aportada por Raymond Chen de Broadcom . [5]
Con CELT 0.11 del 4 de febrero de 2011, el formato se congeló provisionalmente ("congelación suave"), reservando la posibilidad de realizar últimos cambios inesperadamente necesarios.
Poco después de la llegada del códec híbrido CELT/ SILK Opus (anteriormente conocido como Harmony), se detuvo el desarrollo de CELT como proyecto separado, viviendo en su lugar sobre la base de Opus, [17] cuyo objetivo es tratar la parte inferior del rango espectral en el dominio del tiempo con predicción lineal (SILK) y la parte superior en el dominio de la frecuencia con la MDCT . El borrador de Opus está registrado en el IETF desde septiembre de 2010.
La biblioteca de software libcelt sirve como implementación de referencia para CELT, escrita en C y publicada como software libre bajo la licencia BSD-ish de 3 cláusulas de Xiph.
A pesar de que el formato no se congeló finalmente, se estaba utilizando en muchas aplicaciones VoIP como Ekiga [18] y FreeSWITCH , [19] que cambiaron a CELT al entrar en congelación en enero de 2009, así como Mumble , TeamSpeak y otros [ 20] software. En abril de 2011, se incluyó soporte para CELT en FFmpeg . [21] [22]
CELT también es compatible o utilizado por: [20]