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

📄 vadcheck.dsp

📁 基于ADSP的G.729语音编解码程序
💻 DSP
📖 第 1 页 / 共 2 页
字号:
			   MR1=DM(MeanE);
			   MX0=DM(ENERGY);
			   MY0=1024;
			   MR=MR+MX0*MY0(SS);
			   DM(MeanE)=MR1;
			   MR0=0;
			   MR1=DM(MeanSZC);
			   MX0=DM(ZC);
			   MR=MR+MX0*MY0(SS);
			   DM(MeanSZC)=MR1;
//			   CNTR=M;
			   I2=^MeanLSF;
			   I3=^Enc_lsfnew;
			   CNTR=M;
			   DO cal_meanlsf UNTIL CE;
			   MR=0,MX0=DM(I3,M1);
			   MR1=DM(I2,M0);
			   MR=MR+MX0*MY0(SS);	 
cal_meanlsf:   DM(I2,M1)=MR1;
set_parameter: NONE=AX0-AY0;
			   IF LT RTS;
			   IF NE JUMP direct_param;
			   M5=DM(less_count);
			   I5=^factor_fx;
			   MODIFY(I5,M5);
			   MX0=DM(MeanE);
			   MY0=PM(I5,M5);
			   I5=^shift_fx;
			   MODIFY(I5,M5);
			   MR=MX0 * MY0(SS),SE=PM(I5,M5);
			   SR=LSHIFT MR0 (LO);
			   SR=SR OR ASHIFT MR1 (HI);
			   DM(MeanE)=SR1;
               MX0=DM(MeanSZC);
			   MR=MX0 * MY0(SS);
			   SR=LSHIFT MR0 (LO);
			   SR=SR OR ASHIFT MR1(HI);
			   DM(MeanSZC)=SR1;
//			   CNTR=M;
			   I2=^MeanLSF;
			   I3=^MeanLSF;
			   MX0=DM(I2,M1);
			   CNTR=M;
			   DO calc_meanlsf UNTIL CE;
			   MR=MX0 * MY0(SS);
			   SR=LSHIFT MR0 (LO),MX0=DM(I2,M1);
			   SR=SR OR ASHIFT MR1 (HI);
calc_meanlsf:  DM(I3,M1)=SR1;
               AX0=DM(MeanE);
			   AY0=2048;
			   AR=AX0-AY0;
			   DM(MeanSE)=AR;
			   AY0=2458;
			   AR=AX0-AY0;
			   DM(MeanSLE)=AR;
direct_param:  AX0=DM(MeanSE);
			   AY0=DM(ENERGY);
			   AR=AX0-AY0;
			   DM(dSE)=AR;
			   AX0=DM(MeanSLE);
			   AY0=DM(ENERGY_low);
			   AR=AX0-AY0;
			   DM(dSLE)=AR;
			   AX0=DM(MeanSZC);
			   AY0=DM(ZC);
			   AR=AX0-AY0;
			   DM(dSZC)=AR;
			   AX0=DM(ENERGY);
			   AY0=3072;
			   MY1=NOISE;
			   AR=AX0-AY0;
			   AR=PASS AR;
			   IF LT JUMP not_makedec;
			   MX1=DM(dSLE);
			   AX1=DM(dSE);
			   AX0=DM(SD);
			   MX0=DM(dSZC);
			   CALL MakeDec;
not_makedec:   DM(VadEncode)=MY1;
			   AX1=0;	{v_flag}
			   DM(v_flag)=AX1;
			   AX0=DM(Enc_pastVad);
			   AY0=VOICE;
			   NONE=AX0-AY0;
			   IF NE JUMP adjust_1;
			   AX0=DM(VadEncode);
			   AY0=NOISE;
			   NONE=AX0-AY0;
			   IF NE JUMP adjust_1;
			   AX0=dm(dSE);
			   AY0=410;
			   NONE=AX0+AY0;
			   IF GE JUMP adjust_1;
			   AX0=DM(ENERGY);
			   AY0=3072;
			   AR=AX0-AY0;
			   AR=PASS AR;
			   IF LE JUMP adjust_1;
			   AR=PASS VOICE;
			   DM(VadEncode)=AR;
			   AX1=1;
			   DM(v_flag)=AX1;
