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

📄 quantgain.dsp

📁 基于ADSP的G.729语音编解码程序
💻 DSP
📖 第 1 页 / 共 2 页
字号:
			   ENA AR_SAT;
			   SR=ASHIFT MR0 BY 0(LO);
			   MR0=AR,AR=SR1+AY1+C;
			   SR=LSHIFT MR0 BY -1(LO);
			   SR=SR OR ASHIFT AR BY -1(HI);
			   AX1=AR;
			   AR=PASS 4;			   
			   AY0=DM(exp_gcode0);
			   AR=AR-AY0,AX0=MR0;
			   MR=SR0 * MY0(SS),SE=AR;
			   SR=LSHIFT MR0 (LO),MR0=AX0;
			   SR=SR OR ASHIFT MR1(HI),MR1=AX1;
			   DM(gain_code)=SR1;
  /*----------------------------------------------*
   * update table of past quantized energies      *
   *----------------------------------------------*/
			   I1=^Enc_pastqua_en;
			   CALL Gain_update;
			   M5=M2;
			   I5=^map1;
			   I6=^map2;
			   MY0=NCODE1;
			   MODIFY(I5,M5);
			   MODIFY(I6,M6);
			   MX0=PM(I5,M5);
			   MR=MX0 * MY0(SS),AY0=PM(I6,M6);
			   AR=MR0+AY0;
			   MR0=DM(gain_pitch);
			   MY1=DM(gain_code);
			   M2=-1;
			   RTS;
/************************************************************************
* Function Gbk_presel                                                   *
*   - presearch for gain codebook -                                     *
* $$01/10/2000 used only in encoder									    *
* $$01/11/2000  move dm table to pm table area                          *
* $$01/11/2000 modify pointer and varaibles to adapt table change       *
* Calling Parameters												    *	
*         I1  : [0] Q9 unquantized pitch gain                           *
*             : [1] Q2 unquantized code gain                            *
*         MY1 : Q4 presearch for gain codebook                          *
* Return Values														    *
*         M5  : index of best 1st stage vector						    *
*         M6  : index of best 2nd stage vector						    *
* Altered Registers: MR,SR,SE,AR,I0,AY0,MY0                             *	
* Computation Time : 18 cycles										    *	
*************************************************************************/
.VAR/DM/RAM/SEG=App_DMtmp    tempx_lo,tempx_hi;

Gbk_presel:    I5=^coef;
			   MX0=DM(I1,M1),MY0=PM(I5,M4);
 /*--------------------------------------------------------------------------*
   x = (best_gain[1]-(coef[0][0]*best_gain[0]+coef[1][1])*gcode0) * inv_coef;
  *--------------------------------------------------------------------------*/
			   I4=^coeflo+3;
			   I5=^coefhi+3;
			   SR0=PM(I4,M4);
			   AR=PM(I5,M4);
			   SR=LSHIFT SR0 BY -15(LO);
			   SR=SR OR ASHIFT AR BY -15(HI);
			   MR=MX0 * MY0(SS),AY0=SR0;
			   AX0=MR0;
			   AX1=MR1;
			   DIS AR_SAT;
			   AR=MR0+AY0,AY1=SR1;
			   ENA AR_SAT;
			   AR=MR1+AY1+C; 				   	
			   MR=AR * MY1(SS),SR0=DM(I1,M0);
			   SR=ASHIFT SR0 BY 7(LO);
			   AY0=SR0;
			   DIS AR_SAT;
			   AR=AY0-MR0,AY1=SR1;
			   ENA AR_SAT;
			   MR0=AR,AR=AY1-MR1+C-1;
			   SE=EXP AR(HI),AY0=MR0;
			   SE=EXP MR0(LO),MR1=AR;
			   AF=MR1 OR AY0,AR=SE;
			   IF EQ JUMP direct_lshift;
			   AR=AR+2;
			   IF LE JUMP direct_lshift;
			   SR1=H#8000;
			   NONE=PASS MR1;
			   IF LT JUMP lshift_comm;
			   SR1=H#7FFF;  
			   JUMP lshift_comm;
direct_lshift: SR=LSHIFT MR0 BY 2(LO);
			   SR=SR OR ASHIFT MR1 BY 2(HI);
