librosa.amplitude_to_db 的概念目的是什么?

What is the conceptual purpose of librosa.amplitude_to_db?

我正在使用 librosa 库从音频数据中获取和过滤频谱图。

我基本上了解生成频谱图背后的数学原理:

  1. 获取信号
  2. window信号
  3. 对每个 window 计算傅里叶变换
  4. 创建列为变换的矩阵
  5. 绘制此矩阵的热图

所以 librosa 真的很容易:

spec = np.abs(librosa.stft(signal, n_fft=len(window), window=window)

耶!我有我的 FFT 矩阵。现在我看到这个函数 librosa.amplitude_to_db,我认为这是我对信号处理的无知开始显现的地方。这是我在 Medium 上找到的一个片段:

spec = np.abs(librosa.stft(y, hop_length=512))
spec = librosa.amplitude_to_db(spec, ref=np.max)

为什么作者要使用这个amplitude_to_db功能?为什么不直接绘制 STFT 的输出?

可感知的范围sound pressure很宽,从20μPa(微帕斯卡)左右到20Pa左右,比值为100万。此外,人类对声级的感知不是线性的,但更接近于对数。

通过转换为 decibels(dB),刻度变为对数。这将数值范围限制为 0-120 dB 之类的范围。与使用线性刻度相比,绘制时颜色的强度与我们听到的更接近。

请注意,可以自由选择以分贝为单位的参考 (0 dB) 点。 librosa.amplitude_to_db 的默认值是计算 numpy.max,这意味着输入的最大值将映射到 0 dB。所有其他值都将是负数。该函数还对声音范围应用阈值,默认为 80 dB。因此任何低于 -80 dB 的东西都将被削减 -80 dB。