📄 lsp_intp.asm
字号:
;==========================================================================
; File Name
; ----------
; LSP_INTP.ASM
;
; Brief Description of the Code:
; ------------------------------
; Find the polynomial F1(z) and F2(z) from the LSPs
;
; Ref
; ------
; LPCFUNC.C
;==========================================================================
;-----------------------------------------------------------
; procedure Get_lsp_pol:
; ~~~~~~~~~~~
; Find the polynomial F1(z) and F2(z) from the LSPs
;-----------------------------------------------------------
;
; Parameters:
; lsp[] : line spectral freq. (cosine domain) in Q15
; f1[] : the coefficients of F1 in Q24
; f2[] : the coefficients of F2 in Q24
;-----------------------------------------------------------
; void Get_lsp_pol(Word16 *lsp, Word32 *f)
;-----------------------------------------------------------
; Input : AR2 -> f1
; AR3 -> f2
; AR5 -> lsp
;
; Output: f1[], f2[]
; AR0 = 4
; AR2 -> f1[NC+1-2]=f1[4]
; AR3 -> f2[NC+1-2]=f2[4]
; AR5 -> lsp
;
; Modified Registers: AR0, AR1, AR2, AR3, AR4, AR5
;-----------------------------------------------------------
.mmregs
.include ..\include\const.h
.text
.def Get_lsp_pol
.def LOOP
One_Q24 .set 100h
.asg "AR2", pf1
.asg "AR3", pf2
.asg "AR4", pLspCoef
.asg "AR5", pB ; AR5 -> BL or BH
Get_lsp_pol:
LD #One_Q24, 16, A
DST A, *pf1+
DST A, *pf2+
LD *pLspCoef+, 10, A
NEG A
DST A, *pf1- ; pf1 -> f1[-2]
LD *pLspCoef+, 10, A
NEG A
DST A, *pf2- ; pf2 -> f2[-2]
STM #2-2, AR0 ; AR0 = i-2
STM #5-2+1, AR1 ; AR1 = 5-2+1 = 4
STM BL, AR5 ; initially AR5 -> BL
LOOP MVDM AR0, BRC
PSHM AR0
MVMM AR1, AR0 ; AR0 = 4
DLD *pf1+0, A ; *f1 = f1[-2]
DST A, *pf1
RPTBD BLK_END-1
DLD *pf2+0, A ; *f2 = f2[-2]
DST A, *pf2
; Compute *f1+=(f1[-2]-2*f1[-1]*lsp)
DLD *pf1-, A
DLD *pf1-, B
DADD *pf1+0, A
DST A, *pf1
SFTA B, -1
SFTA B, 1 ; to be bit-exact with C code
LD #0, A
MACSU *pB+, *pLspCoef, A
LD A, -16, A
LD A, -1, A
LD A, 1, A
MAC *pB-, *pLspCoef+, A
LD A, 1, A
DRSUB *pf1, A
DST A, *pf1-
; Compute *f2+=(f2[-2]-2*f2[-1]*lsp)
DLD *pf2-, A
DLD *pf2-, B
DADD *pf2+0, A
DST A, *pf2
SFTA B, -1
SFTA B, 1 ; to be bit-exact with C code
LD #0, A
MACSU *pB+, *pLspCoef, A
LD A, -16, A
LD A, -1, A
LD A, 1, A
MAC *pB-, *pLspCoef-, A
LD A, 1, A
DRSUB *pf2, A
DST A, *pf2-
BLK_END
POPM AR0 ; AR0 = i-2
LD *pLspCoef+, 10, A
DRSUB *pf1, A
DST A, *pf1+0
MAR *pf1+0 ; f1+=(i-2)
LD *pLspCoef+, 10, A
DRSUB *pf2, A
DST A, *pf2+0
MAR *pf2+0 ; f2+=(i-2)
MAR *AR0+ ; i++
CMPR 0, AR1
BC LOOP, NTC
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -