ref: 0dbdb401e562c7e0359415653ec1d5276daa7787
parent: 5507e9d32a4a5547d924d71258f2ed77b356dbe3
author: Paul Brossier <piem@piem.org>
date: Tue Apr 17 21:07:48 EDT 2007
mathutils.c: add aubio_spectral_centroid
--- a/src/mathutils.c
+++ b/src/mathutils.c
@@ -457,6 +457,19 @@
return zcr/(smpl_t)input->length;
}
+smpl_t aubio_spectral_centroid(cvec_t * spectrum, smpl_t samplerate) {
+ uint_t i=0, j;
+ smpl_t sum = 0., sc = 0.;
+ for ( j = 0; j < spectrum->length; j++ ) {
+ sum += spectrum->norm[i][j];
+ }
+ if (sum == 0.) return 0.;
+ for ( j = 0; j < spectrum->length; j++ ) {
+ sc += (smpl_t)j * spectrum->norm[i][j];
+ }
+ return sc / sum * samplerate / (smpl_t)(spectrum->length);
+}
+
void aubio_autocorr(fvec_t * input, fvec_t * output){
uint_t i = 0, j = 0, length = input->length;
smpl_t * data = input->data[0];
--- a/src/mathutils.h
+++ b/src/mathutils.h
@@ -208,6 +208,10 @@
*/
smpl_t aubio_zero_crossing_rate(fvec_t * input);
/**
+ * spectrum centroid computed on a cvec
+ */
+smpl_t aubio_spectral_centroid(cvec_t * input, smpl_t samplerate);
+/**
* clean up cached memory at the end of program
*
* use this function at the end of programs to purge all