comparison flacenc.c @ 3388:22c7b4c96c2d libavcodec

simplify compute_autocorr
author michael
date Sun, 02 Jul 2006 13:01:01 +0000
parents 92fabe8c1422
children de8cdb05117f
comparison
equal deleted inserted replaced
3387:92fabe8c1422 3388:22c7b4c96c2d
581 * A Welch window function is applied before calculation. 581 * A Welch window function is applied before calculation.
582 */ 582 */
583 static void compute_autocorr(const int32_t *data, int len, int lag, 583 static void compute_autocorr(const int32_t *data, int len, int lag,
584 double *autoc) 584 double *autoc)
585 { 585 {
586 int i; 586 int i, lag_ptr;
587 double *data1; 587 double tmp[len + lag];
588 int lag_ptr, ptr; 588 double *data1= tmp + lag;
589 589
590 data1 = av_malloc(len * sizeof(double));
591 apply_welch_window(data, len, data1); 590 apply_welch_window(data, len, data1);
592 591
593 for(i=0; i<lag; i++) autoc[i] = 1.0; 592 for(i=0; i<lag; i++){
594 593 autoc[i] = 1.0;
595 ptr = 0; 594 data1[i-lag]= 0.0;
596 while(ptr <= lag) { 595 }
597 lag_ptr = 0; 596
598 while(lag_ptr <= ptr) { 597 for(i=0; i<len; i++){
599 autoc[ptr-lag_ptr] += data1[ptr] * data1[lag_ptr]; 598 for(lag_ptr= i-lag; lag_ptr<=i; lag_ptr++){
600 lag_ptr++; 599 autoc[i-lag_ptr] += data1[i] * data1[lag_ptr];
601 } 600 }
602 ptr++; 601 }
603 }
604 while(ptr < len) {
605 lag_ptr = ptr - lag;
606 while(lag_ptr <= ptr) {
607 autoc[ptr-lag_ptr] += data1[ptr] * data1[lag_ptr];
608 lag_ptr++;
609 }
610 ptr++;
611 }
612
613 av_freep(&data1);
614 } 602 }
615 603
616 /** 604 /**
617 * Levinson-Durbin recursion. 605 * Levinson-Durbin recursion.
618 * Produces LPC coefficients from autocorrelation data. 606 * Produces LPC coefficients from autocorrelation data.