📄 acelp_cp.c
字号:
ptr2 = rri1i1; C0=dn[m0]; for (pulse1=24; pulse1<posSearched[1]; pulse1++, m1+=STEP) { C = C0; E = *ptr1; C += dn[m1]; Csq = C*C; E += *ptr2++; E += (F)2.0 * *ptr3++; if ( (Csq*E_best) > (E*Csq_best) ) { E_best = E; Csq_best = Csq; m0_bestIndex=pulse0; m1_bestIndex=pulse1; } } ptr1++; } /* m0 -> i3 m1 -> i0 (sub 1 vs sub 0) */ m1 = 0; ptr1 = rri0i0; ptr3 = rri0i3; for (pulse1=0; pulse1<24; pulse1+=3, m1+=STEP) { m0 = 3; ptr2 = rri3i3; C0 = dn[m1]; for (pulse0=1; pulse0<16; pulse0+=2, m0+=STEP) { C = C0; E = *ptr1; C += dn[m0]; Csq = C*C; E += *ptr2++; E += (F)2.0 * *ptr3++; if ( (Csq*E_best) > (E*Csq_best) ) { E_best = E; Csq_best = Csq; m0_bestIndex=pulse0; m1_bestIndex=pulse1; } } ptr1++; } /* m0 -> i3 m1 -> i2 (sub 1 vs sub 1) */ m1 = 2; ptr1 = rri2i2; ptr3 = rri2i3; for (pulse1=1; pulse1<24; pulse1+=3, m1+=STEP) { m0 = 3; ptr2 = rri3i3; C0 = dn[m1]; for (pulse0=1; pulse0<16; pulse0+=2, m0+=STEP) { C = C0; E = *ptr1; C += dn[m0]; Csq = C*C; E += *ptr2++; E += (F)2.0 * *ptr3++; if ( (Csq*E_best) > (E*Csq_best) ) { E_best = E; Csq_best = Csq; m0_bestIndex=pulse0; m1_bestIndex=pulse1; } } ptr1++; } /* m0 -> i3 m1 -> i4 (sub 1 vs sub 2) rri0i4 contains rri3i4 */ m0 = 3; ptr1 = rri3i3; ptr3 = rri0i4; for (pulse0=1; pulse0<posSearched[0]; pulse0+=2, m0+=STEP) { m1 = 4; ptr2 = rri4i4; C0 = dn[m0]; for (pulse1=2; pulse1<24; pulse1+=3, m1+=STEP) { C = C0; E = *ptr1; C += dn[m1]; Csq = C*C; E += *ptr2++; E += (F)2.0 * *ptr3++; if ( (Csq*E_best) > (E*Csq_best) ) { E_best = E; Csq_best = Csq; m0_bestIndex=pulse0; m1_bestIndex=pulse1; } } ptr1++; } /* m0 -> i3 m1 -> i1 (sub 1 vs sub 3) */ m1 = 1; ptr1 = rri1i1; ptr3 = rri1i3; for (pulse1=24; pulse1<32; pulse1++, m1+=STEP) { m0 = 3; ptr2 = rri3i3; C0 = dn[m1]; for (pulse0=1; pulse0<16; pulse0+=2, m0+=STEP) { C = C0; E = *ptr1; C += dn[m0]; Csq = C*C; E += *ptr2++; E += (F)2.0 * *ptr3++; if ( (Csq*E_best) > (E*Csq_best) ) { E_best = E; Csq_best = Csq; m0_bestIndex=pulse0; m1_bestIndex=pulse1; } } ptr1++; } m0_bestPos = trackTable0[m0_bestIndex]; m1_bestPos = trackTable1[m1_bestIndex]; posIndex[0] = grayEncode[m0_bestIndex]; posIndex[1] = grayEncode[m1_bestIndex]; signIndex[0] = ( p_sign[m0_bestPos] > 0); signIndex[1] = ( p_sign[m1_bestPos] > 0); /* build innovation vector */ for (i = 0; i < L_SUBFR; i++) code[i] = (F)0.0; code[m0_bestPos] = (FLOAT)p_sign[m0_bestPos]; code[m1_bestPos] += (FLOAT)p_sign[m1_bestPos]; *sign = signIndex[0] + 2*signIndex[1]; index = posIndex[0] + 16*posIndex[1]; /* compute filtered cbInnovation */ for (i = 0; i < L_SUBFR; i++) y[i] = (F)0.0; if(signIndex[0] == 1) { for(i=m0_bestPos, j=0; i<L_SUBFR; i++, j++) y[i] = h[j]; } else { for(i=m0_bestPos, j=0; i<L_SUBFR; i++, j++) y[i] = -h[j]; } if(signIndex[1] == 1) { for(i=m1_bestPos, j=0; i<L_SUBFR; i++, j++) y[i] = y[i] + h[j]; } else { for(i=m1_bestPos, j=0; i<L_SUBFR; i++, j++) y[i] = y[i] - h[j]; } if(t0 < L_SUBFR) { for (i = t0; i < L_SUBFR; i++) code[i] += pitch_sharp * code[i-t0]; } return index;}/*--------------------------------------------------------------------------** Function cor_h() ** ~~~~~~~~~~~~~~~~~ ** Compute correlations of h[] needed for the codebook search. **--------------------------------------------------------------------------*/static void cor_h_cp( FLOAT *h, /* (i) :Impulse response of filters */ FLOAT *rr, /* (o) :Correlations of H[] */ int rate ){ FLOAT *rri0i0, *rri1i1, *rri2i2, *rri3i3, *rri4i4; FLOAT *rri0i1, *rri0i2, *rri0i3, *rri0i4; FLOAT *rri1i2, *rri1i3, *rri1i4; FLOAT *rri2i3, *rri2i4; FLOAT *p0, *p1, *p2, *p3, *p4; FLOAT *ptr_hd, *ptr_hf, *ptr_h1, *ptr_h2; FLOAT cor; int i, k, ldec, l_fin_sup, l_fin_inf; int lsym; /* Init pointers */ rri0i0 = rr; rri1i1 = rri0i0 + NB_POS; rri2i2 = rri1i1 + NB_POS; rri3i3 = rri2i2 + NB_POS; rri4i4 = rri3i3 + NB_POS; rri0i1 = rri4i4 + NB_POS; rri0i2 = rri0i1 + MSIZE; rri0i3 = rri0i2 + MSIZE; rri0i4 = rri0i3 + MSIZE; rri1i2 = rri0i4 + MSIZE; rri1i3 = rri1i2 + MSIZE; rri1i4 = rri1i3 + MSIZE; rri2i3 = rri1i4 + MSIZE; rri2i4 = rri2i3 + MSIZE; /*------------------------------------------------------------* * Compute rri0i0[], rri1i1[], rri2i2[], rri3i3 and rri4i4[] * *------------------------------------------------------------*/ p0 = rri0i0 + NB_POS-1; /* Init pointers to last position of rrixix[] */ p1 = rri1i1 + NB_POS-1; p2 = rri2i2 + NB_POS-1; p3 = rri3i3 + NB_POS-1; p4 = rri4i4 + NB_POS-1; ptr_h1 = h; cor = (F)0.0; for(i=0; i<NB_POS; i++) { cor += *ptr_h1 * *ptr_h1; ptr_h1++; *p4-- = cor; cor += *ptr_h1 * *ptr_h1; ptr_h1++; *p3-- = cor; cor += *ptr_h1 * *ptr_h1; ptr_h1++; *p2-- = cor; cor += *ptr_h1 * *ptr_h1; ptr_h1++; *p1-- = cor; cor += *ptr_h1 * *ptr_h1; ptr_h1++; *p0-- = cor; } /*-----------------------------------------------------------------* * Compute elements of: rri2i3[], rri1i2[], rri0i1[] and rri0i4[] * *-----------------------------------------------------------------*/ l_fin_sup = MSIZE-1; l_fin_inf = l_fin_sup-1; ldec = NB_POS+1; ptr_hd = h; ptr_hf = ptr_hd + 1; for(k=0; k<NB_POS; k++) { p4=rri0i4+l_fin_sup; p3 = rri2i3 + l_fin_sup; p2 = rri1i2 + l_fin_sup; p1 = rri0i1 + l_fin_sup; p0 = rri0i4 + l_fin_inf; cor = (F)0.0; ptr_h1 = ptr_hd; ptr_h2 = ptr_hf; for(i=k+1; i<NB_POS; i++ ) { cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; if (rate == G729D) *p4=cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p3 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p2 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p1 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; if (rate == G729) *p0 = cor; p4-=ldec; p3 -= ldec; p2 -= ldec; p1 -= ldec; p0 -= ldec; } cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; if (rate == G729D) *p4=cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p3 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p2 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p1 = cor; l_fin_sup -= NB_POS; l_fin_inf--; ptr_hf += STEP; } /*---------------------------------------------------------------------* * Compute elements of: rri2i4[], rri1i3[], rri0i2[], rri1i4[], rri0i3 * *---------------------------------------------------------------------*/ ptr_hd = h; ptr_hf = ptr_hd + 2; l_fin_sup = MSIZE-1; l_fin_inf = l_fin_sup-1; for(k=0; k<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; cor = (F)0.0; ptr_h1 = ptr_hd; ptr_h2 = ptr_hf; for(i=k+1; i<NB_POS; i++ ) { cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p4 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p3 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p2 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p1 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p0 = cor; p4 -= ldec; p3 -= ldec; p2 -= ldec; p1 -= ldec; p0 -= ldec; } cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p4 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p3 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p2 = cor; l_fin_sup -= NB_POS; l_fin_inf--; ptr_hf += STEP; } /*----------------------------------------------------------------------* * Compute elements of: rri1i4[], rri0i3[], rri2i4[], rri1i3[], rri0i2 * *----------------------------------------------------------------------*/ ptr_hd = h; ptr_hf = ptr_hd + 3; l_fin_sup = MSIZE-1; l_fin_inf = l_fin_sup-1; for(k=0; k<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; ptr_h1 = ptr_hd; ptr_h2 = ptr_hf; cor = (F)0.0; for(i=k+1; i<NB_POS; i++ ) { cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p4 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p3 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p2 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p1 = cor; cor += *ptr_h1 * *ptr_h2; ptr_h1++; ptr_h2++; *p0 = cor;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -