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

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

?? cod_cng.c

?? 本源代碼包含了各種聲音
?? C
字號:
/*
**
** File:            "cod_cng.c"
**
** Description:     Comfort noise generation
**                  performed at the encoder part
**
** Functions:       Init_Cod_Cng()
**                  Cod_Cng()
**                  Update_Cng()
**
** Local functions:
**                  ComputePastAvFilter()
**                  CalcRC()
**                  LpcDiff()
**
**
*/
/*
    ITU-T G.723 Speech Coder   ANSI-C Source Code     Version 5.00
    copyright (c) 1995, AudioCodes, DSP Group, France Telecom,
    Universite de Sherbrooke.  All rights reserved.
*/

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

#include "typedef.h"
#include "cst_lbc.h"
#include "tab_lbc.h"
#include "util_lbc.h"
#include "basop.h"
#include "lsp.h"
#include "lpc.h"
#include "util_cng.h"
#include "cod_cng.h"
#include "vad.h"
#include "coder.h"
/* Declaration of local functions */
static void ComputePastAvFilter(Word16 *Coeff);
static void CalcRC(Word16 *Coeff, Word16 *RC, Word16 *shRC);
static Flag LpcDiff(Word16 *RC, Word16 shRC, Word16 *Acf, Word16 alpha);

/* Global Variables */
CODCNGDEF CodCng;

/*
**
** Function:        Init_Cod_Cng()
**
** Description:     Initialize Cod_Cng static variables
**
** Links to text:
**
** Arguments:       None
**
** Outputs:         None
**
** Return value:    None
**
*/
void Init_Cod_Cng(void)
{
    int i;

    CodCng.CurGain = 0;

    for(i=0; i< SizAcf; i++) CodCng.Acf[i] = 0;

    for(i=0; i <= NbAvAcf; i++) CodCng.ShAcf[i] = 40;

    for(i=0; i < LpcOrder; i++) CodCng.SidLpc[i] = 0;

    CodCng.PastFtyp = 1;

    CodCng.RandSeed = 12345;

    return;
}


