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

📄 energy.asm

📁 TI C54写的G729代码,视线8kbps高质量语音编码,汇编优化
💻 ASM
字号:
;===============================================================
;  File Name
;  ----------
;  ENERGY.ASM
;
;  Brief Description of the Code:
;  ------------------------------
;  Find the lag that has maximum correlation with scal_sig[]
;  Compute energy of maximum
;
;  Ref
;  ------
;  PITCH_A.C
;===============================================================
;  energy
;---------------------------------------------------------------
;  arguments:
;
;    signal[]   :Signal used to compute the open loop pitch.
;    L_frame    :Length of frame to compute pitch.
;    lag_max    :Maximum lag
;    lag_min    :Minimum lag
;    *cor_max   ;Maximum of normalized correlation of lag found.
;
;  Return lag found.
;---------------------------------------------------------------
;  Str_Lag_max        .struct
;  ptr_signal         .word   1
;  lag_max            .word   1
;  lag_min            .word   1
;  ptr_cor_max        .word   1
;  Str_Lag_max_Len    .endstruct
;---------------------------------------------------------------
;  Buffer : Addr_lag_max_buf[2] at even boundary
;---------------------------------------------------------------
;  Output : AR5 = max
;  Modified Registers: AR4, AR5
;---------------------------------------------------------------
		.MMREGS
		.include ..\include\const.h
		.include ..\include\struct.h
		.include ..\include\ld8amem.h

                .def     energy
		.ref     Inv_sqrt               ; dspfunc.asm

param_lag_max   .tag     Str_Lag_max

		.asg     "Addr_lag_max_buf", max
                .asg     "Addr_lag_max_buf+2", inv_energy  

                .asg     "ptr_wsp",                  signal
                .asg     "Addr_pitch_ol_buf",        scal_sig
                .asg     "scal_sig+PIT_MAX+L_FRAME", max3
                .asg     "max3+1",                   max2
                .asg     "max2+1",                   max1
                .asg     "max1+1",                   p_max3
                .asg     "p_max3+1",                 p_max2
                .asg     "p_max2+1",                 p_max1

;-------------------------------------------------------------
;  note : param_lag_max is set at Addr_pitch_ol_buf + 230,
;         which is same data page as Addr_lag_max_buf
;-------------------------------------------------------------

        .asg     "AR1", p_max
		.asg     "AR4", pTemp
		.asg     "AR5", pMax

		.asg     "AR4", pSig
		.asg     "AR5", pSig1

energy:

        STM     #scal_sig+PIT_MAX, pSig ; pSig -> scal_sig[0]
        MVMM    p_max, AR0
        NOP
        MAR     *pSig-0                 ; pSig -> scal_sig[-p_max]

        LD      #L_FRAME, 0, A
        ROR     A
        SUB     #1, 0, A
        STLM    A, AR6
        LD      #1, 0, A              ; to avoid division by zero

L0:             SQURA    *pSig, A
                MAR      *+pSig(2)
                BANZ     L0, *AR6-

        LD      #0, DP
        CALLD   Inv_sqrt             ; A = ener
        STM     #AL, pTemp
                NOP
        STM     #inv_energy, pTemp   ; pTemp -> inv_energy_h

        STL     A, -16, *pTemp
        NOP
        LD      *pTemp+, 15, B
        LD      A, -1, A
        SUB     B, A
        STL     A, *pTemp


        STM     #inv_energy, pTemp      ; pTemp -> inv_energy_h
        STM     #max+1, pMax            ; pMax -> max_l
        LD      #0, B
        LD      #0, A
        MACSU   *pMax-,  *pTemp+, B     ; B += max_l * inv_energy_h
        LD      B, -16, B
        LD      B, 1, B
        MACSU   *pTemp-, *pMax,   A     ; B += max_h * inv_energy_l
        LD      A, -16, A
        LD      A, 1, A
        ADD     A, B
        MAC     *pTemp, *pMax, B
               
        MVDM    param_lag_max.ptr_cor_max, AR5
        NOP
        NOP
        STL     B, *AR5
        RET


⌨️ 快捷键说明

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