📄 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -