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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? utilcng2.c

?? 這是G.723和G.729的音頻編解碼的源代碼
?? C
字號:
/*
**
** File:        "utilcng2.c"
**
** Description:     General Comfort Noise Generation functions
**
**
** Functions:       Calc_Exc_Rand() Computes random excitation
**                                  used both by coder & decoder
**                  Qua_SidGain()   Quantization of SID gain
**                                  used by coder
**                  Dec_SidGain()   Decoding of SID gain
**                                  used both by coder & decoder
**
** Local functions :
**                  random_number()

*/
/*
    ITU-T G.723.1 Floating Point Speech Coder ANSI C Source Code.  Version 5.1F
    copyright (c) 1995, AudioCodes, DSP Group, France Telecom,
    Universite de Sherbrooke.  All rights reserved.

    Floating-point code copyright (c) 1996,
    Intel Corporation and France Telecom (CNET).
    All rights reserved.
*/

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

#include "typedef2.h"
#include "cst2.h"
#include "tab2.h"
#include "util2.h"
#include "exc2.h"
#include "utilcng2.h"

/* Declaration of local functions */
static Word16 random_number(Word16 np1, Word16 *nRandom);

/*
**
** Function:           Calc_Exc_Rand()
**
** Description:        Computation of random excitation for inactive frames:
**                     Adaptive codebook entry selected randomly
**                     Higher rate innovation pattern selected randomly
**                     Computes innovation gain to match curGain
**
** Links to text:
**
** Arguments:
**
**  FLOAT   curGain    current average gain to match
**  FLOAT   *PrevExc   previous/current excitation (updated)
**  FLOAT   *DataExc   current frame excitation
**  Word16  *nRandom   random generator status (input/output)
**  LINEDEF *Line
**
** Outputs:
**
**  FLOAT   *PrevExc
**  FLOAT   *DataExc
**  Word16  *nRandom
**  LINEDEF *Line
**
** Return value:       None
**
*/
void Calc_Exc_Rand(FLOAT curGain, FLOAT *PrevExc, FLOAT *DataExc,
                                      Word16 *nRandom, LINEDEF *Line)
{
    int     i, i_subfr, iblk;
    Word16  temp16;
    Word16  j;
    Word16  TabPos[2*NbPulsBlk], *ptr_TabPos;
    FLOAT   TabSign[2*NbPulsBlk], *ptr_TabSign;
    Word16  *ptr1;
    FLOAT   *curExc;
    FLOAT   x1, x2, ener_ltp, inter_exc, delta, b0, c;
    Word16  tmp[SubFrLen/Sgrid];
    Word16  offset[SubFrames];

    /*
     * generate LTP codes
     */
    Line->Olp[0] = random_number(21, nRandom) + 123;
    Line->Olp[1] = random_number(21, nRandom) + 123;
    for (i_subfr=0; i_subfr<SubFrames; i_subfr++) {  /* in [1, NbFilt] */
        Line->Sfs[i_subfr].AcGn = random_number(NbFilt, nRandom) + (Word16)1;
    }
    Line->Sfs[0].AcLg = 1;
    Line->Sfs[1].AcLg = 0;
    Line->Sfs[2].AcLg = 1;
    Line->Sfs[3].AcLg = 3;


    /*
     * Random innovation :
     * Selection of the grids, signs and pulse positions
     */

    /* Signs and Grids */
    ptr_TabSign = TabSign;
    ptr1 = offset;
    for (iblk=0; iblk<SubFrames/2; iblk++) {
        temp16  = random_number((Word16) (1 << (NbPulsBlk+2)), nRandom);
        *ptr1++ = (Word16) (temp16 & 0x0001);
        temp16  >>= 1;
        *ptr1++ = (Word16) (SubFrLen + (temp16 & 0x0001));
        for (i=0; i<NbPulsBlk; i++) {
            temp16 >>= 1;
            *ptr_TabSign++= (FLOAT) 2. * (FLOAT)(temp16 & 0x0001) - (FLOAT) 1.;
        }
    }

    /* Positions */
    ptr_TabPos  = TabPos;
    for (i_subfr=0; i_subfr<SubFrames; i_subfr++) {

        for (i=0; i<(SubFrLen/Sgrid); i++)
            tmp[i] = (Word16) i;
        temp16 = (SubFrLen/Sgrid);
        for (i=0; i<Nb_puls[i_subfr]; i++) {
            j = random_number(temp16, nRandom);
            *ptr_TabPos++ = (Word16) (2 * tmp[(int)j] + offset[i_subfr]);
            temp16--;
            tmp[(int)j] = tmp[(int)temp16];
        }
    }

    /*
     * Compute fixed codebook gains
     */

    ptr_TabPos = TabPos;
    ptr_TabSign = TabSign;
    curExc = DataExc;
    i_subfr = 0;
    for (iblk=0; iblk<SubFrames/2; iblk++) {

        /* decode LTP only */
        Decod_Acbk(curExc, &PrevExc[0], Line->Olp[iblk],
                    Line->Sfs[i_subfr].AcLg, Line->Sfs[i_subfr].AcGn);
        Decod_Acbk(&curExc[SubFrLen], &PrevExc[SubFrLen], Line->Olp[iblk],
            Line->Sfs[i_subfr+1].AcLg, Line->Sfs[i_subfr+1].AcGn);

        ener_ltp = DotProd(curExc, curExc, SubFrLenD);

        inter_exc = (FLOAT) 0.;
        for (i=0; i<NbPulsBlk; i++) {
            inter_exc += curExc[(int)ptr_TabPos[i]] * ptr_TabSign[i];
        }

        c = (ener_ltp - curGain * curGain * (FLOAT)SubFrLenD) * InvNbPulsBlk;

        /*
         * Solve EQ(X) = X**2 + 2 b0 X + c
         */

        b0 = inter_exc * InvNbPulsBlk;
        delta = b0 * b0 - c;

        /* Case delta <= 0 */
        if (delta <= (FLOAT) 0.) {
            x1 = - b0;
        }

        /* Case delta > 0 */
        else {
            delta = (FLOAT) sqrt(delta);
            x1 = - b0 + delta;
            x2 = b0 + delta;
            if (fabs(x2) < fabs(x1))
                x1 = - x2;
        }

        /* Update DataExc */
        if (x1 > Gexc_Max)
            x1 = Gexc_Max;
        if (x1 < -Gexc_Max)
            x1 = -Gexc_Max;

        for (i=0; i<NbPulsBlk; i++) {
            j = *ptr_TabPos++;
            curExc[(int)j] += (x1 * (*ptr_TabSign++));
        }

        for (i=0; i<SubFrLenD; i++) {
            if (curExc[i] > (FLOAT) 32766.5)
                curExc[i] = (FLOAT) 32767.0;
            else if (curExc[i] < (FLOAT) -32767.5)
                curExc[i] = (FLOAT) -32768.0;
        }

        /* update PrevExc */
        for (i=SubFrLenD; i<PitchMax; i++)
            PrevExc[i-SubFrLenD] = PrevExc[i];
        for (i=0; i<SubFrLenD; i++)
            PrevExc[i+PitchMax-SubFrLenD] = curExc[i];

        curExc += SubFrLenD;
        i_subfr += 2;

    } /* end of loop on LTP blocks */

    return;
}

