⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 taming.c

📁 C源程序---G.729a语音代码G.729a语音代码
💻 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.*//************************************************************************** * Taming functions.                                                      * **************************************************************************/#include "typedef.h"#include "basic_op.h"#include "oper_32b.h"#include "ld8a.h"#include "tab_ld8a.h"static Word32 L_exc_err[4];void Init_exc_err(void){  Word16 i;  for(i=0; i<4; i++) L_exc_err[i] = 0x00004000L;   /* Q14 */}/************************************************************************** * routine test_err - computes the accumulated potential error in the     * * adaptive codebook contribution                                         * **************************************************************************/Word16 test_err(  /* (o) flag set to 1 if taming is necessary  */ Word16 T0,       /* (i) integer part of pitch delay           */ Word16 T0_frac   /* (i) fractional part of pitch delay        */) {    Word16 i, t1, zone1, zone2, flag;    Word32 L_maxloc, L_acc;    if(T0_frac > 0) {        t1 = add(T0, 1);    }    else {        t1 = T0;    }    i = sub(t1, (L_SUBFR+L_INTER10));    if(i < 0) {        i = 0;    }    zone1 = tab_zone[i];    i = add(t1, (L_INTER10 - 2));    zone2 = tab_zone[i];    L_maxloc = -1L;    flag = 0 ;    for(i=zone2; i>=zone1; i--) {        L_acc = L_sub(L_exc_err[i], L_maxloc);        if(L_acc > 0L) {                L_maxloc = L_exc_err[i];        }    }    L_acc = L_sub(L_maxloc, L_THRESH_ERR);    if(L_acc > 0L) {        flag = 1;    }    return(flag);}/************************************************************************** *routine update_exc_err - maintains the memory used to compute the error * * function due to an adaptive codebook mismatch between encoder and      * * decoder                                                                * **************************************************************************/void update_exc_err( Word16 gain_pit,      /* (i) pitch gain */ Word16 T0             /* (i) integer part of pitch delay */) {    Word16 i, zone1, zone2, n;    Word32 L_worst, L_temp, L_acc;    Word16 hi, lo;    L_worst = -1L;    n = sub(T0, L_SUBFR);    if(n < 0) {        L_Extract(L_exc_err[0], &hi, &lo);        L_temp = Mpy_32_16(hi, lo, gain_pit);        L_temp = L_shl(L_temp, 1);        L_temp = L_add(0x00004000L, L_temp);        L_acc = L_sub(L_temp, L_worst);        if(L_acc > 0L) {                L_worst = L_temp;        }        L_Extract(L_temp, &hi, &lo);        L_temp = Mpy_32_16(hi, lo, gain_pit);        L_temp = L_shl(L_temp, 1);        L_temp = L_add(0x00004000L, L_temp);        L_acc = L_sub(L_temp, L_worst);        if(L_acc > 0L) {                L_worst = L_temp;        }    }    else {        zone1 = tab_zone[n];        i = sub(T0, 1);        zone2 = tab_zone[i];        for(i = zone1; i <= zone2; i++) {                L_Extract(L_exc_err[i], &hi, &lo);                L_temp = Mpy_32_16(hi, lo, gain_pit);                L_temp = L_shl(L_temp, 1);                L_temp = L_add(0x00004000L, L_temp);                L_acc = L_sub(L_temp, L_worst);                if(L_acc > 0L) L_worst = L_temp;        }    }    for(i=3; i>=1; i--) {        L_exc_err[i] = L_exc_err[i-1];    }    L_exc_err[0] = L_worst;    return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -