www.pudn.com > g729Decoder.rar > LSP_LSF.asm
;==========================================================================
; File Name
; ----------
; LSP_LSF.ASM
;
; Brief Description of the Code:
; ------------------------------
; Lsp_Lsf2 : convert lsp coefficients to lsf coefficients.
; Lsf_Lsp2 : convert lsf coefficients to lsp coefficients.
;
; Ref
; ------
; LPCFUNC.C
;==========================================================================
.mmregs
.include ..\include\const.h
.include ..\include\tab_ld8a.h
.include ..\include\ld8amem.h
.text
.def Lsp_Lsf
.def Lsp_Lsf2
.def Lsf_Lsp2
;-----------------------------------------------------------------------
; Lsp_Lsf
;-----------------------------------------------------------------------
; void Lsp_lsf(
; Word16 lsp[], /* (i) Q15 : lsp[m] (range: -1<=val<1) */
; Word16 lsf[], /* (o) Q15 : lsf[m] normalized (range: 0.0<=val<=1) */
; Word16 m /* (i) : LPC order */
; )
;-----------------------------------------------------------------------
; Pointers : ptr_lsp_coef -> lsp
; ptr_lsf_coef -> lsf
;
; Input : BRC = m - 1
;
;-----------------------------------------------------------------------
; Note : output of ASM code = output of C code << 1
;
; There is no need to shift lsf[] left one bit in Perc_var().
;-----------------------------------------------------------------------
.asg "AR1", AR_Index
.asg "AR2", pLspCoef
.asg "AR3", pLsfCoef
.asg "AR4", pCosTable
.asg "AR5", pSlopeACosQ12
Lsp_Lsf:
MVDM ptr_lsp_coef, pLspCoef
MVDM ptr_lsf_coef, pLsfCoef
STM #CosTable+63, pCosTable
STM #SlopeACosQ12+63, pSlopeACosQ12
MAR *+pLspCoef(M-1)
MAR *+pLsfCoef(M-1)
RPTBD End_Lsp_Lsf1-1
STM #63, AR_Index
LD *pLspCoef-, 16, B
FindCosIndex1:
SUB *pCosTable-, 16, B, A
BCD FindCosIndex1, AGT
MAR *pSlopeACosQ12-
MAR *AR_Index-
MAR *pSlopeACosQ12+
MAR *AR_Index+
; acos(lsp[i])= ind*512 + (slope_acos[ind]*offset >> 11)
MPYA *pSlopeACosQ12 ; B = SlopeACosQ12[ind]*offset
LDM AR_Index, A
MAR *pCosTable+
SFTA A, 9
sfta b,4,b
add #1,16,b
ADD B, -16, A
ld a,-1,a
ld a,1,a
STL A, *pLsfCoef-
End_Lsp_Lsf1:
RET
;-----------------------------------------------------------------------
; Lsp_Lsf2
;-----------------------------------------------------------------------
; void Lsp_lsf2(
; Word16 lsp[], /* (i) Q15 : lsp[m] (range: -1<=val<1) */
; Word16 lsf[], /* (o) Q13 : lsf[m] (range: 0.0<=val lsp[]
; Addr_lsf_coefQ13 -> lsf[]
;
; Input : BRC = m - 1
;
;-----------------------------------------------------------------------
; note : *(Addr_lsf_coefQ13 - 1) = PI04 = 0.4 ã
; *(Addr_lsf_coefQ13 + 10) = PI92 = 0.92 ã
;
;-----------------------------------------------------------------------
.asg "AR1", AR_Index
.asg "AR2", pLspCoef
.asg "AR3", pLsfCoefQ13
.asg "AR4", pCosTable
.asg "AR5", pSlopeACosQ12
Lsp_Lsf2:
STM #Addr_lsp_coef+M-1, pLspCoef
STM #Addr_lsf_coefQ13+M, pLsfCoefQ13
STM #CosTable+63, pCosTable
STM #SlopeACosQ12+63, pSlopeACosQ12
ST #PI92, *pLsfCoefQ13- ; *(Addr_lsf_coefQ13 + 10) = PI92 = 0.92 ã
RPTBD End_Lsp_Lsf-1
STM #63, AR_Index
LD *pLspCoef-, 16, B
FindCosIndex:
SUB *pCosTable-, 16, B, A
BCD FindCosIndex, AGT
MAR *pSlopeACosQ12-
MAR *AR_Index-
MAR *pSlopeACosQ12+
MAR *AR_Index+
; acos(lsp[i])= ind*512 + (slope_acos[ind]*offset >> 11)
MPYA *pSlopeACosQ12 ; B = SlopeACosQ12[ind]*offset
LDM AR_Index, A
MAR *pCosTable+
SFTA A, 10
ADD B, -11, A
SFTA A, 15
STM #25736, T ; 25736: 2.0*PI in Q12
MPYA A
STL A, -16, *pLsfCoefQ13-
End_Lsp_Lsf:
RETD
ST #PI04, *pLsfCoefQ13 ; *(Addr_lsf_coefQ13 - 1) = PI04 = 0.4 ã
;-----------------------------------------------------------------------
; Lsf_Lsp2
;-----------------------------------------------------------------------
; void Lsf_lsp2(
; Word16 lsf[], /* (i) Q13 : lsf[m] (range: 0.0<=val lsp[]
; Addr_lsfq_coefQ13 -> lsf[]
;
; Input : BRC = m - 1
; DP = Lmin1
;-----------------------------------------------------------------------
Inv2PIQ27 .set 20861
.asg "AR1", pSlopeCosQ19
.asg "AR5", pInv2PIQ27
.asg "Lmin1", xAddr_Inv2PISQ27
Lsf_Lsp2:
STM #xAddr_Inv2PISQ27, pInv2PIQ27
STM #Addr_lsfq_coefQ13, pLsfCoefQ13
ST #Inv2PIQ27, *pInv2PIQ27
RPTBD EndLsf_Lsp - 1
STM #Addr_lspq_coef, pLspCoef
MPY *pLsfCoefQ13+, *pInv2PIQ27, A
LD A, -16, B
LD B, -8, B
STLM B, pSlopeCosQ19
STLM B, pCosTable
AND #0ffh, 16, A ; A_hi = offset in Q8
MAR *+pSlopeCosQ19(SlopeCosQ19)
MAR *+pCosTable(CosTable)
MPYA *pSlopeCosQ19 ; B(Q29) = Offsse * SlopeCos[ind]
SFTA B, -13
ADD *pCosTable, B
STL B, *pLspCoef+
EndLsf_Lsp:
RET