梅尔谱图层

[源]

MelSpectrogram

keras.layers.MelSpectrogram(
    fft_length=2048,
    sequence_stride=512,
    sequence_length=None,
    window="hann",
    sampling_rate=16000,
    num_mel_bins=128,
    min_freq=20.0,
    max_freq=None,
    power_to_db=True,
    top_db=80.0,
    mag_exp=2.0,
    min_power=1e-10,
    ref_power=1.0,
    **kwargs
)

一个用于将原始音频信号转换为梅尔谱图的预处理层。

该层接受 float32/float64 单个或批量音频信号作为输入,并使用短时傅里叶变换(Short-Time Fourier Transform)和梅尔缩放计算梅尔谱图。输入应为表示音频信号的 1D(非批量)或 2D(批量)张量。输出将是表示梅尔谱图的 2D 或 3D 张量。

谱图是一种类似图像的表示形式,显示信号随时间变化的频率谱。它使用 x 轴表示时间,y 轴表示频率,每个像素表示强度。梅尔谱图是一种特殊的谱图,使用梅尔尺度,该尺度近似模拟了人类对声音的感知方式。它们常用于语音和音乐处理任务,如语音识别、说话人识别和音乐流派分类。

参考资料

示例

非批量音频信号

>>> layer = keras.layers.MelSpectrogram(num_mel_bins=64,
...                                     sampling_rate=8000,
...                                     sequence_stride=256,
...                                     fft_length=2048)
>>> layer(keras.random.uniform(shape=(16000,))).shape
(64, 63)

批量音频信号

>>> layer = keras.layers.MelSpectrogram(num_mel_bins=80,
...                                     sampling_rate=8000,
...                                     sequence_stride=128,
...                                     fft_length=2048)
>>> layer(keras.random.uniform(shape=(2, 16000))).shape
(2, 80, 125)

输入形状

形状为 (..., samples) 的 1D(非批量)或 2D(批量)张量。

输出形状

形状为 (..., num_mel_bins, time) 的 2D(非批量)或 3D(批量)张量。

参数

  • fft_length: 整数,FFT 窗口的大小。
  • sequence_stride: 整数,连续 STFT 列之间的样本数。
  • sequence_length: 整数,用于对每个音频帧应用 window 的窗口大小。如果为 None,则默认为 fft_length
  • window: 字符串,要使用的窗口函数的名称。可用值为 "hann""hamming"。如果 window 是张量,它将直接用作窗口,其长度必须是 sequence_length。如果 windowNone,则不使用窗口。默认为 "hann"
  • sampling_rate: 整数,输入信号的采样率。
  • num_mel_bins: 整数,要生成的梅尔频段数。
  • min_freq: 浮点数,梅尔频段的最小频率。
  • max_freq: 浮点数,梅尔频段的最大频率。如果为 None,则默认为 sampling_rate / 2
  • power_to_db: 如果为 True,则将功率谱图转换为分贝。
  • top_db: 浮点数,最小负截止值 max(10 * log10(S)) - top_db
  • mag_exp: 浮点数,幅度谱图的指数。1 表示幅度,2 表示功率等。默认为 2。
  • ref_power: 浮点数,功率相对于该值进行缩放 10 * log10(S / ref_power)
  • min_power: 浮点数,功率和 ref_power 的最小值。