首页 > 解决方案 > 如何从 Mel Spectrogram 计算“归一化”频率?

问题描述

我用 librosa 计算了梅尔谱图,如下所示:

self.Spectrogram = librosa.feature.melspectrogram(y=self.RawSignal, sr=self.sampling_frequency,
                                                      n_mels=128, fmax=8000)

我需要在归一化比例 [0,127] 中获得给定频率(比如 4400 Hz)的相应值,因为n_mels=128. 我已经看到 103 是 4400 Hz 的对应值,但我想要一个通用公式。PS。这不是我正在寻找的从 Hz 到 mels 的转换公式。

提前致谢

标签: pythonspectrogramlibrosa

解决方案


使用librosa.core.mel_frequencies函数计算 mel 过滤器的中心点。确保传递与 to 相同的参数melspectrogram。获得中心点后,您可以通过查找最接近的值来找到特定频率所属的 bin。

import numpy
import librosa

find = 4400 
freqs = librosa.core.mel_frequencies(fmin=0.0, fmax=8000, n_mels=128)
bin = numpy.argmin(abs(freqs - find))

print(bin)

103


推荐阅读