📄 c3_10pf.c
字号:
}
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
*p1 = extract_h(cor);
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
*p0 = extract_h(cor);
pos -= NB_POS;
ptr_hf += STEP;
}
/* storage order --> i1i2, i0i1 */
pos = MSIZE - 1;
ptr_hf = h + 5;
for (k = 0; k < NB_POS; k++)
{
p1 = &rrixiy[1][pos - 1];
p0 = &rrixiy[0][pos - 1];
cor = 0x00008000L; /* 0.5 (for rounding) */
ptr_h1 = h;
ptr_h2 = ptr_hf;
for (i = k + (Shortword) 1; i < 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++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
*p1 = extract_h(cor);
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
*p0 = extract_h(cor);
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
p1 -= (NB_POS + 1);
p0 -= (NB_POS + 1);
}
pos--;
ptr_hf += STEP;
}
/* storage order --> i0i2 */
pos = MSIZE - 1;
ptr_hf = h + 4;
for (k = 0; k < NB_POS; k++)
{
p0 = &rrixiy[2][pos];
cor = 0x00008000L; /* 0.5 (for rounding) */
ptr_h1 = h;
ptr_h2 = ptr_hf;
for (i = k + (Shortword) 1; i < NB_POS; i++)
{
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
*p0 = extract_h(cor);
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
p0 -= (NB_POS + 1);
}
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
*p0 = extract_h(cor);
pos -= NB_POS;
ptr_hf += STEP;
}
/* storage order --> i0i2 */
pos = MSIZE - 1;
ptr_hf = h + 3;
for (k = 0; k < NB_POS; k++)
{
p0 = &rrixiy[2][pos - 1];
cor = 0x00008000L; /* 0.5 (for rounding) */
ptr_h1 = h;
ptr_h2 = ptr_hf;
for (i = k + (Shortword) 1; i < 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++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
*p0 = extract_h(cor);
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
cor = L_mac(cor, *ptr_h1, *ptr_h2);
ptr_h1++;
ptr_h2++;
p0 -= (NB_POS + 1);
}
pos--;
ptr_hf += STEP;
}
/*-------------------------------------------------------------------*
* SEARCH THE BEST CODEVECTOR. *
* *
* complexity: 8x8x8 = 512 tests *
*-------------------------------------------------------------------*/
/* default value */
psk = -1;
alpk = 1;
codvec[0] = 0;
codvec[1] = 2;
codvec[2] = 4;
p0 = rrixix[0];
p2 = rrixiy[0];
p4 = rrixiy[2];
for (i0 = 0; i0 < L_SUBFR; i0 += STEP)
{
ps0 = dn[i0];
alp0 = *p0++;
p1 = rrixix[1];
p5 = rrixiy[1];
for (i = 0; i < NB_POS; i++)
cor_l2[i] = add(rrixix[2][i], *p4++);
for (i1 = 2; i1 < L_SUBFR; i1 += STEP)
{
ps1 = sub(ps0, dn[i1]);
/* alp1 = alp0 + rr[i1][i1] - 2.0 * rr[i0][i1]; */
alp1 = add(alp0, sub(*p1++, *p2++));
p3 = cor_l2;
for (i2 = 4; i2 < L_SUBFR; i2 += STEP)
{
ps2 = add(ps1, dn[i2]);
/* alp2 = alp1 + rr[i2][i2] + 2.0 * (rr[i0][i2] - rr[i1][i2]); */
alp2 = add(alp1, sub(*p3++, *p5++));
ps2 = mult(ps2, ps2);
s = L_msu(L_mult(alpk, ps2), psk, alp2);
if (s > 0)
{
psk = ps2;
alpk = alp2;
codvec[0] = i0;
codvec[1] = i1;
codvec[2] = i2;
}
}
}
}
/*-------------------------------------------------------------------*
* Build the codeword, the filtered codeword and index of codevector.*
*-------------------------------------------------------------------*/
ps2 = sub(add(dn[codvec[0]], dn[codvec[2]]), dn[codvec[1]]);
for (i = 0; i < l_subfr; i++)
{
code[i] = 0;
}
if (ps2 < 0)
index = 1; /* global sign */
else
index = 0;
for (k = 0; k < NB_PULSE; k++)
{
i = codvec[k]; /* read pulse position */
pos = mult(i, Q15_1_7); /* pos = position/7 */
index = add(shl(index, 3), pos);
if (((k != 1) && (ps2 >= 0)) || ((k == 1) && (ps2 < 0)))
{
if (i < l_subfr)
code[i] = 4096; /* codeword in Q12 format */
codvec[k] += (2 * L_SUBFR);
}
else
{
if (i < l_subfr)
code[i] = -4096; /* codeword in Q12 format */
}
}
for (i = 0; i < l_subfr; i++)
{
h[i] = H[i];
h_inv[i] = negate(h[i]);
}
p0 = h_inv - codvec[0];
p1 = h_inv - codvec[1];
p2 = h_inv - codvec[2];
for (i = 0; i < l_subfr; i++)
{
s = L_mult(*p0++, 8192); /* Q12 --> Q10 */
s = L_mac(s, *p1++, 8192);
s = L_mac(s, *p2++, 8192);
y[i] = round32(s);
}
*indx = index;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -