www.pudn.com > g729Decoder.rar > 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