adjust_1:      AX1=1; {ad_flag}
			   AY1=DM(ad_flag);
               NONE=AY1-1;
			   IF NE JUMP adjust_2-1; 
			   AX0=DM(Enc_ppastVad);
			   AY0=VOICE;
			   NONE=AX0-AY0;
			   IF NE JUMP adjust_2;
			   AX0=DM(Enc_pastVad);
			   NONE=AX0-AY0;
			   IF NE JUMP adjust_2;
			   AX0=DM(VadEncode);
			   AY0=NOISE;
			   NONE=AX0-AY0;
			   IF NE JUMP adjust_2;
			   AX0=DM(prev_energy);
			   AY0=DM(ENERGY);
			   AR=AX0-AY0;
			   AR=ABS AR;
			   AY0=614;
			   NONE=AR-AY0;
			   IF GT JUMP adjust_2;
			   AX0=VOICE;
			   DM(VadEncode)=AX0;
			   AX1=1;
			   DM(v_flag)=AX1;
			   AR=DM(count_ext);
			   AR=AR+1;
			   DM(count_ext)=AR;
			   AR=AR-4;
			   IF LE JUMP adjust_2-1;
			   AX1=0;
			   DM(count_ext)=AX1;
               DM(ad_flag)=AX1;
adjust_2:      AR=DM(count_sil);
			   AX0=DM(VadEncode);
			   AY0=NOISE;
			   NONE=AX0-AY0;
			   IF EQ AR=AR+1;
			   DM(count_sil)=AR;
			   AY0=VOICE;
			   NONE=AX0-AY0;
			   IF NE JUMP adjust_3;
			   AY0=10;
			   NONE=AR-AY0;
			   IF LE JUMP adjust_3;
			   AX0=DM(ENERGY);
			   AY0=DM(prev_energy);
			   AF=AX0-AY0;
			   AX0=614;
			   NONE=AF-AX0;
			   IF GT JUMP adjust_3;
			   AX0=NOISE;
			   DM(VadEncode)=AX0;
			   AR=PASS 0;
			   DM(count_sil)=AR;
adjust_3:	   AX0=DM(VadEncode);
			   AR=DM(count_sil);
			   AY0=VOICE;
			   NONE=AX0-AY0;			   
			   IF EQ AR=PASS 0;
			   DM(count_sil)=AR;
			   AX0=DM(ENERGY);
			   AY0=614;
			   AR=AX0-AY0;
			   AY0=DM(MeanSE);
			   AF=AR-AY0;
			   AF=PASS AF;
			   IF GE JUMP adjust_4;
			   AX0=DM(Enc_Frame);
			   AR=AX0-128;
			   IF LE JUMP adjust_4;
			   AR=DM(v_flag);
			   AR=PASS AR;
			   IF NE JUMP adjust_4;
			   AX0=SI;
			   AY0=19661;
			   AR=AX0-AY0;
			   AR=PASS AR;			   
			   IF GE JUMP adjust_4;	
			   AR=PASS NOISE;
			   DM(VadEncode)=AR;
adjust_4:      AF=PASS AF;
			   IF GE JUMP adjust_5;
			   AX0=SI;
			   AY0=24576;
			   AR=AX0-AY0;
			   AR=PASS AR;
			   IF GE JUMP adjust_5;
			   AX0=DM(SD);
			   AY0=83;
			   NONE=AX0-AY0;
			   IF GE JUMP adjust_5;
			   CALL start_calmean;
adjust_5:      AX0=DM(Enc_Frame);
			   AR=AX0-128;
			   IF LE RTS;
			   AX0=DM(MeanSE);
			   AY0=DM(Min);
			   AR=AX0-AY0;
			   AR=PASS AR;
			   IF GE JUMP cmp_count6;
			   AX0=DM(SD);
			   AY0=83;
			   NONE=AX0-AY0;
			   IF GE RTS;
			   JUMP cmp_count7;
cmp_count6:    AR=AR-2048;
			   AR=PASS AR;
			   IF LE RTS;
cmp_count7:	   AR=DM(Min);
			   DM(MeanSE)=AR;
			   AR=PASS 0;
			   DM(count_update)=AR;
			   RTS;
