The **modified discrete cosine transform** (MDCT) is a frequency transform based on the type-IV discrete cosine transform (DCT-IV), with the additional property of being *lapped*: it is designed to be performed on consecutive blocks of a larger dataset, where subsequent blocks are 50% overlapped. This overlapping, in addition to the energy-compaction qualities of the DCT, makes the MDCT especially attractive for signal compression applications, since it helps to avoid artifacts stemming from the block boundaries. Thus, an MDCT is employed in MP3, AC-3, Ogg Vorbis, and AAC for audio compression, for example.

(There also exists an analogous transform, the MDST, based on the discrete sine transform, as well as other forms of the MDCT based on different types of DCT.)

In MP3, the MDCT is not applied to the audio signal directly, but rather to the output of a 32-band polyphase quadrature filter (PQF) bank. The output of this MDCT is postprocessed by an alias reduction formula to reduce the typical aliasing of the PQF filter bank. Such a combination of a filter bank with an MDCT is called a *hybrid* filter bank or a *subband* MDCT. AAC, on the other hand, normally uses a pure MDCT; only the (rarely used) MPEG-4 AAC-SSR variant (by Sony) uses a four-band PQF bank followed by an MDCT. ATRAC uses stacked quadrature mirror filters (QMF) followed by an MDCT.

Table of contents |

2 Relationship to DCT-IV and Origin of TDAC 3 Window Functions 4 References |

## Definition

As a lapped transform, the MDCT is a bit unusual compared to other frequency transforms in that it has half as many outputs as inputs (instead of the same number). In particular, it is a linear function *F* : **R**^{2n} `->` **R**^{n} (where **R** denotes the set of real numbers). The 2*n* real numbers *x*_{0}, ..., *x*_{2n-1} are transformed into the *n* real numbers *f*_{0}, ..., *f*_{n-1} according to the formula:

#### Inverse Transform

