123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /*
- ********************************************************************************
- *
- * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
- * R99 Version 3.3.0
- * REL-4 Version 4.1.0
- *
- ********************************************************************************
- *
- * File : d1035pf.c
- * Purpose : Builds the innovative codevector
- *
- ********************************************************************************
- */
-
-
- /*
- ********************************************************************************
- * MODULE INCLUDE FILE AND VERSION ID
- ********************************************************************************
- */
- #include "d1035pf.h"
- const char d1035pf_id[] = "@(#)$Id $" d1035pf_h;
-
- /*
- ********************************************************************************
- * INCLUDE FILES
- ********************************************************************************
- */
- #include "typedef.h"
- #include "basic_op.h"
- #include "count.h"
- #include "cnst.h"
- /*
- ********************************************************************************
- * LOCAL VARIABLES AND TABLES
- ********************************************************************************
- */
- #define NB_PULSE 10 /* number of pulses */
- #include "gray.tab"
- /*
- ********************************************************************************
- * PUBLIC PROGRAM CODE
- ********************************************************************************
- */
- /*************************************************************************
- *
- * FUNCTION: dec_10i40_35bits()
- *
- * PURPOSE: Builds the innovative codevector from the received
- * index of algebraic codebook.
- *
- * See c1035pf.c for more details about the algebraic codebook structure.
- *
- *************************************************************************/
- void dec_10i40_35bits (
- Word16 index[], /* (i) : index of 10 pulses (sign+position) */
- Word16 cod[] /* (o) : algebraic (fixed) codebook excitation */
- )
- {
- Word16 i, j, pos1, pos2, sign, tmp;
- for (i = 0; i < L_CODE; i++)
- {
- cod[i] = 0; move16 ();
- }
- /* decode the positions and signs of pulses and build the codeword */
- for (j = 0; j < NB_TRACK; j++)
- {
- /* compute index i */
- tmp = index[j]; move16 ();
- i = tmp & 7; logic16 ();
- i = dgray[i]; move16 ();
- i = extract_l_ex (L_shr_ex (L_mult_ex (i, 5), 1));
- pos1 = add_ex (i, j); /* position of pulse "j" */
- i = shr_ex (tmp, 3) & 1; logic16 ();
- test ();
- if (i == 0)
- {
- sign = 4096; move16 (); /* +1.0 */
- }
- else
- {
- sign = -4096; move16 (); /* -1.0 */
- }
- cod[pos1] = sign; move16 ();
- /* compute index i */
- i = index[add_ex (j, 5)] & 7; logic16 ();
- i = dgray[i]; move16 ();
- i = extract_l_ex (L_shr_ex (L_mult_ex (i, 5), 1));
- pos2 = add_ex (i, j); /* position of pulse "j+5" */
- test ();
- if (sub_ex (pos2, pos1) < 0)
- {
- sign = negate_ex (sign);
- }
- cod[pos2] = add_ex (cod[pos2], sign); move16 ();
- }
- return;
- }
|