📄 g729ev_celp2s_acelp_ca.c
字号:
/* ITU-T G.729EV Optimization/Characterization Candidate *//* Version: 1.0.a *//* Revision Date: June 28, 2006 *//* ITU-T G.729EV Optimization/Characterization Candidate ANSI-C Source Code Copyright (c) 2006 France Telecom, Matsushita Electric, Mindspeed, Siemens AG, ETRI, VoiceAge Corp. All rights reserved*/#include "G729EV_CELP2S_acelp_ca.h"/*--------------------------------------------------------------------------* * Function G729EV_G729_cor_h_OTH() * * Compute correlations of h[] needed for the codebook search. * *--------------------------------------------------------------------------*/void G729EV_CELP2S_cor_h_OTH(Word16 * h, /* (i) Q12 : Impulse response of filters */ Word16 * rr, /* (o) : Correlation of H[] */ Word16 * y1){ Word32 cor; Word32 ACC0; Word32 tmp32[G729EV_G729_L_SUBFR]; Word32 Max_ACC0; Word16 h_scaled[G729EV_G729_L_SUBFR]; Word16 tmp[G729EV_G729_L_SUBFR]; Word16 *rri0i0, *rri1i1, *rri2i2, *rri3i3, *rri4i4; Word16 *rri0i1, *rri0i2, *rri0i3, *rri0i4; Word16 *rri1i2, *rri1i3, *rri1i4; Word16 *rri2i3, *rri2i4; Word16 *p0, *p1, *p2, *p3, *p4; Word16 *p01, *p02, *p03, *p04, *p12, *p13, *p14, *p23, *p24; Word16 *ptr_hd, *ptr_hf, *ptr_h1, *ptr_h2; Word16 rt0, rt1, rt2, rt3, rt4; Word16 i, ii, j, jj; Word16 k, kk, shift; Word16 ldec, l_fin_sup, l_fin_inf; Word16 r1; Word16 tmp16; Word16 shift_div; Word16 shift_y1; Word32 *ptr32; Word16 *ptr16, *ptr16tmp; /* Scaling h[] for maximum precision */ cor = (Word32) 0;#if (WMOPS) move32();#endif FOR(i = 0; i < G729EV_G729_L_SUBFR; i++) cor = L_mac(cor, h[i], h[i]); IF(sub(extract_h(cor), 32000) > 0) { /* shift right h --> h_scaled */ shift = (Word16) - 1;#if (WMOPS) move16();#endif ptr_hd = h_scaled; FOR(i = 0; i < G729EV_G729_L_SUBFR; i++) {#if (WMOPS) move16();#endif *ptr_hd++ = shr(h[i], 1); } } ELSE { /* shift left h --> h_scaled */ shift = norm_l(cor); shift = shr(shift, 1); ptr_hd = h_scaled; FOR(i = 0; i < G729EV_G729_L_SUBFR; i++) {#if (WMOPS) move16();#endif *ptr_hd++ = shl(h[i], shift); } } /*------------------------------------------------------------* * Compute rri0i0[], rri1i1[], rri2i2[], rri3i3 and rri4i4[] * *------------------------------------------------------------*/ /* Init pointers */ rri0i0 = rr; rri1i1 = rri0i0 + G729EV_G729_NB_POS; /* 8 */ rri2i2 = rri1i1 + G729EV_G729_NB_POS; rri3i3 = rri2i2 + G729EV_G729_NB_POS; rri4i4 = rri3i3 + G729EV_G729_NB_POS; rri0i1 = rri4i4 + G729EV_G729_NB_POS; rri0i2 = rri0i1 + G729EV_G729_MSIZE; /* 16 */ rri0i3 = rri0i2 + G729EV_G729_MSIZE; rri0i4 = rri0i3 + G729EV_G729_MSIZE; rri1i2 = rri0i4 + G729EV_G729_MSIZE; rri1i3 = rri1i2 + G729EV_G729_MSIZE; rri1i4 = rri1i3 + G729EV_G729_MSIZE; rri2i3 = rri1i4 + G729EV_G729_MSIZE; rri2i4 = rri2i3 + G729EV_G729_MSIZE; p0 = rri0i0 + G729EV_G729_NB_POS - 1; /* Init pointers to last position of rrixix[] */ p1 = rri1i1 + G729EV_G729_NB_POS - 1; p2 = rri2i2 + G729EV_G729_NB_POS - 1; p3 = rri3i3 + G729EV_G729_NB_POS - 1; p4 = rri4i4 + G729EV_G729_NB_POS - 1;#if (WMOPS) move32();#endif ptr_h1 = h_scaled; cor = (Word32) 0; FOR(i = 0; i < G729EV_G729_NB_POS; i++) { cor = L_mac(cor, *ptr_h1, *ptr_h1); ptr_h1++; *p4-- = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h1); ptr_h1++; *p3-- = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h1); ptr_h1++; *p2-- = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h1); ptr_h1++; *p1-- = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h1); ptr_h1++; *p0-- = extract_h(cor);#if(WMOPS) move16();#endif } /*-----------------------------------------------------------------* * Compute elements of: rri2i3[], rri1i2[], rri0i1[] and rri0i4[] * *-----------------------------------------------------------------*/#if (WMOPS) move16(); move16(); move16();#endif l_fin_sup = G729EV_G729_MSIZE - 1; l_fin_inf = l_fin_sup - 1; ldec = G729EV_G729_NB_POS + 1; ptr_hd = h_scaled; ptr_hf = ptr_hd + 1; FOR(k = 0; k < G729EV_G729_NB_POS; k++) { p3 = rri2i3 + l_fin_sup; p2 = rri1i2 + l_fin_sup; p1 = rri0i1 + l_fin_sup; p0 = rri0i4 + l_fin_inf;#if (WMOPS) move32();#endif cor = (Word32) 0; ptr_h1 = ptr_hd; ptr_h2 = ptr_hf; FOR(i = k + 1; i < G729EV_G729_NB_POS; i++) { cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p3 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p2 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p1 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p0 = extract_h(cor);#if(WMOPS) move16();#endif p3 -= ldec; p2 -= ldec; p1 -= ldec; p0 -= ldec; } cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p3 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p2 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p1 = extract_h(cor);#if(WMOPS) move16();#endif l_fin_sup -= G729EV_G729_NB_POS; l_fin_inf--; ptr_hf += G729EV_G729_STEP; } /*---------------------------------------------------------------------* * Compute elements of: rri2i4[], rri1i3[], rri0i2[], rri1i4[], rri0i3 * *---------------------------------------------------------------------*/#if (WMOPS) move16(); move16();#endif ptr_hd = h_scaled; ptr_hf = ptr_hd + 2; l_fin_sup = G729EV_G729_MSIZE - 1; l_fin_inf = l_fin_sup - 1; FOR(k = 0; k < G729EV_G729_NB_POS; k++) { p4 = rri2i4 + l_fin_sup; p3 = rri1i3 + l_fin_sup; p2 = rri0i2 + l_fin_sup; p1 = rri1i4 + l_fin_inf; p0 = rri0i3 + l_fin_inf;#if (WMOPS) move32();#endif cor = (Word32) 0; ptr_h1 = ptr_hd; ptr_h2 = ptr_hf; FOR(i = k + (Word16) 1; i < G729EV_G729_NB_POS; i++) { cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p4 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p3 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p2 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p1 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p0 = extract_h(cor);#if(WMOPS) move16();#endif p4 -= ldec; p3 -= ldec; p2 -= ldec; p1 -= ldec; p0 -= ldec; } cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p4 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p3 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p2 = extract_h(cor);#if(WMOPS) move16();#endif l_fin_sup -= G729EV_G729_NB_POS; l_fin_inf--; ptr_hf += G729EV_G729_STEP; } /*----------------------------------------------------------------------* * Compute elements of: rri1i4[], rri0i3[], rri2i4[], rri1i3[], rri0i2 * *----------------------------------------------------------------------*/#if (WMOPS) move16(); move16();#endif ptr_hd = h_scaled; ptr_hf = ptr_hd + 3; l_fin_sup = G729EV_G729_MSIZE - 1; l_fin_inf = l_fin_sup - 1; FOR(k = 0; k < G729EV_G729_NB_POS; k++) { p4 = rri1i4 + l_fin_sup; p3 = rri0i3 + l_fin_sup; p2 = rri2i4 + l_fin_inf; p1 = rri1i3 + l_fin_inf; p0 = rri0i2 + l_fin_inf;#if (WMOPS) move32();#endif ptr_h1 = ptr_hd; ptr_h2 = ptr_hf; cor = (Word32) 0; FOR(i = k + (Word16) 1; i < G729EV_G729_NB_POS; i++) { cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p4 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p3 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p2 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p1 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p0 = extract_h(cor);#if(WMOPS) move16();#endif p4 -= ldec; p3 -= ldec; p2 -= ldec; p1 -= ldec; p0 -= ldec; } cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p4 = extract_h(cor);#if(WMOPS) move16();#endif cor = L_mac(cor, *ptr_h1, *ptr_h2); ptr_h1++; ptr_h2++; *p3 = extract_h(cor);#if(WMOPS) move16();#endif l_fin_sup -= G729EV_G729_NB_POS; l_fin_inf--; ptr_hf += G729EV_G729_STEP; } /*----------------------------------------------------------------------* * Compute elements of: rri0i4[], rri2i3[], rri1i2[], rri0i1[] * *----------------------------------------------------------------------*/#if (WMOPS) move16(); move16();#endif ptr_hd = h_scaled; ptr_hf = ptr_hd + 4; l_fin_sup = G729EV_G729_MSIZE - 1; l_fin_inf = l_fin_sup - 1; FOR(k = 0; k < G729EV_G729_NB_POS; k++) { p3 = rri0i4 + l_fin_sup; p2 = rri2i3 + l_fin_inf; p1 = rri1i2 + l_fin_inf; p0 = rri0i1 + l_fin_inf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -