当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。