lshift_comm:   MY0=INV_COEF;
			   MR=SR1 * MY0(SS),AY0=AX0;
               DM(tempx_lo)=MR0;
			   DM(tempx_hi)=MR1;
			   I4=^coeflo+1;	
			   I5=^coefhi+1;
			   SR0=PM(I4,M4);
			   AR=PM(I5,M4);
			   SR=LSHIFT SR0 BY -10(LO);
               SR=SR OR ASHIFT AR BY -10(HI);
			   DIS AR_SAT;
			   AR=AY0-SR0,AY1=AX1;
			   ENA AR_SAT;
			   I4=^coef+2;
			   AR=AY1-SR1+C-1,MY0=PM(I4,M7);
			   MR=AR * MY1(SS),SR0=DM(I1,M0);
			   MR=MR1 * MY0(SS),AY0=PM(I4,M7);
			   AF=PASS MR0,MY0=PM(I4,M4);
		       MR=SR0 * MY0(SS),AY1=MR1;
			   SR=LSHIFT MR0 BY -3(LO);
			   SR=SR OR ASHIFT MR1 BY -3(HI);
               DIS AR_SAT;
			   AR=AF-SR0,AX1=SR1;
			   ENA AR_SAT;
			   MR0=AR,AR=AY1-AX1+C-1;
			   SE=EXP AR(HI),AY0=MR0;
			   SE=EXP MR0(LO),MR1=AR;
               AF=MR1 OR AY0,AR=SE;
			   IF EQ JUMP dto_lshift;
			   AR=AR+2;
			   IF LE JUMP dto_lshift;
			   SR1=H#8000;
			   NONE=PASS MR1;
			   IF LT JUMP comm_shiftl;
			   SR1=H#7FFF;  
			   JUMP comm_shiftl;
dto_lshift:	   SR=LSHIFT MR0 BY 2(LO);
			   SR=SR OR ASHIFT MR1 BY 2(HI);
comm_shiftl:   MY0=INV_COEF;
			   MR=SR1 * MY0(SS),AR=MY1;
			   AY0=MR0;
			   AR=PASS AR,AY1=MR1;
			   IF LE JUMP sel2_codebook;
	 /*--------pre select codebook #1-------------*/
			   SE=-3;
			   I5=^thr1;
			   AF=PASS 0;
presel_codebook11:
			   MX0=PM(I5,M4);
			   MR=MX0 * MY1(SS);
			   SR=LSHIFT MR0 (LO);
			   SR=SR OR ASHIFT MR1(HI);
			   DIS AR_SAT;
			   AR=AY0-SR0,AX0=AY0;
			   ENA AR_SAT;
			   AY0=AR,AR=AY1-SR1+C-1;
			   AR=PASS AR;
			   IF LT JUMP presel_con11;
			   AR=AR OR AY0;
			   IF EQ JUMP presel_con11;
			   AF=AF+1,AY0=AX0;
               AX0=NCODE1-NCAN1;
			   AR=AF-AX0;  
			   IF LT JUMP presel_codebook11;
	  /*-------pre select codebook #2 --*/
presel_con11:  AR=PASS AF,AY0=AX0;
			   M5=AR;
			   SE=-5;
			   I5=^thr2;
			   AF=PASS 0;
			   AY0=DM(tempx_lo);
			   AY1=DM(tempx_hi);
presel_codebook12:
			   MX0=PM(I5,M4);
			   MR=MX0 * MY1(SS);
			   SR=LSHIFT MR0 (LO);
			   SR=SR OR ASHIFT MR1(HI);
			   DIS AR_SAT;
			   AR=AY0-SR0,AX0=AY0;
			   ENA AR_SAT;
			   AY0=AR,AR=AY1-SR1+C-1;
			   AR=PASS AR;
			   IF LT JUMP exit_presel1;
			   AR=AR OR AY0;
			   IF EQ JUMP exit_presel1;
			   AF=AF+1,AY0=AX0;
               AX0=NCODE2-NCAN2;
			   AR=AF-AX0;  
			   IF LT JUMP presel_codebook12;
