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

问题描述

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

我最了解生成频谱图的数学原理:

  1. 获取信号
  2. 窗口信号
  3. 为每个窗口计算傅立叶变换
  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(微帕斯卡)到20 Pa,比率为100万。此外,人类对声级的感知不是线性的,而是可以通过对数更好地近似。

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...