⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acelp_ca.asm

📁 TI C54写的G729代码,视线8kbps高质量语音编码,汇编优化
💻 ASM
字号:
;================================================================
;  File Name
;  ----------
;  ACELP_CO.ASM
;
;  Brief Description of the Code:
;  ------------------------------
;  Find Algebraic codebook.
;
;  Ref
;  ------
;  ACELP_CO.C (ACELP_Codebook)
;==============================================================


        .mmregs

        .include  ..\include\const.h
        .include  ..\include\tab_ld8a.h
        .include  ..\include\ld8amem.h

        .def      ACELP_Codebook

        .ref      Cor_h
        .ref      Corr_h_x
        .ref      D4i40_17_fast


;-----------------------------------------------------------------
;  ACELP_Codebook
;-----------------------------------------------------------------
;  Word16  ACELP_Codebook( /* (o)   :index of pulses positions   */
;    Word16 x[],           /* (i)   :Target vector               */
;    Word16 h[],           /* (i)Q12:Impulse response of filters */
;    Word16 T0,            /* (i)   :Pitch lag                   */
;    Word16 pitch_sharp,   /* (i)Q14:Last quantized pitch gain   */
;    Word16 code[],        /* (o)Q13:Innovative codebook         */
;    Word16 y[],           /* (o)Q12:Filtered innovative codebook*/
;    Word16 *sign          /* (o)   :Signs of 4 pulses           */
;  )
;------------------------------------------------------------------
;------------------------------------------------------------------
;  Constants : Addr_Dn -> Dn
;              Addr_rr -> rr
;              Addr_DnSign -> DnSign
;
;              Addr_xn2 -> x
;              Addr_h1 -> h
;              Addr_T0 -> T0
;              Addr_cn -> code
;              Addr_yn2 -> y
;
;  Pointers  : ptr_sharp -> pitch_sharp
;
;  Variables : PulseIndex = D4i40_17(xxxxx) = ACELP_Codebook(xxxxx)
;              PulseSign  = sign
;------------------------------------------------------------------
;  Memmory map requirement :
;                            PulseIndex .set  PulseSign + 1
;-------------------------------------------------------------------

        .asg    "AR2", pHn1
        .asg    "AR3", pHn2
        .asg    "AR4", pHn_i_T0

        .asg    "AR2", pSharp

ACELP_Codebook:

; Include fixed-gain pitch contribution into impulse resp. h[]
; Find correlations of h[] needed for the codebook search.

     ; sharp = shl(pitch_sharp, 1); /* From Q14 to Q15 */
     ; if (sub(T0, L_SUBFR)<0)

     ;   /* h[i] += pitch_sharp*h[i-T0] */
     ;   for (i = T0; i < L_SUBFR; i++)
     ;     h[i] = add(h[i], mult(h[i-T0], sharp));

        LD      #Addr_T0, DP
        LD      #L_SUBFR - 1, A
        SUB     Addr_T0, A
        LD      Addr_T0, B
        BCD     EndFindHn, ALT			;if T0>L_SUBFR do nothing.
        ADD     #Addr_h1, B				;B save the address of h1[T0]

                MVDM    ptr_sharp, pSharp
                STLM    A, BRC
                LD      *pSharp, 1, A
                STLM    B, pHn1
                STLM    B, pHn2
                STLM    A, T
                STM     #Addr_h1, pHn_i_T0
                LD      #0, ASM
                LD      *pHn1+,16,  A    
                MPY    *pHn_i_T0+, B    
                ADD     B,A
                
                RPTB   EndFindHn - 1

                        STL		A,-16, *pHn2+ 
                        LD    	*pHn1+,16, A
                        MPY    	*pHn_i_T0+, B 
                        ADD     B,A

EndFindHn:              


        CALL    Cor_h
        
        CALLD    Corr_h_x
		STM #Addr_xn2,AR5
        	
        CALL    D4i40_17_fast

   ;  Compute innovation vector gain.
   ;  Include fixed-gain pitch contribution into code[].

     ; if(sub(T0 ,L_SUBFR) <0)

     ;   for (i = T0; i < L_SUBFR; i++)
     ;   {
     ;     code[i] = add(code[i], mult(code[i-T0], sharp));
     ;   }

        LD      #Addr_cn, A
        CALL    AddFixedGain

        RET


;------------------------------------------------------------------
;  AddFixedGain
;------------------------------------------------------------------
;  void  AddFixedGain(
;    Word16 S[],        /* (i/o)   : Source/Target vector        */
;    Word16 T0,         /* (i)     :Pitch lag                    */
;    Word16 pitch_sharp,/* (i) Q14 :Last quantized pitch gain    */
;  )
;------------------------------------------------------------------
; sharp = shl(pitch_sharp, 1);          /* From Q14 to Q15 */
; if (sub(T0, L_SUBFR)<0)
;   for (i = T0; i < L_SUBFR; i++) /* h[i] += pitch_sharp*h[i-T0] */
;     S[i] = add(S[i], mult(S[i-T0], sharp));
;------------------------------------------------------------------
;  Constants : Addr_T0 -> T0
;
;  Pointers  : ptr_sharp -> pitch_sharp
;
;  Input Register : AL = &S
;------------------------------------------------------------------

        .asg    "AR2", pSn1
        .asg    "AR3", pSn2
        .asg    "AR4", pSn_i_T0

AddFixedGain:
        LD      #Addr_T0, DP
        LD      #L_SUBFR - 1, B
        SUB     Addr_T0, B
        BCD     EndFindSn, BLT
        STLM    A, pSn_i_T0
        ADD     Addr_T0, A

                MVDM    ptr_sharp, pSharp
                STLM    B, BRC
                LD      *pSharp, 1, B
                STLM    A, pSn1
                STLM    A, pSn2
                STLM    B, T
                LD      #0, ASM
                LD      *pSn1+, 16, A 
                MPY    *pSn_i_T0+, B 
                ADD     B,A

                RPTB   EndFindSn - 1

                        STL      A,-16, *pSn2+    
                        LD    *pSn1+,16, A
                        MPY    *pSn_i_T0+, B 
                        ADD     B,A

EndFindSn:

        RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -