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

📄 quantlsp.dsp

📁 基于ADSP的G.729语音编解码程序
💻 DSP
📖 第 1 页 / 共 2 页
字号:
			   I5=I4;
//			   CNTR=M;
			   I3=^buf;
			   MY0=CONST10;
			   CNTR=M;
			   DO wegt_lp2 UNTIL CE;
			   AR=PASS 0,SR0=DM(I3,M1);
			   AF=PASS SR0,SR1=AR;				  
			   IF GT JUMP wegt_lp2-1;
               MR=SR0 * SR0(SS);
			   SR=LSHIFT MR0 BY 2(LO);
			   SR=SR OR ASHIFT MR1 BY 2(HI); 
			   MR=SR1 * MY0(SS);
			   SR=LSHIFT MR0 BY 2(LO);
			   SR=SR OR ASHIFT MR1 BY 2(HI);
			   AR=SR1+2048;
wegt_lp2:      DM(I5,M4)=AR;
			   I3=I4;
			   M3=4;
			   MY0=CONST12;
			   MODIFY(I3,M3);
			   AR=DM(I3,M1);
			   MR=AR * MY0(SS),AR=DM(I3,M2);
			   SR=LSHIFT MR0 BY 1(LO);
			   SR=SR OR ASHIFT MR1 BY 1(HI);
			   MR=AR * MY0(SS),DM(I3,M1)=SR1;
			   SR=LSHIFT MR0 BY 1(LO);
			   SR=SR OR ASHIFT MR1 BY 1(HI);
			   AR=PASS 0,DM(I3,M1)=SR1;
			   I5=I4;
			   CNTR=M;			   
			   DO find_max_wegt UNTIL CE;
			   AY0=DM(I5,M4);
			   NONE=AY0-AR;
			   IF GT AR=PASS AY0;
find_max_wegt: AR=PASS AR;
               SE=EXP AR (HI);
               I5=I4;
//               CNTR=M;
			   AR=DM(I4,M4);
               CNTR=M;
			   DO normal_wegt UNTIL CE;
			   SR=NORM AR (LO),AR=DM(I4,M4);
normal_wegt:   DM(I5,M4)=SR0;			   			    
               RTS;
/************************************************************************
* $$01/10/2000 used only in encoder										*
* Calling Parameters   													*		 	
*         I1   : Q13 : target vector									*
*         I4   : Q13 : first stage lsp codebook							*
*         I5   : Q13 : second stage lsp codebook						*
* Return Values															*
*         SR0  : selected codebook index								* 
* Altered Registers:MR,SR,AR,AF,AX0,AX1,AY0,AY1,MY0,I0,I1,I4,I5			*
* Computation Time : 18 cycles											*	
*************************************************************************/
lsp_select:	   SR0=0;
			   M5=M-NC;
               DO lsp_selec2 UNTIL CE;
			   AX0=DM(I1,M1),AY0=PM(I4,M4);
			   AR=AX0-AY0;
lsp_selec2:    AF=PASS 0,DM(I0,M1)=AR;
//			   CNTR=NC1;
               AX1=H#FFFF;
			   AY1=H#7FFF;
			   CNTR=NC1;
			   DO find_dmin_lp2 UNTIL CE;
			   MR=0;
			   I0=M3;
			   I1=M6;
			   CNTR=M-NC;
			   DO sub_dist_lp2 UNTIL CE;
			   AX0=DM(I0,M1),AY0=PM(I5,M4);
			   AR=AX0-AY0,MY0=DM(I1,M1);
			   MF=AR * MY0(SS);
sub_dist_lp2:  IF NOT MV MR=MR+AR*MF(SS);
			   IF MV SAT MR;			   
			   AY0=AX1;
			   MODIFY(I5,M5);
			   AR=MR0-AY0;
			   AR=MR1-AY1+C-1;
			   NONE=PASS AR;
			   IF GE JUMP find_dmin_lp2;	
			   AR=PASS AF,AX1=MR0;
			   AY1=MR1;
			   SR0=AR;
find_dmin_lp2: AF=AF+1;
			   RTS;

Lsp_select_1:  //CNTR=NC;
			   I0=^buf;
			   M3=^buf;
			   M6=^wegt;
			   CNTR=NC;
			   CALL lsp_select;
			   RTS;

/************************************************************************
* $$01/10/2000 used only in encoder										*
* Calling Parameters   													*	
*         I1   : Q13 : target vector      (+NC)							*
*         I4   : Q13 : first stage lsp codebook (+NC)					*
*         I5   : Q13 : second stage lsp codebook(+NC)					*
* Return Values															*
*         SR0  : selected codebook index								*
* Altered Registers: MR,SR,AR,AF,AX0,AY0,AY1,I1,I2,I4,I5				*	
* Computation Time : 18 cycles											*	
************************************************************************/
Lsp_select_2:  CNTR=M-NC;
		       I0=^buf+NC;
			   M3=^buf+NC;
			   M6=^wegt+NC;
			   CALL lsp_select;
			   RTS;
/************************************************************************
* reset encode weight filter coefficents								*
* $$01/10/2000 used only in encoder										*
* $$01/11/2000 move dm data table to pm data table						*
* Calling Parameters   													*	
* Return Values															*
* Altered Registers: AR,I0,I5,M1,M4										*	
* Computation Time : 18 cycles											*	
*************************************************************************/
.ENTRY         Lsp_encw_reset;

