From: Paul Brossier Date: Tue, 17 Apr 2007 23:07:48 +0000 (+0200) Subject: mathutils.c: add aubio_spectral_centroid X-Git-Tag: bzr2git~523^2^2^2~2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=0dbdb401e562c7e0359415653ec1d5276daa7787;p=aubio.git mathutils.c: add aubio_spectral_centroid --- diff --git a/src/mathutils.c b/src/mathutils.c index e91f3e9f..d561fced 100644 --- a/src/mathutils.c +++ b/src/mathutils.c @@ -457,6 +457,19 @@ smpl_t aubio_zero_crossing_rate(fvec_t * input) { 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]; diff --git a/src/mathutils.h b/src/mathutils.h index 9bf0f583..75fc5d7e 100644 --- a/src/mathutils.h +++ b/src/mathutils.h @@ -207,6 +207,10 @@ void aubio_autocorr(fvec_t * input, fvec_t * output); * zero-crossing rate (number of zero cross per sample) */ 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 *