(Like for the DCT-IV, an orthogonal transform, the inverse has the same form as the forward transform.)
In the case of a windowed MDCT with the usual window normalization (see below), the normalization coefficient in front of the IMDCT should be multiplied by 2 (i.e., becoming 2/*n*).

#### Computation

Although the direct application of the MDCT formula would require O(*n*^{2}) operations, as in the fast Fourier transform (FFT) it is possible to compute the same thing with only O(*n* log *n*) complexity by recursively factorizing the computation. One can also compute MDCTs via other transforms, typically a DFT (FFT) or a DCT, combined with O(*n*) pre- and post-processing steps.

## Relationship to DCT-IV and Origin of TDAC

In order to define the precise relationship to the DCT-IV, one must realize that the DCT-IV corresponds to alternating even/odd boundary conditions: even at its left boundary (around *k*=-1/2), odd at its right boundary (around *k*=*n*-1/2), and so on (instead of periodic boundaries as for a DFT). This follows from the identities cos[(*j*+1/2)(-*k*-1+1/2)π/*n*] = +cos[(*j*+1/2)(*k*+1/2)π/*n*] and cos[(*j*+1/2)(2*n*-*k*-1+1/2)π/*n*] = -cos[(*j*+1/2)(*k*+1/2)π/*n*]. Thus, if its inputs are an array *x* of length *n*, we can imagine extending this array to (*x*, -*x*_{r}, -*x*, *x*_{r}, ...) and so on, where *x*_{r} denotes *x* in reverse order.

Consider an MDCT of size *n*, where we divide the *2n* inputs into four blocks (*a*, *b*, *c*, *d*) each of size *n*/2. If we shift these by *n*/2 (from the +*n*/2 term in the MDCT definition), then (*b*, *c*, *d*) extend past the end of the *n* DCT-IV inputs, so we must "fold" them back according to the boundary conditions described above. Thus, the MDCT is *exactly* equivalent to a DCT-IV of the *n* inputs: (-*c*_{r}-*d*, *a*-*b*_{r}), where *r* denotes reversal as above. (In this way, any algorithm to compute the DCT-IV can be trivially applied to the MDCT.)

Similarly, the IMDCT formula above is precisely 1/2 of the (self) inverse DCT-IV, where the output is shifted by *n*/2 and extended (via the boundary conditions) to a length 2*n*. The inverse DCT-IV would simply give back the inputs (-*c*_{r}-*d*, *a*-*b*_{r}) from above. When this is shifted and extended via the boundary conditions, one obtains (*a*-*b*_{r}, *b*-*a*_{r}, *c*+*d*_{r}, *c*_{r}+*d*) / 2. (Half of the IMDCT outputs are thus redundant.)

One can now understand how TDAC works. Suppose that one computes the MDCT of the subsequent, 50% overlapped, 2*n* block (*c*, *d*, *e*, *f*). The IMDCT will then yield, analogous to the above: (*c*-*d*_{r}, *d*-*c*_{r}, *e*+*f*_{r}, *e*_{r}+*f*) / 2. When this is added with the previous IMDCT result in the overlapping half, the reversed terms cancel and one obtains simply (*c*, *d*), recovering the original data.

Moreover, the origin of the term "time-domain aliasing cancellation" is now clear. The use of input data that extend beyond the boundaries of the logical DCT-IV causes the data to be *aliased* in exactly the same way that frequencies beyond the Nyquist frequency are aliased to lower frequencies, except that this aliasing occurs in the time domain instead of the frequency domain. Hence the combinations *c*-*d*_{r} and so on, which have precisely the right signs for the combinations to cancel when they are added.

For **odd** *n* (which are rarely used in practice), *n*/2 is not an integer so the MDCT is not simply a shift permutation of a DCT-IV. In this case, the additional shift by half a sample means that the MDCT/IMDCT becomes equivalent to the DCT-III/II, and the analysis is analogous to the above.

## Window Functions

In typical signal-compression applications, the transform properties are further improved by using a window function *w*_{k} (*k* = 0, ..., 2*n*-1) that is multiplied with *x*_{k} and *y*_{k} in the MDCT and IMDCT formulas, above, in order to avoid discontinuities at the *k* = 0 and 2*n* boundaries by making the function go smoothly to zero at those points. In principle, *x* and *y* could have different window functions, and the window function could also change from one block to the next (especially for the case where data blocks of different sizes are combined), but for simplicity we consider the common case of identical window functions for equal-sized blocks.

The transform remains invertible, for a symmetric window *w*_{k} = *w*_{2n-1-k}, as long as *w* satisfies the Princen-Bradley condition:

*w*_{k}^{2}+*w*_{k+n}^{2}= 1.

Note that windows applied to the MDCT are different from windows used for other types of signal analysis, since they must fulfill the Princen-Bradley condition. One of the reasons for this difference is that MDCT windows are applied twice, for both the MDCT (analysis) and the IMDCT (synthesis).

## References

- Henrique S. Malvar,
*Signal Processing With Lapped Transforms*(Artech House: Norwood MA, 1992). - John P. Princen and Alan B. Bradley, "Analysis/synthesis filter bank design based on time domain aliasing cancellation,"
*IEEE Trans. Acoust. Speech Sig. Proc.***ASSP-34**(5), 1153-1161 (1986). - A. W. Johnson and A. B. Bradley, "Adaptive transform coding incorporating time domain aliasing cancellation,"
*Speech Comm.***6**, 299-308 (1987). - For algorithms, see e.g.:
- V. Britanak and K. R. Rao, "A new fast algorithm for the unified forward and inverse MDCT/MDST computation,"
*Signal Processing***82**, 433-459 (2002) - Vladimir Nikolajevic and Gerhard Fettweis, "Computation of forward and inverse MDCT using Clenshaw's recurrence formula,"
*IEEE Trans. Sig. Proc.***51**(5), 1439-1444 (2003) - Che-Hong Chen, Bin-Da Liu, and Jar-Ferr Yang, "Recursive architectures for realizing modified discrete cosine transform and its inverse,"
*IEEE Trans. Circuits Syst. II: Analog Dig. Sig. Proc.***50**(1), 38-45 (2003) - ...and references thereof.

- V. Britanak and K. R. Rao, "A new fast algorithm for the unified forward and inverse MDCT/MDST computation,"