FreeCalypso > hg > gsm-codec-lib
annotate doc/FR1-Rx-DTX-detail @ 552:6ab066180ec2
doc: new article FR1-Rx-DTX-detail
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 07 Oct 2024 00:25:50 +0000 |
parents | |
children | 62943a1ad64e |
rev | line source |
---|---|
552
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 Rx DTX handler implementation details |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 ===================================== |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 As explained in the basic FR1-Rx-DTX article, an Rx DTX handler has to be |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 inserted between the output of the Rx radio subsystem and the input to the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 basic GSM 06.10 speech decoder. In ThemWi codec library architecture, we |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 normally run a full decoder for GSM-FR that combines the Rx DTX handler and |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 the basic 06.10 decoder, and the Rx DTX handler block by itself also serves |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 as a TFO transform. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 This Rx DTX handler is based on several GSM specs: 06.11 for the error |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 concealment function, 06.12 for the comfort noise insertion function, and 06.31 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 for overall Rx DTX handling. However, these specs give a lot of leeway to |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 implementors, hence it is prudent to document the specific choices made in the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 present ThemWi implementation. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 Error concealment implementation |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 ================================ |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 Error concealment is also called substitution and muting of lost frames. The |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 implementation of this function in Themyscira libgsmfr2 is based on the Example |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 solution presented in chapter 6 of 3GPP TS 46.011 (formerly GSM 06.11), applying |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 the most literal reading to this spec section. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 When unusable frames (as defined in GSM 06.31) occur during speech state (i.e., |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 not following a SID), the present logic kicks in. For the first BFI following |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 good speech, the last speech frame is repeated verbatim. On the second BFI the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 muting logic of Xmaxc reduction kicks in, decrementing each of the 4 Xmaxc |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 parameters by 4 with each emitted frame. RPE grid position parameters are |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 randomized at the same time. The frame in which all 4 Xmaxc parameters equal 0 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 (either because they were already 0 or because they got reduced to 0 by the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 muting sequence) is the last frame emitted in this state; all subsequent BFIs |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 will be turned into fixed-bit-pattern silence frames as given in TS 46.011 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 Table 1. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 If a BFI comes in when the Rx DTX handler is in its reset (or homed) state, the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 output proceeds directly to silence frames. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 Comfort noise insertion |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 ======================= |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 Comfort noise generation and updating is specified in GSM 06.12 section 6.1. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 Most of this section is very straightforward, and is implemented in ThemWi |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 libgsmfr2 exactly as specified, except for the very last sentence in that |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 section: |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 "When updating the comfort noise, the parameters above should preferably be |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 interpolated over a few frames to obtain smooth transitions." |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 ThemWi implementation of Rx DTX handler in libgsmfr2 does not do this "should |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 preferably" part: no interpolation is done on CN parameters; as soon as each |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 SID update comes in, the new parameters are used immediately for all generated |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 CN frames. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 Because the spec says "should preferably" rather than "shall", we can "get away" |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 with not implementing CN interpolation. But there is an even more profound |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 issue: we have yet to find anyone else's implementation, which we could use as |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 guidance, that does CN parameter interpolation for FRv1. (Such interpolation |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 is mandatory and defined in bit-exact terms for HRv1 and EFR, but FRv1 is a |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 different story.) |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 We had a hope that Nokia TCSM2 (a historical hw implementation of GSM TRAU |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 network element) might implement CN interpolation for FRv1 - but our |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 experimental findings on that platform are inconclusive: |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 * When acting as a TFO transform for FRv1, this TRAU does not interpolate CN |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 parameters, it makes abrupt changes in CN output just like our implementation |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 - but it effects a strange delay of 24 frames, suggesting that they have some |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 code paths that assume CN interpolation would be applied. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 * When the TRAU acts as a regular speech decoder (not TFO), it is not clear how |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 it performs any of Rx DTX functions: Nokia chose to not implement the optional |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 in-band homing feature for FRv1, thus we have no way to explore bit-exact |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 behaviour of their speech decoder via test sequences. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 Another enticing idea would be to statically reverse-engineer the DSP ROM of TI |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 Calypso chip and thus recover its complete speech Rx chain - but of course the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 effort would be extremely massive, and is not likely to happen any time soon. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 Until we either get around to the far-future task of Calypso DSP static |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 reversing or find some other implementation of GSM-FR Rx DTX handler that does |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 CN interpolation and whose operation we can replicate, we shall stick to the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 simple approach of not doing CN interpolation. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 Handling of SID frames with Xmaxc discrepancy |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 ============================================= |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 Per GSM 06.12 section 5.2, all 4 subframe Xmaxc parameters in a SID frame are |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 supposed to be equal, encoding the quantized form of mean(Xmax). However, what |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 should Rx DTX implementations do when they receive an otherwise-valid SID frame |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 in which these 4 parameters are not all equal? In our implementation, we handle |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 such discrepancy as follows: |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 * In those frame positions in which we receive a fresh SID (initial or update), |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 the CN frame we emit is a direct transformation of the received SID, and all |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 4 Xmaxc parameters are passed through intact. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 * When we emit CN frames based on remembered LARc and Xmaxc parameters, we use |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 the last-subframe Xmaxc from the most recently received SID frame. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 Lost SID handling and CN muting |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 =============================== |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 In accord with GSM 06.11 sections 5.3, when we receive an unusable frame in a |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 TAF position during CN insertion state, we set a flag that remembers this |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 condition, but don't switch to CN muting right away. Per section 5.4 of the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 same spec, we initiate CN muting when a second lost SID event occurs (unusable |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 frame received in a TAF position) without intervening good speech frames or |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 accepted SID frames. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 When we do enter CN muting state, we decrement CN Xmaxc (always the same for |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 all 4 subframes) by 4 on each output frame, following the Example solution of |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 3GPP TS 46.011 (formerly GSM 06.11) chapter 6. Once this CN Xmaxc reaches 0, |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 we switch to emitting fixed-bit-pattern silence frames of TS 46.011 Table 1. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 Handling of invalid SID frames |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 ============================== |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 In agreement with GSM 06.31 spec, we recognize invalid SID and invoke the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 appropriate handler in all 3 combinations: BFI=0 SID=1, BFI=1 SID=1, and |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 BFI=1 SID=2. The real complexity, however, lies in what that invalid SID |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 handler actually does: |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 * If invalid SID arrives when we are already in CN insertion state, we treat it |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 the same as an unusable frame (continue CN output with current parameters), |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 but the flag of lost SID is reset, as required by our interpretation of the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 specs. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 * If invalid SID arrives in CN muting state, i.e., after two consecutive lost |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 SID events, the muting continues unaffected, i.e., we don't "rejuvenate" |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 already-started-muting comfort noise upon receiving invalid SID. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 * If invalid SID arrives in good speech state, meaning that we are supposed to |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 begin a CN insertion period but we didn't get usable parameters for it, we |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 obtain LARc and mean(Xmax) parameters from the last good speech frame, |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 following the second option permitted by the "NOTE" at the end of GSM 06.31 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 section 6.1.2. To get Xmaxc for CN, we dequantize all 4 Xmaxc parameters of |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 the last good speech frame, average them, then requantize. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 * If invalid SID arrives in speech muting state, the invalid SID is ignored and |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 speech muting continues unaffected. |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 * If invalid SID arrives in NO_DATA state (initial state out of reset, or the |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 state after either speech or CN muting has fully decayed), we emit the fixed |
6ab066180ec2
doc: new article FR1-Rx-DTX-detail
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 silence frame of TS 46.011 Table 1. |