|
|
|
@@ -608,13 +608,14 @@ static void compute_autocorr(const int32_t *data, int len, int lag, |
|
|
|
double *autoc) |
|
|
|
{ |
|
|
|
int i, j; |
|
|
|
double tmp[len + lag]; |
|
|
|
double tmp[len + lag + 1]; |
|
|
|
double *data1= tmp + lag; |
|
|
|
|
|
|
|
apply_welch_window(data, len, data1); |
|
|
|
|
|
|
|
for(j=0; j<lag; j++) |
|
|
|
data1[j-lag]= 0.0; |
|
|
|
data1[len] = 0.0; |
|
|
|
|
|
|
|
for(j=0; j<lag; j+=2){ |
|
|
|
double sum0 = 1.0, sum1 = 1.0; |
|
|
|
@@ -628,8 +629,10 @@ static void compute_autocorr(const int32_t *data, int len, int lag, |
|
|
|
|
|
|
|
if(j==lag){ |
|
|
|
double sum = 1.0; |
|
|
|
for(i=0; i<len; i++) |
|
|
|
sum += data1[i] * data1[i-j]; |
|
|
|
for(i=0; i<len; i+=2){ |
|
|
|
sum += data1[i ] * data1[i-j ] |
|
|
|
+ data1[i+1] * data1[i-j+1]; |
|
|
|
} |
|
|
|
autoc[j] = sum; |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -757,7 +760,7 @@ static int lpc_calc_coefs(const int32_t *samples, int blocksize, int max_order, |
|
|
|
assert(max_order >= MIN_LPC_ORDER && max_order <= MAX_LPC_ORDER); |
|
|
|
|
|
|
|
if(use_lpc == 1){ |
|
|
|
compute_autocorr(samples, blocksize, max_order+1, autoc); |
|
|
|
compute_autocorr(samples, blocksize, max_order, autoc); |
|
|
|
|
|
|
|
compute_lpc_coefs(autoc, max_order, lpc, ref); |
|
|
|
}else{ |
|
|
|
|