📄 postfilt_asm_nok.asm
字号:
;RSBX FRCT
;RSBX OVM
STL B,*SP(0)
CALL #_L_shr ; |434|
;----------------------------------------------------------------------
; 437 | s = Inv_sqrt(s); /* Q19 */
;----------------------------------------------------------------------
RSBX FRCT
RSBX OVM
NOP
CALL #_Inv_sqrt ; |437|
;----------------------------------------------------------------------
; 438 | i = round(L_shl(s,9)); /* Q12 */
;----------------------------------------------------------------------
SSBX SXM
SSBX OVM
NOP
;RSBX FRCT
;RSBX OVM
;ST #9,*SP(0) ; |438|
;CALL #_L_shl ; |438|
SFTA A,9
;RSBX OVM
;SSBX SXM
;SFTA A,8 ; |438|
;SFTA A,-8 ; |438|
;SSBX OVM
ADD #1,#15,A,A ; |438|
SFTA A,-16,B ; |438|
;----------------------------------------------------------------------
; 441 | g0 = mult(i, AGC_FAC1); /* Q12 */
;----------------------------------------------------------------------
;RSBX OVM
;NOP
LD #3276,16,A ; |441|
;SSBX OVM
STLM B,T
SSBX FRCT
NOP
MPYA A ; |441|
SFTA A,-16,A ; |441|
STL A,*SP(46)
L32:
;----------------------------------------------------------------------
; 447 | gain = past_gain;
;----------------------------------------------------------------------
MVDM *(_past_gain$2),AR1
;----------------------------------------------------------------------
; 448 | for(i=0; i<l_trm; i++) {
;----------------------------------------------------------------------
LD *SP(43),A
BC L34,ALEQ ; |448|
MVDK *SP(43),*(AR7)
MVDK *SP(44),*(AR6)
L33:
;----------------------------------------------------------------------
; 449 | gain = mult(gain, AGC_FAC);
; 450 | gain = add(gain, g0);
;----------------------------------------------------------------------
;RSBX OVM
;SSBX FRCT
;SSBX SXM
MVMD AR1,T
LD #29491,16,A ; |449|
;SSBX OVM
LD *SP(46),B
MPYA A ; |449|
ADD *(BL),16,A,A ; |449|
SFTA A,-16,A ; |449|
STLM A,AR1
;----------------------------------------------------------------------
; 451 | sig_out[i] = extract_h(L_shl(L_mult(sig_out[i], gain), 3));
;----------------------------------------------------------------------
;ST #3,*SP(0) ; |451|
MVMD AR1,T
MPY *AR6,A ; |451|
;RSBX FRCT
;RSBX OVM
;NOP
;CALL #_L_shl ; |451|
SFTA A,3
SFTL A,#-16,A ; |451|
STL A,*AR6+ ; |451|
BANZ L33,*+AR7(-1) ; |452|
L34:
;----------------------------------------------------------------------
; 453 | past_gain = gain;
;----------------------------------------------------------------------
MVMD AR1,*(_past_gain$2)
;----------------------------------------------------------------------
; 455 | return;
;----------------------------------------------------------------------
B L36 ; |455|
L35:
ST #0,*(_past_gain$2) ; |405|
L36:
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
FRAME #48
POPM AR7
POPM AR6
POPM AR1
RET
.sect ".text"
.global _Post_Filter
;----------------------------------------------------------------------
; 90 | void Post_Filter(
; 91 | Word16 *syn, /* in/out: synthesis speech (postfiltered is output)
; | */
; 92 | Word16 *Az_4, /* input : interpolated LPC parameters in all subfra
; | mes */
; 93 | Word16 *T /* input : decoded pitch lags in all subframes
; | */
; 94 | )
;----------------------------------------------------------------------
_Post_Filter:
PSHM AR1
RSBX OVM
PSHM AR6
PSHM FP
ADDM #-178,*(SP)
NOP
NOP
MVMM SP,FP
;----------------------------------------------------------------------
; 100 | Word16 res2_pst[L_SUBFR]; /* res2[] after pitch postfiltering */
; 101 | Word16 syn_pst[L_FRAME]; /* post filtered synthesis speech */
; 103 | Word16 Ap3[MP1], Ap4[MP1]; /* bandwidth expanded LP parameters */
; 105 | Word16 *Az; /* pointer to Az_4: */
; 107 | Word16 t0_max, t0_min; /* closed-loop pitch search range */
; 108 | Word16 i_subfr; /* index for beginning of subframe */
; 110 | Word16 h[L_H];
; 112 | Word16 i, j;
; 113 | Word16 temp1, temp2;
; 114 | Word32 L_tmp;
;----------------------------------------------------------------------
STL A,*FP(170)
LD *FP(183),A
STL A,*FP(171)
LD *FP(182),A
;----------------------------------------------------------------------
; 120 | Az = Az_4;
; 122 | for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
;----------------------------------------------------------------------
MVMM SP,AR6
MAR *+AR6(#46)
STL A,*FP(172)
LD *FP(170),A
STL A,*FP(173)
LD #_mem_syn_pst,A
STL A,*FP(174)
LD #2,A
STL A,*FP(175)
L37:
;----------------------------------------------------------------------
; 126 | t0_min = sub(*T++, 3);
;----------------------------------------------------------------------
SSBX SXM
MVDK *FP(171),*(AR1)
LD *AR1+,16,A ; |126|
SSBX OVM
NOP
SUB #3,16,A,A ; |126|
SFTA A,-16,A ; |126|
STL A,*FP(176)
MVKD *(AR1),*FP(171)
;----------------------------------------------------------------------
; 127 | t0_max = add(t0_min, 6);
; 128 | if (sub(t0_max, PIT_MAX) > 0) {
; 129 | t0_max = PIT_MAX;
;----------------------------------------------------------------------
;RSBX OVM
LD *(AL),16,A ; |127|
;SSBX OVM
NOP
ADD #6,16,A,A ; |127|
SFTA A,-16,A ; |127|
;RSBX OVM
STL A,*FP(177)
LD *(AL),A ; |127|
SUB #144,A,A ; |127|
BC L38,ALT ; |127|
;----------------------------------------------------------------------
; 130 | t0_min = sub(t0_max, 6);
;----------------------------------------------------------------------
LD #143,16,A ; |130|
;SSBX OVM
NOP
SUB #6,16,A,A ; |130|
SFTA A,-16,A ; |130|
STL A,*FP(176)
LD #143,A
STL A,*FP(177)
L38:
;----------------------------------------------------------------------
; 135 | Weight_Az(Az, GAMMA2_PST, M, Ap3);
;----------------------------------------------------------------------
ST #18022,*SP(0) ; |135|
RSBX OVM
LDM SP,A
ST #10,*SP(1) ; |135|
ADD #126,A
STL A,*SP(2)
RSBX FRCT
LD *FP(172),A
CALL #_Weight_Az ; |135|
;----------------------------------------------------------------------
; 136 | Weight_Az(Az, GAMMA1_PST, M, Ap4);
;----------------------------------------------------------------------
ST #22938,*SP(0) ; |136|
RSBX OVM
LDM SP,A
ST #10,*SP(1) ; |136|
ADD #137,A
STL A,*SP(2)
RSBX FRCT
LD *FP(172),A
CALL #_Weight_Az ; |136|
;----------------------------------------------------------------------
; 140 | Residu(Ap3, &syn[i_subfr], res2, L_SUBFR);
;----------------------------------------------------------------------
LD *FP(173),A
STL A,*SP(0)
MVKD *(_res2),*SP(1) ; |140|
RSBX FRCT
RSBX OVM
LDM SP,A
ST #40,*SP(2) ; |140|
CALLD #_Residu ; |140|
ADD #126,A
;----------------------------------------------------------------------
; 144 | for (j=0; j<L_SUBFR; j++)
;----------------------------------------------------------------------
STM #0,AR1
SSBX OVM
SSBX SXM
NOP
L39:
;----------------------------------------------------------------------
; 146 | scal_res2[j] = shr(res2[j], 2);
;----------------------------------------------------------------------
;RSBX OVM
LDM AR1,A
ADD *(_res2),A
STLM A,AR2
;ST #2,*SP(0) ; |146|
;RSBX FRCT
LD *AR2,A
;CALL #_crshft ; |146|
SFTA A,-2
LDM AR1,B
;RSBX OVM
ADD *(_scal_res2),B
STLM B,AR2
NOP
NOP
STL A,*AR2
MAR *AR1+
;SSBX SXM
LDM AR1,A
LD *(AL),A ; |147|
SUB #40,A,A ; |147|
BC L39,ALT ; |147|
;----------------------------------------------------------------------
; 151 | pit_pst_filt(res2, scal_res2, t0_min, t0_max, L_SUBFR, res2_pst);
;----------------------------------------------------------------------
MVKD *(_scal_res2),*SP(0) ; |151|
LD *FP(176),A
STL A,*SP(1)
RSBX FRCT
LD *FP(177),A
STL A,*SP(2)
LDM SP,A
ADD #6,A
ST #40,*SP(3) ; |151|
STL A,*SP(4)
LD *(_res2),A
CALL #_pit_pst_filt ; |151|
;----------------------------------------------------------------------
; 157 | Copy(Ap3, h, M+1);
;----------------------------------------------------------------------
RSBX OVM
LDM SP,A
ADD #148,A
STL A,*SP(0)
LDM SP,A
RSBX FRCT
ST #11,*SP(1) ; |157|
CALLD #_Copy ; |157|
ADD #126,A
;----------------------------------------------------------------------
; 158 | Set_zero(&h[M+1], L_H-M-1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -