спектрограмма log mel с использованием librosa

#python #audio #signal-processing #librosa

Вопрос:

Я столкнулся с 2 различными способами генерации спектрограмм log-mel для аудиофайлов с использованием librosa, и я не знаю, почему они отличаются в конечном выводе, какой из них «правильный» или насколько отличается один от другого.

#1

 path = "path/to/my/file"
scale, sr = librosa.load(path)
mel_spectrogram = librosa.feature.melspectrogram(scale, sr, n_fft=2048, hop_length=512, n_mels=10, fmax=8000)
log_mel_spectrogram = librosa.power_to_db(mel_spectrogram)
librosa.display.specshow(log_mel_spectrogram, x_axis="time", y_axis="mel", sr=sr)
 

#2

 path = "path/to/my/file"
scale, sr = librosa.load(path)
X = librosa.stft(scale)
Xdb = librosa.amplitude_to_db(abs(X))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')
 

Соответствующие изображения являются:

#1#2

** РЕДАКТИРОВАТЬ ** Теперь, когда я указываю количество ячеек mel = 64, я получаю спектрограмму, как показано ниже: введите описание изображения здесь

Если я хочу обработать много таких спектрограмм, должен ли я обрезать выделенную жирным шрифтом синюю часть выше, как это обычно для всех? Что представляет собой выделенная жирным шрифтом темная область? Целесообразно ли использовать параметр fmax для его обрезки?

Комментарии:

1. Чтобы сделать две спектрограммы более сопоставимыми, вы должны установить n_mels примерно на 64

Ответ №1:

Вторая спектрограмма-это не mel-спектрограмма, а спектрограмма STFT (иногда называемая «линейной»). Он имеет все полосы частот от FFT, (n_fft/2) 1 полосы, 1025 для n_fft=2048. Где-поскольку на mel-спектрограмме применены фильтры mel, которые уменьшают количество полос до n_mels (обычно 32-128), в вашем примере установлено значение 10.

Комментарии:

1. Спасибо. Не могли бы вы ответить на правку, которую я внес в вопрос выше?