Mercurial > hg > libxtract
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); |