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

📄 encode.f

📁 是个是LPC源代码
💻 F
字号:
********************************************************************	ENCODE Version 54*********************************************************************  Quantize LPC parameters for transmission** INPUTS:*  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*	SUBROUTINE ENCODE(VOICE, PITCH, RMS, RC,     1                    IPITCH, IRMS, IRC )	INCLUDE 'config.fh'	INCLUDE 'contrl.fh'	INTEGER VOICE(2), PITCH	REAL RMS, RC(ORDER)	INTEGER IPITCH, IRMS, IRC(ORDER)	INTEGER I, J, I2, I3, MRK, NBIT, IDEL	INTEGER ENCTAB(16), ENTAB6(64), RMST(64)	INTEGER ENTAU(60), ENBITS(8), ENADD(8)	REAL ENSCL(8)	DATA ENCTAB/0,7,11,12,13,10,6,1,14,9,5,2,3,4,8,15/	DATA ENTAU/19,11,27,25,29,21,23,22,30,14,15,7,39,     1  	38,46,42,43,41,45,37,53,49,51,50,54,52,     1  	60,56,58,26,90,88,92,84,86,82,83,81,85,     1  	69,77,73,75,74,78,70,71,67,99,97,113,112,     1  	114,98,106,104,108,100,101,76/	DATA ENADD/1920,-768,2432,1280,3584,1536,2816,-1152/	DATA ENSCL/.0204,.0167,.0145,.0147,.0143,.0135,.0125,.0112/	DATA ENBITS/6,5,4,4,4,4,3,3/	DATA ENTAB6/6*0,7*1,7*2,7*3,7*4,5*5,5*6,5*7,4*8,     1  	3*9,2*10,2*11,12,13,14,15/	DATA RMST/1024,936,856,784,718,656,600,550,     1  	502,460,420,384,352,328,294,270,     1  	246,226,206,188,172,158,144,132,     1  	120,110,102,92,84,78,70,64,     1  	60,54,50,46,42,38,34,32,     1  	30,26,24,22,20,18,17,16,     1  	15,14,13,12,11,10,9,8,     1  	7,6,5,4,3,2,1,0/*  Scale RMS and RC's to integers	IRMS = RMS	DO I = 1,ORDER	   IRC(I) = RC(I) * 2.**15	END DO		IF(LISTL.GE.3)WRITE(FDEBUG,800)VOICE,PITCH,IRMS,(IRC(I),I=1,ORDER)800	FORMAT(1X,/,' <<ENCODE IN>>',T32,2I3,I6,I5,T50,10I8)*  Encode pitch and voicing	IF(VOICE(1).NE.0.AND.VOICE(2).NE.0) THEN	   IPITCH = ENTAU(PITCH)	ELSE	   IF(CORRP) THEN	      IPITCH = 0	      IF(VOICE(1).NE.VOICE(2)) IPITCH = 127	   ELSE	      IPITCH = 2*VOICE(1) + VOICE(2)	   END IF	END IF*  Encode RMS by binary table search	J = 32	IDEL = 16	IRMS = MIN(IRMS,1023)	DO WHILE(IDEL.GT.0)	   IF (IRMS.GT.RMST(J)) J = J - IDEL	   IF (IRMS.LT.RMST(J)) J = J + IDEL	   IDEL = IDEL/2	END DO	IF (IRMS.GT.RMST(J)) J = J - 1	IRMS = 31 - J/2*  Encode RC(1) and (2) as log-area-ratios	DO I = 1,2	   I2 = IRC(I)	   MRK = 0	   IF(I2.LT.0) THEN	      I2 = -I2	      MRK = 1	   END IF	   I2 = I2/(2**9)	   I2 = MIN(I2,63)	   I2 = ENTAB6(I2+1)	   IF(MRK.NE.0) I2 = -I2	   IRC(I) = I2	END DO*  Encode RC(3) - (10) linearly, remove bias then scale	DO I = 3,ORDER	   I2 = IRC(I)/2	   I2 = (I2+ENADD(ORDER+1-I))*ENSCL(ORDER+1-I)	   I2 = MIN(MAX(I2,-127),127)	   NBIT = ENBITS(ORDER+1-I)	   I3 = 0	   IF(I2.LT.0) I3 = -1	   I2 = I2/(2**NBIT)	   IF(I3.EQ.-1) I2 = I2-1	   IRC(I) = I2	END DO*          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(CORRP) THEN	   IF(IPITCH.EQ.0.OR.IPITCH.EQ.127) THEN	      IRC(5) = ENCTAB(AND(IRC(1),30)/2+1)	      IRC(6) = ENCTAB(AND(IRC(2),30)/2+1)	      IRC(7) = ENCTAB(AND(IRC(3),30)/2+1)	      IRC(8) = ENCTAB(AND(IRMS,30)/2+1)	      IRC(9) = (ENCTAB(AND(IRC(4),30)/2+1))/2	      IRC(10)= AND(ENCTAB(AND(IRC(4),30)/2+1),1)	   END IF	END IF	IF(LISTL.GE.3)WRITE(FDEBUG,801)VOICE,IPITCH,IRMS,(IRC(J),J=1,ORDER)801	FORMAT(1X,'<<ENCODE OUT>>',T32,2I3,I6,I5,T50,10I8)	RETURN	END

⌨️ 快捷键说明

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