Computes the Modified Discrete Cosine Transform of signals.

Implemented with TPU/GPU-compatible ops and supports gradients.

signals A [..., samples] float32/float64 Tensor of real-valued signals.
frame_length An integer scalar Tensor. The window length in samples which must be divisible by 4.
window_fn A callable that takes a frame_length and a dtype keyword argument and returns a [frame_length] Tensor of samples in the provided datatype. If set to None, a rectangular window with a scale of 1/sqrt(2) is used. For perfect reconstruction of a signal from mdct followed by inverse_mdct, please use tf.signal.vorbis_window, tf.signal.kaiser_bessel_derived_window or None. If using another window function, make sure that w[n]^2 + w[n + frame_length // 2]^2 = 1 and w[n] = w[frame_length - n - 1] for n = 0,...,frame_length // 2 - 1 to achieve perfect reconstruction.
pad_end Whether to pad the end of signals with zeros when the provided frame length and step produces a frame that lies partially past its end.