annotate libgsmefr/dtx_enc.c @ 242:f081a6850fb5

libgsmfrp: new refined implementation The previous implementation exhibited the following defects, which are now fixed: 1) The last received valid SID was cached forever for the purpose of handling future invalid SIDs - we could have received some valid SID ages ago, then lots of speech or NO_DATA, and if we then get an invalid SID, we would resurrect the last valid SID from ancient history - a bad design. In our new design, we handle invalid SID based on the current state, much like BFI. 2) GSM 06.11 spec says clearly that after the second lost SID (received BFI=1 && TAF=1 in CN state) we need to gradually decrease the output level, rather than jump directly to emitting silence frames - we previously failed to implement such logic. 3) Per GSM 06.12 section 5.2, Xmaxc should be the same in all 4 subframes in a SID frame. What should we do if we receive an otherwise valid SID frame with different Xmaxc? Our previous approach would replicate this Xmaxc oddity in every subsequent generated CN frame, which is rather bad. In our new design, the very first CN frame (which can be seen as a transformation of the SID frame itself) retains the original 4 distinct Xmaxc, but all subsequent CN frames are based on the Xmaxc from the last subframe of the most recent SID.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 09 May 2023 05:16:31 +0000
parents cf39a90f5196
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
119
c1d53064b410 libgsmefr: split dtx.c into dtx_{common,dec,enc}.c
Mychaela Falconia <falcon@freecalypso.org>
parents: 67
diff changeset
1 /*
c1d53064b410 libgsmefr: split dtx.c into dtx_{common,dec,enc}.c
Mychaela Falconia <falcon@freecalypso.org>
parents: 67
diff changeset
2 * This file is a product of splitting ETSI EFR dtx.c into parts;
c1d53064b410 libgsmefr: split dtx.c into dtx_{common,dec,enc}.c
Mychaela Falconia <falcon@freecalypso.org>
parents: 67
diff changeset
3 * the present module is the encoder-specific part.
c1d53064b410 libgsmefr: split dtx.c into dtx_{common,dec,enc}.c
Mychaela Falconia <falcon@freecalypso.org>
parents: 67
diff changeset
4 */
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
6 #include "gsm_efr.h"
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include "typedef.h"
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
8 #include "namespace.h"
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include "basic_op.h"
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include "cnst.h"
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include "sig_proc.h"
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
12 #include "memops.h"
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
13 #include "no_count.h"
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include "dtx.h"
119
c1d53064b410 libgsmefr: split dtx.c into dtx_{common,dec,enc}.c
Mychaela Falconia <falcon@freecalypso.org>
parents: 67
diff changeset
15 #include "dtx_defs.h"
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
16 #include "enc_state.h"
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 /*************************************************************************
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 * FUNCTION NAME: reset_tx_dtx
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 * PURPOSE: Resets the static variables of the TX DTX handler to their
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 * initial values
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 *************************************************************************/
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
27 void reset_tx_dtx (struct EFR_encoder_state *st)
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 Word16 i;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 /* suppose infinitely long speech period before start */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
33 st->txdtx_hangover = DTX_HANGOVER;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
34 st->txdtx_N_elapsed = 0x7fff;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
35 st->txdtx_ctrl = TX_SP_FLAG | TX_VAD_FLAG;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 for (i = 0; i < 6; i++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
39 st->old_CN_mem_tx[i] = 0;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 for (i = 0; i < DTX_HANGOVER; i++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
44 st->lsf_old_tx[i][0] = 1384;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
45 st->lsf_old_tx[i][1] = 2077;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
46 st->lsf_old_tx[i][2] = 3420;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
47 st->lsf_old_tx[i][3] = 5108;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
48 st->lsf_old_tx[i][4] = 6742;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
49 st->lsf_old_tx[i][5] = 8122;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
50 st->lsf_old_tx[i][6] = 9863;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
51 st->lsf_old_tx[i][7] = 11092;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
52 st->lsf_old_tx[i][8] = 12714;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
53 st->lsf_old_tx[i][9] = 13701;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 for (i = 0; i < 4 * DTX_HANGOVER; i++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
58 st->gain_code_old_tx[i] = 0;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
61 st->L_pn_seed_tx = PN_INITIAL_SEED;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
63 st->buf_p_tx = 0;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 return;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 /*************************************************************************
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 * FUNCTION NAME: tx_dtx
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 * PURPOSE: DTX handler of the speech encoder. Determines when to add
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 * the hangover period to the end of the speech burst, and
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 * also determines when to use old SID parameters, and when
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 * to update the SID parameters. This function also initializes
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 * the pseudo noise generator shift register.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 * Operation of the TX DTX handler is based on the VAD flag
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 * given as input from the speech encoder.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 * INPUTS: VAD_flag Voice activity decision
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 * *txdtx_ctrl Old encoder DTX control word
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 * OUTPUTS: *txdtx_ctrl Updated encoder DTX control word
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 * L_pn_seed_tx Initialized pseudo noise generator shift
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 * register (global variable)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 * RETURN VALUE: none
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 *************************************************************************/
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 void tx_dtx (
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
92 struct EFR_encoder_state *st,
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
93 Word16 VAD_flag
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 )
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 /* N_elapsed (frames since last SID update) is incremented. If SID
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 is updated N_elapsed is cleared later in this function */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
99 st->txdtx_N_elapsed = add (st->txdtx_N_elapsed, 1);
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 /* If voice activity was detected, reset hangover counter */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102
193
cf39a90f5196 libgsmefr/dtx_enc.c: perf opt
Mychaela Falconia <falcon@freecalypso.org>
parents: 119
diff changeset
103 if (VAD_flag == 1)
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
105 st->txdtx_hangover = DTX_HANGOVER;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
106 st->txdtx_ctrl = TX_SP_FLAG | TX_VAD_FLAG;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 else
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
110 if (st->txdtx_hangover == 0)
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 /* Hangover period is over, SID should be updated */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
114 st->txdtx_N_elapsed = 0;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 /* Check if this is the first frame after hangover period */
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
117 if ((st->txdtx_ctrl & TX_HANGOVER_ACTIVE) != 0)
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
119 st->txdtx_ctrl = TX_PREV_HANGOVER_ACTIVE
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
120 | TX_SID_UPDATE;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
121 st->L_pn_seed_tx = PN_INITIAL_SEED;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 else
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
125 st->txdtx_ctrl = TX_SID_UPDATE;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 else
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 /* Hangover period is not over, update hangover counter */
193
cf39a90f5196 libgsmefr/dtx_enc.c: perf opt
Mychaela Falconia <falcon@freecalypso.org>
parents: 119
diff changeset
131 st->txdtx_hangover--;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 /* Check if elapsed time from last SID update is greater than
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 threshold. If not, set SP=0 (although hangover period is not
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 over) and use old SID parameters for new SID frame.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 N_elapsed counter must be summed with hangover counter in order
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 to avoid erroneus SP=1 decision in case when N_elapsed is grown
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 bigger than threshold and hangover period is still active */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139
193
cf39a90f5196 libgsmefr/dtx_enc.c: perf opt
Mychaela Falconia <falcon@freecalypso.org>
parents: 119
diff changeset
140 if (add (st->txdtx_N_elapsed, st->txdtx_hangover) <
cf39a90f5196 libgsmefr/dtx_enc.c: perf opt
Mychaela Falconia <falcon@freecalypso.org>
parents: 119
diff changeset
141 DTX_ELAPSED_THRESHOLD)
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 /* old SID frame should be used */
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
144 st->txdtx_ctrl = TX_USE_OLD_SID;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 else
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
148 if ((st->txdtx_ctrl & TX_HANGOVER_ACTIVE) != 0)
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
150 st->txdtx_ctrl = TX_PREV_HANGOVER_ACTIVE
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 | TX_HANGOVER_ACTIVE
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
152 | TX_SP_FLAG;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 else
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
156 st->txdtx_ctrl = TX_HANGOVER_ACTIVE
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
157 | TX_SP_FLAG;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 return;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 /*************************************************************************
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 * FUNCTION NAME: CN_encoding
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 * PURPOSE: Encoding of the comfort noise parameters into a SID frame.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 * Use old SID parameters if necessary. Set the parameter
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 * indices not used by comfort noise parameters to zero.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 * INPUTS: params[0..56] Comfort noise parameter frame from the
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 * speech encoder
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 * txdtx_ctrl TX DTX handler control word
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 * OUTPUTS: params[0..56] Comfort noise encoded parameter frame
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 * RETURN VALUE: none
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 *************************************************************************/
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 void CN_encoding (
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
185 struct EFR_encoder_state *st,
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 Word16 params[],
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 Word16 txdtx_ctrl
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 )
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 Word16 i;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 if ((txdtx_ctrl & TX_SID_UPDATE) != 0)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 /* Store new CN parameters in memory to be used later as old
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 CN parameters */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 /* LPC parameter indices */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 for (i = 0; i < 5; i++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
200 st->old_CN_mem_tx[i] = params[i];
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 /* Codebook index computed in last subframe */
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
203 st->old_CN_mem_tx[5] = params[56];
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 if ((txdtx_ctrl & TX_USE_OLD_SID) != 0)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 /* Use old CN parameters previously stored in memory */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 for (i = 0; i < 5; i++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
210 params[i] = st->old_CN_mem_tx[i];
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 }
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
212 params[17] = st->old_CN_mem_tx[5];
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
213 params[30] = st->old_CN_mem_tx[5];
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
214 params[43] = st->old_CN_mem_tx[5];
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
215 params[56] = st->old_CN_mem_tx[5];
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 /* Set all the rest of the parameters to zero (SID codeword will
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 be written later) */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219 for (i = 0; i < 12; i++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
221 params[i + 5] = 0;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
222 params[i + 18] = 0;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
223 params[i + 31] = 0;
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
224 params[i + 44] = 0;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 return;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230 /*************************************************************************
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232 * FUNCTION NAME: aver_lsf_history
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 * PURPOSE: Compute the averaged LSF parameter vector. Computation is
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 * performed by averaging the LSF parameter vectors which exist
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 * in the LSF parameter history, together with the LSF
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 * parameter vectors of the current frame.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239 * INPUTS: lsf_old[0..DTX_HANGOVER-1][0..M-1]
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240 * LSF parameter history
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 * lsf1[0..M-1] LSF vector of the 1st half of the frame
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 * lsf2[0..M-1] LSF vector of the 2nd half of the frame
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 * OUTPUTS: lsf_aver[0..M-1] Averaged LSF parameter vector
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 * RETURN VALUE: none
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248 *************************************************************************/
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 void aver_lsf_history (
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 Word16 lsf_old[DTX_HANGOVER][M],
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252 Word16 lsf1[M],
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 Word16 lsf2[M],
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254 Word16 lsf_aver[M]
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 )
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 Word16 i, j;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 Word32 L_temp;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 for (j = 0; j < M; j++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 L_temp = L_mult (0x3fff, lsf1[j]);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 L_temp = L_mac (L_temp, 0x3fff, lsf2[j]);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 L_temp = L_mult (INV_DTX_HANGOVER_P1, extract_h (L_temp));
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266 for (i = 0; i < DTX_HANGOVER; i++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 L_temp = L_mac (L_temp, INV_DTX_HANGOVER_P1, lsf_old[i][j]);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271 lsf_aver[j] = extract_h (L_temp); move16 ();
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274 return;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
275 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277 /*************************************************************************
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279 * FUNCTION NAME: update_gain_code_history_tx
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 * PURPOSE: Update the fixed codebook gain parameter history of the
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282 * encoder. The fixed codebook gain parameters kept in the buffer
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
283 * are used later for computing the reference fixed codebook
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
284 * gain parameter value and the averaged fixed codebook gain
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
285 * parameter value.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
286 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
287 * INPUTS: new_gain_code New fixed codebook gain value
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
288 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
289 * gain_code_old_tx[0..4*DTX_HANGOVER-1]
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
290 * Old fixed codebook gain history of encoder
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
291 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
292 * OUTPUTS: gain_code_old_tx[0..4*DTX_HANGOVER-1]
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
293 * Updated fixed codebook gain history of encoder
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
294 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
295 * RETURN VALUE: none
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
296 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
297 *************************************************************************/
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
298
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
299 void update_gain_code_history_tx (
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
300 struct EFR_encoder_state *st,
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
301 Word16 new_gain_code
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
302 )
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
303 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
304 /* Circular buffer */
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
305 st->gain_code_old_tx[st->buf_p_tx] = new_gain_code;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
306
193
cf39a90f5196 libgsmefr/dtx_enc.c: perf opt
Mychaela Falconia <falcon@freecalypso.org>
parents: 119
diff changeset
307 if (st->buf_p_tx == (4 * DTX_HANGOVER - 1))
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
308 {
67
58b64224d4ac libgsmefr: dtx.c compiles
Mychaela Falconia <falcon@freecalypso.org>
parents: 66
diff changeset
309 st->buf_p_tx = 0;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
310 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
311 else
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
312 {
193
cf39a90f5196 libgsmefr/dtx_enc.c: perf opt
Mychaela Falconia <falcon@freecalypso.org>
parents: 119
diff changeset
313 st->buf_p_tx++;
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
314 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
315
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
316 return;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
317 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
318
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
319 /*************************************************************************
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
320 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
321 * FUNCTION NAME: compute_CN_excitation_gain
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
322 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
323 * PURPOSE: Compute the unquantized fixed codebook gain. Computation is
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
324 * based on the energy of the Linear Prediction residual signal.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
325 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
326 * INPUTS: res2[0..39] Linear Prediction residual signal
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
327 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
328 * OUTPUTS: none
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
329 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
330 * RETURN VALUE: Unquantized fixed codebook gain
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
331 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
332 *************************************************************************/
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
333
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
334 Word16 compute_CN_excitation_gain (
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
335 Word16 res2[L_SUBFR]
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
336 )
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
337 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
338 Word16 i, norm, norm1, temp, overfl;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
339 Word32 L_temp;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
340
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
341 /* Compute the energy of the LP residual signal */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
342
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
343 norm = 0; move16 ();
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
344 do
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
345 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
346 overfl = 0; move16 ();
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
347
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
348 L_temp = 0L; move32 ();
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
349 for (i = 0; i < L_SUBFR; i++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
350 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
351 temp = shr (res2[i], norm);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
352 L_temp = L_mac (L_temp, temp, temp);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
353 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
354
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
355 test ();
193
cf39a90f5196 libgsmefr/dtx_enc.c: perf opt
Mychaela Falconia <falcon@freecalypso.org>
parents: 119
diff changeset
356 if (L_temp == MAX_32)
66
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
357 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
358 norm = add (norm, 1);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
359 overfl = 1; move16 (); /* Set the overflow flag */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
360 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
361 test ();
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
362 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
363 while (overfl != 0);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
364
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
365 L_temp = L_add (L_temp, 1L); /* Avoid the case of all zeros */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
366
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
367 /* Take the square root of the obtained energy value (sqroot is a 2nd
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
368 order Taylor series approximation) */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
369
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
370 norm1 = norm_l (L_temp);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
371 temp = extract_h (L_shl (L_temp, norm1));
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
372 L_temp = L_mult (temp, temp);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
373 L_temp = L_sub (805306368L, L_shr (L_temp, 3));
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
374 L_temp = L_add (L_temp, L_mult (24576, temp));
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
375
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
376 temp = extract_h (L_temp);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
377 test (); logic16 ();
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
378 if ((norm1 & 0x0001) != 0)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
379 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
380 temp = mult_r (temp, 23170);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
381 norm1 = sub (norm1, 1);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
382 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
383 /* Divide the result of sqroot operation by sqroot(10) */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
384
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
385 temp = mult_r (temp, 10362);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
386
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
387 /* Re-scale to get the final value */
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
388
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
389 norm1 = shr (norm1, 1);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
390 norm1 = sub (norm1, norm);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
391
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
392 test ();
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
393 if (norm1 >= 0)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
394 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
395 temp = shr (temp, norm1);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
396 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
397 else
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
398 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
399 temp = shl (temp, abs_s (norm1));
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
400 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
401
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
402 return temp;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
403 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
404
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
405 /*************************************************************************
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
406 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
407 * FUNCTION NAME: aver_gain_code_history
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
408 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
409 * PURPOSE: Compute the averaged fixed codebook gain parameter value.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
410 * Computation is performed by averaging the fixed codebook
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
411 * gain parameter values which exist in the fixed codebook
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
412 * gain parameter history, together with the fixed codebook
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
413 * gain parameter value of the current subframe.
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
414 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
415 * INPUTS: CN_excitation_gain
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
416 * Unquantized fixed codebook gain value
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
417 * of the current subframe
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
418 * gain_code_old[0..4*DTX_HANGOVER-1]
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
419 * fixed codebook gain parameter history
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
420 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
421 * OUTPUTS: none
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
422 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
423 * RETURN VALUE: Averaged fixed codebook gain value
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
424 *
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
425 *************************************************************************/
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
426
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
427 Word16 aver_gain_code_history (
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
428 Word16 CN_excitation_gain,
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
429 Word16 gain_code_old[4 * DTX_HANGOVER]
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
430 )
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
431 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
432 Word16 i;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
433 Word32 L_ret;
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
434
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
435 L_ret = L_mult (0x470, CN_excitation_gain);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
436
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
437 for (i = 0; i < (4 * DTX_HANGOVER); i++)
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
438 {
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
439 L_ret = L_mac (L_ret, 0x470, gain_code_old[i]);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
440 }
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
441 return extract_h (L_ret);
824ff833bda9 libgsmefr/dtx.c: initial import from ETSI code
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
442 }