Homebrew, open source, repurposed, hacked, software defined, open hardware

Monday, 7 September 2015

Codec2 700 mode trellis decoding experiments

Further to the codec2 1600 bit/second mode experiments with trellis decoding, the octave script has been modified further with a view to allowing any mode of interest to be specified.

As part of this refactoring and testing of the modified octave script, the 700 mode has been put through the script, with a combination of trellis decoded and passed through bit fields.

Here are the transition probability mesh plots for all of the bit fields showing the likelihoods (in Z axis height) of a given bitfield transitioning from a given value (X-axis) to a corresponding value on the Y axis. These plots were generated with the ve9qrp10s sample which was also used for the 1600 mode trellis decoding experiments.

The voicing bit field appears to be the least impressive in terms of predictability, and this bitfield may not lend itself to trellis decoding without excess errors being introduced.











Here are the summary statistics for the bitfields following the addition of additive Gaussian white noise (AGWN) and then trellis decoding.

Passing through bitfield 10 spare   without trellis decoding
processing 700A mode parameter: 1, nbits: 1, label: voicing                       
Eb/No: 0.00 dB nerrors 23 17 BER: 0.09 0.07 std dev: 0.30 0.26
processing 700A mode parameter: 2, nbits: 5, label: logWo                         
Eb/No: 0.00 dB nerrors 121 85 BER: 0.10 0.07 std dev: 4.95 4.83
processing 700A mode parameter: 3, nbits: 3, label: energy                        
Eb/No: 0.00 dB nerrors 63 65 BER: 0.08 0.09 std dev: 1.28 1.31
processing 700A mode parameter: 4, nbits: 3, label: LSP1                          
Eb/No: 0.00 dB nerrors 64 55 BER: 0.09 0.07 std dev: 1.06 1.29
processing 700A mode parameter: 5, nbits: 2, label: LSP2                          
Eb/No: 0.00 dB nerrors 47 50 BER: 0.09 0.10 std dev: 0.63 0.71
processing 700A mode parameter: 6, nbits: 4, label: LSP3                          
Eb/No: 0.00 dB nerrors 63 66 BER: 0.06 0.07 std dev: 1.83 2.41
processing 700A mode parameter: 7, nbits: 3, label: LSP4                          
Eb/No: 0.00 dB nerrors 78 61 BER: 0.10 0.08 std dev: 1.30 1.25
processing 700A mode parameter: 8, nbits: 3, label: LSP5                          
Eb/No: 0.00 dB nerrors 42 64 BER: 0.06 0.09 std dev: 0.87 1.31
processing 700A mode parameter: 9, nbits: 2, label: LSP6                          
Eb/No: 0.00 dB nerrors 32 42 BER: 0.06 0.08 std dev: 0.49 0.66

And another run:

Passing through bitfield 1 voicing without trellis decoding
Passing through bitfield 10 spare   without trellis decoding
processing 700A mode parameter: 2, nbits: 5, label: logWo                         
Eb/No: 0.00 dB nerrors 140 103 BER: 0.11 0.08 std dev: 5.20 5.28
processing 700A mode parameter: 3, nbits: 3, label: energy                        
Eb/No: 0.00 dB nerrors 60 55 BER: 0.08 0.07 std dev: 1.08 1.21
processing 700A mode parameter: 4, nbits: 3, label: LSP1                          
Eb/No: 0.00 dB nerrors 70 61 BER: 0.09 0.08 std dev: 1.21 1.36
processing 700A mode parameter: 5, nbits: 2, label: LSP2                          
Eb/No: 0.00 dB nerrors 34 33 BER: 0.07 0.07 std dev: 0.53 0.53
processing 700A mode parameter: 6, nbits: 4, label: LSP3                          
Eb/No: 0.00 dB nerrors 72 71 BER: 0.07 0.07 std dev: 1.85 2.63
processing 700A mode parameter: 7, nbits: 3, label: LSP4                          
Eb/No: 0.00 dB nerrors 58 50 BER: 0.08 0.07 std dev: 1.23 1.17
processing 700A mode parameter: 8, nbits: 3, label: LSP5                          
Eb/No: 0.00 dB nerrors 42 63 BER: 0.06 0.08 std dev: 0.85 1.21
processing 700A mode parameter: 9, nbits: 2, label: LSP6                          
Eb/No: 0.00 dB nerrors 34 37 BER: 0.07 0.07 std dev: 0.57 0.59

And another run:

Passing through bitfield 1 voicing without trellis decoding
Passing through bitfield 2 logWo   without trellis decoding
Passing through bitfield 10 spare   without trellis decoding
processing 700A mode parameter: 3, nbits: 3, label: energy                        
Eb/No: 0.00 dB nerrors 44 53 BER: 0.06 0.07 std dev: 1.07 1.15
processing 700A mode parameter: 4, nbits: 3, label: LSP1                          
Eb/No: 0.00 dB nerrors 80 65 BER: 0.11 0.09 std dev: 1.17 1.31
processing 700A mode parameter: 5, nbits: 2, label: LSP2                          
Eb/No: 0.00 dB nerrors 32 39 BER: 0.06 0.08 std dev: 0.53 0.62
processing 700A mode parameter: 6, nbits: 4, label: LSP3                          
Eb/No: 0.00 dB nerrors 69 70 BER: 0.07 0.07 std dev: 1.68 2.51
processing 700A mode parameter: 7, nbits: 3, label: LSP4                          
Eb/No: 0.00 dB nerrors 69 61 BER: 0.09 0.08 std dev: 1.27 1.25
processing 700A mode parameter: 8, nbits: 3, label: LSP5                          
Eb/No: 0.00 dB nerrors 38 65 BER: 0.05 0.09 std dev: 0.85 1.27
processing 700A mode parameter: 9, nbits: 2, label: LSP6                          
Eb/No: 0.00 dB nerrors 27 35 BER: 0.05 0.07 std dev: 0.49 0.58

After all of that, here is what the ve9qrp_10s_700A.bit sample sounds like with simple decoding after the addition of the AWGN:

ve9qrp_10s_700A_0.50_simple_700A.wav

Here is what the ve9qrp_10s_700A.bit sample sounds like with trellis decoding of all bit fields except for the  spare bit field (10) after the addition of the AWGN:

ve9qrp_10s_700A_0.50_trellis_700A_dec123456789.wav

Here is what the ve9qrp_10s_700A.bit sample sounds like with trellis decoding of bit fields 2-9, skipping the voicing (1) and the spare (10) bit fields after the addition of the AWGN:

ve9qrp_10s_700A_0.50_trellis_700A_dec23456789.wav

Here is what the ve9qrp_10s_700A.bit sample sounds like with trellis decoding of bit fields 3-9, skipping the voicing (1), logW0 (2) and the spare (10) bit fields after the addition of the AWGN:

ve9qrp_10s_700A_0.50_trellis_700A_dec3456789.wav

Having confirmed that the modified script still works with the codec2 700 mode, the next step is to support the 700B and 1300 bit/second modes.

In closing, all of this experimentation serves to highlight that black box vocoders subject to intellectual property protection being marketed by commercial equipment vendors do not allow this sort of experimentation by interested amateurs.

1 comment: