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

📄 g723encoder.asm

📁 利用G.723协议在DSP实现音频信号的压缩与解压缩实验
💻 ASM
字号:
             .title   "g723encoder.asm"
             
             .include "g723_global.asm"
             .include "g723tab_h.asm"
             .include "g723_stat.asm"
          
             .mmregs
;--------------------------------------------------------------     
;void
;g723_40_encoder(
;   short		*wIn,
;	short		*wOut,
;	struct g723_state *state_ptr)
;{
;	short		sei, sezi, se, sez;	/* ACCUM */
;	short		d;			/* SUBTA */
;	short		y;			/* MIX */
;	short		sr;			/* ADDB */
;	short		dqsez;			/* ADDC */
;	short		dq;
;	short       i;	
;   int         sl;
;--------------------------------------------------------------
var_sl      .set      0
;var_sei     .set      var_sl+2
var_sei     .set      var_sl+1
var_sezi    .set      var_sei+1
var_se      .set      var_sezi+1
var_sez     .set      var_se+1
var_d       .set      var_sez+1
var_y       .set      var_d+1
var_sr      .set      var_y+1
var_dqsez   .set      var_sr+1
var_dq      .set      var_dqsez+1
var_i       .set      var_dq+1
;ST1
;AR7
;AR6
;AR1
off_m       .set     -10;-11     
off_p       .set     10;11
frame_size  .set     10+4
;return address           
wOut        .set      frame_size+1
state_ptr   .set      frame_size+2

                 .text

_g723_40_encoder:
        pshm   AR1
        pshm   AR6
        pshm   AR7
        pshm   ST1
        frame  #off_m
        
        stlm   A, AR2
        ssbx   CPL
        ssbx   SXM
        ssbx   OVM
        ssbx   FRCT
        rsbx   C16
        nop
       
        mvdk   *SP(wOut), AR1    
        mvdk   *SP(state_ptr), AR7 
;---------------------------------------------------------------
        
;	sl = *wIn >> 2;		/* sl of 14-bit dynamic range */
;-----------------------------------------------------------------
        ld   *AR2, -2, A
        stl  A, *SP(var_sl)
;----------------------------------------------------------------
  
;	sezi = predictor_zero(state_ptr);
;--------------------------------------------------------------      
        mvmm   SP, AR6  
        calld  predictor_zero     ;AR7=state_ptr
        mar   *+AR6(var_sezi)     ;*AR6=var_sezi
      
;--------------------------------------------------------------             
;	sez = sezi >> 1;
;---------------------------------------------------------------
        ld   *AR6, -1, A
        stl  A, *SP(var_sez)
;---------------------------------------------------------------
;	sei = sezi + predictor_pole(state_ptr);
;----------------------------------------------------------------
        ;AR7=state_ptr
        call  predictor_pole     ;返回值放在A
        add    *SP(var_sezi), A  ;A=sei
;----------------------------------------------------------------
;	se = sei >> 1;			/* se = estimated signal */
;----------------------------------------------------------------
        stl   A, -1, *SP(var_se)
;----------------------------------------------------------------                 
;	d = sl - se;			/* d = estimation difference */
;----------------------------------------------------------------
        ld   *SP(var_sl), A
        sub  *SP(var_se), A  ; A = d
        stl  A, *SP(var_d)
;----------------------------------------------------------------
;	/* quantize prediction difference */
;	y = step_size(state_ptr);	/* adaptive quantizer step size */
;----------------------------------------------------------------
       
        call step_size   ;AR7=state_ptr
                         ;返回值y = A
        stl  A, *SP(var_y)
;----------------------------------------------------------------        
;	i = quantize(d, y, qtab_723_40, 15);	/* i = ADPCM code */
;----------------------------------------------------------------
        mvmm  SP, AR6
        mar   *+AR6(var_d)       ;AR6->var_d
        
        calld  quantize       ; y=A
        stm   #tab_qtab, AR3     ;AR3=qtab_723_40
        nop                         ;返回值i=A
        stl   A, *SP(var_i)
        stl    A, *AR1
;-------------------------------------------------------------------        
;	dq = reconstruct(i & 0x10, _dqlntab[i], y);	/* quantized diff */
;-------------------------------------------------------------------
        ld    #tab_dqlntab, B
        add   A, B      
        stlm  B, AR3    ;AR3->dqlntab[i]
        and   #0x10, A, A
        stlm  A, AR6    ;AR6=i & 0x10
        ld    *SP(var_y), A ;A->var_y   
                                        
        call  reconstruct   ;返回值=B
               
        stl   B, *SP(var_dq)
;---------------------------------------------------------------------------        
;	sr = (dq < 0) ? se - (dq & 0x7FFF) : se + dq; /* reconstructed signal */
;---------------------------------------------------------------------------
       ld  *SP(var_dq), A
       bc  a1, AGEQ
a0     ld   #0x7fff, A
       and  *SP(var_dq), A
       sub  *SP(var_se), A
       neg  A
       b    enda1
a1:    ld   *SP(var_se), A
       add  *SP(var_dq), A
       
enda1:
       stl  A, *SP(var_sr)
;-------------------------------------------------------------------------                  
;	dqsez = sr + sez - se;		/* dqsez = pole prediction diff. */
;-------------------------------------------------------------------------
       add   *SP(var_sez), A  ;A=sr + sez
       ld    *SP(var_se), B
       sub   B, A             ;A=dqsez
;-------------------------------------------------------------------------       
;	update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
;-------------------------------------------------------------------------
       mvmm  SP, AR4
       mar   *+AR4(var_y)   ;AR4->var_y
       mvmm  SP, AR5
       mar   *+AR5(var_dq)  ;AR5->var_dq
       mvmm  SP, AR6
       
       ld    *SP(var_i), B  ;B=i
       calld  update         ;AR7=state_ptr ;A=dqsez
       mar   *+AR6(var_sr)  ;AR6->var_sr
                        
                            
;    *wOut = i;
;-------------------------------------------------------------------------
      
       frame   #off_p
       popm  ST1
       popm  AR7
       popm  AR6
       popm  AR1
       
       ret
;}
;
;----------------------------------------------------------------------------
           .end

⌨️ 快捷键说明

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