src/mathutils.c: fix aubio_db_spl, thanks to Eric, closes #15
authorPaul Brossier <piem@piem.org>
Fri, 4 Feb 2011 09:26:10 +0000 (10:26 +0100)
committerPaul Brossier <piem@piem.org>
Fri, 4 Feb 2011 09:26:10 +0000 (10:26 +0100)
src/mathutils.c
src/mathutils.h
src/pitch/pitchmcomb.c

index 2bf3be75764609a516c4a81b177b74d838e9970c..ee70f1b5fc5d1be56da188104413f07d5fa56d7d 100644 (file)
@@ -214,7 +214,7 @@ fvec_local_energy (fvec_t * f)
   for (j = 0; j < f->length; j++) {
     energy += SQR (f->data[j]);
   }
-  return energy;
+  return energy / f->length;
 }
 
 smpl_t
@@ -449,9 +449,7 @@ aubio_next_power_of_two (uint_t a)
 smpl_t
 aubio_db_spl (fvec_t * o)
 {
-  smpl_t val = SQRT (fvec_local_energy (o));
-  val /= (smpl_t) o->length;
-  return LIN2DB (val);
+  return 10. * LOG10 (fvec_local_energy (o));
 }
 
 uint_t
index ebec0098a4d43a8f79a56bc8b967ceb066e60864..fa181353e87d6cd5990d09b5881e0deb76f4ce39 100644 (file)
@@ -106,7 +106,8 @@ smpl_t fvec_sum (fvec_t * v);
 
 /** compute the energy of a vector
 
-  This function compute the sum of the squared elements of a vector.
+  This function compute the sum of the squared elements of a vector, normalised
+  by its length.
  
   \param v vector to get the energy from 
 
index 892ad3fc2b9ce063fdef281b99252441910f60da..0860c55d260ccb0b542d93bd14b1d1741c40c673 100644 (file)
@@ -111,7 +111,7 @@ aubio_pitchmcomb_do (aubio_pitchmcomb_t * p, cvec_t * fftgrain, fvec_t * output)
   for (j = 0; j < newmag->length; j++)
     newmag->data[j] = fftgrain->norm[j];
   /* detect only if local energy > 10. */
-  //if (fvec_local_energy(newmag)>10.) {
+  //if (fvec_local_energy(newmag) * newmag->length > 10.) {
   //hfc = fvec_local_hfc(newmag); //not used
   aubio_pitchmcomb_spectral_pp (p, newmag);
   aubio_pitchmcomb_combdet (p, newmag);
@@ -146,7 +146,7 @@ aubio_pitch_cands (aubio_pitchmcomb_t * p, cvec_t * fftgrain, smpl_t * cands)
   for (j = 0; j < newmag->length; j++)
     newmag->data[j] = fftgrain->norm[j];
   /* detect only if local energy > 10. */
-  if (fvec_local_energy (newmag) > 10.) {
+  if (fvec_local_energy (newmag) * newmag->length > 10.) {
     /* hfc = fvec_local_hfc(newmag); do not use */
     aubio_pitchmcomb_spectral_pp (p, newmag);
     aubio_pitchmcomb_combdet (p, newmag);