/************************************************************************
* $$01/10/2000 used only in encoder                                     *
* $$01/11/2000  move dm table to pm table area                          *
* Calling Parameters													*	
*         MX1 : differential low band energy							*
*         AX1 : differential full band energy							*
*         AX0 : differential spectral distortion						*
*         MX0 : differential zero crossing rate							*
* Return Values															*
*         MY1 :  voice or noise detect flag                             *
* Altered Registers: MR,SR,AR,AF,AX0,AX1,AY0,AY1,MX0,MX1,MY0,MY1        *	
* Computation Time : 18 cycles										    *	
*************************************************************************/
MakeDec:       MY1=VOICE;
               I4=^SZC_coeff;
     /*--------SD vs dSZC------------*/
			   MR0=H#C000;
		       MR1=H#E425;  {8192*-28521}
			   MY0=PM(I4,M4);
               MR=MR+MX0 * MY0(SS),AR=AX0;
			   SR=LSHIFT MR0 BY -8(LO);
			   SR=SR OR ASHIFT MR1 BY -8(HI);
			   AY0=SR0;
			   AY1=SR1;
			   SR=ASHIFT AR BY 0(HI);
			   DIS AR_SAT;
			   AR=SR0+AY0,MY0=PM(I4,M4);
			   ENA AR_SAT;
			   AY0=AR,AR=SR1+AY1+C;
			   AR=PASS AR;
			   IF LT JUMP makedec_1;
			   AR=AR OR AY0;
			   IF NE RTS;
makedec_1:     MR0=H#8000;
               MR1=H#ED02; {8192*-19446}
               MR=MR+MX0 * MY0(SS),AR=AX0;
			   SR=LSHIFT MR0 BY -7(LO);
			   SR=SR OR ASHIFT MR1 BY -7(HI);
			   AY0=SR0;
			   AY1=SR1;
			   SR=ASHIFT AR BY 0(HI);
			   DIS AR_SAT;
			   AR=SR0+AY0,MY0=PM(I4,M4);
			   ENA AR_SAT;
			   AY0=AR,AR=SR1+AY1+C;
			   AR=PASS AR;
			   IF LT JUMP makedec_2;
			   AR=AR OR AY0;
			   IF NE RTS;
   /*----------dSE vs dSZC-------------*/
makedec_2:     MR0=H#0000;
			   MR1=H#1000; {8192*16384}
               MR=MR+MX0 * MY0(SS),AR=AX1;
			   SR=LSHIFT MR0 BY -2(LO);
			   SR=SR OR ASHIFT MR1 BY -2(HI);
			   AY0=SR0;
			   AY1=SR1;
			   SR=ASHIFT AR BY 0(HI);
			   DIS AR_SAT;
			   AR=SR0+AY0,MY0=PM(I4,M4);
			   ENA AR_SAT;
			   AY0=AR,AR=SR1+AY1+C;
			   AR=PASS AR;
			   IF GT JUMP makedec_3;
			   AR=AR OR AY0;
			   IF NE RTS;
makedec_3:     MR0=H#0000;
               MR1=H#1333; {8192*19660}
               MR=MR+MX0 * MY0(SS),AR=AX1;
			   SR=LSHIFT MR0 BY -2(LO);
			   SR=SR OR ASHIFT MR1 BY -2(HI);
			   AY0=SR0;
			   AY1=SR1;
			   SR=ASHIFT AR BY 0(HI);
			   DIS AR_SAT;
			   AR=SR0+AY0;
			   ENA AR_SAT;
			   AY0=AR,AR=SR1+AY1+C;
			   AR=PASS AR;
			   IF GT JUMP makedec_4;
			   AR=AR OR AY0;
			   IF NE RTS;
makedec_4:     MR0=H#9000;
               MR1=H#03C2; {1024*30802}
			   AR=PASS AX1,MY0=PM(I4,M4);
			   MR=MR+AR * MY0(SS),AR=AX0;
			   AF=PASS MR1,MY0=PM(I4,M4);
			   IF LT RTS;
    /*---------dSE vs SD---------------*/
