Как вычислить "нормированную" частоту из 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

Другие вопросы по тегам