/*
**
** Function:           Cod_Cng()
**
** Description:        Computes Ftyp for inactive frames
**                              0  :  for untransmitted frames
**                              2  :  for SID frames
**                     Computes current frame excitation
**                     Computes current frame LSPs
**                     Computes the coded parameters of SID frames
**
** Links to text:
**
** Arguments:
**
**  Word16 *DataExc    Current frame synthetic excitation
**  Word16 *Ftyp     Characterizes the frame type for CNG
**  LINEDEF *Line      Quantized parameters (used for SID frames)
**  Word16 *QntLpc     Interpolated frame LPC coefficients
**
** Outputs:
**
**  Word16 *DataExc
**  Word16 *Ftyp
**  LINEDEF *Line
**  Word16 *QntLpc
**
** Return value:       None
**
*/
void Cod_Cng(Word16 *DataExc, Word16 *Ftyp, LINEDEF *Line, Word16 *QntLpc)
{


    Word16 curCoeff[LpcOrder];
    Word16 curQGain;
    Word16 temp;
    int i;

 /*
  * Update Ener
  */
    for(i=NbAvGain-1; i>=1; i--) {
        CodCng.Ener[i] = CodCng.Ener[i-1];
    }

 /*
  * Compute LPC filter of present frame
  */
    CodCng.Ener[0] = Durbin(curCoeff, &CodCng.Acf[1], CodCng.Acf[0], &temp);

 /*
  * if first frame of silence => SID frame
  */
    if(CodCng.PastFtyp == 1) {
        *Ftyp = 2;
        CodCng.NbEner = 1;
        curQGain = Qua_SidGain(CodCng.Ener, CodCng.ShAcf, CodCng.NbEner);
    }

    else {
        CodCng.NbEner++;
        if(CodCng.NbEner > NbAvGain) CodCng.NbEner = NbAvGain;
        curQGain = Qua_SidGain(CodCng.Ener, CodCng.ShAcf, CodCng.NbEner);

 /*
  * Compute stationarity of current filter
  * versus reference filter
  */
        if(LpcDiff(CodCng.RC, CodCng.ShRC, CodCng.Acf, *CodCng.Ener) == 0) {
            /* transmit SID frame */
            *Ftyp = 2;
        }
        else {
            temp = abs_s(sub(curQGain, CodCng.IRef));
            if(temp > ThreshGain) {
                *Ftyp = 2;
            }
            else {
                /* no transmission */
                *Ftyp = 0;
            }
        }
    }

 /*
  * If SID frame : Compute SID filter
  */
    if(*Ftyp == 2) {

 /*
  * Evaluates local stationnarity :
  * Computes difference between current filter and past average filter
  * if signal not locally stationary SID filter = current filter
  * else SID filter = past average filter
  */
        /* Compute past average filter */
        ComputePastAvFilter(CodCng.SidLpc) ;

        /* If adaptation enabled, fill noise filter */
        if ( !VadStat.Aen ) {
            for(i=0; i<LpcOrder; i++) VadStat.NLpc[i] = CodCng.SidLpc[i];
        }

        /* Compute autocorr. of past average filter coefficients */
        CalcRC(CodCng.SidLpc , CodCng.RC, &CodCng.ShRC);

        if(LpcDiff(CodCng.RC, CodCng.ShRC, CodCng.Acf, *CodCng.Ener) == 0){
            for(i=0; i<LpcOrder; i++) {
                CodCng.SidLpc[i] = curCoeff[i];
            }
            CalcRC(curCoeff, CodCng.RC, &CodCng.ShRC);
        }

 /*
  * Compute SID frame codes
  */
        /* Compute LspSid */
        AtoLsp(CodCng.LspSid, CodCng.SidLpc, CodStat.PrevLsp);
        Line->LspId = Lsp_Qnt(CodCng.LspSid, CodStat.PrevLsp);
        Lsp_Inq(CodCng.LspSid, CodStat.PrevLsp, Line->LspId, 0);

        Line->Sfs[0].Mamp = curQGain;
        CodCng.IRef = curQGain;
        CodCng.SidGain = Dec_SidGain(CodCng.IRef);

    } /* end of Ftyp=2 case (SID frame) */

 /*
  * Compute new excitation
  */
    if(CodCng.PastFtyp == 1) {
        CodCng.CurGain = CodCng.SidGain;
    }
    else {
          CodCng.CurGain = extract_h(L_add( L_mult(CodCng.CurGain,0x7000),
                    L_mult(CodCng.SidGain,0x1000) ) ) ;
    }
    Calc_Exc_Rand(CodCng.CurGain, CodStat.PrevExc, DataExc,
                                                &CodCng.RandSeed, Line);

 /*
  * Interpolate LSPs and update PrevLsp
  */
    Lsp_Int(QntLpc, CodCng.LspSid, CodStat.PrevLsp);
    for (i=0; i < LpcOrder ; i++) {
        CodStat.PrevLsp[i] = CodCng.LspSid[i];
    }

 /*
  * Output & save frame type info
  */
    CodCng.PastFtyp = *Ftyp;
    return;
}

/*
**
** Function:           Update_Acf()
**
** Description:        Computes & Stores sums of subframe-acfs
**
** Links to text:
**
** Arguments:
**
**  Word16 *Acf_sf     sets of subframes Acfs of current frame
**  Word16 *ShAcf_sf   corresponding scaling factors
**
** Output :            None
**
** Return value:       None
**
*/
void Update_Acf(Word16 *Acf_sf, Word16 *ShAcf_sf)
{

    int i, i_subfr;
    Word16 *ptr1, *ptr2;
    Word32 L_temp[LpcOrderP1];
    Word16 sh1, temp;
    Word32 L_acc0;

    /* Update Acf and ShAcf */
    ptr2 = CodCng.Acf + SizAcf;
    ptr1 = ptr2 - LpcOrderP1;
    for(i=LpcOrderP1; i<SizAcf; i++) *(--ptr2) = *(--ptr1);
    for(i=NbAvAcf; i>=1; i--) CodCng.ShAcf[i] = CodCng.ShAcf[i-1];

    /* Search ShAcf_sf min for current frame */
    sh1 = ShAcf_sf[0];
    for(i_subfr=1; i_subfr<SubFrames; i_subfr++) {
        if(ShAcf_sf[i_subfr] < sh1) sh1 = ShAcf_sf[i_subfr];
    }
    sh1 = add(sh1, 14);  /* 2 bits of margin */

    /* Compute current sum of acfs */
    for(i=0; i<= LpcOrder; i++) L_temp[i] = 0;

    ptr2 = Acf_sf;
    for(i_subfr=0; i_subfr<SubFrames; i_subfr++) {
        temp = sub(sh1, ShAcf_sf[i_subfr]);
        for(i=0; i <= LpcOrder; i++) {
            L_acc0 = L_deposit_l(*ptr2++);
            L_acc0 = L_shl(L_acc0, temp);  /* shift right if temp<0 */
            L_temp[i] = L_add(L_temp[i], L_acc0);
        }
    }
    /* Normalize */
    temp = norm_l(L_temp[0]);
    temp = sub(16, temp);
    if(temp < 0) temp = 0;
    for(i=0; i <= LpcOrder; i++) {
        CodCng.Acf[i] = extract_l(L_shr(L_temp[i],temp));
    }

    CodCng.ShAcf[0] = sub(sh1, temp);

    return;
}

