#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')
Соответствующие изображения являются:
** РЕДАКТИРОВАТЬ ** Теперь, когда я указываю количество ячеек 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. Спасибо. Не могли бы вы ответить на правку, которую я внес в вопрос выше?