code: def spectral_centroid_and_spread(data, fs):
      
      data = np.mean(data, axis=1)
  
      nFFT = len(data) // 2
      X = FFT(data, nFFT)
  
      ind = (np.arange(1, len(X) + 1)) * (fs / (2.0 * len(X)))
  
      Xt = X.copy()
      Xt = Xt / Xt.max()
      NUM = np.sum(ind * Xt)
      DEN = np.sum(Xt) + EPSILON
  
      # Centroid:
      C = (NUM / DEN)
  
      # Spread:
      S = np.sqrt(np.sum(((ind - C) ** 2) * Xt) / DEN)
  
      # Normalize:
      C = C / (fs / 2.0)
      S = S / (fs / 2.0)
  
      return (C, S)
docs: Computes spectral centroid of frame (given abs(FFT))