Как вычислить "нормированную" частоту из Mel Spectrogram?
Я вычислил спектрограмму mel с либрозой так:
self.Spectrogram = librosa.feature.melspectrogram(y=self.RawSignal, sr=self.sampling_frequency,
n_mels=128, fmax=8000)
Мне нужно получить соответствующее значение заданной частоты (скажем, 4400 Гц) в нормализованной шкале [0,127], так как n_mels=128
, Я видел, что 103 соответствует значению, равному 4400 Гц, но мне нужна общая формула.
PS. это не формула преобразования из Гц в мель, что я ищу.
заранее спасибо
1 ответ
Используйте функцию librosa.core.mel_frequencies, чтобы вычислить центральную точку ваших фильтров mel. Не забудьте передать те же параметры, что и для melspectrogram
, Когда у вас есть центральные точки, вы можете найти, к какой ячейке принадлежит конкретная частота, посмотрев на ближайшее значение.
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