📄 acelp_cp.c
字号:
}
}
ptr1++;
}
/* m0 -> i1 m1 -> i1 (sub 0 vs sub 3) */
m0 = 1;
ptr1 = rri1i1;
ptr3 = rri0i2;
for (pulse0=0; pulse0<posSearched[0]; pulse0+=2, m0+=STEP) {
m1 = 1;
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -