Source code for tremana.analysis.metrics

"""Module containing metrics to be calculated on tremor accelerometry data or their FFT."""

import numpy as np
import pandas as pd


[docs]def center_of_mass(fft_spectra: pd.DataFrame) -> pd.DataFrame: r"""Calculate the center of mass of FFT spectra. .. math:: H_{cm} = \dfrac{1}{N-1} \dfrac{\sum\limits_{i=1}^{N}((i-1)X_i)}{\sum\limits_{i=1}^{N}X_i} Parameters ---------- fft_spectra : pd.DataFrame Dataframe with each column being a FFT spectrum. Returns ------- pd.DataFrame Dataframe with the center of mass in the with columns names same as the spectra. """ results = {} N = fft_spectra.shape[0] weights = np.arange(0, N) for column in fft_spectra.columns: sorted_spectrum = fft_spectra[column].sort_values(ascending=False) results[column] = 1 / (N - 1) * sorted_spectrum.dot(weights).sum() / sorted_spectrum.sum() return pd.DataFrame(results, index=["H_cm"])