/*
**
** Function:           random_number()
**
** Description:        returns a number randomly taken in [0, n]
**                     with np1 = n+1 at input
**
** Links to text:
**
** Arguments:
**
**  Word16 np1
**  Word16 *nRandom    random generator status (input/output)
**
** Outputs:
**
**  Word16 *nRandom
**
** Return value:       random number in [0, (np1-1)]
**
*/
static Word16 random_number(Word16 np1, Word16 *nRandom)
{
    Word16 temp;

    temp = (Word16) (Rand_lbc(nRandom) & 0x7FFF);
    temp = (Word16) (((Word32)temp * (Word32)np1) >> 15);
    return(temp);
}

/*
**
** Function:           Qua_SidGain()
**
** Description:        Quantization of Sid gain
**                     Pseudo-log quantizer in 3 segments
**                     1st segment : length = 16, resolution = 2
**                     2nd segment : length = 16, resolution = 4
**                     3rd segment : length = 32, resolution = 8
**                     quantizes a sum of energies
**
** Links to text:
**
** Arguments:
**
**  FLOAT  *Ener        table of the energies
**  Word16 nq           if nq >= 1 : quantization of nq energies
**                      for SID gain calculation in function Cod_Cng()
**                      if nq = 0 : in function Comp_Info(),
**                      quantization of saved estimated excitation energy
**
** Outputs:             None
**
**
** Return value:        index of quantized energy
**
*/
Word16 Qua_SidGain(FLOAT *Ener, Word16 nq)
{
    Word16  temp16, iseg, iseg_p1;
    Word32  j, j2, k, exp;
    FLOAT   temp, x, y, z;
    int     i;

    if (nq == 0) {
        /* Quantize energy saved for frame erasure case                */
        /* x = fact[0] * Ener[0] with fact[0] = 1/(2*SubFrLen)         */
        x = fact[0] * Ener[0];
    }

    else {

        /*
         * Compute weighted average of energies
         * x = fact[nq] x SUM(i=0->nq-1) Ener[i]
         * with fact[nq] =  fact_mul x fact_mul / nq x Frame
         */
        for (i=0, x=(FLOAT)0.; i<nq; i++)
            x += Ener[i];
        x *= fact[nq];
    }

    /* Quantize x */
    if (x >= bseg[2])
        return(63);

    /* Compute segment number iseg */
    if (x >= bseg[1]) {
        iseg = 2;
        exp = 4;
    }
    else {
        exp  = 3;
        if (x >= bseg[0])
            iseg = 1;
        else
            iseg = 0;
    }

    iseg_p1 = (Word16) (iseg + 1);
    j = 1 << exp;
    k = j >> 1;

    /* Binary search in segment iseg */
    for (i=0; i<exp; i++) {
        temp = base[iseg] + (FLOAT) (j << iseg_p1);
        y = temp * temp;
        if (x >= y)
            j += k;
        else
            j -= k;
        k = k >> 1;
    }

    temp = base[iseg] + (FLOAT) (j << iseg_p1);
    y =  (temp * temp) - x;
    if (y <= (FLOAT)0.0) {
        j2 = j + 1;
        temp = base[iseg] + (FLOAT) (j2 << iseg_p1);
        z = x - (temp * temp);
        if (y > z)
            temp16 = (Word16) ((iseg<<4) + j);
        else
            temp16 = (Word16) ((iseg<<4) + j2);
    }
    else {
        j2 = j - 1;
        temp = base[iseg] + (FLOAT) (j2 << iseg_p1);
        z = x - (temp * temp);
        if (y < z)
            temp16 = (Word16) ((iseg<<4) + j);
        else
            temp16 = (Word16) ((iseg<<4) + j2);
    }
    return(temp16);
}

