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

📄 qua_lsp.asm

📁 TI C54写的G729代码,视线8kbps高质量语音编码,汇编优化
💻 ASM
字号:
;==========================================================================
;  File Name
;  ----------
;  QUA_LSP.ASM
;
;  Brief Description of the Code:
;  ------------------------------
;  Quantize LSP coefficients.
;
;  Ref
;  ------
;  QUA_LSP.C, LSPGETQ.C, LPCFUNC.C
;==========================================================================
        .mmregs

        .include  ../include/const.h
        .include  ../include/tab_ld8a.h
        .include  ../include/ld8amem.h

        .text
        .def    QUA_LSP
        .def    Get_wegt

        .ref    Lsp_prev_extract     ; lsp_extr.asm
        .ref    Lsp_select_L1        ; lsp_sel.asm
        .ref    Lsp_select_L2L3      ; lsp_sel.asm
        .ref    Lsp_expand_1_2       ; lsp_expn.asm
        .ref    Lsp_get_tdist        ; lsp_dist.asm

        .ref    Lsp_prev_compose     ; lsp_comp.asm
        .ref    Lsp_prev_update      ; lsp_updt.asm
        .ref    Lsp_stability        ; lsp_stb.asm

        .ref    Lsp_Lsf2             ; lsp_lsf.asm
        .ref    Lsf_Lsp2             ; lsp_lsf.asm


;-----------------------------------------------------------------------
;  QUA_LSP
;-----------------------------------------------------------------------
;  Constants :  Addr_L0 -> L0
;               Addr_L1 -> L1[0]
;                          &Lspcb1[L1[0]]
;                          L1[1]
;                          &Lspcb1[L1[0]]
;               Addr_L2 -> L2[0]
;                          &Lspcb2[L2[0]]
;                          L2[1]
;                          &Lspcb2[L2[0]]
;               Addr_L3 -> L3[0]
;                          &Lspcb2[L3[0]]
;                          L3[1]
;                          &Lspcb2[L3[0]]
;
;-----------------------------------------------------------------------


fg_size  .set   MA_NP * M

        .asg    "AR1", pLerror

        .asg    "AR2", pL123
        .asg    "AR3", pCode

        .asg    "AR2", pLspVecQ13
        .asg    "AR3", pLspCb1Q13
        .asg    "AR4", pLspCb2Q13

        .asg    "AR6", AR_Counter


QUA_LSP:
        STM     #M, BK

        CALLD   Lsp_Lsf2
        STM     #M-1, BRC

        CALLD   Get_wegt
        STM     #2 - 1, AR_Counter

        LD      #ptr_MA_coef, DP

        ST      #Addr_lsp_vec_buf1Q13, ptr_lsp_vec

        ST      #fg, ptr_MA_coef
        ST      #fg_sum_inv_Q12, ptr_MA_sum_inv
        ST      #fg_sum, ptr_MA_sum

        ST      #Addr_L1, ptr_L1
        ST      #Addr_L2, ptr_L2
        ST      #Addr_L3, ptr_L3

        ST      #Addr_mean_sqr_err, ptr_mean_sqr_err

FindLspIndex:

                CALLD   Lsp_prev_extract
                STM     #Addr_lsf_coefQ13, AR3

                CALLD   Lsp_select_L1
                ADDM    #fg_size, ptr_MA_coef

                CALLD   Lsp_select_L2L3
                ADDM    #M, ptr_MA_sum_inv

                STM     #5 - 1, BRC

                MVDM    ptr_sel_lspcb1, pLspCb1Q13
                MVDM    ptr_sel_lspcb2_L2, pLspCb2Q13

                RPTBD   EndVecL1L2 - 1
                MVDM    ptr_lsp_vec, pLspVecQ13

                        ADD     *pLspCb1Q13+, *pLspCb2Q13+, A
                        STL     A, -16, *pLspVecQ13+
EndVecL1L2:
                STM     #5 - 1, BRC
                MVDM    ptr_sel_lspcb2_L3, pLspCb2Q13
                RPTB    EndVecL1L3 - 1

                        ADD     *pLspCb1Q13+, *pLspCb2Q13+, A
                        STL     A, -16, *pLspVecQ13+
EndVecL1L3:
                CALLD   Lsp_expand_1_2
                STM     #GAP1, T

                CALLD   Lsp_expand_1_2
                STM     #GAP2, T

                CALL    Lsp_get_tdist

                ADDM    #M, ptr_MA_sum                ; ptr_MA_sum  -> fg[1]
                ADDM    #16, ptr_lsp_vec              ; ptr_lsp_vec -> Addr_lsp_vec_buf2Q13

        BANZ    FindLspIndex, *AR_Counter-

        ; select L0

        ; from Lsp_get_tdist : B = Err[1], pLerror -> &Err[3]

        MAR     *+pLerror(-4)                ; pLerror -> &Err[0]
        DSUB    *pLerror, B                  ; B = Err[1] - Err[0]

        STM     #Addr_L1, pL123
        MVDM    ptr_codeword, pCode
        STM     #4, AR0

        BCD     Select1, BLT                  ; Lsp_last_select
        ADDM    #-16, ptr_lsp_vec
Select0:
                ADDM    #-2 * M, ptr_MA_sum
                ADDM    #-2 * fg_size, ptr_MA_coef
                LD      #0, A
                BD      QuaCoef
                ADDM    #-16, ptr_lsp_vec
Select1:
                MAR     *+pL123(2)
                LD      #1, 7, A
                ADDM    #-M, ptr_MA_sum
                ADDM    #-fg_size, ptr_MA_coef

QuaCoef:
        OR      *pL123+0, A
        STL     A, *pCode+
        LD      *pL123+0, 5, A
        OR      *pL123, A
        STL     A, *pCode

        CALL    Lsp_prev_compose
        CALL    Lsp_prev_update
        CALL    Lsp_stability

        CALLD   Lsf_Lsp2
        STM     #M-1, BRC


        RETD
        ADDM    #2, ptr_codeword


;-----------------------------------------------------------------------
;  Get_wegt
;-----------------------------------------------------------------------
;  void Get_wegt(
;    Word16 flsp[],    /* (i) Q13 : M LSP parameters  */
;    Word16 wegt[]     /* (o) Q11->norm : M weighting coefficients */
;  )
;-----------------------------------------------------------------------
;  Equation 22
;-----------------------------------------------------------------------
;  Constants :  Addr_lsf_coefQ13 -> flsp
;               Addr_wegtQ11 -> wegt
;
;  note : *(Addr_lsf_coefQ13 - 1)  = PI04 = 0.4  

⌨️ 快捷键说明

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