mindspore.dataset.audio.GriffinLim

查看源文件
class mindspore.dataset.audio.GriffinLim(n_fft=400, n_iter=32, win_length=None, hop_length=None, window_type=WindowType.HANN, power=2.0, momentum=0.99, length=None, rand_init=True)[源代码]

使用Griffin-Lim算法从线性幅度频谱图中计算信号波形。

有关Griffin-Lim算法更多的描述,详见论文 A fast Griffin-Lim algorithmSignal estimation from modified short-time Fourier transform

参数:
  • n_fft (int, 可选) - FFT的长度。默认值: 400

  • n_iter (int, 可选) - 相位恢复的迭代次数。默认值: 32

  • win_length (int, 可选) - GriffinLim的窗口大小。默认值: None ,将设置为 n_fft 的值。

  • hop_length (int, 可选) - STFT窗口之间的跳数长度。默认值: None ,将设置为 win_length//2

  • window_type (WindowType, 可选) - GriffinLim的窗口类型,可以是 WindowType.BARTLETTWindowType.BLACKMANWindowType.HAMMINGWindowType.HANNWindowType.KAISER 。 默认值: WindowType.HANN ,目前macOS上不支持kaiser窗口。

  • power (float, 可选) - 幅度谱图的指数。默认值: 2.0

  • momentum (float, 可选) - 快速Griffin-Lim的动量。默认值: 0.99

  • length (int, 可选) - 预期输出波形的长度。默认值: None ,将设置为stft矩阵的最后一个维度的值。

  • rand_init (bool, 可选) - 随机相位初始化或全零相位初始化标志。默认值: True

异常:
  • TypeError - 如果 n_fft 的类型不为int。

  • ValueError - 如果 n_ftt 不为正数。

  • TypeError - 如果 n_iter 的类型不为int。

  • ValueError - 如果 n_iter 不为正数。

  • TypeError - 如果 win_length 的类型不为int。

  • ValueError - 如果 win_length 为负数。

  • TypeError - 如果 hop_length 的类型不为int。

  • ValueError - 如果 hop_length 为负数。

  • TypeError - 如果 window_type 的类型不为 mindspore.dataset.audio.WindowType

  • TypeError - 如果 power 的类型不为float。

  • ValueError - 如果 power 不为正数。

  • TypeError - 如果 momentum 的类型不为float。

  • ValueError - 如果 momentum 为负数。

  • TypeError - 如果 length 的类型不为int。

  • ValueError - 如果 length 为负数。

  • TypeError - 如果 rand_init 的类型不为bool。

  • RuntimeError - 当 n_fft 指定的FFT长度不小于 length 指定的输出波形长度。

  • RuntimeError - 当 win_length 指定的窗口长度不小于 n_fft 指定的FFT长度。

支持平台:

CPU

样例:

>>> import numpy as np
>>> import mindspore.dataset as ds
>>> import mindspore.dataset.audio as audio
>>>
>>> # Use the transform in dataset pipeline mode
>>> waveform = np.random.random([5, 201, 6])  # 5 samples
>>> numpy_slices_dataset = ds.NumpySlicesDataset(data=waveform, column_names=["audio"])
>>> transforms = [audio.GriffinLim(n_fft=400)]
>>> numpy_slices_dataset = numpy_slices_dataset.map(operations=transforms, input_columns=["audio"])
>>> for item in numpy_slices_dataset.create_dict_iterator(num_epochs=1, output_numpy=True):
...     print(item["audio"].shape, item["audio"].dtype)
...     break
(1000,) float64
>>>
>>> # Use the transform in eager mode
>>> waveform = np.random.random([201, 6])  # 1 sample
>>> output = audio.GriffinLim(n_fft=400)(waveform)
>>> print(output.shape, output.dtype)
(1000,) float64
教程样例: