亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? calcexc.c

?? G.729 coder and decoder, ANSI C, for windows, unix, DSP, etc.
?? C
字號:
/*
   ITU-T G.729 Annex B     ANSI-C Source Code
   Version 1.3    Last modified: August 1997

   Copyright (c) 1996, France Telecom, Rockwell International,
                       Universite de Sherbrooke.
   All rights reserved.
*/

/* Computation of Comfort Noise excitation             */

#include <stdio.h>
#include <stdlib.h>

#include "typedef.h"
#include "ld8k.h"
#include "dtx.h"
#include "basic_op.h"
#include "oper_32b.h"


/* Local functions */
static Word16 Gauss(Word16 *seed);
static Word16 Sqrt( Word32 Num);

/*-----------------------------------------------------------*
 * procedure Calc_exc_rand                                   *
 *           ~~~~~~~~~~~~~                                   *
 *   Computes comfort noise excitation                       *
 *   for SID and not-transmitted frames                      *
 *-----------------------------------------------------------*/
void Calc_exc_rand(
  Word16 cur_gain,      /* (i)   :   target sample gain                 */
  Word16 *exc,          /* (i/o) :   excitation array                   */
  Word16 *seed,         /* (i)   :   current Vad decision               */
  Flag flag_cod         /* (i)   :   encoder/decoder flag               */
)
{
  Word16 i, j, i_subfr;
  Word16 temp1, temp2;
  Word16 pos[4];
  Word16 sign[4];
  Word16 t0, frac;
  Word16 *cur_exc;
  Word16 g, Gp, Gp2;
  Word16 excg[L_SUBFR], excs[L_SUBFR];
  Word32 L_acc, L_ener, L_k;
  Word16 max, hi, lo, inter_exc;
  Word16 sh;
  Word16 x1, x2;
  
  if(cur_gain == 0) {

    for(i=0; i<L_FRAME; i++) {
      exc[i] = 0;
    }
    Gp = 0;
    t0 = add(L_SUBFR,1);
    for (i_subfr = 0;  i_subfr < L_FRAME; i_subfr += L_SUBFR) {
      if(flag_cod != FLAG_DEC) update_exc_err(Gp, t0);
    }

    return;
  }

  
  
  /* Loop on subframes */
  
  cur_exc = exc;
  
  for (i_subfr = 0;  i_subfr < L_FRAME; i_subfr += L_SUBFR) {

    /* generate random adaptive codebook & fixed codebook parameters */
    /*****************************************************************/
    temp1 = Random(seed);
    frac = sub((temp1 & (Word16)0x0003), 1);
    if(sub(frac, 2) == 0) frac = 0;
    temp1 = shr(temp1, 2);
    t0 = add((temp1 & (Word16)0x003F), 40);
    temp1 = shr(temp1, 6);
    temp2 = temp1 & (Word16)0x0007;
    pos[0] = add(shl(temp2, 2), temp2); /* 5 * temp2 */
    temp1 = shr(temp1, 3);
    sign[0] = temp1 & (Word16)0x0001;
    temp1 = shr(temp1, 1);
    temp2 = temp1 & (Word16)0x0007;
    temp2 = add(shl(temp2, 2), temp2);
    pos[1] = add(temp2, 1);     /* 5 * x + 1 */
    temp1 = shr(temp1, 3);
    sign[1] = temp1 & (Word16)0x0001;
    temp1 = Random(seed);
    temp2 = temp1 & (Word16)0x0007;
    temp2 = add(shl(temp2, 2), temp2);
    pos[2] = add(temp2, 2);     /* 5 * x + 2 */
    temp1 = shr(temp1, 3);
    sign[2] = temp1 & (Word16)0x0001;
    temp1 = shr(temp1, 1);
    temp2 = temp1 & (Word16)0x000F;
    pos[3] = add((temp2 & (Word16)1), 3); /* j+3*/
    temp2 = (shr(temp2, 1)) & (Word16)7;
    temp2 = add(shl(temp2, 2), temp2); /* 5i */
    pos[3] = add(pos[3], temp2);
    temp1 = shr(temp1, 4);
    sign[3] = temp1 & (Word16)0x0001;
    Gp = Random(seed) & (Word16)0x1FFF; /* < 0.5 Q14 */
    Gp2 = shl(Gp, 1);           /* Q15 */


    /* Generate gaussian excitation */
    /********************************/
    L_acc = 0L;
    for(i=0; i<L_SUBFR; i++) {
      temp1 = Gauss(seed);
      L_acc = L_mac(L_acc, temp1, temp1);
      excg[i] = temp1;
    }

/*
    Compute fact = alpha x cur_gain * sqrt(L_SUBFR / Eg)
    with Eg = SUM(i=0->39) excg[i]^2
    and alpha = 0.5
    alpha x sqrt(L_SUBFR)/2 = 1 + FRAC1
*/
    L_acc = Inv_sqrt(L_shr(L_acc,1));  /* Q30 */
    L_Extract(L_acc, &hi, &lo);
    /* cur_gain = cur_gainR << 3 */
    temp1 = mult_r(cur_gain, FRAC1);
    temp1 = add(cur_gain, temp1);
    /* <=> alpha x cur_gainR x 2^2 x sqrt(L_SUBFR) */

    L_acc = Mpy_32_16(hi, lo, temp1);   /* fact << 17 */
    sh = norm_l(L_acc);
    temp1 = extract_h(L_shl(L_acc, sh));  /* fact << (sh+1) */

    sh = sub(sh, 14);
    for(i=0; i<L_SUBFR; i++) {
      temp2 = mult_r(excg[i], temp1);
      temp2 = shr_r(temp2, sh);   /* shl if sh < 0 */
      excg[i] = temp2;
    }

    /* generate random  adaptive excitation */
    /****************************************/
    Pred_lt_3(cur_exc, t0, frac, L_SUBFR);


    /* compute adaptive + gaussian exc -> cur_exc */
    /**********************************************/
    max = 0;
    for(i=0; i<L_SUBFR; i++) {
      temp1 = mult_r(cur_exc[i], Gp2);
      temp1 = add(temp1, excg[i]); /* may overflow */
      cur_exc[i] = temp1;
      temp1 = abs_s(temp1);
      if(sub(temp1,max) > 0) max = temp1;
    }

    /* rescale cur_exc -> excs */
    if(max == 0) sh = 0;
    else {
      sh = sub(3, norm_s(max));
      if(sh <= 0) sh = 0;
    }
    for(i=0; i<L_SUBFR; i++) {
      excs[i] = shr(cur_exc[i], sh);
    }

    /* Compute fixed code gain */
    /***************************/

    /**********************************************************/
    /*** Solve EQ(X) = 4 X**2 + 2 b X + c                     */
    /**********************************************************/

    L_ener = 0L;
    for(i=0; i<L_SUBFR; i++) {
      L_ener = L_mac(L_ener, excs[i], excs[i]);
    } /* ener x 2^(-2sh + 1) */

    /* inter_exc = b >> sh */
    inter_exc = 0;
    for(i=0; i<4; i++) {
      j = pos[i];
      if(sign[i] == 0) {
        inter_exc = sub(inter_exc, excs[j]);
      }
      else {
        inter_exc = add(inter_exc, excs[j]);
      }
    }

    /* Compute k = cur_gainR x cur_gainR x L_SUBFR */
    L_acc = L_mult(cur_gain, L_SUBFR);
    L_acc = L_shr(L_acc, 6);
    temp1 = extract_l(L_acc);   /* cur_gainR x L_SUBFR x 2^(-2) */
    L_k   = L_mult(cur_gain, temp1); /* k << 2 */
    temp1 = add(1, shl(sh,1));
    L_acc = L_shr(L_k, temp1);  /* k x 2^(-2sh+1) */

    /* Compute delta = b^2 - 4 c */
    L_acc = L_sub(L_acc, L_ener); /* - 4 c x 2^(-2sh-1) */
    inter_exc = shr(inter_exc, 1);
    L_acc = L_mac(L_acc, inter_exc, inter_exc); /* 2^(-2sh-1) */
    sh = add(sh, 1);
    /* inter_exc = b x 2^(-sh) */
    /* L_acc = delta x 2^(-2sh+1) */

    if(L_acc < 0) {

      /* adaptive excitation = 0 */
      Copy(excg, cur_exc, L_SUBFR);
      temp1 = abs_s(excg[(int)pos[0]]) | abs_s(excg[(int)pos[1]]);
      temp2 = abs_s(excg[(int)pos[2]]) | abs_s(excg[(int)pos[3]]);
      temp1 = temp1 | temp2;
      sh = ((temp1 & (Word16)0x4000) == 0) ? (Word16)1 : (Word16)2;
      inter_exc = 0;
      for(i=0; i<4; i++) {
        temp1 = shr(excg[(int)pos[i]], sh);
        if(sign[i] == 0) {
          inter_exc = sub(inter_exc, temp1);
        }
        else {
          inter_exc = add(inter_exc, temp1);
        }
      } /* inter_exc = b >> sh */
      L_Extract(L_k, &hi, &lo);
      L_acc = Mpy_32_16(hi, lo, K0); /* k x (1- alpha^2) << 2 */
      temp1 = sub(shl(sh, 1), 1); /* temp1 > 0 */
      L_acc = L_shr(L_acc, temp1); /* 4k x (1 - alpha^2) << (-2sh+1) */
      L_acc = L_mac(L_acc, inter_exc, inter_exc); /* delta << (-2sh+1) */
      Gp = 0;
    }

    temp2 = Sqrt(L_acc);        /* >> sh */
    x1 = sub(temp2, inter_exc);
    x2 = negate(add(inter_exc, temp2)); /* x 2^(-sh+2) */
    if(sub(abs_s(x2),abs_s(x1)) < 0) x1 = x2;
    temp1 = sub(2, sh);
    g = shr_r(x1, temp1);       /* shl if temp1 < 0 */
    if(g >= 0) {
      if(sub(g, G_MAX) > 0) g = G_MAX;
    }
    else {
      if(add(g, G_MAX) < 0) g = negate(G_MAX);
    }

    /* Update cur_exc with ACELP excitation */
    for(i=0; i<4; i++) {
      j = pos[i];
      if(sign[i] != 0) {
        cur_exc[j] = add(cur_exc[j], g);
      }
      else {
        cur_exc[j] = sub(cur_exc[j], g);
      }
    }

    if(flag_cod != FLAG_DEC) update_exc_err(Gp, t0);

    cur_exc += L_SUBFR;


  } /* end of loop on subframes */
  
  return;
}