/*
**
** Function:           ComputePastAvFilter()
**
** Description:        Computes past average filter
**
** Links to text:
**
** Argument:
**
**  Word16 *Coeff      set of LPC coefficients
**
** Output:
**
**  Word16 *Coeff
**
** Return value:       None
**
*/
void ComputePastAvFilter(Word16 *Coeff)
{
    int i, j;
    Word16 *ptr_Acf;
    Word32 L_sumAcf[LpcOrderP1];
    Word16 Corr[LpcOrder], Err;
    Word16 sh1, temp;
    Word32 L_acc0;

    /* Search ShAcf min */
    sh1 = CodCng.ShAcf[1];
    for(i=2; i <= NbAvAcf; i ++) {
        temp = CodCng.ShAcf[i];
        if(temp < sh1) sh1 = temp;
    }
    sh1 = add(sh1, 14);     /* 2 bits of margin : NbAvAcf <= 4 */

    /* Compute sum of NbAvAcf frame-Acfs  */
    for(j=0; j <= LpcOrder; j++) L_sumAcf[j] = 0;

    ptr_Acf = CodCng.Acf + LpcOrderP1;
    for(i=1; i <= NbAvAcf; i ++) {
        temp = sub(sh1, CodCng.ShAcf[i]);
        for(j=0; j <= LpcOrder; j++) {
            L_acc0 = L_deposit_l(*ptr_Acf++);
            L_acc0 = L_shl(L_acc0, temp); /* shift right if temp<0 */
            L_sumAcf[j] = L_add(L_sumAcf[j], L_acc0);
        }
    }

    /* Normalize */
    temp = norm_l(L_sumAcf[0]);
    temp = sub(16, temp);
    if(temp < 0) temp = 0;
    Err = extract_l(L_shr(L_sumAcf[0],temp));
    for(i=1; i<LpcOrderP1; i++) {
        Corr[i-1] = extract_l(L_shr(L_sumAcf[i],temp));
    }

    Durbin(Coeff, Corr, Err, &temp);

    return;
}

/*
**
** Function:           CalcRC()
**
** Description:        Computes function derived from
**                     the autocorrelation of LPC coefficients
**                     used for Itakura distance
**
** Links to text:
**
** Arguments :
**
**  Word16 *Coeff      set of LPC coefficients
**  Word16 *RC         derived from LPC coefficients autocorrelation
**  Word16 *ShRC       corresponding scaling factor
**
** Outputs :
**
**  Word16 *RC
**  Word16 *ShRC
**
** Return value:       None
**
*/
void CalcRC(Word16 *Coeff, Word16 *RC, Word16 *ShRC)
{
    int i, j;
    Word16 sh1;
    Word32 L_acc;

    L_acc = 0L;
    for(j=0; j<LpcOrder; j++) {
        L_acc = L_mac(L_acc, Coeff[j], Coeff[j]);
    }
    L_acc = L_shr(L_acc, 1);
    L_acc = L_add(L_acc, 0x04000000L);  /* 1 << 2 * Lpc_justif. */
    sh1 = norm_l(L_acc) - (Word16)2;    /* 1 bit because of x2 in RC[i], i> 0*/
                                /* & 1 bit margin for Itakura distance */
    L_acc = L_shl(L_acc, sh1); /* shift right if < 0 */
    RC[0] = round(L_acc);

    for(i=1; i<=LpcOrder; i++) {
        L_acc = L_mult( (Word16) 0xE000, Coeff[i-1]);   /* - (1 << Lpc_justif.) */
        for(j=0; j<LpcOrder-i; j++) {
            L_acc = L_mac(L_acc, Coeff[j], Coeff[j+i]);
        }
        L_acc = L_shl(L_acc, sh1);
        RC[i] = round(L_acc);
    }
    *ShRC = sh1;
    return;
}

/*
**
** Function:           LpcDiff()
**
** Description:        Comparison of two filters
**                     using Itakura distance
**                     1st filter : defined by *ptrAcf
**                     2nd filter : defined by *RC
**                     the autocorrelation of LPC coefficients
**                     used for Itakura distance
**
** Links to text:
**
** Arguments :
**
**  Word16 *RC         derived from LPC coefficients autocorrelation
**  Word16 ShRC        corresponding scaling factor
**  Word16 *ptrAcf     pointer on signal autocorrelation function
**  Word16 alpha       residual energy in LPC analysis using *ptrAcf
**
** Output:             None
**
** Return value:       flag = 1 if similar filters
**                     flag = 0 if different filters
**
*/
Flag LpcDiff(Word16 *RC, Word16 ShRC, Word16 *ptrAcf, Word16 alpha)
{
    Word32 L_temp0, L_temp1;
    Word16 temp;
    int i;
    Flag diff;

    L_temp0 = 0L;
    for(i=0; i<=LpcOrder; i++) {
        temp = shr(ptrAcf[i], 2);  /* + 2 margin bits */
        L_temp0 = L_mac(L_temp0, RC[i], temp);
    }

    temp = mult_r(alpha, FracThresh);
    L_temp1 = L_add((Word32)temp, (Word32)alpha);
    temp = add(ShRC, 9);  /* 9 = Lpc_justif. * 2 - 15 - 2 */
    L_temp1 = L_shl(L_temp1, temp);

    if(L_temp0 < L_temp1) diff = 1;
    else diff = 0;
    return(diff);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区精品在线| 色呦呦日韩精品| 99精品视频免费在线观看| 欧美日韩视频在线一区二区| 国产欧美一区二区三区在线老狼| 一区二区三区色| 国产99久久久国产精品| 日韩欧美一区二区三区在线| 亚洲国产综合人成综合网站| 成人免费视频app| 精品久久免费看| 日本中文字幕一区二区视频| 在线视频中文字幕一区二区| 中文字幕一区二区视频| 成人国产电影网| 久久精品一区二区三区不卡牛牛| 男人的天堂亚洲一区| 欧美群妇大交群的观看方式| 一区二区三区成人| 91蝌蚪porny九色| 国产精品久久福利| 国产成人免费视频一区| 精品成人免费观看| 精品一区二区三区免费播放 | 91美女蜜桃在线| 国产精品美女视频| 国产v日产∨综合v精品视频| 久久亚洲一区二区三区四区| 精品一区二区三区在线播放视频 | 国产精品正在播放| 久久亚洲捆绑美女| 国产精品欧美极品| 不卡的看片网站| www精品美女久久久tv| 国产尤物一区二区| 久久午夜免费电影| 成人动漫一区二区在线| 亚洲婷婷综合久久一本伊一区| 不卡视频在线看| 亚洲精品日韩一| 欧美群妇大交群的观看方式| 蜜臀久久99精品久久久画质超高清 | 欧美成人一级视频| 国产一区视频网站| 国产精品你懂的在线| 成人福利在线看| 亚洲日本一区二区| 欧美在线观看视频在线| 日韩精品欧美精品| 精品国产凹凸成av人导航| 国产精品一二三| 亚洲女子a中天字幕| 欧美少妇bbb| 免费高清在线视频一区·| 欧美va在线播放| 成人黄色a**站在线观看| 亚洲综合色噜噜狠狠| 欧美一级夜夜爽| 不卡的电视剧免费网站有什么| 亚洲曰韩产成在线| 精品国产乱码久久久久久久| 成人免费看视频| 婷婷六月综合网| 久久久国际精品| 欧美亚洲另类激情小说| 久草这里只有精品视频| 最好看的中文字幕久久| 日韩美女一区二区三区| 91免费观看在线| 久久99精品国产麻豆婷婷洗澡| 亚洲美女视频在线观看| 日韩视频一区二区三区 | 成人一级片在线观看| 午夜视频在线观看一区二区| 国产日产欧美一区二区三区| 在线观看国产91| 国产成人av电影在线| 午夜精品久久久久影视| 国产精品电影一区二区| 日韩一区二区影院| 欧美亚洲综合网| 成人黄色a**站在线观看| 理论片日本一区| 亚洲一区二区五区| 国产精品高潮久久久久无| 日韩三级免费观看| 91久久香蕉国产日韩欧美9色| 国产一区二区三区久久悠悠色av| 天天综合网天天综合色| 一区二区免费在线| 国产精品另类一区| 精品1区2区在线观看| 欧美男女性生活在线直播观看| 99久久免费视频.com| 国产精品一区二区x88av| 奇米精品一区二区三区在线观看 | 日韩精品中文字幕一区二区三区| 欧美亚洲高清一区| 色综合久久99| 91久久香蕉国产日韩欧美9色| 成人精品国产一区二区4080| 激情亚洲综合在线| 日韩电影一二三区| 日本三级亚洲精品| 日韩精品一级中文字幕精品视频免费观看 | 国产精品一品视频| 国产一区高清在线| 美女视频网站黄色亚洲| 日韩综合一区二区| 日本女人一区二区三区| 日韩电影免费在线看| 日本中文字幕一区二区视频| 日韩黄色一级片| 天天综合色天天综合| 天天综合日日夜夜精品| 日本伊人色综合网| 老色鬼精品视频在线观看播放| 天天操天天色综合| 精品在线观看免费| 国内精品国产三级国产a久久 | 国产亚洲成年网址在线观看| 欧美国产精品一区二区| 欧美激情一二三区| 亚洲欧美国产高清| 亚洲不卡在线观看| 久久精品国产网站| 国产成人午夜片在线观看高清观看| 国产91精品精华液一区二区三区| 成人免费看视频| 在线一区二区观看| 欧美狂野另类xxxxoooo| 日韩一级片网址| 国产欧美精品一区二区色综合 | 日韩免费观看高清完整版在线观看| 日韩限制级电影在线观看| 欧美mv日韩mv亚洲| 国产精品三级av在线播放| 亚洲精品久久久蜜桃| 日韩精品一二三| 处破女av一区二区| 日本精品裸体写真集在线观看| 91精品国产综合久久久蜜臀粉嫩 | heyzo一本久久综合| 91国偷自产一区二区使用方法| 欧美日韩成人高清| 久久网站热最新地址| 中文字幕日本不卡| 日本视频中文字幕一区二区三区| 国产高清一区日本| 欧美日韩成人在线一区| 国产蜜臀av在线一区二区三区| 亚洲激情男女视频| 国产在线播放一区三区四| 在线免费不卡电影| 2023国产精品自拍| 亚洲午夜视频在线观看| 国产一区二区网址| 欧美三级在线看| 国产精品精品国产色婷婷| 美女视频网站黄色亚洲| 97久久精品人人做人人爽50路 | 欧美男男青年gay1069videost| 欧美国产成人在线| 天天操天天综合网| 色香色香欲天天天影视综合网| 欧美白人最猛性xxxxx69交| 亚洲欧美日韩在线播放| 国产成人在线视频免费播放| 91精品国产品国语在线不卡| 亚洲四区在线观看| 国产乱妇无码大片在线观看| 欧美日韩免费一区二区三区| 国产精品黄色在线观看| 国产一区二区剧情av在线| 67194成人在线观看| 日韩美女久久久| 国产99精品视频| 日韩一卡二卡三卡| 五月综合激情日本mⅴ| 91麻豆福利精品推荐| 国产精品看片你懂得| 国产呦萝稀缺另类资源| 欧美不卡一区二区| 蜜桃视频第一区免费观看| 欧美精品免费视频| 亚洲国产日韩综合久久精品| 色婷婷综合视频在线观看| 中文字幕一区二区三区在线不卡| 国产高清精品网站| 国产网红主播福利一区二区| 国产一本一道久久香蕉| 精品1区2区在线观看| 国产在线麻豆精品观看| 欧美电影精品一区二区| 奇米亚洲午夜久久精品| 日韩欧美一区二区不卡| 精品一区二区在线视频| 欧美大黄免费观看| 狠狠色丁香久久婷婷综| 2021久久国产精品不只是精品|