changeset 225:62e797c2974a

correction to xtract_odd_even_ratio
author Sean Enderby <sean.enderby@gmail.com>
date Mon, 24 Feb 2014 14:32:04 +0000
parents 5ca682ce3392
children 223febe2688b
files src/scalar.c xtract/xtract_scalar.h
diffstat 2 files changed, 10 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/scalar.c	Mon Feb 24 13:43:13 2014 +0000
+++ b/src/scalar.c	Mon Feb 24 14:32:04 2014 +0000
@@ -622,7 +622,6 @@
 
 int xtract_spectral_inharmonicity(const double *data, const int N, const void *argv, double *result)
 {
-
     int n = N >> 1, h = 0;
     double num = 0.0, den = 0.0, fund;
     const double *freqs, *amps;
@@ -656,16 +655,19 @@
 
 int xtract_odd_even_ratio(const double *data, const int N, const void *argv, double *result)
 {
+    int n = N >> 1, h = 0;
+    double odd = 0.0, even = 0.0, fund, temp;
+    const double *freqs;
 
-    int M = (N >> 1), n;
+    fund = *(double *)argv;
+    freqs = data + n;
 
-    double odd = 0.0, even = 0.0,  temp;
-
-    for(n = 0; n < M; n++)
+    while(n--)
     {
         if((temp = data[n]))
         {
-            if(XTRACT_IS_ODD(n))
+            h = round(freqs[n] / fund);
+            if(XTRACT_IS_ODD(h))
             {
                 odd += temp;
             }
--- a/xtract/xtract_scalar.h	Mon Feb 24 13:43:13 2014 +0000
+++ b/xtract/xtract_scalar.h	Mon Feb 24 14:32:04 2014 +0000
@@ -324,9 +324,9 @@
 /* Odd to even harmonic ratio */
 /** \brief Extract the Odd to even harmonic ratio of an input vector 
  * 
- * \param *data: a pointer to the first element in an array of doubles representing the amplitudes of the harmonic spectrum of an audio vector. It is sufficient to pass in a pointer to the first half of the array pointed to by *result from xtract_harmonic_spectrum().
+ * \param *data: a pointer to the first element in an array of doubles representing the amplitudes of the harmonic spectrum of an audio vector. It is sufficient to pass in a pointer to array pointed to by *result from xtract_harmonic_spectrum().
  * \param N: the number of elements to be considered. If using the array pointed to by *result from xtract_harmonics, N should equal half the total array size i.e., just the amplitudes of the peaks.
- * \param *argv: a pointer to NULL
+ * \param *argv: a pointer to a double representing the fundamental frequency of the input vector.
  * \param *result: the even/odd harmonic ratio of N values from the array pointed to by *data
  */
 int xtract_odd_even_ratio(const double *data, const int N, const void *argv, double *result);