📄 lpcfunc.dsp
字号:
* Calling Parameters *
* I1 : Q15 lsp[m] (range: -1<=val<1) *
* CNTR : LPC order *
* Return Values *
* I0 : Q15 lsf[m] normalized (range: 0.0<=val<=0.5) *
* Altered Registers: MR,SR,SE,AR,AF,AX0,AY0,MY0,I0,I1,I5 *
* Computation Time : 18 cycles *
*************************************************************************/
.ENTRY Lsp_lsf;
Lsp_lsf: SE=3;
AR=63;
DO Lsp_lsf_lp UNTIL CE;
ind_loop: I5=^table;
M5=AR;
MODIFY(I5,M5);
AF=PASS AR,AX0=PM(I5,M5);
AR=AF-1,AY0=DM(I1,M0);
NONE=AX0-AY0;
IF LT JUMP ind_loop;
next_lsp_lsf: AR=AR+1;
I5=^slope;
MODIFY(I5,M5);
SR=ASHIFT AR BY 8(LO);
AR=AY0-AX0,MY0=PM(I5,M5);
MR=AR * MY0(SS),AR=DM(I1,M2);
SR=LSHIFT MR0 (LO),AY0=SR0;
SR=SR OR ASHIFT MR1 (HI);
AR=SR0+H#8000;
AR=SR1+C;
AR=AR+AY0;
Lsp_lsf_lp: AR=PASS AF,DM(I0,M2)=AR;
RTS;
/************************************************************************
* Lsf_lsp2 Transformation lsf to lsp *
* $$01/10/2000 used both in encoder and decoder *
* $$01/11/2000 move dm data table to pm data table *
* $$01/11/2000 modify pointer and varaibles to adapt table change *
* Calling Parameters *
* I1 : Q13 lsf[m] (range: 0.0<=val<PI) *
* CNTR : LPC order *
* Return Values *
* I0 : Q15 lsp[m] (range: -1<=val<1) *
* Altered Registers: MR,SR,AR,AY0,AY1,MX0,MY0,MY1,I0,I1,I5 *
* Computation Time : 18 cycles *
*************************************************************************/
.ENTRY Lsf_lsp2;
Lsf_lsp2: AY0=63;
MY0=20861;
AF=PASS H#00FF;
DO Lsf_lsp2_lp UNTIL CE;
{-------freq = abs_s(freq)------------}
MX0=DM(I1,M1);
MR=MX0 * MY0(SS);
SR=ASHIFT MR1 BY -8(LO);
AR=MR1 AND AF;
AR=PASS SR0,MY1=AR;
NONE=SR0-AY0;
IF GT AR=PASS AY0;
{-------lsp[i] = table2[ind]+ (slope_cos[ind]*offset >> 12)----}
M5=AR;
I5=^slope_cos;
MODIFY(I5,M5);
MX0=PM(I5,M5);
I5=^table2;
MODIFY(I5,M5);
MR=MX0 * MY1(SS),AY1=PM(I5,M4);
SR=LSHIFT MR0 BY -13(LO);
SR=SR OR ASHIFT MR1 BY -13(HI);
AR=SR0 + AY1;
Lsf_lsp2_lp: DM(I0,M1)=AR;
RTS;
/************************************************************************
* Lsp_lsf2 Transformation lsp to lsf *
* $$01/10/2000 used both in encoder and decoder *
* $$01/11/2000 move dm data table to pm data table *
* $$01/11/2000 modify pointer and varaibles to adapt table change *
* Calling Parameters *
* I1 : Q15 lsp[m] (range: -1<=val<1) *
* CNTR : LPC order *
* Return Values *
* I0 : Q13 lsf[m] (range: 0.0<=val<PI) *
* Altered Registers: MR,SR,AR,AF,AX0,AY0,MY0,MY1,I0,I1,I5 *
* Computation Time : 18 cycles *
*************************************************************************/
.ENTRY Lsp_lsf2;
Lsp_lsf2: AR=63;
MY1=25736;
DO Lsp_lsf2_lp UNTIL CE;
AY0=DM(I1,M2);
ind_loop2: I5=^table2;
M5=AR;
MODIFY(I5,M5);
AX0=PM(I5,M5);
NONE=AX0-AY0;
IF GE JUMP next_lsp_lsf2;
AR=AR-1;
IF GT JUMP ind_loop2;
next_lsp_lsf2: M5=AR;
I5=^table2;
MODIFY(I5,M5);
AF=PASS AR,AX0=PM(I5,M5);
SR=ASHIFT AR BY 9(LO);
I5=^slope_acos;
MODIFY(I5,M5);
{----------acos(lsp[i])= ind*512 + (slope_acos[ind]*offset >> 11)----}
AR=AY0-AX0,MY0=PM(I5,M5);
MR=AR * MY0(SS),AY0=SR0;
SR=LSHIFT MR0 BY -12(LO);
SR=SR OR ASHIFT MR1 BY -12(HI);
AR=SR0+AY0;
MR=AR * MY1(SS);
Lsp_lsf2_lp: AR=PASS AF,DM(I0,M2)=MR1;
RTS;
/************************************************************************
* procedure Weight_Az Weighting of LPC coefficients. *
* ap[i] = a[i] * (gamma ** i) *
* $$01/10/2000 used both in encoder and decoder *
* Calling Parameters *
* I1 : Q12 : a[m+1] LPC coefficients *
* MY1 : Q15 : Spectral expansion factor. *
* CNTR : LPC order. *
* Return Values *
* I0 : Q12 Spectral expanded LPC coefficients *
* Altered Registers: MR,MX0,MY0,I0,I1,M1 *
* Computation Time : 18 cycles *
*************************************************************************/
.ENTRY Weight_Az;
Weight_Az: MX0=DM(I1,M1);
DM(I0,M1)=MX0;
MR1=MY1;
DO round_Az UNTIL CE;
AR=PASS MR1,MY0=DM(I1,M1);
MR=AR * MY0(RND);
round_Az: MR=AR * MY1(RND),DM(I0,M1)=MR1;
MY0=DM(I1,M1);
MR=MR1 * MY0(RND);
DM(I0,M1)=MR1;
RTS;
/************************************************************************
* Interpolation of the quantized LSP's *
* Interpolation of the LPC parameters. *
* $$01/10/2000 used both in encoder and decoder *
* Calling Parameters *
* I1 : LSP vector of past frame *
* I2 : LSP vector of present frame *
* Return Values *
* I0 : Q12 Spectral expanded LPC coefficients *
* Altered Registers: MR,SR,AR,I0,I1,I2,I3,AX0,MY0 *
* Computation Time : 18 cycles *
*************************************************************************/
.ENTRY Int_qlpc;
.VAR/DM/RAM/SEG=App_DMbuf lsp[M];
.VAR/DM/RAM/SEG=App_DMtmp I0_save,I2_save;
Int_qlpc:
{---------lsp[i] = lsp_new[i] * 0.5 + lsp_old[i] * 0.5-------}
SE=-1;
I3=I2;
// CNTR=M;
I4=^lsp;
MR0=DM(I1,M1);
CNTR=M;
DO add_qlpc UNTIL CE;
SR=ASHIFT MR0 (LO),AR=DM(I3,M1);
SR=ASHIFT AR (LO),AY0=SR0;
AR=SR0+AY0,MR0=DM(I1,M1);
add_qlpc: DM(I4,M4)=AR;
{---------subframe 1-------}
DM(I0_save)=I0;
DM(I2_save)=I2;
I1=^lsp;
CALL Lsp_Az;
{---------subframe 2-------}
M3=MP1;
I0=DM(I0_save);
I1=DM(I2_save);
MODIFY(I0,M3);
CALL Lsp_Az;
RTS;
{
/************************************************************************
* Interpolation of the unquantized LPC parameters. *
* Same as the previous function but we do not recompute Az() for *
* subframe 2 because it is already available. *
* We also compute the interpolate LSF (frequency domain). *
* $$01/10/2000 used both in encoder and decoder *
* Calling Parameters *
* I1 : LSP vector of past frame *
* I2 : LSP vector of present frame *
* Return Values *
* I3 : interpolated lsf coefficients *
* I4 : Enc_lsfnew *
* I0 : interpolated Az() for the 2 subframes *
* Altered Registers: MR,SR,AR,I0,I1,I2,I3,I4,AX0,MY0 *
* Computation Time : 18 cycles *
*************************************************************************/
.ENTRY Int_lpc;
Int_lpc: SE=-1;
/*------lsp[i] = lsp_new[i] * 0.5 + lsp_old[i] * 0.5---*/
CNTR=M;
I5=^lsp;
MR0=DM(I1,M1);
DO add_lpc UNTIL CE;
SR=ASHIFT MR0 (LO),AR=DM(I2,M1);
SR=ASHIFT AR (LO),AY0=SR0;
AR=SR0+AY0,MR0=DM(I1,M1);
add_lpc: DM(I5,M4)=AR;
I1=^lsp;
CALL Lsp_Az;
/*-------transformation from LSP to LSF (freq.domain)----*/
I0=^lsp;
CNTR=M;
CALL Lsp_lsf;
/*-------lsp[i] = lsp_new[i] * 0.5 + lsp_old[i] * 0.5----*/
CNTR=M;
CALL Lsp_lsf;
RTS;
}
/************************************************************************/
.ENDMOD;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -