📄 chanwr.f
字号:
************************************************************************
*
* CHANL Version 49
*
************************************************************************
*
* CHANWR:
* Place quantized parameters into bitstream
*
* Inputs:
* ORDER - Number of reflection coefficients (not really variable)
* IPITV - Quantized pitch/voicing parameter
* IRMS - Quantized energy parameter
* IRC - Quantized reflection coefficients
* Output:
* IBITS - Serial bitstream
*
* CHANRD:
* Reconstruct parameters from bitstream
*
* Inputs:
* ORDER - Number of reflection coefficients (not really variable)
* IBITS - Serial bitstream
* Outputs:
* IPITV - Quantized pitch/voicing parameter
* IRMS - Quantized energy parameter
* IRC - Quantized reflection coefficients
*
* IBITS is 54 bits of LPC data ordered as follows:
* R1-0, R2-0, R3-0, P-0, A-0,
* R1-1, R2-1, R3-1, P-1, A-1,
* R1-2, R4-0, R3-2, A-2, P-2, R4-1,
* R1-3, R2-2, R3-3, R4-2, A-3,
* R1-4, R2-3, R3-4, R4-3, A-4,
* P-3, R2-4, R7-0, R8-0, P-4, R4-4,
* R5-0, R6-0, R7-1,R10-0, R8-1,
* R5-1, R6-1, R7-2, R9-0, P-5,
* R5-2, R6-2,R10-1, R8-2, P-6, R9-1,
* R5-3, R6-3, R7-3, R9-2, R8-3, SYNC
SUBROUTINE CHANWR( ORDER, IPITV, IRMS, IRC, IBITS )
INTEGER ORDER, IPITV, IRMS, IRC(ORDER), IBITS(54)
INTEGER I, ISYNC
INTEGER ITAB(13), IBLIST(53), BIT(10)
DATA BIT/ 2, 4, 8, 8, 8, 8, 16, 16, 16, 16 /
DATA IBLIST/13, 12, 11, 1, 2, 13, 12, 11, 1, 2, 13, 10,
1 11, 2, 1, 10, 13, 12, 11, 10, 2, 13, 12, 11,
1 10, 2, 1, 12, 7, 6, 1, 10, 9, 8, 7, 4,
1 6, 9, 8, 7, 5, 1, 9, 8, 4, 6, 1, 5,
1 9, 8, 7, 5, 6 /
DATA ISYNC/0/
************************************************************************
* Place quantized parameters into bitstream
************************************************************************
* Place parameters into ITAB
ITAB(1) = IPITV
ITAB(2) = IRMS
ITAB(3) = 0
DO I = 1,ORDER
ITAB(I+3) = AND( IRC(ORDER+1-I), 32767 )
END DO
* Put 54 bits into IBITS array
DO I = 1,53
IBITS(I) = AND(ITAB(IBLIST(I)),1)
ITAB(IBLIST(I)) = ITAB(IBLIST(I)) / 2
END DO
IBITS(54) = AND(ISYNC,1)
ISYNC = 1 - ISYNC
RETURN
************************************************************************
* Reconstruct parameters from bitstream
************************************************************************
ENTRY CHANRD( ORDER, IPITV, IRMS, IRC, IBITS )
* Reconstruct ITAB
DO I = 1,13
ITAB(I) = 0
END DO
DO I = 1,53
ITAB(IBLIST(54-I)) = ITAB(IBLIST(54-I))*2 + IBITS(54-I)
END DO
* Sign extend RC's
DO I = 1,ORDER
IF( AND( ITAB(I+3), BIT(I) ) .NE. 0 )
1 ITAB(I+3) = ITAB(I+3) - 2*BIT(I)
END DO
* Restore variables
IPITV = ITAB(1)
IRMS = ITAB(2)
DO I = 1,ORDER
IRC(I) = ITAB(ORDER+4-I)
END DO
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -