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

📄 post_filter.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     Post_Filter() in pstpilt.c                       	   **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**  Post_FilterState *st    全局                   
** xar3---word16  *syn,                                             
** xar1--- Word16 *Az_4    													**

** Outputs:                                                                **
**    xar3---word16  *syn                                      								**
** return                                            						**
**                                                                         **
** Attribute    :       Cycles: 215812       Pm: 131                           **
**                      Modified Registers:  all  _buffer1                          **
**                                                                         **
** Programmer   :      xiewei                                     **
****************************************************************************
    
    .ref _copy
    .ref _agc
    .ref _preemphasis
    .ref _div_s
    .ref _Syn_filt
    .ref res2
    .ref mem_syn_pst
    .ref synth_buf 
    .ref mem_pre
    .ref past_gain
    .ref _buffer1
    .ref _residu
    .ref _Weight_Ai
    .global _Post_Filter
_Post_Filter         
            ;*syn_work = &st->synth_buf[M];
             ;Az = Az_4;
        ADDB SP,#20
        MOVL *-SP[8],XAR3 
        MOVL *-SP[10],XAR1
          ;Copy (syn, syn_work , L_FRAME); !!!!
        MOV AR1,#160
        MOVL XAR2,XAR3
        MOVL XAR3,#synth_buf+10
        LCR _copy            
      ; for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
        MOVL XAR1,*-SP[10]
        MOV AR0,#0
        
_line_37:
        MOV *-SP[6],AR0
        MOVL *-SP[10],XAR1
        CMP @AR0,#160
        B _line_148,GEQ
              ;Weight_Ai (Az, gamma3, Ap3);
        MOVL XAR7,#_buffer1
        MOV *XAR7++,#18022  
        MOV *XAR7++,#9912   
        MOV *XAR7++,#5451  
        MOV *XAR7++,#2998  
        MOV *XAR7++,#1649 
        MOV *XAR7++,#907  
        MOV *XAR7++,#499  
        MOV *XAR7++,#274  
        MOV *XAR7++,#151  
        MOV *XAR7,#83 
        MOVL XAR2,#_buffer1+20
        MOVL XAR7,#_buffer1
        LCR _Weight_Ai    ;Weight_Ai (Az, gamma4, Ap4); 
        MOVL *-SP[2],XAR2
        MOVL XAR1,*-SP[10]
        MOVL XAR7,#_buffer1+10
        MOV *XAR7++,#22938  
        MOV *XAR7++,#16057   
        MOV *XAR7++,#11240 
        MOV *XAR7++,#7868  
        MOV *XAR7++,#5508
        MOV *XAR7++,#3856  
        MOV *XAR7++,#2699  
        MOV *XAR7++,#1889  
        MOV *XAR7++,#1322  
        MOV *XAR7,#925
        MOVL XAR7,#_buffer1+10
        MOVL XAR2,#_buffer1+80 
        LCR _Weight_Ai
        MOVL *-SP[4],XAR2  
  ; Residu (Ap3, &syn_work[i_subfr], st->res2, L_SUBFR);
        MOVL XAR7,*-SP[2]
        MOVL XAR4,#synth_buf+10
        MOVL ACC,XAR4
        ;by yangzhw
        ADD  ACC,*-SP[6]
        MOVL XAR4,ACC
        MOV AR1,#40
        MOVL XAR3,#res2
        LCR _residu    ;Copy (Ap3, h, M + 1);
 ;Set_zero (&h[M + 1], L_H - M - 1=11); L_H=22 M+1=11
        ADDB XAR7,#11
        MOV AR1,#10
_loop_73:
        MOV *XAR7++,#0
        BANZ _loop_73,AR1--
       ;Syn_filt (Ap4, h, h, L_H, &h[M + 1], 0); 
        MOVL XAR7,*-SP[4]
        MOVL XAR1,*-SP[2]
        MOV AR0,#22
        MOV AR4,#0
        MOVL XAR3,*-SP[2]
        ADDB XAR3,#11
        MOVL XAR2,*-SP[2]
        LCR _Syn_filt               
               ;L_tmp = L_mult (h[0], h[0]);
        MOVL XAR1,*-SP[2]
        MOV T,*XAR1
        MPY ACC,T,*XAR1++
        LSL ACC,#1  
        MOV AR0,#20		 ; for (i = 1; i < L_H; i++)
_loop_92:                   ; L_tmp = L_mac (L_tmp, h[i], h[i]);
        MOV T,*XAR1
        MPY P,T,*XAR1++
        ADDL ACC,P<<PM                                                                                                                                                
        BANZ _loop_92,AR0-- 
        MOV AR2,AH             ;temp1 = extract_h (L_tmp);
        MOVL XAR1,*-SP[2]     ; L_tmp = L_mult (h[0], h[1]);                                                         
        MOV T,*XAR1++
        MPY ACC,T,*XAR1
        LSL ACC,#1
        MOV AR0,#19           ;for (i = 1; i < L_H - 1; i++)
_loop_103:                   ;L_tmp = L_mac (L_tmp, h[i], h[i + 1]);
        MOV T,*XAR1++
        MPY P,T,*XAR1
        ADDL ACC,P<<PM
        BANZ _loop_103,AR0--
        MOV AR3,AH            ; temp2 = extract_h (L_tmp);
        MOV T,AH            ;temp2 = mult (temp2, MU);MU=26214
        MPY ACC,T,#26214
        LSL ACC,#1
        MOV AR1,AH        ;temp2 = div_s (temp2, temp1); ?????
        LCR _div_s   
        MOV AR2,AL        
        MOV AL,AR3                ;if (temp2 <= 0)
        SB _line_118  ,GT
        MOV AR2,#0               ;temp2 = 0;
_line_118:
 ;preemphasis (st->preemph_state, st->res2, temp2, L_SUBFR); 
        MOVL XAR0,#mem_pre
        MOVL XAR1,#res2
        MOV AR3,#40 
        LCR _preemphasis     
;Syn_filt (Ap4, st->res2, &syn[i_subfr], L_SUBFR, st->mem_syn_pst, 1);        
        MOVL XAR7,*-SP[4]
        MOVL XAR1,#res2                 
        MOVL ACC,*-SP[8]
        ;by yangzhw
        ADD  ACC,*-SP[6]
        MOVL XAR2,ACC
        MOV AR0,#40
        MOVL XAR3,#mem_syn_pst
        MOV AR4,#1  
        LCR _Syn_filt 
;agc (st->agc_state, &syn_work[i_subfr], &syn[i_subfr]);
        MOVL XAR5,#past_gain   
        MOVL XAR4,#synth_buf+10
        MOVL ACC,XAR4
        ;by yangzhw
        ADD  ACC,*-SP[6]
        MOVL XAR4,ACC
        MOVL ACC,*-SP[8]
        ;by yangzhw
        ADD  ACC,*-SP[6]
        MOVL XAR6,ACC
        LCR _agc
        MOVL XAR1,*-SP[10]       ;Az += MP1; MP1=M+1=11
        ADDB XAR1,#11
        MOV AH,*-SP[6]
        ADD AH,#40
        MOV AR0,AH
        B _line_37,UNC
_line_148:
        ;Copy (&syn_work[L_FRAME - M], &syn_work[-M], M); 
        MOV AR1,#10
        MOVL XAR2,#synth_buf+160
        MOVL XAR3,#synth_buf
        LCR _copy
        SUBB SP,#20
        LRETR
        
        
          

⌨️ 快捷键说明

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