如何解决librosa.amplitude_to_db的概念目的是什么?
我正在使用librosa
库从音频数据中获取和过滤频谱图。
我最了解生成频谱图的数学原理:
- 获取信号
- 窗口信号
- 为每个窗口计算傅立叶变换
- 创建其列为变换的矩阵
- 绘制该矩阵的热图
使用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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。