La transformada de coseno discreta modificada ( MDCT ) es una transformada basada en la transformada de coseno discreta de tipo IV (DCT-IV), con la propiedad adicional de estar superpuesta : está diseñada para ser realizada en bloques consecutivos de un conjunto de datos más grande , donde los bloques subsiguientes se superponen de modo que la última mitad de un bloque coincida con la primera mitad del bloque siguiente. Esta superposición, además de las cualidades de compactación de energía de la DCT, hace que la MDCT sea especialmente atractiva para aplicaciones de compresión de señales, ya que ayuda a evitar artefactos derivados de los límites de los bloques. Como resultado de estas ventajas, la MDCT es la técnica de compresión con pérdida más utilizada en la compresión de datos de audio . Se emplea en la mayoría de los estándares de codificación de audio modernos , incluidos MP3 , Dolby Digital (AC-3), Vorbis (Ogg), Windows Media Audio (WMA), ATRAC , Cook , Advanced Audio Coding (AAC), [1 ] High-Definition Coding (HDC), [2] LDAC , Dolby AC-4 , [3] y MPEG-H 3D Audio , [4] así como estándares de codificación de voz como AAC-LD (LD-MDCT), [5] G.722.1 , [6] G.729.1 , [7] CELT , [8] y Opus . [9] [10]
La transformada discreta del coseno (DCT) fue propuesta por primera vez por Nasir Ahmed en 1972, [11] y demostrada por Ahmed con T. Natarajan y KR Rao en 1974. [12] La MDCT fue propuesta posteriormente por John P. Princen, AW Johnson y Alan B. Bradley en la Universidad de Surrey en 1987, [13] siguiendo el trabajo anterior de Princen y Bradley (1986) [14] para desarrollar el principio subyacente de la MDCT de cancelación de aliasing en el dominio del tiempo (TDAC), descrito a continuación. (También existe una transformada análoga, la MDST, basada en la transformada discreta del seno , así como otras formas, raramente utilizadas, de la MDCT basadas en diferentes tipos de DCT o combinaciones DCT/DST).
En MP3, la MDCT no se aplica directamente a la señal de audio, sino a la salida de un banco de filtros de cuadratura polifásica (PQF) de 32 bandas. La salida de esta MDCT se posprocesa mediante una fórmula de reducción de alias para reducir el aliasing típico del banco de filtros PQF. Esta combinación de un banco de filtros con una MDCT se denomina banco de filtros híbrido o MDCT de subbanda . AAC, por otro lado, normalmente utiliza una MDCT pura; solo la variante MPEG-4 AAC-SSR (de Sony ) (raramente utilizada ) utiliza un banco PQF de cuatro bandas seguido de una MDCT. De manera similar a MP3, ATRAC utiliza filtros de espejo en cuadratura apilados (QMF) seguidos de una MDCT.
Como transformada superpuesta, la MDCT es algo inusual en comparación con otras transformadas relacionadas con Fourier, ya que tiene la mitad de salidas que de entradas (en lugar del mismo número). En particular, es una función lineal (donde R denota el conjunto de números reales ). Los 2 N números reales x 0 , ..., x 2 N -1 se transforman en los N números reales X 0 , ..., X N -1 según la fórmula:
(El coeficiente de normalización delante de esta transformación, aquí la unidad, es una convención arbitraria y difiere entre tratamientos. Sólo el producto de las normalizaciones de la MDCT y la IMDCT, a continuación, está restringido).
La MDCT inversa se conoce como IMDCT . Debido a que hay diferentes cantidades de entradas y salidas, a primera vista podría parecer que la MDCT no debería ser invertible. Sin embargo, la invertibilidad perfecta se logra sumando las IMDCT superpuestas de los bloques superpuestos posteriores, lo que hace que los errores se cancelen y se recuperen los datos originales; esta técnica se conoce como cancelación de alias en el dominio del tiempo ( TDAC ).
La IMDCT transforma N números reales X 0 , ..., X N -1 en 2 N números reales y 0 , ..., y 2 N -1 según la fórmula:
(Al igual que en el caso de la DCT-IV , una transformada ortogonal, la inversa tiene la misma forma que la transformada directa).
En el caso de una MDCT con ventana con la normalización de ventana habitual (ver más abajo), el coeficiente de normalización delante de la IMDCT debe multiplicarse por 2 (es decir, convertirse en 2/ N ).
Aunque la aplicación directa de la fórmula MDCT requeriría O( N 2 ) operaciones, es posible calcular lo mismo con solo O( N log N ) complejidad mediante la factorización recursiva del cálculo, como en la transformada rápida de Fourier (FFT). También se pueden calcular MDCT mediante otras transformadas, normalmente una DFT (FFT) o una DCT, combinadas con pasos de preprocesamiento y posprocesamiento O( N ). Además, como se describe a continuación, cualquier algoritmo para la DCT-IV proporciona inmediatamente un método para calcular la MDCT y la IMDCT de tamaño par.
En aplicaciones típicas de compresión de señales, las propiedades de transformación se mejoran aún más utilizando una función de ventana w n ( n = 0, ..., 2 N −1) que se multiplica por x n en la MDCT y por y n en las fórmulas IMDCT, anteriores, para evitar discontinuidades en los límites n = 0 y 2 N haciendo que la función llegue suavemente a cero en esos puntos. (Es decir, la función de ventana se aplica a los datos antes de la MDCT o después de la IMDCT). En principio, x e y podrían tener diferentes funciones de ventana, y la función de ventana también podría cambiar de un bloque al siguiente (especialmente para el caso en el que se combinan bloques de datos de diferentes tamaños), pero para simplificar, consideramos el caso común de funciones de ventana idénticas para bloques de igual tamaño.
La transformada sigue siendo invertible (es decir, TDAC funciona), para una ventana simétrica w n = w 2 N −1− n , siempre que w satisfaga la condición de Princen-Bradley:
Se utilizan varias funciones de ventana. Una ventana que produce una forma conocida como transformada superpuesta modulada (MLT) [15] [16] viene dada por
y se utiliza para MP3 y MPEG-2 AAC, y
para Vorbis. AC-3 utiliza una ventana derivada de Kaiser-Bessel (KBD) y MPEG-4 AAC también puede utilizar una ventana KBD.
Tenga en cuenta que las ventanas que se aplican a la MDCT son diferentes de las que se utilizan para otros tipos de análisis de señales, ya que deben cumplir la condición de Princen-Bradley. Una de las razones de esta diferencia es que las ventanas de MDCT se aplican dos veces, tanto para la MDCT (análisis) como para la IMDCT (síntesis).
Como se puede ver al examinar las definiciones, para N pares , la MDCT es esencialmente equivalente a una DCT-IV, donde la entrada se desplaza en N /2 y se transforman dos N bloques de datos a la vez. Al examinar esta equivalencia con más cuidado, se pueden derivar fácilmente propiedades importantes como la TDAC.
Para definir la relación precisa con la DCT-IV, uno debe darse cuenta de que la DCT-IV corresponde a condiciones de contorno alternas pares/impares: par en su contorno izquierdo (alrededor de n = −1/2), impar en su contorno derecho (alrededor de n = N − 1/2), y así sucesivamente (en lugar de contornos periódicos como para una DFT ). Esto se deduce de las identidades y . Por lo tanto, si sus entradas son una matriz x de longitud N , podemos imaginar extender esta matriz a ( x , − x R , − x , x R , ...) y así sucesivamente, donde x R denota x en orden inverso.
Consideremos una MDCT con 2 N entradas y N salidas, donde dividimos las entradas en cuatro bloques ( a , b , c , d ) cada uno de tamaño N /2. Si los desplazamos hacia la derecha en N /2 (a partir del término + N /2 en la definición de MDCT), entonces ( b , c , d ) se extienden más allá del final de las N entradas DCT-IV, por lo que debemos "plegarlas" hacia atrás de acuerdo con las condiciones de contorno descritas anteriormente.
(De esta manera, cualquier algoritmo para calcular la DCT-IV se puede aplicar de manera trivial a la MDCT).
De manera similar, la fórmula IMDCT anterior es exactamente la mitad de la DCT-IV (que es su propia inversa), donde la salida se extiende (a través de las condiciones de contorno) a una longitud 2 N y se desplaza hacia la izquierda por N /2. La DCT-IV inversa simplemente devolvería las entradas (− c R − d , a − b R ) de arriba. Cuando esto se extiende a través de las condiciones de contorno y se desplaza, se obtiene:
La mitad de las salidas de IMDCT son, por tanto, redundantes, ya que b − a R = −( a − b R ) R , y lo mismo ocurre con los dos últimos términos. Si agrupamos la entrada en bloques más grandes A , B de tamaño N , donde A = ( a , b ) y B = ( c , d ), podemos escribir este resultado de una forma más sencilla:
Ahora se puede entender cómo funciona la TDAC. Supongamos que se calcula la MDCT del bloque 2 N posterior ( B , C ), superpuesto al 50 %. La IMDCT arrojará entonces, de forma análoga a lo anterior: ( B − B R , C + C R ) / 2. Cuando esto se suma con el resultado de la IMDCT anterior en la mitad superpuesta, los términos invertidos se cancelan y se obtiene simplemente B , recuperando los datos originales.
El origen del término "cancelación de aliasing en el dominio del tiempo" ahora está claro. El uso de datos de entrada que se extienden más allá de los límites de la DCT-IV lógica hace que los datos se aliasen de la misma manera que las frecuencias más allá de la frecuencia de Nyquist se aliasen a frecuencias más bajas, excepto que este aliasing ocurre en el dominio del tiempo en lugar del dominio de la frecuencia: no podemos distinguir las contribuciones de a y de b R a la MDCT de ( a , b , c , d ), o equivalentemente, al resultado de
Las combinaciones c − d R y así sucesivamente, tienen precisamente los signos correctos para que las combinaciones se cancelen cuando se suman.
Para los valores N impares (que rara vez se utilizan en la práctica), N /2 no es un número entero, por lo que la MDCT no es simplemente una permutación de desplazamiento de una DCT-IV. En este caso, el desplazamiento adicional de media muestra significa que la MDCT/IMDCT se vuelve equivalente a la DCT-III/II, y el análisis es análogo al anterior.
Hemos visto arriba que la MDCT de 2 N entradas ( a , b , c , d ) es equivalente a una DCT-IV de las N entradas ( − c R − d , a − b R ). La DCT-IV está diseñada para el caso donde la función en el límite derecho es impar, y por lo tanto los valores cerca del límite derecho son cercanos a 0. Si la señal de entrada es suave, este es el caso: los componentes más a la derecha de a y b R son consecutivos en la secuencia de entrada ( a , b , c , d ), y por lo tanto su diferencia es pequeña. Veamos el medio del intervalo: si reescribimos la expresión anterior como ( − c R − d , a − b R ) = ( − d , a ) − ( b , c ) R , el segundo término, ( b , c ) R , da una transición suave en el medio. Sin embargo, en el primer término, (− d , a ), existe una discontinuidad potencial donde el extremo derecho de − d se encuentra con el extremo izquierdo de a . Esta es la razón por la que se utiliza una función de ventana que reduce los componentes cerca de los límites de la secuencia de entrada ( a , b , c , d ) hacia 0.
En la imagen anterior se demostró la propiedad TDAC para la MDCT ordinaria, mostrando que al agregar IMDCT de bloques subsiguientes en su mitad superpuesta se recuperan los datos originales. La derivación de esta propiedad inversa para la MDCT en ventana es apenas un poco más complicada.
Considere conjuntos consecutivos superpuestos de 2 N entradas ( A , B ) y ( B , C ), para bloques A , B , C de tamaño N. Recuerde de lo anterior que cuando y se MDCTizan, se IMDCTizan y se suman en su mitad superpuesta, obtenemos , los datos originales.
Ahora supongamos que multiplicamos tanto las entradas MDCT como las salidas IMDCT por una función de ventana de longitud 2 N . Como antes, suponemos una función de ventana simétrica, que por lo tanto tiene la forma donde W es un vector de longitud N y R denota inversión como antes. Entonces la condición de Princen-Bradley puede escribirse como , con los cuadrados y las sumas realizadas elemento por elemento.
Por lo tanto, en lugar de MDCT , ahora realizamos MDCT (con todas las multiplicaciones realizadas elemento por elemento). Cuando se realiza IMDCT y se multiplica nuevamente (elemento por elemento) por la función de ventana, la última mitad N se convierte en:
(Tenga en cuenta que ya no tenemos la multiplicación por 1/2, porque la normalización IMDCT difiere en un factor de 2 en el caso con ventana).
De manera similar, la MDCT y la IMDCT en ventana de rendimientos, en su primera mitad :
Cuando sumamos estas dos mitades obtenemos:
recuperando los datos originales.