00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <stdio.h>
00010
00011 #include "private.h"
00012 #include "gsm.h"
00013 #include "proto.h"
00014
00015
00016
00017
00018
00019 static void Postprocessing P2((S,s),
00020 struct gsm_state * S,
00021 register word * s)
00022 {
00023 register int k;
00024 register word msr = S->msr;
00025 register longword ltmp;
00026 register word tmp;
00027
00028 for (k = 160; k--; s++) {
00029 tmp = GSM_MULT_R( msr, 28180 );
00030 msr = GSM_ADD(*s, tmp);
00031 *s = GSM_ADD(msr, msr) & 0xFFF8;
00032 }
00033 S->msr = msr;
00034 }
00035
00036 void Gsm_Decoder P8((S,LARcr, Ncr,bcr,Mcr,xmaxcr,xMcr,s),
00037 struct gsm_state * S,
00038
00039 word * LARcr,
00040
00041 word * Ncr,
00042 word * bcr,
00043 word * Mcr,
00044 word * xmaxcr,
00045 word * xMcr,
00046
00047 word * s)
00048 {
00049 int j, k;
00050 word erp[40], wt[160];
00051 word * drp = S->dp0 + 120;
00052
00053 for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) {
00054
00055 Gsm_RPE_Decoding( S, *xmaxcr, *Mcr, xMcr, erp );
00056 Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp );
00057
00058 for (k = 0; k <= 39; k++) wt[ j * 40 + k ] = drp[ k ];
00059 }
00060
00061 Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s );
00062 Postprocessing(S, s);
00063 }