Mercurial > hg > libxtract
comparison src/scalar.c @ 228:cccd314664ac
tristimulus2 correction
author | Sean Enderby <sean.enderby@gmail.com> |
---|---|
date | Tue, 25 Feb 2014 13:53:39 +0000 |
parents | cabf2f465d1b |
children | a2f66a305e53 |
comparison
equal
deleted
inserted
replaced
227:cabf2f465d1b | 228:cccd314664ac |
---|---|
434 } | 434 } |
435 | 435 |
436 int xtract_tristimulus_2(const double *data, const int N, const void *argv, double *result) | 436 int xtract_tristimulus_2(const double *data, const int N, const void *argv, double *result) |
437 { | 437 { |
438 | 438 |
439 int n = N; | 439 int n = N >> 1, h = 0, i; |
440 | 440 double den, p2, p3, p4, ps, fund, temp; |
441 double den, p2, p3, p4, ps, temp; | 441 den = p2 = p3 = p4 = ps = fund = temp = 0.0; |
442 | 442 const double *freqs; |
443 den = p2 = p3 = p4 = ps = temp = 0.0; | 443 |
444 | 444 fund = *(double *)argv; |
445 for(n = 0; n < N; n++) | 445 freqs = data + n; |
446 { | 446 |
447 if((temp = data[n])) | 447 for(i = 0; i < n; i++) |
448 { | |
449 if((temp = data[i])) | |
448 { | 450 { |
449 den += temp; | 451 den += temp; |
450 if(!p2) | 452 h = round(freqs[i] / fund); |
451 p2 = temp; | 453 switch (h) |
452 else if(!p3) | 454 { |
453 p3 = temp; | 455 case 2: |
454 else if(!p4) | 456 p2 += temp; |
455 p4 = temp; | 457 break; |
458 | |
459 case 3: | |
460 p3 += temp; | |
461 break; | |
462 | |
463 case 4: | |
464 p4 += temp; | |
465 | |
466 default: | |
467 break; | |
468 } | |
456 } | 469 } |
457 } | 470 } |
458 | 471 |
459 ps = p2 + p3 + p4; | 472 ps = p2 + p3 + p4; |
460 | 473 |