www.pudn.com > g729Decoder.rar > G_PITCH.asm


;========================================================================== 
;  File Name 
;  ---------- 
;  G_PITCH.ASM 
; 
;  Brief Description of the Code: 
;  ------------------------------ 
;  Compute correlations  and  to use in gains quantizer. 
;  Also compute the gain of pitch. Result in Q14 
;  if (gain < 0)  gain = 0 
;  if (gain >1.2) gain = 1.2 
; 
;  Ref 
;  ------ 
;  PITCH.C (G_pitch) 
;========================================================================== 
        .mmregs 
 
        .include  ..\include\const.h 
        .include  ..\include\tab_ld8a.h 
        .include  ..\include\ld8amem.h 
 
        .def      G_pitch 
 
        .ref      DIV16 
 
 
;---------------------------------------------------------------------- 
;  G_pitch 
;---------------------------------------------------------------------- 
;  Word16 G_pitch(      /* (o) Q14 : Gain of pitch lag saturated to 1.2       */ 
;    Word16 xn[],       /* (i)     : Pitch target.                            */ 
;    Word16 y1[],       /* (i)     : Filtered adaptive codebook.              */ 
;    Word16 g_coeff[],  /* (i)     : Correlations need for gain quantization. */ 
;    Word16 L_subfr     /* (i)     : Length of subframe.                      */ 
;  ) 
;---------------------------------------------------------------------- 
;  Contstants : Addr_xn1 -> xn 
;               Addr_yn1 -> y1 
;               Addr_g_coeff -> g_coeff 
;               L_SUBFR = L_subfr 
;---------------------------------------------------------------------- 
;  Output : A = G_pitch 
;---------------------------------------------------------------------- 
 
        .asg    "AR1", pG_coeff 
        .asg    "AR2", pXn 
        .asg    "AR3", pYn 
        .asg    "AR4", pNumer 
        .asg    "AR5", pDemon 
 
G_pitch: 
        STM     #Addr_yn1, pYn 
        STM     #Addr_g_coeff, pG_coeff 
        LD      #0, DP 
 
        LD      #1, A              ; avoid case of all zeros 
        RPT     #L_SUBFR - 1 
                SQURA   *pYn+, A 
 
        EXP     A 
        MVMM    pG_coeff, pDemon 
        NORM    A 
        ADD     #1, 15, A 
        SAT     A 
        STL     A, -16, *pG_coeff+ 
        LD      #15, B 
        SUB     T, B 
        STL     B, *pG_coeff+ 
        LD      T,B 
        STM     #Addr_xn1, pXn 
        STM     #Addr_yn1, pYn 
 
        RPTZ    A, #L_SUBFR - 1 
                MAC     *pXn+, *pYn+, A 
 
        EXP     A 
        STM     #TRN, pNumer 
        NORM    A 
        ADD     #1, 15, A 
        SAT     A 
        STL     A, -16, *pG_coeff+ 
        SFTA    A, -16 
 
        ST      #-15, *pG_coeff+ 
        RCD     ALEQ 
        ST      #0, *pG_coeff- 
 
        STL     A, -1, *pNumer 
        LD      #15, A 
        SUB     T, A 
        STL     A, *pG_coeff+ 
        LD      T,A 
        SUB     A,B 
   		LD      #-16,A 
		SUB     B,A 
		NOP 
		NOP 
		XC      2,AGT 
		        LD #-16,B 
        LD      BL, ASM   
        CALL   DIV16 
  
  
 
 
        AND     #0ffffh, A 
        LD      A, ASM, A 
        LD      #19661, B 
 
        RETD 
        MIN     A 
        STL     A, *pG_coeff