librosa.amplitude_to_db 的概念目的是什么?
What is the conceptual purpose of librosa.amplitude_to_db?
我正在使用 librosa
库从音频数据中获取和过滤频谱图。
我基本上了解生成频谱图背后的数学原理:
- 获取信号
- window信号
- 对每个 window 计算傅里叶变换
- 创建列为变换的矩阵
- 绘制此矩阵的热图
所以 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。
我正在使用 librosa
库从音频数据中获取和过滤频谱图。
我基本上了解生成频谱图背后的数学原理:
- 获取信号
- window信号
- 对每个 window 计算傅里叶变换
- 创建列为变换的矩阵
- 绘制此矩阵的热图
所以 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。