annotate doc/FR1-Rx-DTX @ 585:3c6bf0d26ee7 default tip

TW-TS-005 reader: fix maximum line length bug TW-TS-005 section 4.1 states: The maximum allowed length of each line is 80 characters, not including the OS-specific newline encoding. The implementation of this line length limit in the TW-TS-005 hex file reader function in the present suite was wrong, such that lines of the full maximum length could not be read. Fix it. Note that this bug affects comment lines too, not just actual RTP payloads. Neither Annex A nor Annex B features an RTP payload format that goes to the maximum of 40 bytes, but if a comment line goes to the maximum allowed length of 80 characters not including the terminating newline, the bug will be triggered, necessitating the present fix.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 25 Feb 2025 07:49:28 +0000
parents 4034c2b06ec8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
135
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 At the level of provided functionality and architectural structure, ETSI GSM
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 specifications for DTX (discontinuous transmission) are very symmetric between
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 FR and EFR: the same DTX functionality is specified for both codecs, with the
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 same overall architecture. However, there is one important difference: in the
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 case of EFR the complete implementation of all DTX functions (for both Tx and
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 Rx) forms an integral and inseparable part of the reference codec (implemented
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 in C) from the beginning, whereas in the case of FR1 the addition of DTX is
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 somewhat of an afterthought. GSM 06.10 defines a "pure" FR codec without any
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 DTX functions, and this most basic spec can be and has been implemented in this
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 "pure" form - classic Unix libgsm from 1990s is a proper, fully compliant
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 implementation of GSM 06.10, but only this spec, without any DTX. In contrast,
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 there has never existed a "pure" implementation of GSM 06.60 EFR codec without
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 associated Tx and Rx DTX functions. Furthermore, there is an important
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 distinction between Tx and Rx DTX handlers for FR1:
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 * Anyone who seeks to implement Tx DTX for FR1 would have to dig into the guts
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 of GSM 06.10 encoder and augment it with VAD and SID encoding functions per
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 GSM 06.32 and 06.12 specs.
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 * In contrast, the Rx DTX handler for FR1 is modular: the way it is specified
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 in GSM 06.11, 06.12 and 06.31 is a front-end to unmodified GSM 06.10 decoder.
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 On the Rx side, the interface from the radio subsystem to the Rx DTX handler
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 consists of 260 bits of frame plus BFI and TAF flags (the spec also defines a
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 SID flag, but it is determined from frame payload bits), and then the
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 interface from the Rx DTX handler to the GSM 06.10 decoder is another FR frame
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 of 260 bits.
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 What are the implications of this situation for the GSM published-source
303
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
29 software community? Prior to the present Themyscira offering, there has always
135
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 been libgsm, but no Rx DTX handler. If you are working with a GSM uplink RTP
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 stream from a BTS or a GSM downlink frame stream read out of TI Calypso DSP or
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 some other GSM MS PHY, feeding that stream directly to libgsm (without passing
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 through an Rx DTX handler) is NOT acceptable: a "bare" GSM 06.10 decoder won't
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 recognize SID frames and won't produce the expected comfort noise output, and
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 what are you going to do in those 20 ms windows in which no good traffic frame
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 was received? The situation becomes especially bad (unkind on ears) if you are
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 reading received downlink frames out of TI Calypso DSP: the DSP's buffer will
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 have *some* bit content in every 20 ms window, but naturally this bit content
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 will be garbage during those frame windows when no good frame was received;
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 feeding that garbage to libgsm produces noises that are very unkind on ears.
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 The correct solution is to implement an Rx DTX handler, pass the stream of
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 frames and flags from the BTS or the MS PHY to this handler first, and then pass
303
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
44 the output of this handler to the standard GSM 06.10 decoder (classic libgsm or
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
45 some updated port thereof). Themyscira libgsmfrp was our first Free Software
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
46 implementation of Rx DTX handler for GSM-FR, implementing SID classification,
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
47 comfort noise generation and error concealment. Our new libgsmfr2 offering
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
48 takes the harmonization effort (between GSM-FR and other GSM codecs) one step
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
49 further, eliminating the dependency on old libgsm and putting all GSM-FR codec
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
50 functions "under one roof".
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
51
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
52 libgsmfrp/libgsmfr2 API documentation
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
53 =====================================
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
54
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
55 The Rx DTX component of libgsmfr2 has the same API as our previous libgsmfrp,
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
56 except for dropping the use of <gsm.h> and its types and needing to include our
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
57 new API header <tw_gsmfr.h>. The present article previously contained the full
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
58 description of this API; that description has now been moved to FR1-library-API
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
59 article, where the whole of libgsmfr2 is documented.
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
60
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
61 Standalone exerciser utility
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
62 ============================
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
63
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
64 The present GSM codec libraries and utilities package includes a standalone
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
65 utility that exercises our Rx DTX handler for GSM-FR. This utility is
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
66 gsmfr-preproc, to be run as follows:
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
67
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
68 gsmfr-preproc input.gsmx output.gsm
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
69
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
70 The input is an extended-libgsm file that can contain SIDs and BFI frame gaps
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
71 in addition to regular GSM 06.10 speech frames (see Binary-file-format article);
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
72 the output is GSM 06.10 speech frames only.
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
73
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
74 False SID detection
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
75 ===================
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
76
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
77 The intent of GSM-FR spec authors was that the sets of possible speech frames
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
78 and possible SID frames be disjoint. Prior to introduction of DTX, there were
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
79 only regular speech frames per GSM 06.10, no SID, and a receiver had to deal
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
80 with only two possibilities: either a good speech frame was received, or the
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
81 frame was lost to radio errors or FACCH stealing (unusable frame). When SID
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
82 frames were introduced for the purpose of intentional DTX as distinct from
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
83 radio errors, the intent was that SID was to be a "new animal" not seen before,
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
84 distinct from regular speech frames. There is, however, a small blemish in the
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
85 actual system as realized: if the SID frame detector and the Rx DTX handler
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
86 that follows it in the Rx chain follow the rules of GSM 06.31 sections 6.1.1
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
87 and 6.1.2, respectively (like our implementation does), then some speech frames
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
88 may be mistaken for invalid SID, or perhaps even for valid SID, producing a
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
89 nonzero failure rate in this mechanism.
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
90
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
91 Official test sequence 02 in the set of 5 provided by ETSI exhibits this effect:
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
92 Seq02.inp is a legitimate 13-bit linear PCM input to the speech encoder, and the
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
93 corresponding output of GSM 06.10 encoder is contained in Seq02.cod. However,
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
94 that output contains some frames that are mistakenly classified as SID=1
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
95 (invalid SID) by the rules of GSM 06.31 section 6.1.1! It is true that these
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
96 ancient test sequences chronologically predate the invention of DTX and
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
97 GSM 06.31, but we still need to bear in mind that this problematic Seq02.cod is
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
98 not an artificially constructed sequence of 06.10 codec parameters: it is the
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
99 required output of the prescribed bit-exact encoder given a legitimate PCM
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
100 input! There does not exist a perfect solution to this problem: as usual,
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
101 real-world engineering is all about trade-offs and compromises, and occasionally
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
102 a gear will slip. The best we can do is to model the probability of such
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
103 gear-slip or wrong detection events, and engineer our systems to reduce this
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
104 probability to a level that is deemed acceptable - which is exactly what GSM
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
105 spec designers did here.
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
106
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
107 As of gsm-codec-lib-r3, gsmrec-dump utility shows the SID classification result
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
108 (GSM 06.31 section 6.1.1) in addition to parsed 06.10 codec parameters for each
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
109 frame, thus one can inspect FR-encoded streams and check for this blemish.
135
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 Effect of extra preprocessing
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 =============================
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113
303
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
114 What will happen if the output of our Rx DTX preprocessor (e.g., the output of
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
115 gsmfr-preproc utility) is fed to another utility such as gsmfr-decode that also
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
116 applies the same preprocessor to its input? In other words, what is the effect
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
117 of a secondary preprocessor application to previous preprocessor output?
135
22601ae99434 doc/FR1-Rx-DTX article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118
303
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
119 Most of the time, the second preprocessor pass will be an identity transform
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
120 under these conditions, as the input to that second pass will consist entirely
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
121 of good speech frames, no SIDs and no BFIs. Any speech frames in the original
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
122 input that were mistakenly classified as SID (valid or invalid) have already
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
123 been converted to comfort noise (or to the silence frame in one corner case of
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
124 invalid SID), hence they are no longer present in the output to trigger this
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
125 effect a second time. However, there is still a small possibility that a
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
126 second pass will be a non-identity transform: pseudorandom RPE pulse parameters
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
127 in our comfort noise output are uniformly distributed between 1 and 6 (GSM 06.12
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
128 section 6.1), and if PRNG dice roll such that at least 80 out of 95 SID codeword
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
129 bit positions (all in the xMc part of the frame) are all zeros, the resulting
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
130 CN frame will be liable to misinterpretation as SID (invalid SID most of the
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
131 time, or even more rarely valid SID if at least 94 out of 95 SID codeword bit
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
132 positions are all zeros) if fed to the preprocessor a second time. That second
4034c2b06ec8 doc/FR1-Rx-DTX: update for libgsmfr2 and the new landscape
Mychaela Falconia <falcon@freecalypso.org>
parents: 250
diff changeset
133 pass would then further alter those affected frames, but no others.