⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 codeparm.c

📁 4.8k/s速率FS1016标准语音压缩源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************                                                                         ** ROUTINE*		Pack** FUNCTION*		Pack CELP parameters* SYNOPSIS*		Pack(NParams, Params, BitAllocs, NumPacked, Channel)**   formal**                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*	NParams		int	 i	Number of parameters to pack*	Params		int	 i	Frame of encoded analysis parameters*	BitAllocs	int	 i	Bit allocations for each parameter*	NumPacked	int	 o	Number of bits packed*	Channel		int	 o	Frame of channel bits***************************************************************************/void Pack(int		NParams,int		Params[],int		BitAllocs[], int		*NumPacked,int		Channel[]){int		i, j, k=0;	for(i=0; i<NParams; i++) { /* For each parameter */	  for(j=0;j<BitAllocs[i]; j++) { /* For each bit in each parameter */	    Channel[k++] = (Params[i] & (1<<j)) >> j;	  }	}	*NumPacked = k;}/***************************************************************************                                                                         ** ROUTINE*		Unpack** FUNCTION*		Unpack CELP parameters* SYNOPSIS*		Unpack(NParams, BitAllocs, Channel, NumUnpacked, Params)**   formal**                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*	NParams		int	 i	Number of parameters to unpack*	BitAllocs	int	 i	Bit allocations for each parameter*	Channel		int	 i	Frame of channel bits*	NumUnpacked	int	 o	Number of bits unpacked*	Params		int	 o	Frame of analysis parameters***************************************************************************/void Unpack(int		NParams,int		BitAllocs[],int		Channel[],int		*NumUnpacked,int		Params[]) {int	i, j, k=0;	for(i=0; i<NParams; i++) { /* For each parameter */	  Params[i] = 0;	  for(j=0; j<BitAllocs[i]; j++) { /* For each bit in each parameter */	    Params[i] |= Channel[k++] << j;	  }	}	*NumUnpacked = k;}/***************************************************************************                                                                         ** ROUTINE*		ADelayEncode** FUNCTION*		Encode the Adaptive Delay* SYNOPSIS*		ADelayEncode(UDelay, QDelay)**   formal**                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*	UDelay		float	 i	Unquantized adaptive delay*	QDelay		int	 o	Quantized adaptive delay***************************************************************************/#include "adencode.h"extern float DelayTable[MAX_NUM_ADAPT];void ACBDelayEncode(float	Udelay, int	*Qdelay){int		i, j;static int	even=FALSE;static int	LastIndex=1;int		MinDelayPtr, MaxDelayPtr;	if(!even)	{/*  On odd frames search through delay table until a match is found */	  for(i=0;i<MAX_NUM_ADAPT;i++)	{	    if (Udelay == DelayTable[i])	{	      LastIndex = i;	      break;	    }	  }/*  Retrieve encoded delay value from table */	  *Qdelay = adencode[i];	}	else		{	/*  On even frames search for delta delay */	  MinDelayPtr = LastIndex - (NUM_DELTA_ADELAYS / 2 - 1);	  MaxDelayPtr = LastIndex + (NUM_DELTA_ADELAYS / 2);	  if (MinDelayPtr < 0)	{	    MinDelayPtr = 0;	    MaxDelayPtr = NUM_DELTA_ADELAYS - 1;	  }	  if (MaxDelayPtr > NUM_FULL_ADELAYS-1)	{	    MaxDelayPtr = NUM_FULL_ADELAYS - 1;	    MinDelayPtr = NUM_FULL_ADELAYS - NUM_DELTA_ADELAYS;	  }	  for(i=MinDelayPtr, j=0; i<=MaxDelayPtr; i++, j++)	{	    if (Udelay == DelayTable[i])	{	      *Qdelay = j;	      break;	    }	  }	  	}/*  Update even flag */	even = (even) ? FALSE : TRUE;}/***************************************************************************                                                                         ** ROUTINE*		ACBDelayDecode** FUNCTION*		Decode the Adaptive Delay* SYNOPSIS*		ACBDelayDecode(QDelay, UDelay)**   formal**                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*	QDelay		int	 i	Quantized adaptive delay*	UDelay		float	 o	Unquantized adaptive delay***************************************************************************/#include "addecode.h"void ACBDelayDecode(int	QDelay, float	*UDelay){static int 	even = FALSE;static int	LastIndex = 0;static int	first = TRUE;static int	DeltaDecodeTable[NUM_FULL_ADELAYS];int		MaxDelayPtr, MinDelayPtr;int		i;/*  Generate table for delta delay decoding */	if(first)	{	  first = FALSE;	  for (i = 0; i < NUM_FULL_ADELAYS; i++)  	  {    	    DeltaDecodeTable[adencode[i]] = i;  	  }	}	if (!even)	{/*  On even subframes decode from table */	  *UDelay = addecode[QDelay];	  LastIndex = DeltaDecodeTable[QDelay];	}	else		{/*  On odd subframes decode relative to previous frame */	  MinDelayPtr = LastIndex - (NUM_DELTA_ADELAYS / 2 - 1);	  MaxDelayPtr = LastIndex + (NUM_DELTA_ADELAYS / 2);	  if (MinDelayPtr < 0)	{	    MinDelayPtr = 0;	    MaxDelayPtr = NUM_DELTA_ADELAYS - 1;	  }	  if (MaxDelayPtr > NUM_FULL_ADELAYS-1)	{	    MaxDelayPtr = NUM_FULL_ADELAYS - 1;	    MinDelayPtr = NUM_FULL_ADELAYS - NUM_DELTA_ADELAYS;	  }	  *UDelay = DelayTable[MinDelayPtr + QDelay];	}/*  Update even */	even = (even) ? FALSE:TRUE;}/***************************************************************************                                                                         ** ROUTINE*		FS1016Encode** FUNCTION*		Translate from bit structure to FS1016 compatible array* SYNOPSIS*		FS1016Encode(InStruct, OutArray)**   formal**                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*	InStruct	TX_BITS	 i	Structure of quantized parameters*	OutArray	int	 o	Array of FS1016 compatible parameters***************************************************************************/int FS1016Encode(TX_BITS	InStruct,int	OutArray[]){int	i, j=0;/*  Put the LSFs into the array */	for(i=0;i<ORDER;i++)	{	  OutArray[j++] = InStruct.lsf[i];	}/*  Put each subframe's parameters into the array */	for(i=0;i<NUM_SF;i++)	{	  OutArray[j++] = InStruct.AdaptiveDelay[i];	  OutArray[j++] = InStruct.AdaptiveGain[i];	  OutArray[j++] = InStruct.StochasticIndex[i];	  OutArray[j++] = InStruct.StochasticGain[i];	}/*  Now put in the Bishnu bit */	OutArray[j++] = InStruct.Bishnu;/*  Next the Hamming Code */	OutArray[j++] = InStruct.Hamming;/*  And last the sync bit */	OutArray[j] = InStruct.Sync;/*  Let the calling routine know how many parameters were filled */	return(j+1);}/***************************************************************************                                                                         ** ROUTINE*		FS1016Decode** FUNCTION*		Translate to bit structure from FS1016 compatible array* SYNOPSIS*		FS1016Encode(InArray, OutStruct)**   formal**                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*	InArray		int	 i	Array of FS1016 compatible parameters*	OutStruct	TX_BITS	 o	Structure of quantized parameters***************************************************************************/int FS1016Decode(int	InArray[],TX_BITS	*OutStruct){int	i, j=0;/*  Get the LSFs from the array */	for(i=0;i<ORDER;i++)	{	  OutStruct->lsf[i] = InArray[j++];	}/*  Put each subframe's parameters into the array */	for(i=0;i<NUM_SF;i++)	{	  OutStruct->AdaptiveDelay[i] = InArray[j++];	  OutStruct->AdaptiveGain[i] = InArray[j++];	  OutStruct->StochasticIndex[i] = InArray[j++];	  OutStruct->StochasticGain[i] = InArray[j++];	}/*  Now put in the Bishnu bit */	OutStruct->Bishnu = InArray[j++];/*  Next the Hamming Code */	OutStruct->Hamming = InArray[j++];/*  And last the sync bit */	OutStruct->Sync = InArray[j];/*  Let the calling routine know how many parameters were filled */	return(j+1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -