comparison src/scalar.c @ 223:fdbef1474be9

correction to xtract_spectral_inharmonicicty
author Sean Enderby <sean.enderby@gmail.com>
date Mon, 24 Feb 2014 13:00:25 +0000
parents 951035634fb1
children 62e797c2974a
comparison
equal deleted inserted replaced
199:15fde6ea8a99 223:fdbef1474be9
621 } 621 }
622 622
623 int xtract_spectral_inharmonicity(const double *data, const int N, const void *argv, double *result) 623 int xtract_spectral_inharmonicity(const double *data, const int N, const void *argv, double *result)
624 { 624 {
625 625
626 int n = N >> 1; 626 int n = N >> 1, h = 0;
627 double num = 0.0, den = 0.0, fund; 627 double num = 0.0, den = 0.0, fund;
628 const double *freqs, *amps; 628 const double *freqs, *amps;
629 629
630 fund = *(double *)argv; 630 fund = *(double *)argv;
631 amps = data; 631 amps = data;
633 633
634 while(n--) 634 while(n--)
635 { 635 {
636 if(amps[n]) 636 if(amps[n])
637 { 637 {
638 num += fabs(freqs[n] - n * fund) * XTRACT_SQ(amps[n]); 638 h = round(freqs[n] / fund);
639 num += fabs(freqs[n] - h * fund) * XTRACT_SQ(amps[n]);
639 den += XTRACT_SQ(amps[n]); 640 den += XTRACT_SQ(amps[n]);
640 } 641 }
641 } 642 }
642 643
643 *result = (2 * num) / (fund * den); 644 *result = (2 * num) / (fund * den);