FreeCalypso > hg > gsmhr-codec-ref
diff sp_frm.h @ 0:9008dbc8ca74
import original C code from GSM 06.06
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 14 Jun 2024 23:27:16 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sp_frm.h Fri Jun 14 23:27:16 2024 +0000 @@ -0,0 +1,201 @@ +#ifndef __SP_FRM +#define __SP_FRM + +#include "typedefs.h" +#include "sp_rom.h" + + +struct QuantList +{ + /* structure which points to the beginning of a block of candidate vq + * vectors. It also stores the residual error for each vector. */ + int iNum; /* total number in list */ + int iRCIndex; /* an index to the first vector of the + * block */ + Shortword pswPredErr[PREQ1_NUM_OF_ROWS]; /* PREQ1 is the biggest block */ +}; + +/*_________________________________________________________________________ + | | + | Function Prototypes | + |_________________________________________________________________________| +*/ + +void iir_d(Shortword pswCoeff[], Shortword pswIn[], + Shortword pswXstate[], + Shortword pswYstate[], + int npts, int shifts, + Shortword swPreFirDownSh, + Shortword swFinalUpShift); + + + void filt4_2nd(Shortword pswCoeff[], + Shortword pswIn[], + Shortword pswXstate[], + Shortword pswYstate[], + int npts, + int shifts); + + void initPBarVBarL(Longword pL_PBarFull[], + Shortword pswPBar[], + Shortword pswVBar[]); + + void initPBarFullVBarFullL(Longword pL_CorrelSeq[], + Longword pL_PBarFull[], + Longword pL_VBarFull[]); + + Shortword aflatRecursion(Shortword pswQntRc[], + Shortword pswPBar[], + Shortword pswVBar[], + Shortword *ppswPAddrs[], + Shortword *ppswVAddrs[], + Shortword swSegmentOrder); + + void aflatNewBarRecursionL(Shortword pswQntRc[], + int iSegment, + Longword pL_PBar[], + Longword pL_VBar[], + Shortword pswPBar[], + Shortword pswVBar[]); + + + void setupPreQ(int iSeg, int iVector); + + void setupQuant(int iSeg, int iVector); + + void getNextVec(Shortword pswRc[]); + + void aflat(Shortword pswSpeechToLPC[], + int piR0Index[], + Shortword pswFinalRc[], + int piVQCodewds[], + Shortword swPtch, + Shortword *pswVadFlag, + Shortword *pswSP); + + + Shortword fnExp2(Longword L_Input); + + Shortword fnLog2(Longword L_Input); + + void weightSpeechFrame(Shortword pswSpeechFrm[], + Shortword pswWNumSpace[], + Shortword pswWDenomSpace[], + Shortword pswWSpeechBuffBase[]); + + void getSfrmLpcTx(Shortword swPrevR0, Shortword swNewR0, + Shortword pswPrevFrmKs[], + Shortword pswPrevFrmAs[], + Shortword pswPrevFrmSNWCoef[], + Shortword pswNewFrmKs[], + Shortword pswNewFrmAs[], + Shortword pswNewFrmSNWCoef[], + Shortword pswHPFSpeech[], + short *pswSoftInterp, + struct NormSw *psnsSqrtRs, + Shortword ppswSynthAs[][NP], + Shortword ppswSNWCoefAs[][NP]); + + short int fnBest_CG(Shortword pswCframe[], + Shortword pswGframe[], + Shortword *pswCmaxSqr, + Shortword *pswGmax, + short int siNumPairs); + + short compResidEnergy(Shortword pswSpeech[], + Shortword ppswInterpCoef[][NP], + Shortword pswPreviousCoef[], + Shortword pswCurrentCoef[], + struct NormSw psnsSqrtRs[]); + + Shortword r0Quant(Longword L_UnqntzdR0); + + Shortword cov32(Shortword pswIn[], + Longword pppL_B[NP][NP][2], + Longword pppL_F[NP][NP][2], + Longword pppL_C[NP][NP][2], + Longword *pL_R0, + Longword pL_VadAcf[], + Shortword *pswVadScalAuto); + + Longword flat(Shortword pswSpeechIn[], + Shortword pswRc[], + int *piR0Inx, + Longword pL_VadAcf[], + Shortword *pswVadScalAuto); + + + + void openLoopLagSearch(Shortword pswWSpeech[], + Shortword swPrevR0Index, + Shortword swCurrR0Index, + Shortword *psiUVCode, + Shortword pswLagList[], + Shortword pswNumLagList[], + Shortword pswPitchBuf[], + Shortword pswHNWCoefBuf[], + struct NormSw psnsWSfrmEng[], + Shortword pswVadLags[], + Shortword swSP); + + Shortword getCCThreshold(Shortword swRp0, + Shortword swCC, + Shortword swG); + + void pitchLags(Shortword swBestIntLag, + Shortword pswIntCs[], + Shortword pswIntGs[], + Shortword swCCThreshold, + Shortword pswLPeaksSorted[], + Shortword pswCPeaksSorted[], + Shortword pswGPeaksSorted[], + Shortword *psiNumSorted, + Shortword *pswPitch, + Shortword *pswHNWCoef); + + short CGInterpValid(Shortword swFullResLag, + Shortword pswCIn[], + Shortword pswGIn[], + Shortword pswLOut[], + Shortword pswCOut[], + Shortword pswGOut[]); + + void CGInterp(Shortword pswLIn[], + short siNum, + Shortword pswCIn[], + Shortword pswGIn[], + short siLoIntLag, + Shortword pswCOut[], + Shortword pswGOut[]); + + Shortword quantLag(Shortword swRawLag, + Shortword *psiCode); + + void findBestInQuantList(struct QuantList psqlInList, + int iNumVectOut, + struct QuantList psqlBestOutList[]); + + Shortword findPeak(Shortword swSingleResLag, + Shortword pswCIn[], + Shortword pswGIn[]); + + void bestDelta(Shortword pswLagList[], + Shortword pswCSfrm[], + Shortword pswGSfrm[], + short int siNumLags, + short int siSfrmIndex, + Shortword pswLTraj[], + Shortword pswCCTraj[], + Shortword pswGTraj[]); + + Shortword + maxCCOverGWithSign(Shortword pswCIn[], + Shortword pswGIn[], + Shortword *pswCCMax, + Shortword *pswGMax, + Shortword swNum); + + void getNWCoefs(Shortword pswACoefs[], + Shortword pswHCoefs[]); + +#endif