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