use crate::matrix::{Axis, Matrix};
pub fn spectral_centroid(s: &Matrix, freq: &[f64]) -> Vec<f64> {
assert_eq!(
s.rows(),
freq.len(),
"freq length {} != spectrogram rows {}",
freq.len(),
s.rows()
);
let s_norm = s.normalize_axis(Axis::Row, 1.0);
let n_frames = s_norm.cols();
let n_bins = s_norm.rows();
let mut result = Vec::with_capacity(n_frames);
for t in 0..n_frames {
let mut centroid = 0.0;
for (k, &f) in freq.iter().enumerate().take(n_bins) {
centroid += s_norm.get(k, t) * f;
}
result.push(centroid);
}
result
}