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

📄 decodegain.dsp

📁 基于ADSP的G.729语音编解码程序
💻 DSP
字号:
                /************************************************************************/
/* $$01/10/2000 checked decode gain module data and function            */
/* $$01/16/2001 modified and printed,Author: Jason.wang (zhigang wang)  */
/* $$01/16/2001 Email: wzg119@yeah.net,  BP: 86+02195950-161452         */
/* $$01/16/2001 This modlue is not optimized! should be test on Emulator*/
/************************************************************************/
.MODULE/SEG=App_PM        Decgain;

/************************************************************************/
#include	   "ld8a.inc"
#include	   "tab_ld8a.inc"

/************************************************************************/
/* Gain predictor, Past quantized energies = -14.0 in Q10               */
/* $$01/10/2000 static varaibles used in decoder frame speech process   */
/************************************************************************/
.VAR/DM/RAM/SEG=App_DMmem    Dec_pastqua_en[4];

/************************************************************************/
.EXTERNAL      Gain_update;
.EXTERNAL      Gain_predict;
.EXTERNAL      Gain_update_erasure;

/************************************************************************
* Function  init the decodee of gain decoder                            *
* $$01/10/2000 used only in decoder									    *
* Calling Parameters										         	*	
* Return Values														    *
* Altered Registers: I1,M1						                        * 	
* Computation Time : 18 cycles									  	    *	
*************************************************************************/
.ENTRY         Init_DecodeGain;

Init_DecodeGain:
			   I1=^Dec_pastqua_en;
			   DM(I1,M1)=H#C800;
			   DM(I1,M1)=H#C800;
			   DM(I1,M1)=H#C800;
			   DM(I1,M1)=H#C800;
			   RTS;
/************************************************************************
* Decode the pitch and codebook gains									*
* $$01/10/2000 only used in decoder										*
* $$01/11/2000  move dm table to pm table area							*
* $$01/11/2000 modify pointer and varaible to adapt table change		*
* Calling Parameters   					  								*	
*         SR0  : Quantization index										*
*         I2   : Q13 Innovative code vector								*
*         SI   : Subframe size											*
*         AR   : Bad frame indicator									*
*         MX0  : Q14 Quantized pitch gain								*
*         MX1  : Q1 Quantized codebook gain								*
* Return Values															*
*         AR   : Q14 Quantized pitch gain								*
*         MR1  : Q1 Quantized codebook gain								*
* Altered Registers: MR,MF,SR,SE,SI,AR,AF,AX0,AX1,AY0,AY1,MX0			*
*                    MX1,MY0,MY1										*
* Computation Time : 18 cycles											*	
*************************************************************************/
.ENTRY         Dec_gain;

    /*----------Case of erasure---------------------------------*/
Dec_gain:      AR=PASS AR;
			   IF EQ JUMP start_decgain;  
   {-----------update table of past quantized energies (frame erasure)---}
               I1=^Dec_pastqua_en;
			   CALL Gain_update_erasure; 
   {-----------Case of erasure---------------------------------}
               MY0=H#7333;
               MR=MX0 * MY0 (SS),AY0=MY0;
			   AF=MR1-AY0,AR=MR1;
			   IF GT AR=PASS AY0;
			   MY0=H#7D6F;
			   MR=MX1 * MY0 (SS);
			   RTS;
   {-----------Decode pitch gain-------------------------------}
start_decgain: I4=^imap1;
    /*---------decode index1 of codebook----------------------*/
			   SE=-NCODE2_B;
               SR=LSHIFT SR0 (LO),AR=SR0;
			   M5=SR0;
			   MODIFY(I4,M5);
    /*---------get index2 of codebook gain-------------------*/
			   AY0=NCODE2-1;
			   AR=AR AND AY0,SR0=PM(I4,M4);     
			   M5=AR;
			   M6=SR0;
			   I5=^imap2;
			   MODIFY(I5,M5);
			   AX1=PM(I5,M5);
			   M5=AX1;
			   I4=^gbk11;
			   I5=^gbk21;
			   MODIFY(I4,M6);
			   MODIFY(I5,M5);
			   AX0=PM(I4,M5);
			   AY0=PM(I5,M5);
			   AR=AX0+AY0;
			   CNTR=SI;
   {-----------Decode codebook gain-----------------------}
			   SI=AR;
			   I1=^Dec_pastqua_en;
			   CALL Gain_predict;
   {-----------update table of past quantized energies----}
			   SE=0;
			   M5=AX1;
			   I4=^gbk12;
			   I5=^gbk22;
			   MODIFY(I4,M6);
			   MODIFY(I5,M5);
			   SR1=PM(I4,M5);
			   SR=ASHIFT SR1 (LO),MY1=SR0;
			   AF=PASS SR0,SR0=PM(I5,M5);
			   SR=ASHIFT SR0 (LO),AY1=SR1;
			   DIS AR_SAT;
               AR=SR0+AF,AX0=AR;
			   ENA AR_SAT;
			   MR0=AR,AR=SR1+AY1+C;
               MR1=AR;
			   IF NOT AV JUMP decgain_noav;
			   AR=H#0000;
			   AR=PASS MR1;
			   IF GE AR=AR-1;
			   MR0=AR;
decgain_noav:  AX1=MR0;
			   AY1=MR1;
			   I1=^Dec_pastqua_en;
			   CALL Gain_update;
               AR=-AX0,MR0=AX1;
			   MR1=AY1;
			   SR=LSHIFT MR0 BY -1(LO);
			   SR=SR OR ASHIFT MR1 BY -1(HI);
			   AR=AR + H#0004;
			   MR=SR0 * MY1 (SS),SE=AR;
			   SR=LSHIFT MR0 (LO),AR=SI;
			   SR=SR OR ASHIFT MR1 (HI);
			   MR1=SR1;
			   RTS;
/*************************************************************************/
.ENDMOD;

⌨️ 快捷键说明

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