FreeCalypso > hg > freecalypso-docs
comparison DSP-speech-decoder @ 108:e26623146358 default tip
new article DSP-speech-decoder
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 29 Oct 2024 22:11:41 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
107:dfa5f99631a6 | 108:e26623146358 |
---|---|
1 As described in Calypso-digital-voice article, we can use Calypso MCSI (an | |
2 auxiliary hardware interface brought out on FreeCalypso dev boards) in the so- | |
3 called "Bluetooth headset" mode to capture the voice call downlink in digital | |
4 form, specifically 16-bit linear PCM, after speech decoding performed by the | |
5 DSP, but before D-to-A conversion for analog audio output. As of 2024-10, we | |
6 have a set of tools (Lattice Icestick FPGA board, a gateware design for this | |
7 FPGA, and corresponding host software tools - see fc-pcm-if Hg repository) that | |
8 puts these ideas into practice; using these tools, we can now answer some long- | |
9 standing questions about exactly how Calypso DSP implements speech decoding for | |
10 various GSM codecs. | |
11 | |
12 FRv1 decoder implementation | |
13 =========================== | |
14 | |
15 The original set of Full Rate codec specs did not include the feature of in-band | |
16 encoder and decoder homing frames; this feature was included in HRv1 and EFR | |
17 from day 1, and was also back-ported to FRv1 in later versions of 06.10 spec - | |
18 but it was not present originally, and it is defined as optional in the later | |
19 spec versions. Going into these Calypso MCSI experiments, we had this question: | |
20 does Calypso DSP implement decoder homing frames for FRv1, or does it not? | |
21 Experimental observation: in-band decoder homing is NOT implemented for FRv1 in | |
22 this DSP. If we feed the DHF defined in later versions of 06.10 spec to our | |
23 Calypso MS via TCH DL, it gets treated as a regular speech frame without any | |
24 special handling; more specifically, we don't see PCM16 output frames consisting | |
25 of 0x0008 words as required by the spec when the optional in-band decoder homing | |
26 feature is present. | |
27 | |
28 This lack of in-band homing feature makes it difficult to test the decoder | |
29 against official ETSI test sequences, as we have no way of getting it into a | |
30 defined state. The ancient GSM 11.10 test spec provides a mechanism called DAI | |
31 that includes the necessary reset signal, and it appears that Calypso DSP does | |
32 support operating MCSI as DAI rather than "Bluetooth" mode - but we haven't done | |
33 any experiments with this DAI mode yet. Hence our exploration of FRv1 decoder | |
34 implementation in our dear Calypso DSP ends here for now. | |
35 | |
36 EFR decoder implementation | |
37 ========================== | |
38 | |
39 Unlike the situation with FRv1, the in-band codec homing feature is mandatory | |
40 for EFR per the specs. And with Calypso DSP we got good news: it does implement | |
41 this feature at least in the decoding direction, which is the only one we've | |
42 tested so far. Exactly per the spec, the first DHF arriving from TCH DL is | |
43 decoded like a regular speech frame, but the decoder state is reset at the end. | |
44 All subsequent DHFs turn into 0x0008 output, and we indeed see the latter coming | |
45 out on MCSI. | |
46 | |
47 Once we established that the decoder homing feature works as specified, our | |
48 next question was: does our dear Calypso DSP implement the original bit-exact | |
49 definition of EFR, or does it implement what we call the AMR-EFR hybrid? | |
50 Experimental observation: at least in the decoding direction, it implements the | |
51 original bit-exact EFR decoder! This finding is remarkable because all of our | |
52 experiments in this series were performed on DSP ROM version 3606, the final | |
53 one that not only includes AMR support, but has been subject to whatever rework | |
54 TI did between 3416 and 3606 ROMs. If we assume (based on some experiments in | |
55 past years where we disabled loading of TI's official DSP patches) that AMR | |
56 support is already present in the DSP ROM, as opposed to being contained | |
57 entirely in the patches, it follows that the DSP ROM must contain both EFR and | |
58 AMR codec implementations, yet the EFR implementation has not been AMR-ized. | |
59 (In contrast, the network-side speech transcoder implementation used by T-Mobile | |
60 USA and Telcel Mexico appears to use maximally-shared code between EFR and AMR, | |
61 resulting in the AMR-EFR hybrid that differs from the original bit-exact | |
62 definition, but has been blessed by 3GPP as an acceptable alternative.) | |
63 | |
64 Strange corruption bug | |
65 ---------------------- | |
66 | |
67 As we fed ETSI test sequences from GSM 06.54 to our Calypso DSP under test via | |
68 TCH DL, checking for an exact match, we observed what appears to be a corruption | |
69 bug of some kind (corrupting either codec parameter bits or state variables) | |
70 that manifests in a manner that seems random. In our test, we concatenated all | |
71 21 test sequences from GSM 06.54 (test0.cod through test20.cod) and fed the | |
72 resulting super-long sequence into TCH DL. The test was performed twice; on | |
73 the second try we had 'tch record' running in fc-shell, capturing TCH DL as | |
74 received by the Calypso MS, and we confirmed that the entire super-long test | |
75 sequence was received without errors. The decoded output (captured via MCSI) | |
76 was then split into 21 separate robe files following frame counts: because each | |
77 test*.cod input sequence begins with two DHFs, the decoder resets between these | |
78 concatenated test sequences, allowing the output to be compared against | |
79 test*.out reference files with per-sequence granularity. The final diff | |
80 comparison between split-out robe files and the official reference decoder | |
81 output revealed the following oddities: | |
82 | |
83 * In the first run, decoded outputs for test0, test6, test11, test14, test15, | |
84 test16 and test20 showed a mismatch. The difference in test0 outputs was | |
85 examined closer: the diff begins on a subframe boundary and continues until | |
86 the next DHF. All other test sequences got a perfect match to ETSI reference | |
87 decoder output. | |
88 | |
89 * In the second run, a different set of sequences showed a mismatch: this time | |
90 the failing sequences were test1, test5, test6, test7, test15 and test16. | |
91 The other sequences that produced mismatches in the first run produced | |
92 perfectly good output (matching ETSI reference decoder) in this run! | |
93 | |
94 * test6, test15 and test16 were the three sequences that failed in both runs. | |
95 However, diffing between the two runs shows that the errors in each of these | |
96 3 twice-failed sequences are different between runs, further strengthening | |
97 the appearance of corruption that seems totally random. | |
98 | |
99 We do not currently have any better explanation for this oddity than a data | |
100 corruption bug somewhere in the DSP. For the record, these tests were performed | |
101 on an FCDEV3B with Calypso DSP ROM version 3606 and DSP patch version 6840. |