|
|
@ -926,7 +926,7 @@ static void gain_scale(G723_1_Context *p, int16_t * buf, int energy) |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf) |
|
|
|
static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int16_t filter_coef[2][LPC_ORDER], *buf_ptr; |
|
|
|
int16_t filter_coef[2][LPC_ORDER]; |
|
|
|
int filter_signal[LPC_ORDER + FRAME_LEN], *signal_ptr; |
|
|
|
int filter_signal[LPC_ORDER + FRAME_LEN], *signal_ptr; |
|
|
|
int i, j, k; |
|
|
|
int i, j, k; |
|
|
|
|
|
|
|
|
|
|
@ -949,7 +949,7 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf) |
|
|
|
memcpy(p->iir_mem, filter_signal + FRAME_LEN, |
|
|
|
memcpy(p->iir_mem, filter_signal + FRAME_LEN, |
|
|
|
LPC_ORDER * sizeof(*p->iir_mem)); |
|
|
|
LPC_ORDER * sizeof(*p->iir_mem)); |
|
|
|
|
|
|
|
|
|
|
|
buf_ptr = buf + LPC_ORDER; |
|
|
|
buf += LPC_ORDER; |
|
|
|
signal_ptr = filter_signal + LPC_ORDER; |
|
|
|
signal_ptr = filter_signal + LPC_ORDER; |
|
|
|
for (i = 0; i < SUBFRAMES; i++) { |
|
|
|
for (i = 0; i < SUBFRAMES; i++) { |
|
|
|
int16_t temp_vector[SUBFRAME_LEN]; |
|
|
|
int16_t temp_vector[SUBFRAME_LEN]; |
|
|
@ -958,7 +958,7 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf) |
|
|
|
int scale, energy; |
|
|
|
int scale, energy; |
|
|
|
|
|
|
|
|
|
|
|
/* Normalize */ |
|
|
|
/* Normalize */ |
|
|
|
scale = scale_vector(temp_vector, buf_ptr, SUBFRAME_LEN); |
|
|
|
scale = scale_vector(temp_vector, buf, SUBFRAME_LEN); |
|
|
|
|
|
|
|
|
|
|
|
/* Compute auto correlation coefficients */ |
|
|
|
/* Compute auto correlation coefficients */ |
|
|
|
auto_corr[0] = dot_product(temp_vector, temp_vector + 1, |
|
|
|
auto_corr[0] = dot_product(temp_vector, temp_vector + 1, |
|
|
@ -975,8 +975,8 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf) |
|
|
|
|
|
|
|
|
|
|
|
/* Compensation filter */ |
|
|
|
/* Compensation filter */ |
|
|
|
for (j = 0; j < SUBFRAME_LEN; j++) { |
|
|
|
for (j = 0; j < SUBFRAME_LEN; j++) { |
|
|
|
buf_ptr[j] = av_sat_dadd32(signal_ptr[j], |
|
|
|
buf[j] = av_sat_dadd32(signal_ptr[j], |
|
|
|
(signal_ptr[j - 1] >> 16) * temp) >> 16; |
|
|
|
(signal_ptr[j - 1] >> 16) * temp) >> 16; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* Compute normalized signal energy */ |
|
|
|
/* Compute normalized signal energy */ |
|
|
@ -986,9 +986,9 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf) |
|
|
|
} else |
|
|
|
} else |
|
|
|
energy = auto_corr[1] >> temp; |
|
|
|
energy = auto_corr[1] >> temp; |
|
|
|
|
|
|
|
|
|
|
|
gain_scale(p, buf_ptr, energy); |
|
|
|
gain_scale(p, buf, energy); |
|
|
|
|
|
|
|
|
|
|
|
buf_ptr += SUBFRAME_LEN; |
|
|
|
buf += SUBFRAME_LEN; |
|
|
|
signal_ptr += SUBFRAME_LEN; |
|
|
|
signal_ptr += SUBFRAME_LEN; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|