/*-----------------------------------------------------------*
 *         Local procedures                                  *
 *         ~~~~~~~~~~~~~~~~                                  *
 *-----------------------------------------------------------*/

/* Gaussian generation */
/***********************/
static Word16 Gauss(Word16 *seed)
{

/****  Xi = uniform v.a. in [-32768, 32767]       ****/
/****  Z = SUM(i=1->12) Xi / 2 x 32768 is N(0,1)  ****/
/****  output : Z x 512 < 2^12                    ****/

  Word16 i;
  Word16 temp;
  Word32 L_acc;
  
  L_acc = 0L;
  for(i=0; i<12; i++) {
    L_acc = L_add(L_acc, L_deposit_l(Random(seed)));
  }
  L_acc = L_shr(L_acc, 7);
  temp = extract_l(L_acc);
  return(temp);
}

/* Square root function : returns sqrt(Num/2) */
/**********************************************/
static Word16   Sqrt( Word32 Num )
{
  Word16   i  ;
  
  Word16   Rez = (Word16) 0 ;
  Word16   Exp = (Word16) 0x4000 ;
  
  Word32   Acc, L_temp;
  
  for ( i = 0 ; i < 14 ; i ++ ) {
    Acc = L_mult(add(Rez, Exp), add(Rez, Exp) );
    L_temp = L_sub(Num, Acc);
    if(L_temp >= 0L) Rez = add( Rez, Exp);
    Exp = shr( Exp, (Word16) 1 ) ;
  }
  return Rez ;
}





 
    





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产影片| 国产精品激情偷乱一区二区∴| 精品久久国产97色综合| 亚洲三级久久久| 国产福利91精品| 欧美日产国产精品| 亚洲欧美日韩久久| 国产不卡视频在线观看| 777xxx欧美| 一区二区三区在线观看欧美| 国产成人午夜电影网| 欧美一级夜夜爽| 亚洲国产欧美一区二区三区丁香婷| 国产一区二区成人久久免费影院| 欧美日韩视频不卡| 一区二区三区在线观看视频| 成人黄色在线看| 久久精品欧美日韩| 精品一区二区三区在线观看| 日韩一区二区三区电影| 亚洲成av人片一区二区| 色偷偷88欧美精品久久久 | 国产一区二区久久| 91.麻豆视频| 午夜视频一区二区三区| 欧美羞羞免费网站| 亚洲九九爱视频| 一本大道av伊人久久综合| 免费在线观看成人| 6080午夜不卡| 麻豆成人av在线| 精品国产乱码久久久久久牛牛 | 91精品国产综合久久香蕉的特点| 亚洲一区二区欧美日韩| 欧美中文字幕一区二区三区亚洲| 中文字幕中文乱码欧美一区二区| 成人午夜伦理影院| 亚洲男人天堂av| 欧美三级三级三级| 视频一区视频二区在线观看| 欧美日本韩国一区| 天天免费综合色| 精品少妇一区二区三区免费观看| 久久精品国产秦先生| 久久婷婷色综合| 成人av网址在线| 亚洲制服丝袜在线| 欧美二区三区的天堂| 久久99精品一区二区三区三区| 精品国产91亚洲一区二区三区婷婷| 极品美女销魂一区二区三区| 国产亚洲精品aa| 99精品视频在线观看免费| 亚洲成在人线免费| 日韩欧美三级在线| 高清成人免费视频| 亚洲最大成人综合| 欧美不卡在线视频| 成人国产电影网| 午夜国产精品一区| 国产精品一区二区免费不卡| av在线播放不卡| 午夜成人在线视频| 国产亚洲欧美一级| 色吊一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品日韩av一区二区| 99精品视频在线观看免费| 亚洲国产另类精品专区| 欧美刺激午夜性久久久久久久| 国产成人午夜精品影院观看视频| 亚洲精品视频一区| 日韩亚洲国产中文字幕欧美| 国产激情偷乱视频一区二区三区 | 国产精品自在在线| 伊人一区二区三区| 精品国产a毛片| 色天使色偷偷av一区二区| 美女任你摸久久| 一区二区三区国产| 欧美国产日本韩| 欧美精品久久一区| 97久久精品人人澡人人爽| 免费高清不卡av| 亚洲国产精品天堂| 国产精品乱码一区二区三区软件 | 成人aaaa免费全部观看| 日韩高清一区在线| 亚洲色图都市小说| 精品盗摄一区二区三区| 欧美三区免费完整视频在线观看| 国产精品亚洲综合一区在线观看| 亚洲成人自拍网| 中文字幕在线视频一区| 精品久久久久久久人人人人传媒| 欧洲一区二区av| 91蝌蚪porny成人天涯| 国产高清成人在线| 激情av综合网| 久久av资源站| 蜜臀av国产精品久久久久| 亚洲第一激情av| 亚洲最新视频在线观看| 亚洲精品精品亚洲| 亚洲欧美在线aaa| 亚洲国产精品t66y| 国产亚洲精品超碰| 国产日韩欧美精品在线| 久久久午夜精品理论片中文字幕| 欧美一级欧美三级| 日韩一级完整毛片| 91精品在线一区二区| 6080日韩午夜伦伦午夜伦| 欧美剧情片在线观看| 欧美日韩专区在线| 欧美三级电影一区| 5858s免费视频成人| 日韩三级精品电影久久久 | 欧美在线制服丝袜| 欧美性大战久久| 欧美视频一区二区三区| 欧美日韩性生活| 日韩一区二区三区免费观看| 精品久久一区二区三区| 久久久久久久久久看片| 中文字幕乱码一区二区免费| 一色桃子久久精品亚洲| 亚洲你懂的在线视频| 亚洲精品久久久蜜桃| 亚洲va欧美va人人爽午夜 | 欧美一二三区在线| 91精品国产综合久久蜜臀| 日韩亚洲欧美成人一区| 久久久噜噜噜久久人人看| 欧美高清一级片在线观看| 亚洲情趣在线观看| 亚洲v日本v欧美v久久精品| 日本不卡一二三区黄网| 国产精品 欧美精品| 91在线小视频| 日韩一区二区在线免费观看| 久久精品一区四区| 亚洲免费观看在线视频| 日日夜夜免费精品| 国产精品77777| 色噜噜狠狠成人中文综合| 欧美一级理论片| 国产精品传媒入口麻豆| 午夜欧美大尺度福利影院在线看| 美女视频黄 久久| 91亚洲国产成人精品一区二区三| 欧美嫩在线观看| 欧美国产日韩a欧美在线观看| 一区二区成人在线| 国产伦理精品不卡| 日本高清视频一区二区| 精品久久久久久综合日本欧美| 国产精品白丝在线| 韩国三级在线一区| 欧美另类变人与禽xxxxx| 国产欧美日韩在线视频| 日日嗨av一区二区三区四区| 99久久伊人网影院| 欧美大白屁股肥臀xxxxxx| 自拍偷拍国产精品| 国产一区二区三区在线观看免费 | 欧美日韩高清一区| 国产精品视频免费| 理论电影国产精品| 欧美在线看片a免费观看| 日本一区二区三区四区| 日本一不卡视频| 欧美性受xxxx黑人xyx| 国产精品美女久久久久aⅴ| 麻豆freexxxx性91精品| 在线亚洲精品福利网址导航| 久久精品人人做人人综合| 日韩黄色片在线观看| 色综合网色综合| 中文一区一区三区高中清不卡| 日本视频一区二区| 欧美日韩在线一区二区| 亚洲色图20p| av亚洲精华国产精华| 亚洲国产电影在线观看| 韩日av一区二区| 日韩精品一区二区三区视频播放| 亚洲一区二区三区免费视频| 91色porny在线视频| 国产精品久久一卡二卡| 国产电影一区在线| 精品国产在天天线2019| 秋霞午夜鲁丝一区二区老狼| 欧美三级一区二区| 亚洲一区二区欧美| 精品视频123区在线观看| 五月天激情综合网| 欧美日韩视频在线观看一区二区三区 | 在线亚洲免费视频| 亚洲综合在线免费观看|