Почему сюжет в либросе отличается?
В настоящее время я пытаюсь использовать librosa для выполнения stfft, так что этот параметр напоминает процесс stfft из другой среды (Kaldi).
Аудио файл - fash-b-an251
Kaldi делает это, используя частоту дискретизации 16 кГц, window_size = 400 (25 мс), hop_length=160 (10 мс).
Спектрограмма, извлеченная из этого, выглядит следующим образом:
Затем я попытался сделать то же самое с помощью librosa:
import numpy as np
import sys
import librosa
import os
import scipy
import matplotlib.pyplot as plt
from matplotlib import cm
# Input parameter
# relative_path_to_file
if len(sys.argv) < 1:
print "Missing Arguments!"
print "python spectogram_librosa.py path_to_audio_file"
sys.exit()
path = sys.argv[1]
abs_path = os.path.abspath(path)
spectogram_dnn = "/home/user/dnn/spectogram"
if not os.path.exists(spectogram_dnn):
print "spectogram_dnn folder didn't exist!"
os.makedirs(spectogram_dnn)
print "Created!"
y,sr = librosa.load(abs_path,sr=16000)
D = librosa.logamplitude(np.abs(librosa.core.stft(y, win_length=400, hop_length=160, window=scipy.signal.hanning,center=False)), ref_power=np.max)
librosa.display.specshow(D,sr=16000,hop_length=160, x_axis='time', y_axis='log', cmap=cm.jet)
plt.colorbar(format='%+2.0f dB')
plt.title('Log power spectrogram')
plt.show()
raw_input()
sys.exit()
Который в основном взят отсюда:
В которой я изменил функцию stfft так, чтобы она соответствовала моим параметрам. Проблема в том, что это создает совершенно другой график.
Итак... Что я делаю не так в librosa?.. Почему этот сюжет так сильно отличается от того, что создан в kaldi.
Я что-то пропустил?
1 ответ
Это связано со шкалой Гц. Тот, что на первом изображении, является линейным, а тот, что на втором изображении, — логарифмическим. Вы можете исправить это, изменив масштаб одного из изображений, чтобы он соответствовал другому.