Lsp_encw_reset:
//               CNTR=MA_NP;
			   I0=^Enc_freq_prev;
			   I5=^freq_prev_reset;
               CNTR=MA_NP;		            
			   DO ex_encreset UNTIL CE;
               CNTR=M;
			   DO inx_encreset UNTIL CE;
			   AR=PM(I5,M4);
inx_encreset:  DM(I0,M1)=AR;
ex_encreset:   I5=^freq_prev_reset;
			   RTS;
/************************************************************************
* $$01/10/2000 used only in encoder										*
* Calling Parameters   													*	
*         I1   : x[MA_NP][M])											*
* Return Values															*
* Altered Registers: AR,I0,I1,M1										*	
* Computation Time : 18 cycles											*	
*************************************************************************/
.ENTRY         Get_freq_prev;

Get_freq_prev: I0=^Enc_freq_prev;
			   CNTR=MA_NP*M;
			   DO copy_freqprev UNTIL CE;
			   AR=DM(I0,M1);
copy_freqprev: DM(I1,M1)=AR;
			   RTS;
/************************************************************************
* $$01/10/2000 used only in encoder										*
* Calling Parameters   													*	
*         I0   : x[MA_NP][M])											*
* Return Values															*
* Altered Registers: AR,I0,I1,M1										*	
* Computation Time : 18 cycles											*	
*************************************************************************/
.ENTRY         Update_freq_prev;

Update_freq_prev:
			   I1=^Enc_freq_prev;
			   CNTR=MA_NP*M;
			   DO copy_prevfreq UNTIL CE;
			   AR=DM(I0,M1);
copy_prevfreq: DM(I1,M1)=AR;
			   RTS;
/************************************************************************
* $$01/10/2000 used only in encoder										*
* Calling Parameters   													*	
*         I1   : Q27 distortion (lo)									*
* Return Values															*
*         AR   : the selected mode										*
* Altered Registers: AR,AF,AX0,AY0,AX1,AY1,I1,M1						*	
* Computation Time : 18 cycles											*	
*************************************************************************/
Lsp_last_select:
			   AX0=DM(I1,M1);
			   AX1=DM(I1,M1);
			   AR=PASS 0,AY0=DM(I1,M1);
               AF=AY0-AX0,AY1=DM(I1,M1);
			   AF=AY1-AX1+C-1;
			   NONE=PASS AF;
			   IF LT AR=PASS 1;
			   RTS;
/************************************************************************
* $$01/10/2000 used only in encoder										*
* Calling Parameters   													*	
*         I0   : norm: weight coef.										*
*         I1   : Q13 candidate LSP vector								*
*         I2   : Q13 target vector										*
*         I4   : Q15 present MA prediction coef.						*
*         MR   : initial value set to zero								*
* Return Values															*
*         MR1,MR0: Q27 distortion										*
* Altered Registers: MR,SR,SE,AR,AY0,MY0,I1,I2,I4,I5					*	
* Computation Time : 18 cycles											*	
*************************************************************************/
Lsp_get_tdist: SE=4;
			   CNTR=M;
			   DO get_tdist_lp UNTIL CE;
			   AX0=DM(I1,M1),MY0=PM(I4,M4);
			   AY0=DM(I2,M1);
			   AR=AX0-AY0,AX0=MR1;
			   MF=AR * MY0(SS),SR0=DM(I0,M1);
			   MR=SR0 * MF(SS),AY0=MR0;
			   SR=LSHIFT MR0 (LO),MR0=AY0;
			   SR=SR OR ASHIFT MR1(HI),MR1=AX0;
			   MR=MR+SR1*MF(SS);
get_tdist_lp:  IF MV SAT MR;
			   RTS;
/************************************************************************
* $$01/10/2000 used only in encoder										*
* Calling Parameters   													*	
*         I1   : Q13 : target vector									*
*         I4   : Q13 : first stage lsp codebook							*
* Return Values															*
*         MX0  : selected codebook index								*
* Altered Registers: MR,AR,AF,AY0,AY1,AX0,MX0,I0,I1,I4					*	
* Computation Time : 18 cycles											* 	
*************************************************************************/
Lsp_pre_select:
               MX0=0;
//			   CNTR=NC0;
			   AF=PASS 0;
			   AX1=H#7FFF;
			   AY1=H#FFFF;
			   CNTR=NC0;
			   DO pre_select UNTIL CE;
			   MR=0;
			   I0=I1;
			   CNTR=M;
			   DO selec_inner UNTIL CE;
			   AX0=DM(I0,M1),AY0=PM(I4,M4);
			   AR=AX0-AY0;
selec_inner:   IF NOT MV MR=MR+AR*AR(SS);
               IF MV SAT MR;
			   AR=MR0-AY1,AY0=AX1;
			   AR=MR1-AY0+C-1;
			   NONE=PASS AR;
			   IF GE JUMP pre_select;
			   AR=PASS AF,AY1=MR0;
			   AX1=MR1;
			   MX0=AR;
pre_select:    AF=AF+1;
			   RTS;
/************************************************************************/
.ENDMOD;








⌨️ 快捷键说明

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