www.pudn.com > g729Decoder.rar > QUA_LSP.asm
;==========================================================================
; File Name
; ----------
; QUA_LSP.ASM
;
; Brief Description of the Code:
; ------------------------------
; Quantize LSP coefficients.
;
; Ref
; ------
; QUA_LSP.C, LSPGETQ.C, LPCFUNC.C
;==========================================================================
.mmregs
.include ../include/const.h
.include ../include/tab_ld8a.h
.include ../include/ld8amem.h
.text
.def QUA_LSP
.def Get_wegt
.ref Lsp_prev_extract ; lsp_extr.asm
.ref Lsp_select_L1 ; lsp_sel.asm
.ref Lsp_select_L2L3 ; lsp_sel.asm
.ref Lsp_expand_1_2 ; lsp_expn.asm
.ref Lsp_get_tdist ; lsp_dist.asm
.ref Lsp_prev_compose ; lsp_comp.asm
.ref Lsp_prev_update ; lsp_updt.asm
.ref Lsp_stability ; lsp_stb.asm
.ref Lsp_Lsf2 ; lsp_lsf.asm
.ref Lsf_Lsp2 ; lsp_lsf.asm
;-----------------------------------------------------------------------
; QUA_LSP
;-----------------------------------------------------------------------
; Constants : Addr_L0 -> L0
; Addr_L1 -> L1[0]
; &Lspcb1[L1[0]]
; L1[1]
; &Lspcb1[L1[0]]
; Addr_L2 -> L2[0]
; &Lspcb2[L2[0]]
; L2[1]
; &Lspcb2[L2[0]]
; Addr_L3 -> L3[0]
; &Lspcb2[L3[0]]
; L3[1]
; &Lspcb2[L3[0]]
;
;-----------------------------------------------------------------------
fg_size .set MA_NP * M
.asg "AR1", pLerror
.asg "AR2", pL123
.asg "AR3", pCode
.asg "AR2", pLspVecQ13
.asg "AR3", pLspCb1Q13
.asg "AR4", pLspCb2Q13
.asg "AR6", AR_Counter
QUA_LSP:
STM #M, BK
CALLD Lsp_Lsf2
STM #M-1, BRC
CALLD Get_wegt
STM #2 - 1, AR_Counter
LD #ptr_MA_coef, DP
ST #Addr_lsp_vec_buf1Q13, ptr_lsp_vec
ST #fg, ptr_MA_coef
ST #fg_sum_inv_Q12, ptr_MA_sum_inv
ST #fg_sum, ptr_MA_sum
ST #Addr_L1, ptr_L1
ST #Addr_L2, ptr_L2
ST #Addr_L3, ptr_L3
ST #Addr_mean_sqr_err, ptr_mean_sqr_err
FindLspIndex:
CALLD Lsp_prev_extract
STM #Addr_lsf_coefQ13, AR3
CALLD Lsp_select_L1
ADDM #fg_size, ptr_MA_coef
CALLD Lsp_select_L2L3
ADDM #M, ptr_MA_sum_inv
STM #5 - 1, BRC
MVDM ptr_sel_lspcb1, pLspCb1Q13
MVDM ptr_sel_lspcb2_L2, pLspCb2Q13
RPTBD EndVecL1L2 - 1
MVDM ptr_lsp_vec, pLspVecQ13
ADD *pLspCb1Q13+, *pLspCb2Q13+, A
STL A, -16, *pLspVecQ13+
EndVecL1L2:
STM #5 - 1, BRC
MVDM ptr_sel_lspcb2_L3, pLspCb2Q13
RPTB EndVecL1L3 - 1
ADD *pLspCb1Q13+, *pLspCb2Q13+, A
STL A, -16, *pLspVecQ13+
EndVecL1L3:
CALLD Lsp_expand_1_2
STM #GAP1, T
CALLD Lsp_expand_1_2
STM #GAP2, T
CALL Lsp_get_tdist
ADDM #M, ptr_MA_sum ; ptr_MA_sum -> fg[1]
ADDM #16, ptr_lsp_vec ; ptr_lsp_vec -> Addr_lsp_vec_buf2Q13
BANZ FindLspIndex, *AR_Counter-
; select L0
; from Lsp_get_tdist : B = Err[1], pLerror -> &Err[3]
MAR *+pLerror(-4) ; pLerror -> &Err[0]
DSUB *pLerror, B ; B = Err[1] - Err[0]
STM #Addr_L1, pL123
MVDM ptr_codeword, pCode
STM #4, AR0
BCD Select1, BLT ; Lsp_last_select
ADDM #-16, ptr_lsp_vec
Select0:
ADDM #-2 * M, ptr_MA_sum
ADDM #-2 * fg_size, ptr_MA_coef
LD #0, A
BD QuaCoef
ADDM #-16, ptr_lsp_vec
Select1:
MAR *+pL123(2)
LD #1, 7, A
ADDM #-M, ptr_MA_sum
ADDM #-fg_size, ptr_MA_coef
QuaCoef:
OR *pL123+0, A
STL A, *pCode+
LD *pL123+0, 5, A
OR *pL123, A
STL A, *pCode
CALL Lsp_prev_compose
CALL Lsp_prev_update
CALL Lsp_stability
CALLD Lsf_Lsp2
STM #M-1, BRC
RETD
ADDM #2, ptr_codeword
;-----------------------------------------------------------------------
; Get_wegt
;-----------------------------------------------------------------------
; void Get_wegt(
; Word16 flsp[], /* (i) Q13 : M LSP parameters */
; Word16 wegt[] /* (o) Q11->norm : M weighting coefficients */
; )
;-----------------------------------------------------------------------
; Equation 22
;-----------------------------------------------------------------------
; Constants : Addr_lsf_coefQ13 -> flsp
; Addr_wegtQ11 -> wegt
;
; note : *(Addr_lsf_coefQ13 - 1) = PI04 = 0.4 ã
; *(Addr_lsf_coefQ13 + 10) = PI92 = 0.92 ã
;-----------------------------------------------------------------------
.asg "AR2", pLsf1Q13
.asg "AR3", pLsf2Q13
.asg "AR4", pWegtQ11
Get_wegt:
STM #Addr_lsf_coefQ13-1, pLsf1Q13
STM #Addr_lsf_coefQ13+1, pLsf2Q13
STM #Addr_wegtQ11, pWegtQ11
LD #1, 16, B
STM #CONST10, T
STM #M-1, BRC
LD B, 11, B ; B = 1 in Q27
STM #4,AR5
RPTB EndGetWeight - 1
SUB *pLsf2Q13+, *pLsf1Q13+, A
SUB B, 2, A
BC NegDif, ALT
LD B, A
B SaveW
NegDif:
SQUR A, A
SFTA A,2 ; Q27 -> Q31
STL A,-16,*AR5
MPY *AR5,A
LD A,2,A
ADD B,A
SaveW:
STL A, -16, *pWegtQ11+
EndGetWeight:
STM #Addr_wegtQ11+4, pWegtQ11
STM #CONST12, T
MPY *pWegtQ11, A ; update W4
STL A, -15, *pWegtQ11+ ; Q26 -> Q11
MPY *pWegtQ11, A ; update W5
STL A, -15, *pWegtQ11 ; Q26 -> Q11
STM #Addr_wegtQ11,pWegtQ11
LD #0,A
STM #9,BRC
RPTB Ma-1
LD *pWegtQ11+,B
MAX A
Ma:
EXP A
STM #Addr_wegtQ11,pWegtQ11
STM #9,BRC
RPTB Scale-1
LD *pWegtQ11,A
NORM A
STL A,-16, *pWegtQ11+
Scale:
RET