Я нашел следующие два способа вычисления спектрального центроида, но они не возвращают одно и то же значение.
Какая версия верна и чем эти 2 отличаются друг от друга?
1.
def spectral_centroid(x, samplerate=44100):
magnitudes = np.abs(np.fft.rfft(x)) # magnitudes of positive frequencies
length = len(x)
freqs = np.abs(np.fft.fftfreq(length, 1.0/samplerate)[:length//2+1]) # positive frequencies
return np.sum(magnitudes*freqs) / np.sum(magnitudes)
2.
cent = librosa.feature.spectral_centroid(y=y, sr=sr)
print(np.mean(cent.T, axis=0))