summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKoen Vos <koenvos@users.noreply.github.com>2016-06-01 13:36:43 +0800
committerKoen Vos <koenvos@users.noreply.github.com>2016-06-01 13:36:43 +0800
commitf6bba82efbe054cfa0a8d45cf68caa40d30f6ba5 (patch)
tree9af1ca90bf0df17b5a6169b754e8d65c19b5e82c
parent3b8a9b183c00e8c547b13fddef974445dfd832ba (diff)
downloadopus-silk_LTP_corr_smoothing.tar.gz
forward-backward smoothing of LTP correlations before quantizingsilk_LTP_corr_smoothing
-rw-r--r--silk/quant_LTP_gains.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/silk/quant_LTP_gains.c b/silk/quant_LTP_gains.c
index 6fd28d20..55d918b3 100644
--- a/silk/quant_LTP_gains.c
+++ b/silk/quant_LTP_gains.c
@@ -50,6 +50,27 @@ void silk_quant_LTP_gains(
const opus_int32 *XX_Q17_ptr, *xX_Q17_ptr;
opus_int32 res_nrg_Q15_subfr, res_nrg_Q15, rate_dist_Q7_subfr, rate_dist_Q7, min_rate_dist_Q7;
+ opus_int32 XX_Q17_smth[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ];
+ opus_int32 xX_Q17_smth[ MAX_NB_SUBFR*LTP_ORDER ];
+ memcpy(XX_Q17_smth, XX_Q17, MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER*sizeof(opus_int32));
+ memcpy(xX_Q17_smth, xX_Q17, MAX_NB_SUBFR*LTP_ORDER*sizeof(opus_int32));
+ for( j = 1; j < nb_subfr; j++ ) {
+ for( k = 0; k < LTP_ORDER*LTP_ORDER; k++ ) {
+ XX_Q17_smth[j*LTP_ORDER*LTP_ORDER + k] += (XX_Q17_smth[(j-1)*LTP_ORDER*LTP_ORDER + k] - XX_Q17_smth[j*LTP_ORDER*LTP_ORDER + k]) >> 2;
+ }
+ for( k = 0; k < LTP_ORDER; k++ ) {
+ xX_Q17_smth[j*LTP_ORDER + k] += (xX_Q17_smth[(j-1)*LTP_ORDER + k] - xX_Q17_smth[j*LTP_ORDER + k]) >> 2;
+ }
+ }
+ for( j = 0; j < nb_subfr-1; j++ ) {
+ for( k = 0; k < LTP_ORDER*LTP_ORDER; k++ ) {
+ XX_Q17_smth[j*LTP_ORDER*LTP_ORDER + k] += (XX_Q17_smth[(j+1)*LTP_ORDER*LTP_ORDER + k] - XX_Q17_smth[j*LTP_ORDER*LTP_ORDER + k]) >> 2;
+ }
+ for( k = 0; k < LTP_ORDER; k++ ) {
+ xX_Q17_smth[j*LTP_ORDER + k] += (xX_Q17_smth[(j+1)*LTP_ORDER + k] - xX_Q17_smth[j*LTP_ORDER + k]) >> 2;
+ }
+ }
+
/***************************************************/
/* iterate over different codebooks with different */
/* rates/distortions, and choose best */
@@ -61,8 +82,8 @@ void silk_quant_LTP_gains(
cbk_size = silk_LTP_vq_sizes[ k ];
/* Set up pointers to first subframe */
- XX_Q17_ptr = XX_Q17;
- xX_Q17_ptr = xX_Q17;
+ XX_Q17_ptr = XX_Q17_smth;
+ xX_Q17_ptr = xX_Q17_smth;
res_nrg_Q15 = 0;
rate_dist_Q7 = 0;