/*
**
** Function:           Dec_SidGain()
**
** Description:        Decoding of quantized Sid gain
**                     (corresponding to sqrt of average energy)
**
** Links to text:
**
** Arguments:
**
**  Word16 iGain        index of quantized Sid Gain
**
** Outputs:             None
**
** Return value:        decoded gain value << 5
**
*/
FLOAT Dec_SidGain(Word16 iGain)
{
    Word16 i, iseg;
    FLOAT  temp;

    iseg = (Word16) (iGain >> 4);
    if (iseg == 3)
        iseg = 2;
    i = (Word16) (iGain - (iseg << 4));
    temp = base[iseg] + (FLOAT) (i << (iseg + 1));
    return(temp);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷夜色潮精品综合在线| 久久aⅴ国产欧美74aaa| 国产成人av资源| 日韩欧美资源站| 五月天欧美精品| 欧美日韩一区二区三区在线看| 国产精品毛片无遮挡高清| 国内精品久久久久影院色| 在线播放/欧美激情| 性久久久久久久久| 91麻豆精品国产91久久久资源速度| 亚洲自拍与偷拍| 精品视频在线免费| 亚洲成人在线观看视频| 欧美日韩成人一区| 日韩在线卡一卡二| 91精品国产色综合久久久蜜香臀| 天天色天天操综合| 欧美一区二区三区视频在线 | 自拍av一区二区三区| 成人美女在线观看| 综合av第一页| 色婷婷亚洲婷婷| 亚洲一区二区三区四区的 | 欧美主播一区二区三区美女| 一区二区三区精品视频在线| 欧美欧美午夜aⅴ在线观看| 久久精品国产免费看久久精品| 国产午夜精品久久久久久久 | 最好看的中文字幕久久| 欧美日韩一区精品| 国产毛片精品视频| 亚洲国产cao| 国产欧美精品一区aⅴ影院 | 欧美日韩黄色一区二区| 国产精品综合在线视频| 一区二区三区久久久| 26uuu另类欧美亚洲曰本| 91丨九色丨蝌蚪丨老版| 久久国产精品99精品国产| 亚洲欧美一区二区久久| 精品欧美一区二区久久| 在线免费视频一区二区| 国产99一区视频免费| 亚洲一区自拍偷拍| 中文字幕av不卡| **欧美大码日韩| 欧美老肥妇做.爰bbww| a4yy欧美一区二区三区| 九九国产精品视频| 亚洲国产aⅴ天堂久久| 中文字幕一区二区三区不卡在线| 日韩视频一区二区在线观看| 日本韩国欧美在线| 成人黄色小视频| 久久99精品视频| 五月天激情综合网| 亚洲乱码日产精品bd| 欧美激情中文不卡| 欧美精品一区二区三区一线天视频 | 亚洲乱码国产乱码精品精可以看| 久久这里只有精品6| 3d动漫精品啪啪1区2区免费| 在线免费精品视频| 色综合婷婷久久| 91精品国产高清一区二区三区| 波多野结衣中文字幕一区| 国产麻豆精品视频| 久久精品72免费观看| 午夜欧美视频在线观看| 一区二区三区av电影| 中文字幕在线一区| 国产精品美女视频| 国产精品你懂的在线| 欧美经典一区二区| 国产亚洲一区二区三区在线观看 | 色天天综合色天天久久| 99在线精品免费| 99精品欧美一区| 不卡一卡二卡三乱码免费网站| 国产一区二区三区免费观看| 激情久久五月天| 国产精品资源在线看| 国产麻豆午夜三级精品| 国产高清在线精品| 成人激情免费网站| 91丨porny丨首页| 91高清在线观看| 欧美久久久久中文字幕| 欧美高清视频不卡网| 日韩视频免费观看高清完整版在线观看| 91精品久久久久久久99蜜桃| 欧美xxxxx裸体时装秀| 精品sm在线观看| 国产日韩亚洲欧美综合| 一区二区中文字幕在线| 一区二区欧美国产| 香蕉加勒比综合久久| 免费高清视频精品| 国产大陆亚洲精品国产| 不卡的看片网站| 91久久国产最好的精华液| 欧美视频一区二区三区四区| 欧美精品1区2区3区| xvideos.蜜桃一区二区| 国产精品美女久久久久aⅴ| 亚洲欧美日韩一区| 首页综合国产亚洲丝袜| 激情图片小说一区| 91免费国产视频网站| 精品视频在线免费观看| 精品国产乱码久久久久久老虎| 国产精品蜜臀在线观看| 午夜电影一区二区三区| 激情六月婷婷综合| 91在线免费视频观看| 日韩一区二区三区三四区视频在线观看 | 中文在线一区二区| 亚洲国产中文字幕在线视频综合 | 欧美精品一区二区三区高清aⅴ | 777亚洲妇女| 国产欧美日韩卡一| 亚洲国产日韩在线一区模特| 激情综合色播激情啊| 在线免费不卡电影| 久久亚洲私人国产精品va媚药| 夜夜嗨av一区二区三区中文字幕| 极品美女销魂一区二区三区 | 欧美视频三区在线播放| 久久午夜国产精品| 亚洲综合激情另类小说区| 国产麻豆精品视频| 4438x成人网最大色成网站| 成人欧美一区二区三区小说| 精品一区二区三区香蕉蜜桃 | 日韩精彩视频在线观看| av在线这里只有精品| 日韩一区二区三区精品视频| 亚洲色图欧美在线| 韩国午夜理伦三级不卡影院| 欧美亚洲国产怡红院影院| 国产拍揄自揄精品视频麻豆| 全国精品久久少妇| 色猫猫国产区一区二在线视频| 国产亚洲成aⅴ人片在线观看| 日日摸夜夜添夜夜添精品视频| 91丝袜国产在线播放| 中文字幕欧美区| 国产一二精品视频| 欧美一级专区免费大片| 一级精品视频在线观看宜春院 | 中文字幕欧美激情| 国产一区二区不卡在线 | 亚洲精品在线三区| 日韩激情一区二区| 色爱区综合激月婷婷| 亚洲三级理论片| 波多野结衣视频一区| 欧美精彩视频一区二区三区| 国产在线精品一区二区三区不卡| 欧美一级艳片视频免费观看| 亚洲地区一二三色| 欧美日韩亚洲国产综合| 亚洲一区二区三区精品在线| 色噜噜狠狠成人网p站| 国产精品色呦呦| 成人黄色软件下载| 久久久www成人免费无遮挡大片| 麻豆精品视频在线| 日韩精品一区二区三区在线播放| 蜜臀精品久久久久久蜜臀| 欧美一三区三区四区免费在线看 | 精品视频一区二区不卡| 亚洲一区二区欧美| 欧美主播一区二区三区美女| 亚洲午夜av在线| 666欧美在线视频| 久久成人免费网| 久久久久久久综合日本| 国产精品99精品久久免费| 亚洲国产高清aⅴ视频| av色综合久久天堂av综合| 亚洲欧美日韩国产另类专区| 色综合久久九月婷婷色综合| 亚洲午夜一区二区| 在线播放一区二区三区| 久久99久久精品| 国产日本亚洲高清| eeuss鲁片一区二区三区在线看| 亚洲色图丝袜美腿| 欧美日韩午夜精品| 美女脱光内衣内裤视频久久网站| 欧美成人一区二区三区| 一本色道久久综合狠狠躁的推荐 | 成人欧美一区二区三区视频网页 | 国产午夜精品久久久久久免费视| 成人av在线播放网站| 亚洲影视在线播放| 欧美一级黄色录像| 高清beeg欧美|