ref: c78ac707b07a3c8dea4685274cb6f1b3ba1ea93f
dir: /amr-wb/d2t64fx.c/
/*-------------------------------------------------------------------* * D2T64FX.C * *-------------------------------------------------------------------* * 12 bits algebraic codebook decoder. * * 2 tracks x 32 positions per track = 64 samples. * * * * 12 bits --> 2 pulses in a frame of 64 samples. * * * * All pulses can have two (2) possible amplitudes: +1 or -1. * * Each pulse can have 32 possible positions. * * * * See dec2t64.c for more details of the algebraic code. * *-------------------------------------------------------------------*/ #include "typedef.h" #include "basic_op.h" #include "count.h" #include "cnst.h" #define L_CODE 64 /* codevector length */ #define NB_TRACK 2 /* number of track */ #define NB_POS 32 /* number of position */ void DEC_ACELP_2t64_fx( Word16 index, /* (i) : 12 bits index */ Word16 code[] /* (o) :Q9 algebraic (fixed) codebook excitation */ ) { Word16 i, i0, i1; for (i = 0; i < L_CODE; i++) { code[i] = 0; move16(); } /* decode the positions and signs of pulses and build the codeword */ i0 = (Word16) (shr(index, 5) & 0x003E);logic16(); i1 = (Word16) (add(shl((Word16) (index & 0x001F), 1), 1)); logic16(); test();logic16(); if ((shr(index, 6) & NB_POS) == 0) code[i0] = 512; else code[i0] = -512; test();logic16(); if ((index & NB_POS) == 0) code[i1] = 512; else code[i1] = -512; return; }