www.pudn.com > speakfs72.zip > DECODE.C, change:2002-01-05,size:1737b


/* 
 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische 
 * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for 
 * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. 
 */ 
 
/* $Header: /home/cvsroot/speakfreely/GSM/DECODE.C,v 1.1.1.1 2002/01/05 02:21:05 bcw Exp $ */ 
 
#include <stdio.h> 
 
#include        "private.h" 
#include        "gsm.h" 
#include        "proto.h" 
 
/* 
 *	4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER 
 */ 
 
static void Postprocessing P2((S,s), 
		struct gsm_state		* S, 
		register word			* s) 
{ 
		register int			k; 
		register word			msr = S->msr; 
		register longword		ltmp;	/* for GSM_ADD */ 
		register word			tmp; 
 
		for (k = 160; k--; s++) { 
				tmp = (word) GSM_MULT_R( msr, 28180 ); 
				msr = (word) GSM_ADD(*s, tmp); 		   /* Deemphasis			 */ 
				*s	= (word) (GSM_ADD(msr, msr) & 0xFFF8);  /* Truncation & Upscaling */ 
		} 
		S->msr = msr; 
} 
 
void Gsm_Decoder P8((S,LARcr, Ncr,bcr,Mcr,xmaxcr,xMcr,s), 
		struct gsm_state		* S, 
 
		word			* LARcr,		/* [0..7]				IN		*/ 
 
		word			* Ncr,			/* [0..3]				IN		*/ 
		word			* bcr,			/* [0..3]				IN		*/ 
		word			* Mcr,			/* [0..3]				IN		*/ 
		word			* xmaxcr,		/* [0..3]				IN		*/ 
		word			* xMcr, 		/* [0..13*4]			IN		*/ 
 
		word			* s)			/* [0..159] 			OUT 	*/ 
{ 
		int 			j, k; 
		word			erp[40], wt[160]; 
		word			* drp = S->dp0 + 120; 
 
		for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) { 
 
				Gsm_RPE_Decoding( S, *xmaxcr, *Mcr, xMcr, erp ); 
				Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp ); 
 
				for (k = 0; k <= 39; k++) wt[ j * 40 + k ] =  drp[ k ]; 
		} 
 
		Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s ); 
		Postprocessing(S, s); 
}