void code_8i40_31bits ( Word16 x[], /* i : target vector */ Word16 cn[], /* i : residual after long term prediction */ Word16 h[], /* i : impulse response of weighted synthesis filter */ Word16 cod[], /* o : algebraic (fixed) codebook excitation */ Word16 y[], /* o : filtered fixed codebook excitation */ Word16 indx[] /* o : 7 Word16, index of 8 pulses (signs+positions) */ ) { Word16 ipos[NB_PULSE], pos_max[NB_TRACK_MR102], codvec[NB_PULSE]; Word16 dn[L_CODE], sign[L_CODE]; Word16 rr[L_CODE][L_CODE]; Word16 linear_signs[NB_TRACK_MR102]; Word16 linear_codewords[NB_PULSE]; cor_h_x2 (h, x, dn, 2, NB_TRACK_MR102, STEP_MR102); /* 2 = use GSMEFR scaling */ set_sign12k2 (dn, cn, sign, pos_max, NB_TRACK_MR102, ipos, STEP_MR102); /* same setsign alg as GSM-EFR new constants though*/ cor_h (h, sign, rr); search_10and8i40 (NB_PULSE, STEP_MR102, NB_TRACK_MR102, dn, rr, ipos, pos_max, codvec); build_code (codvec, sign, cod, h, y, linear_signs, linear_codewords); compress_code (linear_signs, linear_codewords, indx); return; }
/*---------------------------------------------------------------------------- ; FUNCTION CODE ----------------------------------------------------------------------------*/ void code_10i40_35bits( Word16 x[], /* (i) : target vector */ Word16 cn[], /* (i) : residual after long term prediction */ Word16 h[], /* (i) : impulse response of weighted synthesis filter h[-L_subfr..-1] must be set to zero */ Word16 cod[], /* (o) : algebraic (fixed) codebook excitation */ Word16 y[], /* (o) : filtered fixed codebook excitation */ Word16 indx[], /* (o) : index of 10 pulses (sign + position) */ Flag *pOverflow /* (i/o) : overflow Flag */ ) { Word16 ipos[NB_PULSE], pos_max[NB_TRACK], codvec[NB_PULSE]; Word16 dn[L_CODE], sign[L_CODE]; Word16 rr[L_CODE][L_CODE], i; cor_h_x(h, x, dn, 2, pOverflow); set_sign12k2(dn, cn, sign, pos_max, NB_TRACK, ipos, STEP, pOverflow); cor_h(h, sign, rr, pOverflow); search_10and8i40(NB_PULSE, STEP, NB_TRACK, dn, rr, ipos, pos_max, codvec, pOverflow); build_code(codvec, sign, cod, h, y, indx, pOverflow); for (i = 0; i < 10; i++) { q_p(&indx[i], i); } return; }