exit_presel1:  AR=PASS AF;
			   M6=AR;
			   RTS;
	 /*--------pre select codebook #1----------------*/
sel2_codebook: SE=-3;
			   I5=^thr1;
			   AF=PASS 0;
presel_codebook21:
			   MX0=PM(I5,M4);
			   MR=MX0 * MY1(SS);
			   SR=LSHIFT MR0 (LO);
			   SR=SR OR ASHIFT MR1(HI);
			   DIS AR_SAT;
			   AR=AY0-SR0,AX0=AY0;
			   ENA AR_SAT;
			   AY0=AR,AR=AY1-SR1+C-1;
			   AR=PASS AR;
			   IF LT JUMP presel_con22;
			   AR=AR OR AY0;
			   IF EQ JUMP presel_con22;
			   AF=AF+1,AY0=AX0;
               AX0=NCODE1-NCAN1;
			   AR=AF-AX0;  
			   IF LT JUMP presel_codebook21;
		  /*-- pre select codebook #2 --*/
presel_con22:  SE=-5;
			   I5=^thr2;
			   AR=PASS AF;
			   M5=AR;
			   AF=PASS 0;
			   AY0=DM(tempx_lo);
			   AY1=DM(tempx_hi);
presel_codebook22:
			   MX0=PM(I5,M4);
			   MR=MX0 * MY1(SS);
			   SR=LSHIFT MR0 (LO);
			   SR=SR OR ASHIFT MR1(HI);
			   DIS AR_SAT;
			   AR=AY0-SR0,AX0=AY0;
			   ENA AR_SAT;
			   AY0=AR,AR=AY1-SR1+C-1;
			   AR=PASS AR;
			   IF LT JUMP exit_presel2;
			   AR=AR OR AY0;
			   IF EQ JUMP exit_presel2;
			   AF=AF+1,AY0=AX0;
               AX0=NCODE2-NCAN2;
			   AR=AF-AX0;  
			   IF LT JUMP presel_codebook22;
exit_presel2:  AR=PASS AF;
			   M6=AR;
			   RTS;
/************************************************************************
* search tne codeboog to find impression                                *
* $$01/10/2000 used only in encoder									    *
* $$01/11/2000  move dm table to pm table area                          *
* Calling Parameters												    *	
* Return Values														 	*
*         M2:   index1 of code book										*
*         M3:   index2 of code book										*
* Altered Registers: MR,SR,SE,AR,I0,AY0,MY0                             *	
* Computation Time : 18 cycles											*	
*************************************************************************/
.VAR/DM/RAM/SEG=App_DMtmp     multcoef[5];

search_codbook:
			   // M7=0; // -sunny, use i0 instead of i7, m0 instead of m7
				AR = 0;				// +sunny
				dm(alias_m7) = AR; 	// +sunny
			   I0=I7;
			   I4=^gbk11;
			   I5=^gbk12;
//			   CNTR=NCAN1;
			   MODIFY(I4,M5);
			   MODIFY(I5,M5);
			   CNTR=NCAN1;
			   DO search_book1 UNTIL CE;
			   I6=^gbk21;

//			   CNTR=NCAN2;
			   MODIFY(I6,M6);

//			   I7=^gbk22;	// -sunny, use i6 instead of i7, m6 instead of m7
				AR = ^gbk22; 	// +sunny
				dm(alias_i7) = AR;// +sunny

//			   MODIFY(I7,M6);	// -sunny
				dm(tmp_i6) = i6;// +sunny
				i6 = dm(alias_i7);// +sunny
				MODIFY(I6,M6);	// +sunny
				dm(alias_i7) = i6;// +sunny
				i6 = dm(tmp_i6);// +sunny
				

//			   AX0=PM(I4,M7);	// -sunny
				dm(tmp_m6) = m6;// +sunny
				m6 = dm(alias_m7);// +sunny
				AX0=PM(I4,M6);	// +sunny
				m6 = dm(tmp_m6);// +sunny

			   CNTR=NCAN2;
			   DO search_book2 UNTIL CE;
