FreeCalypso > hg > gsm-net-reveng
annotate doc/TFO-xform/HRv1 @ 56:b32b644b7d96
d144/nokia-tcsm2-atrau.bin: captured A-TRAU output from
Nokia TCSM2, fed with ul-input from Ater
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 25 Sep 2024 07:42:04 +0000 |
parents | 0979407719f0 |
children |
rev | line source |
---|---|
35
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 HRv1: relation between regular end decoder and TFO transform |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 ============================================================ |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 The reference decoder source published by ETSI in GSM 06.06 exhibits an almost |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 modular design: the Rx DTX handler front-end is almost a separable piece. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 Breaking it down more precisely, we can make these observations: |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 0) Most aspects of bad frame handling and comfort noise generation are done by |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 generating new coded speech parameters, such that the output of those |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 algorithms can be packaged into new HRv1 codec frames to be sent to a distant |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 decoder. There are only two exceptions to this modularity: |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 1) Handling of unreliable speech frames (BFI=0 UFI=1 in speech rather than CN |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 state) has a modular and a non-modular aspect: |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 1a) Modular aspect: if R0 increment from the last good frame to the |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 unreliable frames exceeds a certain threshold, UFI is turned into BFI, |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 which is then handled in a fully modular fashion. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 1b) Non-modular aspect: if the R0 increment does not meet the threshold for |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 turning UFI into BFI but meets another slightly lower threshold, a flag |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 is set that is passed into the guts of the speech decoder. That flag |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 effects speech muting on the decoder output level. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 2) GSM 06.22 section 6.2 (Comfort noise generation and updating) says in the |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 very last sentence: |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 "When updating the comfort noise parameters (frame energy and LPC |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 coefficients), these parameters shall be interpolated over the SID update |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 period to obtain smooth transitions." |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 Note the change in language: the corresponding spec for FRv1 says "should |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 preferably", but the HRv1 spec says "shall". Furthermore, the bit-exact |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 implementation in the reference C code is considered normative in this |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 aspect, and is exercised by the test sequences of GSM 06.07. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 This CN interpolation aspect is non-modular: R0 and the set of LPC |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 coefficients are decoded from bit parameters into linear form when CN frames |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 (initial and updates) are received, interpolation is done on this linear |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 form, and the interpolated values are passed to the main body of the speech |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 decoder. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 Based on these observations, we can conclude that if we wish to detach this |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 reference Rx DTX handler for HRv1 from the reference decoder and make it into |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 an implementation of TFO transform for this codec, we have to solve two |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 problems: |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 1) Decide how to handle those UFI frames that aren't being turned into BFI; |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 2) Decide how to handle R0 and LPC parameters during CN insertion. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 Nokia TCSM2 TRAU implementation |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 =============================== |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 Now that we have a working historical bank-of-TRAUs apparatus in our lab, let's |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 take a look at how this vendor (Nokia) implemented the TFO transform for HRv1 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 in their TRAU. Here are our findings: |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 * Handling of BFI=1 frames in speech state (not in DTX) exhibits a |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 simplification relative to GSM 06.06 reference code. The reference code |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 checks to see if the last saved frame and the received errored frame have the |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 same voiced vs unvoiced mode: if this mode matches, codevector parameters are |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 taken from the errored frame, otherwise the last saved frame is regurgitated |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 without taking any bits from the errored frame. Nokia's TFO transform always |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 does the latter (no bits are taken from the errored frame) irrespective of |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 voiced vs unvoiced mode matching or not. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 * Aside from this just-described simplification, all other aspects of BFI=1 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 handling for speech frames appear to match the reference code. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 * UFI handling appears to have been taken out altogether, even the part that |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 "upgrades" UFI to BFI when R0 increment is huge appears to have been omitted. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 I fed a test sequence from TFO side that has a good speech frame with R0=2 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 followed by a UFI frame with R0=31, and the TRAU happily passed the latter |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 frame (now treated as perfectly good) to the DL output. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 * Comfort noise generation (DTXd=0) is done exactly as the reference code would |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 do it, except that neither R0 nor LPC parameters are interpolated. During |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 each CN output interval between SID updates, R0 and LPC parameters in every |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 emitted CN frame are exactly equal to those received in the most recent SID |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 frame, as simple as that. When a new SID update comes in, the change in |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 emitted R0 and LPC is abrupt. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 * The lost SID criterion for CN muting appears to be slightly different between |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 Nokia's TFO implementation and my reading of the spec and the reference C |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 code. My interpretation of GSM 06.22 spec sections 5.2.3 and 5.2.4 is that |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 unlike FR and EFR, in the case of HR codec the second lost SID (second |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 occurrence of BFI instead of SID update in TAF position) does _not_ trigger |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 CN muting; instead this muting is supposed to kick in on the _third_ lost SID |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 occurrence. (The difference in the spec was likely motivated by TAF positions |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 occurring every 240 ms with HR instead of every 480 ms with FR & EFR.) My |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 reading of the reference C code agrees with my reading of the spec - yet |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 Nokia's TFO implementation initiates CN muting in the frame following the |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 second lost SID, not third. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 * Aside from the criterion for its initiation, the actual CN muting logic |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 behaves exactly like the reference C code: R0 is decremented by 2 on each |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 output frame following the TAF that initiates this sequence, and once R0 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 reaches 0, it stays there while this zero-magnitude CN output continues |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 indefinitely. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 * With DTXd=1 CN output is replaced with repeated retransmission of the same |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 SID whose parameters would have been used for non-interpolated CN with DTXd=0, |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 which also agrees with the rules of GSM 08.62 section 8.2.2 paragraph 2. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 * CN muting with DTXd=1 is implemented poorly. The TRAU emits SID frames with |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 R0 decrementing by 2 on each frame just like how it does for generated CN |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 output that's in the process of being slowly muted, but this design is a poor |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 choice: because the BTS will only transmit one of every 12 SID update frames |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 and the TRAU has no way of knowing which SID will be transmitted, slow |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 decrement cadence on SID frames themselves (not on CN output) makes no sense. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 Thoughts for Themyscira implementation |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 ====================================== |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 Prior to getting Nokia TCSM2 working in our lab and being able to experiment |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 with this TRAU, when I was contemplating the idea of potentially implementing |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 TFO transform for HRv1 in Themyscira libraries, my main trepidation was how to |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 produce comfort noise in the form of "speech" parameter output. For endpoint |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 decoders GSM 06.22 prescribes a bit-exact algorithm with interpolation, but |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 that smoothly interpolated CN cannot be readily expressed in terms of parameter |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 bits that can be packed into a new HRv1 codec frame. I thought about |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 requantizing the interpolated LPC reflection coefficients on every CN output |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 frame, using the same computationally intensive vector quantization algorithm |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 as in speech encoding - but because I am not an expert in codec design, it is |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 not obvious to me whether or not such approach would produce good results. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 However, seeing that Nokia got away with simply passing R0 and LPC parameters |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 along from incoming SID frames to CN output without any interpolation or other |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 transformation gives us a huge confidence boost - if Nokia did it, so can we! |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 This approach is of course simple, and yields itself readily to elegant |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 implementation. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 Seeing that Nokia got away with effectively discarding UFI in their TFO |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 transform is also a confidence boost - once again if Nokia did it, so can we. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 I plan on keeping the logic that "upgrades" UFI to BFI under certain conditions |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 (not sure why Nokia omitted it), but the effect of potentially muting speech in |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 the guts of the decoder (past parameter-level manipulation) is not really |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 feasible to implement in a TFO transform. |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 Finally, regarding the logic that takes codevector parameters from errored |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 (BFI) frames when the voicing mode matches between the last saved frame and the |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 errored frame, the logic that exists in the reference C code but not in Nokia's |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 TFO transform: I plan on keeping this logic in our version, but Nokia's approach |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 will come in handy for handling BFI-no-data frames, a condition that does not |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 exist in TDM-based Abis transport or in TFO, but does unfortunately exist in |
0979407719f0
doc/TFO-xform/HRv1: article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 IP-based GSM RAN. |