📄 decodegain.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 + -