makedec_5:	   MR0=H#0A00;
               MR1=H#0027; {64*19988}
			   MR=MR+AR * MY0(SS);
			   AR=PASS AX1,MY0=PM(I4,M4);
			   MR=MR+AR*MY0(SS),AR=AX0;
			   AF=PASS MR1,MY0=PM(I4,M4);
			   IF LT RTS;
makedec_6:     MR0=H#8240;
               MR1=H#FFE2; {32*-30199}
			   MR=MR+AR * MY0(SS),MY0=PM(I4,M4);
			   AR=PASS MR1,AY0=MR0;
			   IF LT JUMP makedec_7;
			   AR=MR1 OR AY0;
			   IF NE RTS;
  /*-----------dSLE vs dSZC------------------*/
makedec_7:     MR0=H#8000;
               MR1=H#1666; {8192*22938}
               MR=MR+MX0 * MY0(SS),AR=AX1;
			   SR=LSHIFT MR0 BY -2(LO);
			   SR=SR OR ASHIFT MR1 BY -2(HI);
			   AY0=SR0;
			   AY1=SR1;
			   SR=ASHIFT AR BY 0(HI);
			   DIS AR_SAT;
			   AF=SR0+AY0,MY0=PM(I4,M4);
			   ENA AR_SAT;
			   AF=SR1+AY1+C;
			   AF=PASS AF;
			   IF LT RTS;
makedec_8:     MR0=H#0000;
               MR1=H#0F6B; {4096*31576}
               MR=MR+MX0 * MY0(SS),AR=AX1;
			   SR=LSHIFT MR0 BY -2(LO);
			   SR=SR OR ASHIFT MR1 BY -2(HI);
			   AY0=SR0;
			   AY1=SR1;
			   SR=ASHIFT AR BY 0(HI);
			   DIS AR_SAT;
			   AF=SR0+AY0,MY0=PM(I4,M4);
			   ENA AR_SAT;
			   AF=SR1+AY1+C,AR=AX1;
			   AF=PASS AF;
			   IF LT RTS;
makedec_9:     MR0=H#7000;
               MR1=H#043D; {2048*17367}
			   MR=MR+AR * MY0(SS),AR=AX0;  
			   AF=PASS MR1,MY0=PM(I4,M4);
			   IF LT RTS;
   /*----------dSLE vs SD----------------*/
makedec_10:    MR0=H#CCC0;
               MR1=H#0018; {32*25395}
			   MR=MR+AR * MY0(SS),MY0=PM(I4,M4);
			   MR=MR+MX1*MY0(SS),AR=AX1;
			   AF=PASS MR1,MY0=PM(I4,M4);
			   IF LT RTS;
   /*----------dSLE vs dSE---------------*/
makedec_11:    MR0=H#F200;
               MR1=H#FF15; {256*-29959}
			   MR=MR+AR * MY0(SS),AR=MX1;
			   AY0=MR0;
			   AY1=MR1;
			   SR=ASHIFT AR BY 0(HI);
			   DIS AR_SAT;
			   AR=SR0+AY0;
			   ENA AR_SAT;
			   AY0=AR,AR=SR1+AY1+C;
			   IF LT JUMP makedec_12;
			   AR=AR OR AY0;
			   IF NE RTS;
makedec_12:    MR0=H#DC00;
               MR1=H#01B6; {512*28087}
			   AR=PASS AX1,MY0=PM(I4,M4);
			   MR=MR+AR * MY0(SS),AR=MX1;
			   AY0=MR0;
			   AY1=MR1;
			   SR=ASHIFT AR BY 0(HI);
			   DIS AR_SAT;
			   AF=SR0+AY0,MY0=PM(I4,M4);
			   ENA AR_SAT;
			   AF=SR1+AY1+C,AR=AX1;
			   AF=PASS AF;
			   IF LT RTS;
makedec_13:    MR0=H#9800;
               MR1=H#0399; {1024*29491}
			   MR=MR+AR * MY0(SS),MY0=PM(I4,M4);
			   MR=MR+MX1*MY0(SS);
			   NONE=PASS MR1;
			   IF LE RTS;
			   MY1=NOISE;
			   RTS;
/************************************************************************/
.ENDMOD;

⌨️ 快捷键说明

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