當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.signal.inverse_mdct用法及代碼示例


計算 mdcts 的逆修改 DCT。

用法

tf.signal.inverse_mdct(
    mdcts, window_fn=tf.signal.vorbis_window, norm=None, name=None
)

參數

  • mdcts float32 /float64 [..., frames, frame_length // 2] Tensor 的 MDCT bin 表示一批 frame_length // 2 點 MDCT。
  • window_fn 一個可調用的對象,它接受 frame_length 和 dtype 關鍵字參數,並以提供的數據類型返回樣本的 [frame_length] Tensor。如果設置為 None ,則使用比例為 1/sqrt(2) 的矩形窗口。要從 mdct 後跟 inverse_mdct 完美重建信號,請使用 tf.signal.vorbis_windowtf.signal.kaiser_bessel_derived_windowNone 。如果使用另一個窗口函數,請確保 w[n]^2 + w[n + frame_length //2]^2 = 1 和 w[n] = w[frame_length - n - 1] for n = 0,...,frame_length //2 - 1 實現完美重建。
  • norm 如果"ortho",則執行正交逆DCT4,如果為None,則執行常規dct4,然後執行1/frame_length的縮放。
  • name 操作的可選名稱。

返回

  • [..., samples] Tensor of float32 /float64 信號表示 mdcts 中每個輸入 MDCT 的逆 MDCT,其中 samples(frames - 1) * (frame_length // 2) + frame_length

拋出

  • ValueError 如果mdcts 不是至少 2 級。

要重建原始波形,應將相同的窗口函數與 mdctinverse_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-compatible 操作實現並支持漸變。

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.signal.inverse_mdct。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。