FreeCalypso > hg > gsm-net-reveng
view doc/TFO-xform/Theory @ 41:b5feb04b212c
top Makefile: add v110 subdir
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 12 Sep 2024 21:56:29 +0000 |
parents | e828468b0afd |
children |
line wrap: on
line source
TFO transform from uplink to downlink ===================================== With all 3 classic GSM codecs (FRv1, HRv1, EFR) the original architecture calls for a network-side transcoder (TRAU) on each individual call leg. The implications are: * The uplink runs from the MS to the speech decoder in the TRAU that turns the mobile-generated speech into 64 kbit/s G.711. The Rx DTX handler, a subblock of that speech decoder in the TRAU, handles error concealment (substitution and muting of lost frames) and comfort noise insertion during DTXu pauses, and once this speech stream has been transcoded to G.711, all trace of these GSM-specific effects disappears. * The downlink runs from the speech encoder in the TRAU to TCH DL radio output from the BTS. Because the DL frame stream comes from a free-running speech encoder, it never contains errored frames or invalid SID or any other aberrations: without DTXd, this frame stream is 100% good speech frames, and with DTXd, it is a mixture of good speech and valid SID frames. But suppose you have two mobile call legs (mobile user Alice calls mobile user Bob), and you wish to eliminate the quality-degrading effect of double or tandem transcoding by passing compressed speech frames directly from Alice to Bob and vice-versa - what happens now? The UL frame stream from each call leg will contain BFI frame gaps that are never allowed in DL, and if the network deploys DTX only in the UL direction (DTXu without DTXd, a very sensible choice for small-capacity single-carrier cells), the representation of DTXu pauses coming from each call leg (SID frames followed by prolonged BFI gaps) is also not suitable for direct passing to the DL of the opposite call leg. The solution offered in the TFO spec (GSM 08.62) is a special transform from call leg A UL to call leg B DL. This transform has no official name that I could find, but I call it "TFO transform". In the original GSM 08.62 spec (up to R99) this TFO transform is described in sections 8.2.1 and 8.2.2; when the spec changed to 28.062 with 3GPP Release 4 (adding AMR in GSM and AMR-only UMTS), the description of TFO transform for classic GSM codecs moved to section C.3.2.1.1. However, both spec versions only say what "shall" be done without any guidance on how to do it algorithmically: the spec language is "subject to manufacturer dependent future improvements and is not part of this recommendation." Distilling the problem to its essence, the addition of TFO introduces a new type of logical transform on codec frames (and a stateful one at that!) that never appeared previously anywhere in classic GSM architecture, is not mentioned in any other spec, and is not addressed at all by any of the reference codec sources. This new transform is implemented only in the TFO block in TRAUs and nowhere else (in classic GSM architecture), and can be exercised only by establishing a TFO call between two interworking TRAUs. There are 3 main parts to this TFO transform, 3 main areas where anyone who seeks to implement this transform has to think hard and come up with an innovative solution: 1) Error concealment in non-DTX speech: if an errored frame (BFI) appears after non-SID speech frames (meaning non-DTX speech), the transform has to fill in substitution/muting "speech" frames (meaning codec frames that look like valid speech frames) in the stream going to call leg B DL. 2) Comfort noise insertion: if the incoming frame stream from call leg A UL contains SID frames (DTXu) but the same are not allowed on call leg B DL (no DTXd), the transform has to insert "speech" frames (in the same parenthetical meaning) that represent comfort noise, as intended by Alice's phone that transmitted SID with certain CN parameters. 3) Comfort noise muting: handling the case where the incoming UL frame stream goes into CN insertion state (via one or more SID frames), but then goes total BFI, with no more SID update frames appearing in TAF positions. In the case of a single codec leg from a source encoder to an end decoder, standard decoders are required by their respective DTX specs to gradually mute their CN output, to indicate channel breakdown to the user - the TFO transform has to produce the same effect. All 3 of the just-listed functions are explicitly called out in the TFO spec, in each case with the same language of "shall" followed by "subject to manufacturer dependent future improvements and is not part of this recommendation." DTXd or no DTXd =============== When the destination call leg operates without DTXd, the TFO transform can only emit frames that are well-formed speech frames for the respective codec, no SID frames. In this case the transform has to do "everything", all 3 of the listed functions, although the last function of CN muting may be either separate or absorbed into CN generation function depending on the codec. OTOH, when call leg B has DTXd enabled/allowed, there is more room for additional complexity. The simplest solution would be to not make use of DTXd capability and always emit speech frames - but the problem with this simple approach is teleological. If a GSM network operator runs with DTXd enabled, presumably that operator seeks to reap the benefits of DTXd as in reduction of radio interference, in which case a TFO transform that fails to make use of DTXd capability would defeat the purpose. Hence if someone sets out to implement a TFO transform that supports full utilization of DTXd, they would have to do additional work: * The function of CN insertion in the transform _mostly_ goes away: if a valid SID frame comes, the TRAU caches it and repeats it continuously until the next SID update, allowing the BTS to select which SID frames it will actually transmit based on its SACCH alignment. But more complex handling is still needed if the first SID frame (the one that begins CN insertion period) came in as invalid SID, and the function of CN muting takes on new significance. * CN muting: when the cached SID expires and no new SID updates arrive in TAF positions, the TFO transform has to indicate somehow to Bob that Alice's call leg is having trouble, which will be easy or difficult depending on what rules are specified in the codec specs for SID interpolation in the final receiver. * Error concealment in non-DTX speech: at first glance this function appears to be exactly the same whether DTXd is used or not. But consider the case of total channel breakdown, such that the incoming frame stream becomes all BFI: how should this case be handled? In the absence of DTXd, the output of the TFO transform becomes a stream of silence frames, meaning some kind of "speech" frames that produce total silence at the end decoder. But if the network operates with DTXd with the aim of reducing radio interference, these silence "speech" frames should be replaced with SIDs whose parameters are chosen to produce silent output. Current approach in Themyscira libraries ======================================== There is a desire to implement TFO transform for all 3 classic GSM codecs in Themyscira Wireless GSM codec libraries suite, and the first question to be decided is the policy with regard to DTXd. The current approach is to not implement any DTXd support, i.e., implement the TFO transform only in its no-DTXd basic form. The reason for this decision is based on the reality of small-capacity single-carrier cells: given that the total number of humans who actually _want_ to use GSM (as opposed to whatever latest 4G/5G/etc is peddled by Big Tech mafia) is vanishingly small, there is currently no justification for building higher-capacity GSM cells that use more than a single 200 kHz radio carrier. And if each GSM cell consists of only one radio carrier (the BCCH carrier, also called C0 in the specs), then physical DTXd (as in actually turning off radio Tx, as opposed to "logical" DTXd where that effect is merely faked for the MS by transmitting dummy bursts or induced-BFI frames) is simply impossible. Therefore, in the present state of human condition, there is no justification for expending the effort to implement additional complexity for proper DTXd.