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

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

?? decoder.cpp

?? G711語音壓縮源碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
        temp16  >>= 1;
        *ptr1++ = (short) (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] = (short) i;
        temp16 = (SubFrLen/Sgrid);
        for (i=0; i<Nb_puls[i_subfr]; i++) {
            j = random_number(temp16, nRandom);
            *ptr_TabPos++ = (short) (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);
        ener_ltp = DotProd10(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:        Get_Ind()
**
** Description:     Computes gains of the pitch postfilter.
**                  The gains are calculated using the cross correlation
**                  (forward or backward, the one with the greatest contribution)
**                  and the energy of the signal. Also, a test is performed on
**                  the prediction gain to see whether the pitch postfilter
**                  should be used or not.
**
**
**
** Links to text:   Section 3.6
**
** Arguments:
**
**  int    Ind      Pitch postfilter lag
**  float  Ten      energy of the current subframe excitation vector
**  float  Ccr      Crosscorrelation of the excitation
**  float  Enr      Energy of the (backward or forward) "delayed" excitation
**
** Outputs:     None
**
** Return value:
**
**  PFDEF
**         int      Indx    Pitch postfilter lag
**         float    Gain    Pitch postfilter gain
**         float    ScGn    Pitch postfilter scaling gain
**
*/
PFDEF CLanAudioDecoder::Get_Ind(int Ind, float Ten, float Ccr, float Enr)
{
    float  Acc0,Acc1;
    float  Exp;

    PFDEF Pf;


    Pf.Indx = Ind;

    /*  Check valid gain > 2db */

    Acc0 = (Ten * Enr)/(float)4.0;
    Acc1 = Ccr * Ccr;

    if (Acc1 > Acc0)
    {
        if (Ccr >= Enr)
            Pf.Gain = LpfConstTable[WrkRate];
        else
            Pf.Gain = (Ccr/Enr) * LpfConstTable[WrkRate];

        /*  Compute scaling gain  */

        Exp  = Ten + 2*Ccr*Pf.Gain + Pf.Gain*Pf.Gain*Enr;

        if (fabs(Exp) < (float) FLT_MIN)
            Pf.ScGn = (float)0.0;
        else
            Pf.ScGn = (float)sqrt(Ten/Exp);
    }
    else
    {
        Pf.Gain = (float)0.0;
        Pf.ScGn = (float)1.0;
    }

    Pf.Gain = Pf.Gain * Pf.ScGn;

    return Pf;
}
/*
**
** Function:        Comp_Lpf()
**
** Description:     Computes pitch postfilter parameters.
**                  The pitch postfilter lag is first derived (Find_B
**                  and Find_F). Then, the one that gives the largest
**                  contribution is used to calculate the gains (Get_Ind).
**
**
** Links to text:   Section 3.6
**
** Arguments:
**
**  float  *Buff    decoded excitation
**  int    Olp      Decoded pitch lag
**  int    Sfc      Subframe index
**
** Outputs:
**
**
** Return value:
**
**  PFDEF       Pitch postfilter parameters: PF.Gain    Pitch Postfilter gain
**                                           PF.ScGn    Pitch Postfilter scaling gain
**                                           PF.Indx    Pitch postfilter lag
*/
PFDEF CLanAudioDecoder::Comp_Lpf(float *Buff, int Olp, int Sfc)
{
    PFDEF  Pf;
    float  Lcr[5];
    int    Bindx, Findx;
    float  Acc0,Acc1;

    /*  Initialize  */

    Pf.Indx = 0;
    Pf.Gain = (float)0.0;
    Pf.ScGn = (float)1.0;

    /*  Find both indices */

    Bindx = Find_B(Buff, Olp, Sfc);
    Findx = Find_F(Buff, Olp, Sfc);

    /*  Combine the results */

    if ((Bindx==0) && (Findx==0))
        return Pf;

    /*  Compute target energy  */

//    Lcr[0] = DotProd(&Buff[PitchMax+Sfc*SubFrLen], &Buff[PitchMax+Sfc*SubFrLen],SubFrLen);
    Lcr[0] = DotProd10(&Buff[PitchMax+Sfc*SubFrLen],
                    &Buff[PitchMax+Sfc*SubFrLen],SubFrLen);

    if (Bindx != 0)
    {
//        Lcr[1] = DotProd(&Buff[PitchMax+Sfc*SubFrLen],
//                        &Buff[PitchMax+Sfc*SubFrLen+Bindx],SubFrLen);
//        Lcr[2] = DotProd(&Buff[PitchMax+Sfc*SubFrLen+Bindx],
//                        &Buff[PitchMax+Sfc*SubFrLen+Bindx],SubFrLen);
        Lcr[1] = DotProd10(&Buff[PitchMax+Sfc*SubFrLen],
                        &Buff[PitchMax+Sfc*SubFrLen+Bindx],SubFrLen);
        Lcr[2] = DotProd10(&Buff[PitchMax+Sfc*SubFrLen+Bindx],
                        &Buff[PitchMax+Sfc*SubFrLen+Bindx],SubFrLen);
    }

    if (Findx != 0)
    {
//        Lcr[3] = DotProd(&Buff[PitchMax+Sfc*SubFrLen],
//                        &Buff[PitchMax+Sfc*SubFrLen+Findx],SubFrLen);
//        Lcr[4] = DotProd(&Buff[PitchMax+Sfc*SubFrLen+Findx],
//                        &Buff[PitchMax+Sfc*SubFrLen+Findx],SubFrLen);
        Lcr[3] = DotProd10(&Buff[PitchMax+Sfc*SubFrLen],
                        &Buff[PitchMax+Sfc*SubFrLen+Findx],SubFrLen);
        Lcr[4] = DotProd10(&Buff[PitchMax+Sfc*SubFrLen+Findx],
                        &Buff[PitchMax+Sfc*SubFrLen+Findx],SubFrLen);
    }

    /*  Select the best pair  */

    if ((Bindx != 0) && (Findx == 0))
        Pf = Get_Ind(Bindx, Lcr[0], Lcr[1], Lcr[2]);

    if ((Bindx == 0) && (Findx != 0))
        Pf = Get_Ind(Findx, Lcr[0], Lcr[3], Lcr[4]);

    if ((Bindx != 0) && (Findx != 0))
    {
        Acc0 = Lcr[4] * Lcr[1] * Lcr[1];
        Acc1 = Lcr[2] * Lcr[3] * Lcr[3];
        if (Acc0 > Acc1)
            Pf = Get_Ind(Bindx, Lcr[0], Lcr[1], Lcr[2]);
        else
            Pf = Get_Ind(Findx, Lcr[0], Lcr[3], Lcr[4]);
    }

    return Pf;
}

/*
**
** Function:        Synt()
**
** Description:     Implements the decoder synthesis filter for a
**          subframe.  This is a tenth-order IIR filter.
**
** Links to text:   Section 3.7
**
** Arguments:
**
**  float  Dpnt[]       Pitch-postfiltered excitation for the current
**               subframe ppf[n] (60 words)
**  float  Lpc[]        Quantized LPC coefficients (10 words)
**
** Inputs:
**
**  DecStat.SyntIirDl[] Synthesis filter memory from previous
**               subframe (10 words)
**
** Outputs:
**
**  float  Dpnt[]       Synthesized speech vector sy[n]
**  DecStat.SyntIirDl[] Updated synthesis filter memory
**
** Return value:    None
**
*/
void CLanAudioDecoder::Synt(float *Dpnt, float *Lpc)
{
    int     i,j;
    float   Acc0;

    for (i=0 ; i < SubFrLen ; i++)
    {
//        Acc0 = Dpnt[i] + DotProd(Lpc,DecStat.SyntIirDl,LpcOrder);
        Acc0 = Dpnt[i] + DotProd10s(Lpc,DecStat.SyntIirDl);

        for (j=LpcOrder-1 ; j > 0 ; j--)
            DecStat.SyntIirDl[j] = DecStat.SyntIirDl[j-1];

        Dpnt[i] = DecStat.SyntIirDl[0] = Acc0;
    }
}

/*
**
** Function:        Spf()
**
** Description:     Implements the formant postfilter for a
**          subframe.  The formant postfilter is a
**          10-pole, 10-zero ARMA filter followed by a
**          single-tap tilt compensation filter.
**
** Links to text:   Section 3.8
**
** Arguments:
**
**  float Tv[]     Synthesized speech vector sy[n] (60 words)
**  float Lpc[]        Quantized LPC coefficients (10 words)
**  float Sen      Input speech vector energy
**
** Inputs:
**
**  DecStat.PostIirDl[] Postfilter IIR memory from previous subframe (10 words)
**  DecStat.PostFirDl[] Postfilter FIR memory from previous subframe (10 words)
**  DecStat.Park        Previous value of compensation filter parameter
**
** Outputs:
**
**  float Tv[]     Postfiltered speech vector pf[n] (60 words)
**  DecStat.PostIirDl[] Updated postfilter IIR memory
**  DecStat.PostFirDl[] Updated postfilter FIR memory
**  DecStat.Park        Updated compensation filter parameter
**
** Return value:    None
**
*/
float  CLanAudioDecoder::Spf(float *Tv, float *Lpc)
{
    int    i,j;

    float  Acc0, Acc1;
    float  Sen;
    float  Tmp;
    float  FirCoef[LpcOrder];
    float  IirCoef[LpcOrder];

    /*
     * Compute ARMA coefficients.  Compute the jth FIR coefficient by
     * multiplying the jth quantized LPC coefficient by (0.65)^j.
     * Compute the jth IIR coefficient by multiplying the jth quantized
     * LPC coefficient by (0.75)^j.  This emphasizes the formants in
     * the frequency response.
     */

    for (i=0; i < LpcOrder; i++)
    {
        FirCoef[i] = Lpc[i]*PostFiltZeroTable[i];
        IirCoef[i] = Lpc[i]*PostFiltPoleTable[i];
    }

    /* Compute the first two autocorrelation coefficients R[0] and R[1] */

    Acc0 = DotProd(Tv,&Tv[1],SubFrLen-1);
//    Acc1 = DotProd(Tv,Tv,SubFrLen);
    Acc1 = DotProd10(Tv,Tv,SubFrLen);

    /* energy */
    Sen = Acc1;

    /*
     * Compute the first-order partial correlation coefficient of the
     * input speech vector.
     */

    if (Acc1 > (float) FLT_MIN)
        Tmp = Acc0/Acc1;
    else
        Tmp = (float)0.0;

    /* Update the parkor memory */

    DecStat.Park = (((float)0.75)*DecStat.Park + ((float)0.25)*Tmp);
    Tmp = DecStat.Park*PreCoef;

    /* Do the formant post filter */

    for (i=0; i<SubFrLen; i++)
    {
        /* FIR Filter */

//        Acc0 = Tv[i] - DotProd(FirCoef,DecStat.PostFirDl,LpcOrder);
        Acc0 = Tv[i] - DotProd10s(FirCoef,DecStat.PostFirDl);

        for (j=LpcOrder-1; j > 0; j--)
            DecStat.PostFirDl[j] = DecStat.PostFirDl[j-1];

        DecStat.PostFirDl[0] = Tv[i];

        /* IIR Filter */

//        Acc0 += DotProd(IirCoef,DecStat.PostIirDl,LpcOrder);
        Acc0 += DotProd10s(IirCoef,DecStat.PostIirDl);

        for (j=LpcOrder-1; j > 0; j--)
            DecStat.PostIirDl[j] = DecStat.PostIirDl[j-1];

        DecStat.PostIirDl[0] = Acc0;

        /* Preemphasis */

        Tv[i] = Acc0 + DecStat.PostIirDl[1] * Tmp;

    }
    return Sen;
}

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

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久新电视剧免费观看| 欧美日韩在线三级| 中文无字幕一区二区三区 | 成人一区二区三区视频在线观看| 亚洲精品在线观| 成av人片一区二区| 一级中文字幕一区二区| 欧美电影影音先锋| 狠狠色狠狠色综合| 亚洲天天做日日做天天谢日日欢 | 亚洲欧洲日韩女同| 一本色道综合亚洲| 美女爽到高潮91| 亚洲欧美一区二区在线观看| 在线观看三级视频欧美| 日本亚洲视频在线| 国产精品私房写真福利视频| 欧美日韩亚洲国产综合| 国产一区亚洲一区| 亚洲综合色在线| 久久久91精品国产一区二区精品| 99久精品国产| 久久av老司机精品网站导航| 中文字幕一区二区不卡 | 国产精品亚洲专一区二区三区 | 国产欧美日韩另类视频免费观看 | 国产精品一区在线观看你懂的| 一区在线观看视频| 精品剧情在线观看| 91麻豆国产香蕉久久精品| 日本不卡123| 亚洲视频狠狠干| 精品成人私密视频| 欧美性xxxxxxxx| 国产精品77777竹菊影视小说| 亚洲制服丝袜av| 国产精品乱码一区二三区小蝌蚪| 欧美日韩国产乱码电影| www.色综合.com| 精品亚洲国产成人av制服丝袜 | 精品日韩一区二区三区| 在线一区二区观看| 国产成人av电影在线| 日韩电影在线看| 亚洲精品第一国产综合野| 久久欧美一区二区| 91精品在线麻豆| 欧美在线一二三| jvid福利写真一区二区三区| 国产精品一区二区免费不卡 | 成人欧美一区二区三区视频网页| 精品少妇一区二区三区免费观看 | 555夜色666亚洲国产免| 99re成人精品视频| 成人美女在线观看| 精品一区二区三区视频在线观看| 亚洲国产精品嫩草影院| 综合在线观看色| 国产精品麻豆一区二区| 国产精品午夜免费| 欧美国产综合一区二区| 国产日产欧美一区二区三区 | 亚洲欧洲国产专区| 国产日韩欧美麻豆| 久久九九99视频| 26uuu成人网一区二区三区| 日韩视频一区二区三区| 欧美日韩另类国产亚洲欧美一级| 欧美在线你懂得| 欧洲av在线精品| 欧美日韩一本到| 欧美狂野另类xxxxoooo| 欧美高清hd18日本| 91精品国产综合久久久久久久久久| 欧美性猛片aaaaaaa做受| 欧美色手机在线观看| 欧美午夜精品理论片a级按摩| 在线观看亚洲精品| 国产精品美女www爽爽爽| 欧洲av一区二区嗯嗯嗯啊| 暴力调教一区二区三区| 国产iv一区二区三区| 成人在线综合网| 99久久国产免费看| 欧美性xxxxxxxx| 欧美一区二区久久| 精品国产乱码久久久久久牛牛| 精品成人一区二区三区四区| 国产日韩欧美高清| 亚洲欧美成人一区二区三区| 夜夜嗨av一区二区三区中文字幕| 亚洲成人综合在线| 毛片av一区二区三区| 国产成人在线影院 | 国产传媒日韩欧美成人| av亚洲精华国产精华精华| 在线精品国精品国产尤物884a| 5858s免费视频成人| 精品av久久707| 国产精品高潮久久久久无| 亚洲一区在线观看免费| 欧美剧情片在线观看| 欧美在线free| 欧美一二三四在线| 国产亚洲1区2区3区| 亚洲精品欧美二区三区中文字幕| 午夜欧美视频在线观看| 国产成人在线影院| 欧美三级资源在线| 国产日韩欧美精品一区| 亚洲午夜精品17c| 国产精品99久久久久久似苏梦涵 | 欧美一卡二卡在线观看| 中文成人av在线| 日韩精品午夜视频| 国产91精品免费| 7777精品久久久大香线蕉| 国产欧美精品日韩区二区麻豆天美| 亚洲一区二区精品久久av| 国产精品系列在线观看| 51精品久久久久久久蜜臀| 国产精品久久久爽爽爽麻豆色哟哟| 天堂午夜影视日韩欧美一区二区| 懂色一区二区三区免费观看| 精品污污网站免费看| 中文在线免费一区三区高中清不卡| 五月天精品一区二区三区| 不卡的av中国片| 久久久久久毛片| 日韩1区2区3区| 在线日韩av片| 国产精品短视频| 国产伦精一区二区三区| 欧美浪妇xxxx高跟鞋交| 一区二区三区中文字幕电影 | 一区二区三区鲁丝不卡| 国产不卡视频在线播放| 欧美一级一区二区| 亚洲国产乱码最新视频| 色哟哟在线观看一区二区三区| 久久久一区二区三区捆绑**| 婷婷综合在线观看| 色综合久久久久综合| 欧美激情一区在线| 国产美女av一区二区三区| 日韩视频免费观看高清完整版 | 91免费在线视频观看| 久久久久久久综合狠狠综合| 美女精品自拍一二三四| 欧美日韩午夜精品| 亚洲成人在线网站| 在线观看视频一区二区欧美日韩 | 天天免费综合色| 在线免费亚洲电影| 亚洲精品国产一区二区三区四区在线| 国产a精品视频| 欧美激情一二三区| 成人在线综合网| 国产精品久久777777| heyzo一本久久综合| 亚洲视频一区二区免费在线观看| 成人精品免费看| 中文字幕一区二区三| 91免费视频观看| 亚洲黄色性网站| 欧美视频一区在线| 日韩电影一二三区| 欧美刺激脚交jootjob| 久久成人羞羞网站| 国产亚洲精品久| 成人av午夜影院| 亚洲天堂精品视频| 欧美性色aⅴ视频一区日韩精品| 亚洲国产精品一区二区www| 69久久夜色精品国产69蝌蚪网| 日韩中文欧美在线| 精品国产免费一区二区三区四区| 极品尤物av久久免费看| 国产午夜精品美女毛片视频| 丁香天五香天堂综合| 亚洲品质自拍视频| 欧美日韩精品一区二区三区| 日本视频中文字幕一区二区三区 | 国产精品大尺度| 欧美性大战久久久久久久蜜臀| 丝袜诱惑亚洲看片| 2014亚洲片线观看视频免费| 懂色一区二区三区免费观看| 一区二区三区在线免费观看| 欧美一区二区免费观在线| 高清国产一区二区| 亚洲欧美aⅴ...| 日韩一区二区电影在线| 国产一区二区三区免费在线观看| 中文字幕一区二区日韩精品绯色| 欧美日韩国产欧美日美国产精品| 激情五月播播久久久精品| 日韩伦理免费电影| 日韩一区二区在线观看| 大白屁股一区二区视频|