tf.signal.inverse_mdct
Вычисляет обратное модифицированное дискретное косинусное преобразование mdcts.
tf.signal.inverse_mdct(
mdcts,
window_fn=tf.signal.vorbis_window,
norm=None,
name=None
)
Для восстановления исходной формы сигнала с mdct и inverse_mdct следует использовать одну и ту же оконную функцию.
Пример использования:
@tf.function
def compare_round_trip():
samples = 1000
frame_length = 400
halflen = frame_length // 2
waveform = tf.random.normal(dtype=tf.float32, shape=[samples])
waveform_pad = tf.pad(waveform, [[halflen, 0],])
mdct = tf.signal.mdct(waveform_pad, frame_length, pad_end=True,
window_fn=tf.signal.vorbis_window)
inverse_mdct = tf.signal.inverse_mdct(mdct,
window_fn=tf.signal.vorbis_window)
inverse_mdct = inverse_mdct[halflen: halflen + samples]
return waveform, inverse_mdct
waveform, inverse_mdct = compare_round_trip()
np.allclose(waveform.numpy(), inverse_mdct.numpy(), rtol=1e-3, atol=1e-4)
TrueРеализовано с использованием операций, совместимых с TPU/GPU, и поддерживает вычисление градиентов.
| Аргументы | |
|---|---|
mdcts | float32/float64 [..., frames, frame_length // 2] Tensor бинов MDCT, представляющих пакет frame_length // 2-точечных MDCT. |
window_fn | Вызываемый объект, принимающий frame_length и именованный аргумент dtype и возвращающий [frame_length] Tensor отсчётов в указанном типе данных. Если задано значение None, используется прямоугольное окно с масштабом 1/sqrt(2). Для точного восстановления сигнала из mdct с последующим применением inverse_mdct используйте tf.signal.vorbis_window, tf.signal.kaiser_bessel_derived_window или None. При использовании другой оконной функции для точного восстановления убедитесь, что w[n]^2 + w[n + frame_length // 2]^2 = 1 и w[n] = w[frame_length - n - 1] для n = 0,...,frame_length // 2 - 1. |
norm | Если указано "ortho", выполняется ортонормированное обратное DCT4; если указано None, выполняется обычное dct4 с последующим масштабированием на 1/frame_length. |
name | Необязательное имя операции. |
| Возвращает | |
|---|---|
[..., samples] Tensor сигналов float32/float64, представляющих обратное MDCT для каждого входного MDCT в mdcts, где samples — это (frames - 1) * (frame_length // 2) + frame_length. |
| Вызывает исключение | |
|---|---|
ValueError | Если ранг mdcts меньше 2. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/signal/inverse_mdct