mathutils.c: add aubio_zero_crossing_rate at Amaury's request
authorPaul Brossier <piem@piem.org>
Tue, 17 Apr 2007 19:59:15 +0000 (21:59 +0200)
committerPaul Brossier <piem@piem.org>
Tue, 17 Apr 2007 19:59:15 +0000 (21:59 +0200)
src/mathutils.c
src/mathutils.h

index dfb401954ea09daec7d42c37d643d9583a79a830..e91f3e9fcabfc608700e084ca910dbb4270c0e79 100644 (file)
@@ -440,6 +440,23 @@ smpl_t aubio_level_detection(fvec_t * ibuf, smpl_t threshold) {
       return loudness;
 }
 
+smpl_t aubio_zero_crossing_rate(fvec_t * input) {
+  uint_t i=0,j;
+  uint_t zcr = 0;
+  for ( j = 1; j < input->length; j++ ) {
+    // previous was negative
+    if( input->data[i][j-1] <= 0. ) {
+      if ( input->data[i][j] > 0. ) {
+        zcr += 1;
+      }
+    //previous was positive
+    } else if ( input->data[i][j] <= 0. ){
+      zcr += 1;
+    }
+  }
+  return zcr/(smpl_t)input->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];
index dc130de306d53b334e0ae567fd1d3cee7e49fb79..9bf0f5836660bd1cbe752dc65bcd25799dbb2771 100644 (file)
@@ -203,6 +203,10 @@ smpl_t aubio_level_detection(fvec_t * ibuf, smpl_t threshold);
  * calculate normalised autocorrelation function
  */
 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);
 /**
  * clean up cached memory at the end of program
  *