📄 owng723.c
字号:
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 + -