void ownScaleHPFilterState(Ipp16s* pMemHPFilter, Ipp32s scale, Ipp32s order) { Ipp32s tmp32; Ipp16s tmp16; if (order == 2) { Ipp16s y2H,y2L,y1H,y1L,x0,x1; y2H=pMemHPFilter[0]; y2L=pMemHPFilter[1]; y1H=pMemHPFilter[2]; y1L=pMemHPFilter[3]; x0=pMemHPFilter[4]; x1=pMemHPFilter[5]; if (scale > 0) { tmp32 = x0 << 16; tmp32 = ShiftL_32s(tmp32, (Ipp16u)(scale)); Unpack_32s(tmp32, &x0, &tmp16); tmp32 = (y1H << 16) + (y1L << 1); tmp32 = ShiftL_32s(tmp32, (Ipp16u)(scale)); Unpack_32s(tmp32, &y1H, &y1L); y1L = (Ipp16s)(y1L - (tmp16 >> 1)); tmp32 = x1 << 16; tmp32 = ShiftL_32s(tmp32, (Ipp16u)(scale)); Unpack_32s(tmp32, &x1, &tmp16); tmp32 = (y2H << 16) + (y2L << 1); tmp32 = ShiftL_32s(tmp32, (Ipp16u)(scale)); Unpack_32s(tmp32, &y2H, &y2L); y2L = (Ipp16s)(y2L - (tmp16 >> 1)); } else {
void InverseLogarithmCalc(Ipp32s gainLog, Ipp16s *pLinearGain, Ipp16s *pScaleGain){ Ipp32s dwVal0, dwVal1; Ipp32s x, z; Ipp16s tmp; /* add offset */ z = gainLog + GOFF; /* Compute gain = 10**(z/20) */ dwVal0 = 10 * z; dwVal1 = 2*20649 * z; dwVal1 = Cnvrt_NR_32s16s(dwVal1); dwVal0 += dwVal1; dwVal1 = dwVal0 >> 15; *pScaleGain = (short)(14 - dwVal1); dwVal1 = ShiftL_32s(dwVal1, 15); x = Sub_32s(dwVal0, dwVal1); dwVal0 = 323 * x; /* c_c4 */ dwVal0 = ShiftL_32s(dwVal0, 1); dwVal0 = Add_32s(dwVal0, 1874<<16); /* + c_c3 */ tmp = Cnvrt_NR_32s16s(dwVal0); dwVal0 = tmp * x; dwVal0 = ShiftL_32s(dwVal0, 1); dwVal0 = Add_32s(dwVal0, 7866<<16); /* + c_c2 */ tmp = Cnvrt_NR_32s16s(dwVal0); dwVal0 = tmp * x; dwVal0 = ShiftL_32s(dwVal0, 1); dwVal0 = Add_32s(dwVal0, 22702<<16); /* + c_c1 */ tmp = Cnvrt_NR_32s16s(dwVal0); dwVal0 = tmp * x; dwVal0 = Add_32s(dwVal0, 16384<<16); /* + c_c0 */ *pLinearGain = Cnvrt_NR_32s16s(dwVal0); return; }
void STPCoeffsCalc(Ipp16s *pLPCFltrCoeffs, Ipp16s scaleLPCFltrCoeffs, Ipp16s *pstA, Ipp16s rc1, Ipp16s *tiltz) { Ipp32s dwVal, i, j; Ipp16s ws[3]; Ipp16s *az = pstA; Ipp16s *ap = pstA+10; Ipp16s scale = (Ipp16s)(16 - scaleLPCFltrCoeffs); Ipp32s ovfPos = IPP_MAX_32S >> scale; Ipp32s ovfNeg = IPP_MIN_32S >> scale; for(i=0; i<2; i++) { dwVal = cnstSTPostFltrPoleVector[i] * pLPCFltrCoeffs[i]; if(dwVal > ovfPos || dwVal < ovfNeg){ /* if Overflow in ShiftL_32s*/ if(scale==2) { for(j=0; j<10; j++) { dwVal = pLPCFltrCoeffs[j] << 15; pLPCFltrCoeffs[j] = Cnvrt_NR_32s16s(dwVal); } } if(scale==1) { for(j=0; j<10; j++) { dwVal = pLPCFltrCoeffs[j] << 14; pLPCFltrCoeffs[j] = Cnvrt_NR_32s16s(dwVal); } } return; } dwVal = ShiftL_32s(dwVal, scale); ws[i] = Cnvrt_NR_32s16s(dwVal); } for(i=0; i<2; i++) ap[i] = ws[i]; for(i=2; i<10; i++) { dwVal = cnstSTPostFltrPoleVector[i] * pLPCFltrCoeffs[i]; dwVal = ShiftL_32s(dwVal, scale); ap[i] = Cnvrt_NR_32s16s(dwVal); } for(i=0;i<10;i++) { dwVal = cnstSTPostFltrZeroVector[i] * pLPCFltrCoeffs[i]; dwVal = ShiftL_32s(dwVal, scale); az[i] = Cnvrt_NR_32s16s(dwVal); } dwVal = TILTF * rc1; *tiltz = Cnvrt_NR_32s16s(dwVal); if(scale==2) { for(j=0; j<10; j++) { dwVal = pLPCFltrCoeffs[j] << 15; pLPCFltrCoeffs[j] = Cnvrt_NR_32s16s(dwVal); } } if(scale==1) { for(j=0; j<10; j++) { dwVal = pLPCFltrCoeffs[j] << 14; pLPCFltrCoeffs[j] = Cnvrt_NR_32s16s(dwVal); } } return; }