View source on GitHub

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.
norm If it is None, unnormalized dct4 is used, if it is "ortho" orthonormal dct4 is used.
name An optional name for the operation.

A [..., frames, frame_length // 2] Tensor of float32/float64 MDCT values where frames is roughly samples // (frame_length // 2) when pad_end=False.

ValueError If signals is not at least rank 1, frame_length is not scalar, or frame_length is not a multiple of 4.