DE_ACELP.C
资源名称:G711-729.rar [点击查看]
上传用户:meifeng08
上传日期:2013-06-18
资源大小:5304k
文件大小:2k
源码类别:
语音压缩
开发平台:
C/C++
- /*
- ITU-T G.729A Speech Coder ANSI-C Source Code
- Version 1.1 Last modified: September 1996
- Copyright (c) 1996,
- AT&T, France Telecom, NTT, Universite de Sherbrooke
- All rights reserved.
- */
- /*-----------------------------------------------------------*
- * Function Decod_ACELP() *
- * ~~~~~~~~~~~~~~~~~~~~~~~ *
- * Algebraic codebook decoder. *
- *----------------------------------------------------------*/
- #include "typedef.h"
- #include "basic_op.h"
- #include "ld8a.h"
- void Decod_ACELP(
- Word16 sign, /* (i) : signs of 4 pulses. */
- Word16 index, /* (i) : Positions of the 4 pulses. */
- Word16 cod[] /* (o) Q13 : algebraic (fixed) codebook excitation */
- )
- {
- Word16 i, j;
- Word16 pos[4];
- /* Decode the positions */
- i = index & (Word16)7;
- pos[0] = add(i, shl(i, 2)); /* pos0 =i*5 */
- index = shr(index, 3);
- i = index & (Word16)7;
- i = add(i, shl(i, 2)); /* pos1 =i*5+1 */
- pos[1] = add(i, 1);
- index = shr(index, 3);
- i = index & (Word16)7;
- i = add(i, shl(i, 2)); /* pos2 =i*5+1 */
- pos[2] = add(i, 2);
- index = shr(index, 3);
- j = index & (Word16)1;
- index = shr(index, 1);
- i = index & (Word16)7;
- i = add(i, shl(i, 2)); /* pos3 =i*5+3+j */
- i = add(i, 3);
- pos[3] = add(i, j);
- /* decode the signs and build the codeword */
- for (i=0; i<L_SUBFR; i++) {
- cod[i] = 0;
- }
- for (j=0; j<4; j++)
- {
- i = sign & (Word16)1;
- sign = shr(sign, 1);
- if (i != 0) {
- cod[pos[j]] = 8191; /* Q13 +1.0 */
- }
- else {
- cod[pos[j]] = -8192; /* Q13 -1.0 */
- }
- }
- return;
- }