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

📄 encode.c

📁 LPC 2.4kbps codec meeting Federal Standard 1016 CELP implementation
💻 C
字号:
/********************************************************************	ENCODE Version 48*********************************************************************  Quantize LPC parameters for transmission** INPUTS:*  ORDER  - Number of RC's*  VOICE  - Half frame voicing decisions*  PITCH  - Pitch*  RMS    - Energy*  RC     - Reflection coefficients*  CORRP  - Error Correction: TRUE = yes, FALSE = none* OUTPUTS:*  IPITCH - Coded pitch and voicing*  IRMS   - Quantized energy*  IRC    - Quantized reflection coefficients**/#include "config.ch"#include "lpcdefs.h"#include <math.h>int enctab[16]={0,7,11,12,13,10,6,1,14,9,5,2,3,4,8,15};int entau[60]={19,11,27,25,29,21,23,22,30,14,15,7,39,     	38,46,42,43,41,45,37,53,49,51,50,54,52,     	60,56,58,26,90,88,92,84,86,82,83,81,85,     	69,77,73,75,74,78,70,71,67,99,97,113,112,     	114,98,106,104,108,100,101,76};int enadd[8]={1920,-768,2432,1280,3584,1536,2816,-1152};float enscl[8]={.0204,.0167,.0145,.0147,.0143,.0135,.0125,.0112};int enbits[8]={6,5,4,4,4,4,3,3};int entab6[64]={0,0,0,0,0,0,1,1,1,1,1,1,1,	2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,	5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,      	9,9,9,10,10,11,11,12,13,14,15};int rmst[64]={1024,936,856,784,718,656,600,550,      	502,460,420,384,352,328,294,270,      	246,226,206,188,172,158,144,132,      	120,110,102,92,84,78,70,64,      	60,54,50,46,42,38,34,32,      	30,26,24,22,20,18,17,16,      	15,14,13,12,11,10,9,8,      	7,6,5,4,3,2,1,0};encode(voice, pitch, rms, rc, ipitch, irms, irc )int voice[2], *pitch;float *rms, rc[ORDER];int *ipitch, *irms, irc[ORDER];{int i, j, i2, i3, mrk, nbit, idel;float ftemp;int itemp;/*  Scale RMS and RC's to integers */*irms = *rms;for(i=1;i<=ORDER;i++)	irc[i] = rc[i] * 32768;	/*  Encode pitch and voicing	*/if(voice[1]!=0&&voice[2]!=0) 	*ipitch = entau[*pitch-1];else	*ipitch = 0;	if(voice[1]!=voice[2]) *ipitch = 127;/*  Encode RMS by binary table search	*/j = 32;idel = 16;*irms = mmin(*irms,1023);while(idel>0)	{	if (*irms>rmst[j-1]) j -= idel;	if (*irms<rmst[j-1]) j += idel;	idel *= 0.5;}if (*irms>rmst[j-1]) j--;*irms = 31 - j*0.5;/*  Encode RC(1) and (2) as log-area-ratios	*/for(i=1;i<=2;i++)	{	i2 = irc[i];	mrk = 0;	if(i2<0) {		i2 = -i2 ;		mrk = 1;	}	i2 = i2>>9;	i2 = mmin(i2,63);	i2 = entab6[i2];	if(mrk!=0) i2 = -i2;	irc[i] = i2;}/*  Encode RC(3) - (10) linearly, remove bias then scale	*/for(i=3;i<=ORDER;i++)	{	i2 = irc[i]>>1;/*	i2 = (i2+enadd[ORDER-i])*enscl[ORDER-i]; */	/* problem with truncating negative numbers */	if(enadd[ORDER-i] < 0) { 	  ftemp = -(i2+enadd[ORDER-i])*enscl[ORDER-i];	  itemp = ftemp;    	  i2 = -itemp;	}	else    	  i2 = (i2+enadd[ORDER-i])*enscl[ORDER-i];/*****	i2 = mmin(mmax(i2,-127),127);	*****/	if( (i2 < -127) || (i2 > 127))	  if(i2 < -127)	    i2 = -127;	  else	    if (i2> 127)	      i2 = 127;	nbit = enbits[ORDER-i];	i3 = 0;	if(i2<0) i3 = -1;	/*i2 = i2/pow(2.,(float)nbit);*/	i2 = i2 / (2 << (nbit-1));	if(i3==-1) i2--;	irc[i] = i2;}/*          Protect the most significant bits of the most*     important parameters during non-voiced frames.*     RC(1) - RC(4) are protected using 20 parity bits*     replacing RC(5) - RC(10). */if(*ipitch==0||*ipitch==127) {	irc[5] = enctab[(irc[1]&30)>>1];	irc[6] = enctab[(irc[2]&30)>>1];	irc[7] = enctab[(irc[3]&30)>>1];	irc[8] = enctab[(*irms&30)>>1];	irc[9] = enctab[(irc[4]&30)>>1]>>1;	irc[10]= enctab[(irc[4]&30)>>1]&1;}}

⌨️ 快捷键说明

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