📄 g729ev_celp2s_acelp_ca.c
字号:
p0 = rri0i1; p1 = rri0i2; p2 = rri0i3; p3 = rri0i4; /* Modify the rr[](rri0i1[], rri0i2[], rri0i3[], rri0i4[]) */ /* to take signs into account */ FOR(i0 = 0; i0 < G729EV_G729_L_SUBFR; i0 += G729EV_G729_STEP) { psign = sign_dn; if (psign[i0] < 0) { psign = sign_dn_inv; } FOR(i1 = 1; i1 < G729EV_G729_L_SUBFR; i1 += G729EV_G729_STEP) { *p0 = mult(*p0, psign[i1]); p0++; *p1 = mult(*p1, psign[i1 + 1]); p1++; *p2 = mult(*p2, psign[i1 + 2]); p2++; *p3 = mult(*p3, psign[i1 + 3]); p3++;#if (WMOPS) move16(); move16(); move16(); move16();#endif } } p0 = rri1i2; p1 = rri1i3; p2 = rri1i4; /* Modify the rr[](rri1i2[], rri1i3[], rri1i4[]) */ /* to take signs into account */ FOR(i1 = 1; i1 < G729EV_G729_L_SUBFR; i1 += G729EV_G729_STEP) { psign = sign_dn; if (psign[i1] < 0) { psign = sign_dn_inv; } FOR(i2 = 2; i2 < G729EV_G729_L_SUBFR; i2 += G729EV_G729_STEP) { *p0 = mult(*p0, psign[i2]); p0++; *p1 = mult(*p1, psign[i2 + 1]); p1++; *p2 = mult(*p2, psign[i2 + 2]); p2++;#if (WMOPS) move16(); move16(); move16();#endif } } p0 = rri2i3; p1 = rri2i4; /* Modify the rr[](rri2i3[], rri2i4[]) to take signs into account */ FOR(i2 = 2; i2 < G729EV_G729_L_SUBFR; i2 += G729EV_G729_STEP) { psign = sign_dn; if (psign[i2] < 0) { psign = sign_dn_inv; } FOR(i3 = 3; i3 < G729EV_G729_L_SUBFR; i3 += G729EV_G729_STEP) { *p0 = mult(*p0, psign[i3]); p0++; *p1 = mult(*p1, psign[i3 + 1]); p1++;#if (WMOPS) move16(); move16();#endif } } /* Find initial positions of the 4 pulses which maximize b[] */ FOR(track = 0; track < 5; track++) {#if (WMOPS) move16(); move16();#endif max = b[track]; ip[track] = track; FOR(i = track + G729EV_G729_STEP; i < G729EV_G729_L_SUBFR; i += G729EV_G729_STEP) { IF(sub(b[i], max) > 0) {#if (WMOPS) move16(); move16();#endif max = b[i]; ip[track] = i; } } } ptr_rri0i3_i4 = rri0i3; ptr_rri1i3_i4 = rri1i3; ptr_rri2i3_i4 = rri2i3; ptr_rri3i3_i4 = rri3i3; IF(sub(b[ip[3]], b[ip[4]]) < 0) {#if (WMOPS) move16();#endif ip[3] = ip[4]; ptr_rri0i3_i4 = rri0i4; ptr_rri1i3_i4 = rri1i4; ptr_rri2i3_i4 = rri2i4; ptr_rri3i3_i4 = rri4i4; } /* Compute Qk terms(square(correlation), energy) according to the initial pulses */ i0 = mult(ip[0], 6554); /* ip[0]/5 */ i1 = mult(ip[1], 6554); /* ip[1]/5 */ i2 = mult(ip[2], 6554); /* ip[2]/5 */ i3 = mult(ip[3], 6554); /* ip[3]/5 */ i0_offset = shl(i0, 3); i1_offset = shl(i1, 3); i2_offset = shl(i2, 3); i3_offset = shl(i3, 3); p0 = rri0i1 + i0_offset + i1; p1 = rri0i2 + i0_offset + i2; p2 = ptr_rri0i3_i4 + i0_offset + i3; p3 = rri1i2 + i1_offset + i2; p4 = ptr_rri1i3_i4 + i1_offset + i3; p5 = ptr_rri2i3_i4 + i2_offset + i3; xtmp16 = add(dn[ip[0]], dn[ip[1]]); ytmp16 = add(dn[ip[2]], dn[ip[3]]); Ck = add(xtmp16, ytmp16); Ek = L_mult0(rri0i0[i0], G729EV_CELP2S_FCB_1_8); Ek = L_mac0(Ek, rri1i1[i1], G729EV_CELP2S_FCB_1_8); Ek = L_mac0(Ek, rri2i2[i2], G729EV_CELP2S_FCB_1_8); Ek = L_mac0(Ek, ptr_rri3i3_i4[i3], G729EV_CELP2S_FCB_1_8); Ek = L_mac0(Ek, *p0, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p1, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p2, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p3, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p4, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p5, G729EV_CELP2S_FCB_1_4);#if (WMOPS) move16(); move16(); move16(); move16();#endif num_max = mult(Ck, Ck); den_max = round(Ek); prev_num_max = num_max; prev_den_max = den_max; track = 5; p_max = 0; /****************************************************************/ /* Perform one pulse replacement for each track and select */ /* pulse positions which maximize square(correlation)/energy */ /* The number of repetition is G729EV_CELP2S_FCB_REPEAT */ /****************************************************************/ FOR(j = 0; j < G729EV_CELP2S_FCB_REPEAT; j++) { /* If previously searched track is not 0 */ IF(track != 0) { p0 = rri1i1 + i1; p1 = rri2i2 + i2; p2 = ptr_rri3i3_i4 + i3; p3 = rri1i2 + i1_offset + i2; p4 = ptr_rri1i3_i4 + i1_offset + i3; p5 = ptr_rri2i3_i4 + i2_offset + i3; xtmp16 = add(dn[ip[1]], dn[ip[2]]); Ck_share = add(xtmp16, dn[ip[3]]); Ek_share = L_mult0(*p0, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p1, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p2, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p3, G729EV_CELP2S_FCB_1_4); Ek_share = L_mac0(Ek_share, *p4, G729EV_CELP2S_FCB_1_4); Ek_share = L_mac0(Ek_share, *p5, G729EV_CELP2S_FCB_1_4); p0 = rri0i0; p1 = rri0i1 + i1; p2 = rri0i2 + i2; p3 = ptr_rri0i3_i4 + i3; FOR(i = 0; i < G729EV_G729_L_SUBFR; i += G729EV_G729_STEP) { Ck = add(Ck_share, dn[i]); Ek = L_mac0(Ek_share, *p0, G729EV_CELP2S_FCB_1_8); Ek = L_mac0(Ek, *p1, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p2, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p3, G729EV_CELP2S_FCB_1_4); p0++; p1 += G729EV_G729_NB_POS; p2 += G729EV_G729_NB_POS; p3 += G729EV_G729_NB_POS; num = mult(Ck, Ck); den = round(Ek); xtmp32 = L_msu0(L_mult0(num, den_max), num_max, den); IF(xtmp32 > 0) {#if (WMOPS) move16(); move16(); move16();#endif num_max = num; den_max = den; p_max = i; } } } /* If previously searched track is not 1 */ IF(sub(track, 1) != 0) { p0 = rri0i0 + i0; p1 = rri2i2 + i2; p2 = ptr_rri3i3_i4 + i3; p3 = rri0i2 + i0_offset + i2; p4 = ptr_rri0i3_i4 + i0_offset + i3; p5 = ptr_rri2i3_i4 + i2_offset + i3; xtmp16 = add(dn[ip[0]], dn[ip[2]]); Ck_share = add(xtmp16, dn[ip[3]]); Ek_share = L_mult0(*p0, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p1, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p2, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p3, G729EV_CELP2S_FCB_1_4); Ek_share = L_mac0(Ek_share, *p4, G729EV_CELP2S_FCB_1_4); Ek_share = L_mac0(Ek_share, *p5, G729EV_CELP2S_FCB_1_4); p0 = rri1i1; p1 = rri0i1 + i0_offset; p2 = rri1i2 + i2; p3 = ptr_rri1i3_i4 + i3; FOR(i = 1; i < G729EV_G729_L_SUBFR; i += G729EV_G729_STEP) { Ck = add(Ck_share, dn[i]); Ek = L_mac0(Ek_share, *p0, G729EV_CELP2S_FCB_1_8); Ek = L_mac0(Ek, *p1, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p2, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p3, G729EV_CELP2S_FCB_1_4); p0++; p1++; p2 += G729EV_G729_NB_POS; p3 += G729EV_G729_NB_POS; num = mult(Ck, Ck); den = round(Ek); xtmp32 = L_msu0(L_mult0(num, den_max), num_max, den); IF(xtmp32 > 0) {#if (WMOPS) move16(); move16(); move16();#endif num_max = num; den_max = den; p_max = i; } } } /* If previously searched track is not 2 */ IF(sub(track, 2) != 0) { p0 = rri0i0 + i0; p1 = rri1i1 + i1; p2 = ptr_rri3i3_i4 + i3; p3 = rri0i1 + i0_offset + i1; p4 = ptr_rri0i3_i4 + i0_offset + i3; p5 = ptr_rri1i3_i4 + i1_offset + i3; xtmp16 = add(dn[ip[0]], dn[ip[1]]); Ck_share = add(xtmp16, dn[ip[3]]); Ek_share = L_mult0(*p0, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p1, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p2, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p3, G729EV_CELP2S_FCB_1_4); Ek_share = L_mac0(Ek_share, *p4, G729EV_CELP2S_FCB_1_4); Ek_share = L_mac0(Ek_share, *p5, G729EV_CELP2S_FCB_1_4); p0 = rri2i2; p1 = rri0i2 + i0_offset; p2 = rri1i2 + i1_offset; p3 = ptr_rri2i3_i4 + i3; FOR(i = 2; i < G729EV_G729_L_SUBFR; i += G729EV_G729_STEP) { Ck = add(Ck_share, dn[i]); Ek = L_mac0(Ek_share, *p0, G729EV_CELP2S_FCB_1_8); Ek = L_mac0(Ek, *p1, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p2, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p3, G729EV_CELP2S_FCB_1_4); p0++; p1++; p2++; p3 += G729EV_G729_NB_POS; num = mult(Ck, Ck); den = round(Ek); xtmp32 = L_msu0(L_mult0(num, den_max), num_max, den); IF(xtmp32 > 0) {#if (WMOPS) move16(); move16(); move16();#endif num_max = num; den_max = den; p_max = i; } } } /* If previously searched track is not 3 */ IF(sub(track, 3) != 0) { p0 = rri0i0 + i0; p1 = rri1i1 + i1; p2 = rri2i2 + i2; p3 = rri0i1 + i0_offset + i1; p4 = rri0i2 + i0_offset + i2; p5 = rri1i2 + i1_offset + i2; xtmp16 = add(dn[ip[0]], dn[ip[1]]); Ck_share = add(xtmp16, dn[ip[2]]); Ek_share = L_mult0(*p0, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p1, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p2, G729EV_CELP2S_FCB_1_8); Ek_share = L_mac0(Ek_share, *p3, G729EV_CELP2S_FCB_1_4); Ek_share = L_mac0(Ek_share, *p4, G729EV_CELP2S_FCB_1_4); Ek_share = L_mac0(Ek_share, *p5, G729EV_CELP2S_FCB_1_4); p0 = rri3i3; p1 = rri0i3 + i0_offset; p2 = rri1i3 + i1_offset; p3 = rri2i3 + i2_offset; FOR(i = 3; i < G729EV_G729_L_SUBFR; i += G729EV_G729_STEP) { Ck = add(Ck_share, dn[i]); Ek = L_mac0(Ek_share, *p0, G729EV_CELP2S_FCB_1_8); Ek = L_mac0(Ek, *p1, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p2, G729EV_CELP2S_FCB_1_4); Ek = L_mac0(Ek, *p3, G729EV_CELP2S_FCB_1_4); p0++; p1++; p2++; p3++; num = mult(Ck, Ck); den = round(Ek); xtmp32 = L_msu0(L_mult0(num, den_max), num_max, den); IF(xtmp32 > 0) {#if (WMOPS) move16(); move16(); move16();#endif num_max = num; den_max = den; p_max = i; } IF(sub(i, 38) == 0) {#if (WMOPS) move16();#endif i = -1; p0 = rri4i4; p1 = rri0i4 + i0_offset; p2 = rri1i4 + i1_offset; p3 = rri2i4 + i2_offset; } } } xtmp32 = L_msu(L_mult(num_max, prev_den_max), prev_num_max, den_max); ytmp32 = L_sub(xtmp32, G729EV_CELP2S_FCB_THRES); IF(ytmp32 > 0) {#if (WMOPS) move16(); move16();#endif prev_num_max = num_max; prev_den_max = den_max; xtmp16 = mult(p_max, 6554); /* track = p_max % 5 */ ytmp16 = add(xtmp16, shl(xtmp16, 2)); track = sub(p_max, ytmp16);#if (WMOPS) move16();#endif ip[track] = p_max; IF(sub(track, 3) == 0) { ptr_rri0i3_i4 = rri0i3; ptr_rri1i3_i4 = rri1i3; ptr_rri2i3_i4 = rri2i3; ptr_rri3i3_i4 = rri3i3; } IF(sub(track, 4) == 0) {#if (WMOPS) move16(); move16();#endif ip[3] = ip[4]; track = 3; ptr_rri0i3_i4 = rri0i4; ptr_rri1i3_i4 = rri1i4; ptr_rri2i3_i4 = rri2i4; ptr_rri3i3_i4 = rri4i4; } i0 = mult(ip[0], 6554); i1 = mult(ip[1], 6554); i2 = mult(ip[2], 6554); i3 = mult(ip[3], 6554); i0_offset = shl(i0, 3); i1_offset = shl(i1, 3); i2_offset = shl(i2, 3); i3_offset = shl(i3, 3); } ELSE { BREAK; } } /* Set the sign of impulses */#if (WMOPS) move16(); move16(); move16(); move16();#endif i0 = sign_dn[ip[0]]; i1 = sign_dn[ip[1]]; i2 = sign_dn[ip[2]]; i3 = sign_dn[ip[3]]; /* Find the codeword corresponding to the selected positions */ p0 = cod; FOR(i = 0; i < G729EV_G729_L_SUBFR; i++) {#if (WMOPS) move16();#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -