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

📄 owng723.c

📁 G.729 and G.723.1 codecs x86 (and x86_64) Linux and FreeBSD source code for Asterisk open source PBX
💻 C
📖 第 1 页 / 共 4 页
字号:
     16384,  16384, -16384,  16384,  16384, -16384,      0,      0},   { 16384, -16384, -16384,  16384,  16384,  16384, -16384,  16384,    -16384,  16384, -16384,  16384, -16384, -16384, -16384,  16384,    -16384, -16384,  16384, -16384,  16384, -16384,      0,      0},   { 16384,  16384, -16384,  16384, -16384,  16384, -16384, -16384,     16384, -16384,  16384, -16384, -16384,  16384, -16384,  16384,    -16384,  16384,  16384, -16384, -16384,  16384,      0,      0},   { 16384,  16384, -16384, -16384,  16384,  16384, -16384, -16384,    -16384,  16384, -16384,  16384, -16384,  16384,  16384,  16384,    -16384,  16384, -16384, -16384,  16384, -16384,      0,      0},   { 16384, -16384, -16384, -16384,  16384,  16384,  16384,  16384,    -16384,  16384,  16384, -16384, -16384,  16384,  16384, -16384,    -16384,  16384, -16384,  16384, -16384, -16384,      0,      0},   { 16384, -16384,  16384, -16384, -16384, -16384, -16384,  16384,    -16384,  16384,  16384,  16384, -16384, -16384, -16384, -16384,    -16384,  16384,  16384,  16384, -16384,  16384,      0,      0},   { 16384,  16384,  16384,  16384, -16384, -16384, -16384, -16384,    -16384,  16384, -16384, -16384, -16384,  16384,  16384,  16384,    -16384,  16384,  16384,  16384, -16384, -16384,      0,      0},   { 16384,  16384,  16384,  16384, -16384,  16384, -16384,  16384,    -16384, -16384, -16384,  16384, -16384,  16384,  16384,  16384,     16384, -16384,  16384,  16384, -16384,  16384,      0,      0},   { 16384, -16384,  16384, -16384, -16384, -16384, -16384,  16384,     16384,  16384,  16384,  16384, -16384,  16384, -16384, -16384,    -16384, -16384,  16384,  16384,  16384,  16384,      0,      0},   {-16384,  16384, -16384, -16384,  16384,  16384, -16384,  16384,     16384, -16384, -16384, -16384,  16384, -16384, -16384,  16384,    -16384,  16384, -16384,  16384,  16384, -16384,      0,      0},   {-16384, -16384,  16384, -16384,  16384, -16384,  16384, -16384,    -16384, -16384, -16384,  16384, -16384,  16384, -16384, -16384,    -16384,  16384, -16384,  16384,  16384, -16384,      0,      0},   {-16384, -16384,  16384,  16384, -16384, -16384, -16384,  16384,    -16384,  16384, -16384, -16384,  16384,  16384,  16384,  16384,     16384,  16384, -16384,  16384,  16384,  16384,      0,      0},   {-16384,  16384, -16384,  16384,  16384,  16384,  16384, -16384,     16384, -16384,  16384,  16384, -16384,  16384,  16384,  16384,    -16384, -16384, -16384, -16384,  16384,  16384,      0,      0},   {-16384,  16384,  16384,  16384,  16384,  16384, -16384, -16384,    -16384, -16384,  16384, -16384,  16384, -16384, -16384, -16384,    -16384,  16384, -16384,  16384,  16384, -16384,      0,      0},   {-16384, -16384, -16384,  16384,  16384,  16384,  16384,  16384,     16384,  16384,  16384,  16384, -16384,  16384,  16384, -16384,    -16384, -16384, -16384,  16384, -16384, -16384,      0,      0},   {-16384, -16384, -16384,  16384, -16384, -16384,  16384,  16384,     16384,  16384,  16384, -16384,  16384,  16384,  16384,  16384,    -16384, -16384,  16384,  16384,  16384,  16384,      0,      0},   {-16384,  16384,  16384,  16384, -16384, -16384,  16384,  16384,    -16384, -16384, -16384, -16384,  16384,  16384, -16384,  16384,    -16384, -16384, -16384,  16384, -16384,  16384,      0,      0},   { 16384,  16384, -16384,  16384, -16384,  16384, -16384, -16384,    -16384,  16384,  16384,  16384,  16384, -16384, -16384,  16384,    -16384, -16384,  16384,  16384, -16384,  16384,      0,      0},   { 16384, -16384,  16384,  16384,  16384,  16384,  16384,  16384,    -16384, -16384, -16384, -16384,  16384,  16384, -16384,  16384,     16384, -16384, -16384,  16384,  16384, -16384,      0,      0},   { 16384, -16384,  16384, -16384, -16384,  16384,  16384, -16384,    -16384, -16384, -16384,  16384,  16384,  16384,  16384,  16384,    -16384, -16384, -16384, -16384,  16384,  16384,      0,      0},   { 16384,  16384, -16384, -16384, -16384, -16384, -16384,  16384,     16384, -16384, -16384, -16384,  16384,  16384,  16384, -16384,     16384,  16384, -16384, -16384, -16384,  16384,      0,      0},   { 16384,  16384,  16384, -16384,  16384,  16384,  16384, -16384,     16384,  16384,  16384,  16384,  16384, -16384, -16384, -16384,    -16384,  16384, -16384, -16384,  16384, -16384,      0,      0},   { 16384, -16384, -16384, -16384, -16384,  16384,  16384, -16384,     16384,  16384, -16384, -16384,  16384,  16384,  16384,  16384,     16384, -16384,  16384,  16384, -16384, -16384,      0,      0},   { 16384, -16384, -16384, -16384, -16384,  16384,  16384, -16384,    -16384, -16384,  16384,  16384,  16384,  16384,  16384,  16384,     16384,  16384,  16384, -16384,  16384, -16384,      0,      0}};static __ALIGN32 CONST Ipp16s PosCache[MAX_CACHE_NUM][24] = {   { 47,  51,  27,  41,  21,   9, 117,  83,     69,  81, 109,  54,  52,  24,  20,  10,     58,  72,  66,  68, 104,  86,   0,   0},   { 46,  28,  50,  38,  22,  36, 114,  64,    100, 112,  60,  24,  34,   6,   4,  28,     42,  60, 118,  82, 114,  86,   0,   0},   { 42,  52,  34,  36,  58,  14,  66,  88,     68, 100,  74,  19,  35,   9,  53,   3,      1,  84,  64,  88,  74,  78,   0,   0},   { 41,  17,   1,   7,  13,  29,  86,  94,     90, 112,  66,  11,  33,  23,  51,  37,      5, 104, 100,  60,  62, 102,   0,   0},   { 37,  43,  11,  19,   3,   5,  94,  72,    108,  96,  98,  14,  50,  18,  32,  12,      0, 117, 119,  69,  67,  81,   0,   0},   {  8,  56,   4,  20,  22,  58, 113, 109,     99,  95,  61,  30,  40,  12,  20,  14,     18, 111, 109, 115,  93,  79,   0,   0},   { 38,  28,  16,  50,  14,  58,  87, 103,     83,  77, 119,  47,  53,   5,  21,  51,     31, 117, 113,  71,  83,  99,   0,   0},   { 17,  37,  15,  31,  11,  33,  75, 113,     73,  63,  97,  33,   7,  39,  29,  23,     43,  89,  95,  81,  71,  75,   0,   0},   { 55,  21,   5,  29,  33,  17, 113,  67,    115, 103,  97,   6,  44,  30,  26,  18,     46,  90,  62, 100,  78,  86,   0,   0},   { 10,  26,  38,  44,  34,   6, 104, 112,     76,  78,  82,  24,  56,  50,  30,  14,     28, 104,  64,  78, 112,  98,   0,   0},   { 30,  24,  36,  12,  10,   0, 118,  90,     94,  70,  84,  19,  37,  45,  53,  25,      7, 104,  84, 110, 112, 106,   0,   0},   {  1,  31,  25,  15,  47,  39,  88, 116,     62,  94,  72,  15,  23,   1,  33,  49,     37, 106,  84, 114,  62, 102,   0,   0},   { 37,  47,   9,  13,   7,  45, 112,  62,     86,  96, 104,  30,  34,   2,  54,  24,     14, 111,  75, 107,  87, 119,   0,   0},   { 54,   0,  38,   4,   2,  32,  93,  75,    119,  65, 117,   6,  24,  58,  38,  30,     22, 103, 105,  87, 115,  95,   0,   0},   { 18,  36,  38,  32,  26,   4, 101, 109,    119,  79,  63,  51,  47,  19,  41,  27,     29, 113,  95,  97, 119, 105,   0,   0},   { 57,  59,  31,  17,  13,  47,  67, 109,     63, 103,  95,  13,  17,  23,   3,  15,     41,  99,  71, 111,  89,  81,   0,   0},   { 43,   3,  23,  25,  29,  37,  91,  61,     85,  79,  69,  28,  18,  46,  14,  34,      4, 118,  96,  88,  90, 116,   0,   0},   { 16,  34,   6,  54,  30,  36,  76, 112,     90, 106,  86,  38,   2,  50,  40,   8,     48, 102, 108,  84,  70,  66,   0,   0},   {  0,   8,  20,  58,  14,  46,  92, 102,    116, 104,  78,  29,  21,  37,  55,   5,     47,  76,  86, 116,  80,  92,   0,   0},   {  3,  57,  31,  35,  13,   7,  70,  90,     72,  84,  60,  29,  51,  45,  57,  21,      5,  60, 110,  68,  96, 118,   0,   0},   { 17,   5,  45,  15,  55,  43, 110,  62,    106, 114,  94,  58,   0,  50,   8,  46,     14, 115,  73, 101,  91,  99,   0,   0},   { 20,  12,  54,  52,  16,  50, 115, 109,     71,  99, 119,  54,  50,  12,  40,   4,     10, 105,  81,  71,  65,  69,   0,   0},   { 38,  54,  42,  24,  22,  30,  95,  69,    101,  91,  75,   7,  21,  43,  55,  11,     51,  61, 117,  79,  71, 113,   0,   0},   { 19,  29,  57,  13,  49,  21,  99, 117,     93, 119,  75,   3,   9,  15,  55,  17,     25, 119,  87,  97,  89,  95,   0,   0},   { 15,  53,  21,  35,   7,  59, 111,  67,     95, 117,  77,   0,  34,  16,  40,   8,     44,  98, 114,  86,  84,  64,   0,   0},   {  4,  52,  14,  32,  10,  24,  88,  64,    118,  92,  76,   0,  48,   4,  34,  14,     54, 110,  78, 100,  66,  96,   0,   0},   { 10,   2,  44,  50,  56,  52, 106,  66,     94, 114, 118,  49,  45,  37,   5,  47,     23,  60,  70,  72,  84,  88,   0,   0},   { 45,  35,  21,   9,  15,  37,  92,  74,     64,  86,  84,  55,   5,  45,  53,   3,     57,  86, 116, 118,  62,  80,   0,   0},   { 39,  31,   7,  29,  15,   1,  90,  74,    106,  70,  68,  36,   4,  54,  52,  26,     46,  71, 109, 103,  77,  99,   0,   0},   { 28,  36,  54,   2,  12,  10, 119,  97,     87,  89, 105,  54,  56,  26,  24,  40,     32, 119,  99,  65,  79, 103,   0,   0},   { 40,  26,  28,  56,   2,  14,  69,  97,     83, 113,  71,  35,  37,  21,  29,   7,     53,  79,  63,  71,  67,  97,   0,   0},   { 23,  13,   9,  21,  15,   5, 113,  79,    103, 105,  91,   5,  39,  19,   9,  29,     43,  89,  85,  95,  73,  69,   0,   0}};void ComfortNoiseExcitation_G723_16s (Ipp16s gain, Ipp16s *pPrevExc, Ipp16s *pExc,                                      Ipp16s *pSeed, Ipp16s *pOlp, Ipp16s *pLags,                                      Ipp16s *pGains, G723_Rate currRate, Ipp8s *buff, Ipp16s *CasheCounter){   Ipp32s i, lNSbfr, lNBlock;   Ipp16s j, sTmp, sTmp1;   Ipp16s *pPosition, *pSign;   Ipp16s *ppPosition;   Ipp16s *pCurrExcitation;   Ipp16s sfs, sX1, sX2, sDiscr, sB, sAbsX2, sAbsX1;   Ipp32s lTmp, lC, lExcEnergy;   Ipp16s *pTmpPos;   Ipp16s *pOff;   Ipp16s *pTmpExcitation;   pPosition = (Ipp16s *)buff;   pSign = pPosition + 2*NUM_PULSE_IN_BLOCK;   pTmpPos = pSign + 2*NUM_PULSE_IN_BLOCK;   pOff = pTmpPos + G723_SBFR_LEN/GRIDSIZE;   pTmpExcitation = pOff + 4;   /* generate LTP codes */   if(*CasheCounter < -1) {      Ipp32s curr = *CasheCounter;      pOlp[0] = OlpCache[curr][0];      pOlp[1] = OlpCache[curr][1];      pGains[0] = GainCache[curr][0];      pGains[1] = GainCache[curr][1];      pGains[2] = GainCache[curr][2];      pGains[3] = GainCache[curr][3];      *pSeed = SeedCacheTbl[curr];      ippsCopy_16s(SignCache[curr],pSign,2*NUM_PULSE_IN_BLOCK);      ippsCopy_16s(PosCache[curr],pPosition,2*NUM_PULSE_IN_BLOCK);      *CasheCounter += 1;   } else {      pOlp[0] = (Ipp16s)(NormRand_16s(21, pSeed) + 123);      pOlp[1] = (Ipp16s)(NormRand_16s(19, pSeed) + 123); /* The value 21 has been modified to 19 to correspond with ver. G723.1 April 2006 */      for(lNSbfr=0; lNSbfr<4; lNSbfr++) {  /* in [1, MAX_GAIN] */         pGains[lNSbfr] = (Ipp16s)(NormRand_16s(MAX_GAIN, pSeed) + 1);      }      /* Generate signs and grids */      for(lNBlock=0; lNBlock<4; lNBlock += 2) {         sTmp    = NormRand_16s((1 << (NUM_PULSE_IN_BLOCK+2)), pSeed);         pOff[lNBlock] = (Ipp16s)(sTmp & 0x1);         sTmp    >>= 1;         pOff[lNBlock+1] = (Ipp16s)(G723_SBFR_LEN + (sTmp & 0x1));         for(i=0; i<NUM_PULSE_IN_BLOCK; i++) {            pSign[i+NUM_PULSE_IN_BLOCK*(lNBlock>>1)] = (Ipp16s)(((sTmp & 0x2) - 1)<<14);            sTmp >>= 1;         }      }      /* Generate positions */      ppPosition  = pPosition;      for(lNSbfr=0; lNSbfr<4; lNSbfr++) {         ippsCopy_16s(StratingPositionTbl, pTmpPos, G723_SBFR_LEN/GRIDSIZE);         sTmp=(G723_SBFR_LEN/GRIDSIZE); for(i=0; i<NPulse[lNSbfr]; i++) {            j = NormRand_16s(sTmp, pSeed);            *ppPosition++ = (Ipp16s)(pTmpPos[j] + pOff[lNSbfr]);            sTmp --; pTmpPos[j] = pTmpPos[sTmp];         }      }   }   pLags[0] = 1;   pLags[1] = 0;   pLags[2] = 1;   pLags[3] = 3;   /* calculate fixed codebook gains */   pCurrExcitation = pExc;   lNSbfr = 0;   for(lNBlock=0; lNBlock<2; lNBlock++) {      /* decode LTP only */      {         Ipp16s lag1 = pOlp[lNBlock];         Ipp16s lag2 = pLags[lNSbfr];         ippsDecodeAdaptiveVector_G723_16s(lag1, lag2, pGains[lNSbfr], &pPrevExc[0], pCurrExcitation, SA_Rate[currRate]);         lag2 = pLags[lNSbfr+1];         ippsDecodeAdaptiveVector_G723_16s(lag1, lag2, pGains[lNSbfr+1], &pPrevExc[G723_SBFR_LEN], &pCurrExcitation[G723_SBFR_LEN], SA_Rate[currRate]);      }      /*ippsMaxAbs_16s(pCurrExcitation,2*G723_SBFR_LEN,&sTmp1);*/      ippsMax_16s(pCurrExcitation,2*G723_SBFR_LEN,&sTmp1);      ippsMin_16s(pCurrExcitation,2*G723_SBFR_LEN,&sTmp);      if(-sTmp > sTmp1) sTmp1 = (Ipp16s)(-sTmp);      if(sTmp1 == 0) sfs = 0;      else {         sfs = (Ipp16s)(4 - Exp_16s(sTmp1)); /* 4 bits of margin  */         if(sfs < -2) sfs = -2;      }      if(sfs<0)         ippsLShiftC_16s(pCurrExcitation,-sfs,pTmpExcitation,2*G723_SBFR_LEN);      else         ippsRShiftC_16s(pCurrExcitation,sfs,pTmpExcitation,2*G723_SBFR_LEN);      lTmp = pTmpExcitation[pPosition[0+NUM_PULSE_IN_BLOCK*lNBlock]] * pSign[0+NUM_PULSE_IN_BLOCK*lNBlock];      for(i=1; i<NUM_PULSE_IN_BLOCK; i++) {         lTmp += pTmpExcitation[pPosition[i+NUM_PULSE_IN_BLOCK*lNBlock]] * pSign[i+NUM_PULSE_IN_BLOCK*lNBlock];      }      sTmp = (Ipp16s)(lTmp>>14);      sB = (Ipp16s)(((sTmp*INV_NUM_PULSE_IN_BLOCK)+0x4000)>>15);      /* excitation energy */      ippsDotProd_16s32s_Sfs(pTmpExcitation,pTmpExcitation,2*G723_SBFR_LEN,&lExcEnergy,-1);      /* compute 2*G723_SBFR_LEN x gain**2 x 2**(-2sh1+1)    */      /* gain input = 2**5 gain                     */      sTmp = (Ipp16s)((gain * G723_SBFR_LEN)>>5);      lTmp = 2 * sTmp * gain;      sTmp = (Ipp16s)((sfs<<1)+4);      lTmp = lTmp>>sTmp;      lTmp = lExcEnergy - lTmp;      lC  = MulC_32s(INV_NUM_PULSE_IN_BLOCK, lTmp); /*  * 1/NbPuls  */     /* Solve EQ(X) = X**2 + 2 sB X + c */      lTmp = 2* sB * sB - lC;      if(lTmp <=  0) {          sX1 = (Ipp16s)(-sB);      }      else {         sDiscr = (Ipp16s)ownSqrt_32s(lTmp>>1);         sX1 = (Ipp16s)(sDiscr - sB);         sX2 = (Ipp16s)(sDiscr + sB);         sAbsX2 = (Ipp16s)Abs_16s(sX2);         sAbsX1 = (Ipp16s)Abs_16s(sX1);         if (sAbsX2 < sAbsX1) sX1 = (Ipp16s)(-sX2);      }      /* Update Excitation */      if(++sfs < 0) sTmp = (Ipp16s)(sX1>>(-sfs));      else sTmp = (Ipp16s)(sX1<<sfs);      if(sTmp > G723_MAX_GAIN)         sTmp = G723_MAX_GAIN;      if(sTmp < -G723_MAX_GAIN)          sTmp = -G723_MAX_GAIN;      for(i=0; i<NUM_PULSE_IN_BLOCK; i++) { j = pPosition[i+NUM_PULSE_IN_BLOCK*lNBlock]; pCurrExcitation[j] = (Ipp16s)(pCurrExcitation[j] +        (sTmp * (pSign[i+NUM_PULSE_IN_BLOCK*lNBlock])>>15));      }      /* update PrevExcitation */      ippsCopy_16s(&pPrevExc[2*G723_SBFR_LEN],pPrevExc,G723_MAX_PITCH-2*G723_SBFR_LEN);      ippsCopy_16s(pCurrExcitation,&pPrevExc[G723_MAX_PITCH-2*G723_SBFR_LEN],2*G723_SBFR_LEN);      pCurrExcitation += 2*G723_SBFR_LEN;      lNSbfr += 2;   }}__ALIGN32 CONST IppSpchBitRate SA_Rate[2] = {IPP_SPCHBR_6300, IPP_SPCHBR_5300};__ALIGN32 CONST Ipp16s LPCDCTbl[G723_LPC_ORDER] = {   3131,4721,7690,10806,13872,16495,19752,22260,25484,27718};__ALIGN32 CONST Ipp16s PerceptualFltCoeffTbl[2*G723_LPC_ORDER] = {   29491,26542,23888,21499,19349,17414,15673,14106,12695,11425,/* Zero part */   16384, 8192, 4096, 2048, 1024,  512,  256,  128,   64,   32,/* Pole part */};#if defined( _WIN32_WCE)#pragma warning( disable : 4305 )#endif__ALIGN32 CONST Ipp16s GainDBLvls[N_GAINS] = {  0xFFFF,  0xFFFE, 0xFFFD, 0xFFFC, 0xFFFA, 0xFFF7, 0xFFF3, 0xFFEE,  0xFFE6,  0xFFDA, 0xFFC9, 0xFFB0, 0xFF8D, 0xFF5A, 0xFF10, 0xFEA4,  0xFE0A,  0xFD2A, 0xFBE6, 0xFA13, 0xF76F, 0xF39E, 0xEE1A, 0xE621};

⌨️ 快捷键说明

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