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

📄 decodeld.dsp

📁 基于ADSP的G.729语音编解码程序
💻 DSP
📖 第 1 页 / 共 2 页
字号:
			   AR=DM(Dec_subfr);
			   DM(prm_save)=I2;
			   AR=PASS AR,AX1=AR;
			   IF NE JUMP second_subframe;
			   AR=DM(I2,M1);
			   AY0=DM(bfi);
			   AR=AR+AY0;
			   DM(prm_save)=I2;
			   DM(bad_pitch)=AR;
			   IF NE JUMP picth_old;
			   AY0=PIT_MIN;
			   AY1=PIT_MAX;
               MR1=DM(Dec_T0);
			   AR=DM(Dec_T0frac);
			   CALL Dec_lag3;
               DM(Dec_T0)=MR1;
			   DM(Dec_oldT0)=MR1;
			   DM(Dec_T0frac)=AR;
			   JUMP subframe_comm;
picth_old:     AR=PASS 0;
               AY0=DM(Dec_oldT0);
			   DM(Dec_T0)=AY0;	
			   DM(Dec_T0frac)=AR;
			   AR=AY0+1;
			   AY0=PIT_MAX;
			   NONE=AR-AY0;
			   IF GT AR=PASS AY0;
			   DM(Dec_oldT0)=AR;
			   JUMP subframe_comm;
second_subframe:
			   AR=DM(bfi);
			   AR=PASS AR;
			   IF NE JUMP lag_old;
			   AY0=PIT_MIN;
			   AY1=PIT_MAX;
               MR1=DM(Dec_T0);
			   AR=DM(Dec_T0frac);
			   CALL Dec_lag3;
               DM(Dec_T0)=MR1;
			   DM(Dec_oldT0)=MR1;
 			   DM(Dec_T0frac)=AR;
 			   JUMP subframe_comm;
lag_old:       AR=PASS 0;
			   DM(Dec_T0frac)=AR;
			   AY0=DM(Dec_oldT0);
			   DM(Dec_T0)=AY0;
			   AR=AY0+1;
			   AY0=PIT_MAX;
			   NONE=AR-AY0;
			   IF GT AR=PASS AY0;
			   DM(Dec_oldT0)=AR;
subframe_comm: 
        /*-------------------------------------------------*
         * - Find the adaptive codebook vector.            *
         *-------------------------------------------------*/
			   I1=DM(Dec_excit);
			   SR1=DM(Dec_T0);
			   CNTR=L_SUBFR;
			   SR0=DM(Dec_T0frac);
			   M3=DM(Dec_subfr);
			   MODIFY(I1,M3);
			   CALL Pred_lt_3;
        /*-------------------------------------------------------*
         * - Decode innovative codebook.                         *
         * - Add the fixed-gain pitch contribution to Dec_code[] *
         *-------------------------------------------------------*/
			   AR=DM(bfi);
			   AR=PASS AR;
			   IF EQ JUMP decode_celp;
			   I2=DM(prm_save);
			   MX0=DM(seed_fer);
			   CALL Random;
			   AY0=H#1FFF;
			   AR=AR AND AY0;
			   DM(I2,M1)=AR;
			   CALL Random;
			   AY0=H#000F;
			   AR=AR AND AY0;
			   DM(I2,M1)=AR; 
			   DM(seed_fer)=MX0;
decode_celp:   I1=^Dec_code;
			   I2=DM(prm_save);
			   MR1=DM(I2,M1);
			   MR0=DM(I2,M1);
			   DM(prm_save)=I2;
			   CALL Decode_ACELP;
			   AR=DM(Dec_sharp);
			   SR=ASHIFT AR BY 1(LO);
			   AX0=L_SUBFR;
			   AY0=DM(Dec_T0);
			   AR=AX0-AY0;
			   IF LE JUMP deco_gain;
			   M3 =AY0;
//			   CNTR=AR;
			   I2=^Dec_code;
			   I3=^Dec_code;
			   MODIFY(I2,M3);
			   CNTR=AR;
			   DO cal_code UNTIL CE;
			   MY0=DM(I3,M1);
			   MR=SR0 * MY0(SS),AY0=DM(I2,M0);
			   AR=MR1+AY0;
cal_code:      DM(I2,M1)=AR;
deco_gain:     I2=DM(prm_save);
			   SR0=DM(I2,M1);
			   DM(prm_save)=I2;
        /*-------------------------------------------------*
         * - Decode pitch and codebook gains.              *
         *-------------------------------------------------*/
			   I2=^Dec_code;
		       AR=DM(bfi);
			   SI=L_SUBFR;
			   MX1=DM(Dec_gaincode);
			   MX0=DM(Dec_gainpitch);
			   CALL Dec_gain;
			   DM(Dec_gainpitch)=AR;
			   DM(Dec_gaincode)=MR1;
        /*-------------------------------------------------------------*
         * - Update pitch sharpening with quantized Dec_gainpitch      *
         *-------------------------------------------------------------*/
			   AY0=SHARPMAX;
			   AF=AR-AY0,MY1=AR;
			   IF GT AR=PASS AY0;
			   AY0=SHARPMIN;
			   AF=AR-AY0,MY0=MR1;
			   IF LT AR=PASS AY0;
			   DM(Dec_sharp)=AR;
        /*-------------------------------------------------------*
         * - Find the total excitation.                          *
         * - Find synthesis speech corresponding to Dec_excit[]. *
         *-------------------------------------------------------*/
			   I3=^Dec_code;
			   I2=DM(Dec_excit);
//			   CNTR=L_SUBFR;
			   M3=DM(Dec_subfr);
			   MODIFY(I2,M3);
			   CNTR=L_SUBFR;
			   DO round_exc UNTIL CE;
        /*-----Dec_excit[i]  in Q0   Dec_gainpitch in Q14         ---*/
        /*-----Dec_code[i] in Q13  gain_codeode in Q1             ---*/
			   AR=DM(I2,M0);
			   MR=AR * MY1(SS),AR=DM(I3,M1);
		       MR=MR+AR*MY0(SS);
			   SR=LSHIFT MR0 BY 1(LO);
			   SR=SR OR ASHIFT MR1 BY 1(HI);
			   AR=SR0+H#8000;
			   AR=SR1+C;
round_exc:     DM(I2,M1)=AR;
			   AY0=0;
			   I2=DM(Dec_excit);
			   I0=DM(SynthDecode);
			   SI=L_SUBFR;
			   I3=^Dec_memsyn;
			   M3=DM(Dec_subfr);
			   I1=DM(Az_save);
			   MODIFY(I0,M3);
			   MODIFY(I2,M3);
			   CALL Syn_filt;
			   AR=PASS AR;
			   IF EQ JUMP copy_mem;
        /*-----In case of overflow in the synthesis---------*/
        /*-----Scale down vector Dec_excit[] and redo synthesis---*/
//			   CNTR=PIT_MAX+L_INTERPOL+L_FRAME;
			   I2=^Dec_oldexc;
			   CNTR=PIT_MAX+L_INTERPOL+L_FRAME;
			   DO back_old_exc1 UNTIL CE;
			   AR=DM(I2,M0);
			   SR=ASHIFT AR BY -2(LO);
back_old_exc1: DM(I2,M1)=SR0;
			   AY0=1;
			   I2=DM(Dec_excit);
			   I0=DM(SynthDecode);
			   SI=L_SUBFR;
			   I3=^Dec_memsyn;
			   I1=DM(Az_save);
			   M3=DM(Dec_subfr);
			   MODIFY(I0,M3);
			   MODIFY(I2,M3);
			   CALL Syn_filt;
			   JUMP Analfilt_next;
//copy_mem:      CNTR=M;
copy_mem:      I3=DM(SynthDecode);
			   M3=L_SUBFR-M;
			   MODIFY(I3,M3);
			   M3=DM(Dec_subfr);
			   MODIFY(I3,M3);
               I2=^Dec_memsyn;
			   CNTR=M;
			   DO back_mem UNTIL CE;
			   AR=DM(I3,M1);
back_mem:      DM(I2,M1)=AR;
Analfilt_next: M3=MP1;
			   AR=DM(Dec_T0);
			   I0=DM(T2_save);
			   DM(I0,M1)=AR;
               I1=DM(Az_save);
			   I2=DM(prm_save);
			   MODIFY(I1,M3);
			   AY0=L_SUBFR;
			   AX0=DM(Dec_subfr);
			   AR=AX0+AY0;
			   AY0=L_FRAME;
			   NONE=AR-AY0;
			   IF LT JUMP Analfilt_loop;
        /*--------------------------------*
         *      For G729b		          *
         *--------------------------------*/
decode_comm:   AR=DM(bfi);
			   AR=PASS AR;
			   IF NE JUMP Update_signal;
			   MR=0;
			   I2=DM(Dec_excit);
			   CNTR=L_FRAME;
			   DO mac_decode UNTIl CE;
			   SR0=DM(I2,M1);
mac_decode:	   IF NOT MV MR=MR+SR0*SR0(SS);
               IF MV SAT MR;
               AF=PASS 16;
			   SE=EXP MR1 (HI),AY0=MR0;
			   SE=EXP MR0 (LO);
			   AR=MR1 OR AY0,AX0=SE;
			   IF NE AR=PASS AX0;
			   AR=AR+AF;
			   DM(Dec_sh_sidsav)=AR;
			   SR=NORM MR0(LO);
			   SR=SR OR NORM MR1(HI);
			   AR=SR0+H#8000;
			   AR=SR1+C;
        	   DM(Dec_sidsav)=AR;	
 /*--------------------------------------------------*
  * Update signal for next frame.                    *
  * -> shift to the left by L_FRAME  Dec_excit[]     *
  *--------------------------------------------------*/
Update_signal: I2=^Dec_oldexc;
               I3=^Dec_oldexc+L_FRAME;
               CNTR=PIT_MAX+L_INTERPOL;
               DO copy_exc UNTIL CE;
               AR=DM(I3,M1);
copy_exc:      DM(I2,M1)=AR;
       /*------for G729b-----------------------*/
			   AR=DM(ftyp);
			   DM(past_ftyp)=AR;
			   RTS;
/************************************************************************/
.ENDMOD;





⌨️ 快捷键说明

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