Mercurial > libavcodec.hg
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. |