//			   AY0=PM(I6,M7);	// -sunny
				dm(tmp_m6) = m6;// +sunny
				m6 = dm(alias_m7);// +sunny
				AY0=PM(I6,M6);	// +sunny
				m6 = dm(tmp_m6);// +sunny

			   AR=AX0+AY0,MY0=AX1;
   			   SR0=DM(tameflag);
               AF=PASS SR0,MX0=AR;
			   IF EQ JUMP direct_search;
			   AY0=GP0999;
			   NONE=AR-AY0;
			   IF GE JUMP search_book2;
direct_search: I1=^multcoef;

//			   AR=PM(I5,M7);	// -sunny
				dm(tmp_m6) = m6;// +sunny
				m6 = dm(alias_m7);// +sunny
				AR=PM(I5,M6);	// +sunny
				m6 = dm(tmp_m6);// +sunny

			   SR=ASHIFT AR BY 0(LO);

//			   AF=PASS SR0,MR0=PM(I7,M4);	// -sunny
				dm(tmp_i6) = i6;// +sunny
				i6 = dm(alias_i7);// +sunny
				AF=PASS SR0,MR0=PM(I6,M4);	// +sunny
				dm(alias_i7) = i6;// +sunny
				i6 = dm(tmp_i6);// +sunny

			   DIS AR_SAT;
			   AR=MR0+AF,AY0=SR1;
			   ENA AR_SAT;
			   SR=ASHIFT MR0 BY 0(LO);
			   SR0=AR,AR=SR1+AY0+C;
			   SR=LSHIFT SR0 BY -1(LO);
			   SR=SR OR ASHIFT AR BY -1(HI);
			   MR=MX0 * MX0(SS);
			   MR=SR0 * MY0(SS),DM(I1,M1)=MR1;
			   AR=PASS MR1,DM(I1,M1)=MX0;
			   MR=AR * AR(SS);
			   MY0=MX0;
			   DM(I1,M1)=MR1;
			   MR=AR * MY0(SS),DM(I1,M1)=AR;
			   DM(I1,M1)=MR1;
               I2=^coeff;
			   I3=^coeff_lsf;
			   I1=^multcoef;
			   MY0=DM(I1,M1);
			   AR=PASS 1,MX0=DM(I3,M1);
			   MF=MX0 * MY0(SS),MY1=DM(I1,M1);
			   MR=AR * MF(SS),MX0=DM(I2,M1);
			   MR=MR+MX0*MY0(SS),MX0=DM(I3,M1);
			   MF=MX0 * MY1(SS),MY0=DM(I1,M1);
			   MR=MR+AR*MF(SS),MX0=DM(I2,M1);
			   MR=MR+MX0*MY1(SS),MX0=DM(I3,M1);
			   MF=MX0 * MY0(SS),MY1=DM(I1,M1);
			   MR=MR+AR*MF(SS),MX0=DM(I2,M1);
			   MR=MR+MX0*MY0(SS),MX0=DM(I3,M1);
			   MF=MX0 * MY1(SS),MY0=DM(I1,M1);
			   MR=MR+AR*MF(SS),MX0=DM(I2,M1);
			   MR=MR+MX0*MY1(SS),MX0=DM(I3,M1);
			   MF=MX0 * MY0(SS);
			   MR=MR+AR*MF(SS),MX0=DM(I2,M1);
			   MR=MR+MX0*MY0(SS),AY0=MX1;
			   IF MV SAT MR;               
			   AR=MR0-AY0;
			   AR=MR1-AY1+C-1;
			   NONE=PASS AR;
               IF GE JUMP search_book2;
			   AR=I4;
			   AY0=^gbk11;
			   AR=AR-AY0,AY1=MR1;
			   M2=AR;
			   AR=I6;
			   AY0=^gbk21;
			   AR=AR-AY0,MX1=MR0;
			   M3=AR;		   
search_book2:  MODIFY(I6,M4);
			   MODIFY(I5,M4);
search_book1:  MODIFY(I4,M4);
//			   I7=I0;		// -sunny
//			   M7=-1;		// -sunny
				dm(alias_i7) = i0;	// +sunny
				AR = -1;			// +sunny
				dm(alias_m7) = AR;	// +sunny
			   RTS;
/***********************************************************************/

.ENDMOD;

⌨️ 快捷键说明

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