Copyright Notice

Copyright 2001 by Barry Sanderson

Permission is hereby granted for the verbatim reproduction, or storage, of this document, including this copyright notice, and its accompanying images. All other rights are reserved.

Abstract

This section is not yet written.

Background

A linear block code having n symbols per codeblock, with k of these being information symbols, has (n-k) redundancy symbols per codeblock. Such a code is denoted a (n,k) code. If the minimum distance between codewords is as large as it can be, for such a code (n-k+1), then the code can correct up to (n-k)/2 errors per codeblock. A Reed-Solomon code has the largest minimum distance between codewords possible, and is therefore called a maximum-distance code.

Two Reed-Solomon codes are used in the examples that follow. The outer code is a (306,178) code, with 128 redundancy symbols per block. The inner code is a (8,4) code, with 4 redundancy symbols per block. Thus, the outer code is designed to correct up to 64 symbols per block (of 306 outer code symbols), and the inner code is designed to correct up to 2 symbols per block (of 8 inner code symbols).

Premise of Beyond Design Distance Decoding

Decoders exist for Reed-Solomon codes that take advantage of erasure information. When, externally to the decoder, the location of an erroneous symbol is determined, the decoder can determine the correct value of the symbol by "consuming" only one redundancy symbol. When the decoder must determine both the location and magnitude of a symbol in error, it "consumes" two redundancy symbols.

The inner code used here is small enough to permit exhustive searching through all possible codewords, for the different combinations of erased symbols, until a "close enough" match is found, or all of the possibilities worth trying have failed. The smallest number of erased symbols, leading to a successfuly decoded value, is then used to "erase" the most likely to be wrong codewords passed to the outer decoder.

In the following examples, inner code symbols requiring less than 3 erasures were not marked as "erased", when passed to the outer decoder. Those inner code symbols requiring 3 or 4 erased symbols were marked as "erased", when passed to the outer decoder.

Error Correction Table Formats

Below is an explanation of the meaning of the various data fields used in the examples below.

The table headings for the following examples are:

Block inner  |  outer code   |   outer    |     inner code
  #   code   |   erasures    |   code     |       changes
      changes|1st   2nd   3rd|   changes  |  0   1   2   3   4
----  ------ |---   ---   ---|    ---     |--- --- --- --- ---
  

Below is a list of each of the above column headings, from left to right, and an explanation of what is meant by each column heading.

Examples of Beyond Designed Distance Decoding

Since each outer codeblock in the following examples has 128 redundancy symbols, numbers greater than 64 in the "outer code changes" column indicate blocks where more than 64 corrections were made by the outer decoder.

When the sum of the "inner code changes" under the "3" and "4" sub-headings is greater than the number of "outer code changes" then some of the inner codewords with more than 2 errased symbols were decoded correctly by the inner decoder, which is beyond the designed decoding distance of the inner code.

The following examples were taken from tests conducted in April, 2001, where: VK3LM, VK3CQE, and VK4CS were transmitting, from Austrailia, to: W8ZCF, KB4YZ, and W9NTP in the United States. The transmissions were via single sideband in the 20 meter band. Each transmission used differential phase modulation and two levels of Reed-Solomon coding to convey the representation of a digital file. Each digital file was actually a test image file. All errors were corrected in each of the examples below.

Note block number 2 in the next example.

For data file: vk3lm03-pm7b.wav
	using Hamming window and /tmp/pm7b-demod-decode5t program
Block inner  |  outer code    | outer   |       inner code
  #   code   |   erasures     | code    |         changes
      changes|1st   2nd   3rd | changes |    0   1   2   3   4
----  ------ |---   ---   --- |   ---   |  --- --- --- --- ---
  0     415    13h    5s   15t     26  ||   80  88 105  15  18   +
  1     456     4h    3s   20t     22  ||   52  86 141  20   7   +
  2     691    36h   27s   42t     89  ||   12  65 124  42  63   +
  3     544    21h   18s   19t     41  ||   45  75 128  19  39   +
  4     446     4h    4s   19t     26  ||   63  75 141  19   8   +
  5     403     2h    3s   14t     18  ||   74  85 128  14   5   +
  6     428     3h    3s   23t     18  ||   66  87 124  23   6   +
  7     427     1h    3s   13t     14  ||   60  86 143  13   4   +
  8     374     0h    1s   12t     15  ||   87  78 128  12   1   +
  9     290     1h    2s    6t     11  ||  126  82  89   6   3   +
 10     267     1h    3s    7t      8  ||  137  86  72   7   4   +
  

Note block numbers: 5, 6, 7, and 8 in the next example.

For data file: vk3lm15ap6-pm7b.wav
	using Hamming window and /tmp/pm7b-demod-decode5s program
Block inner  |  outer code    | outer   |       inner code
  #   code   |   erasures     | code    |         changes
      changes|1st   2nd   3rd | changes |    0   1   2   3   4
----  ------ |---   ---   --- |   ---   |  --- --- --- --- ---
  0     484     1h    3s   23t     24  ||   43  73 163  23   4   +
  1     335     2h    1s   14t     19  ||  113  71 105  14   3   +
  2     294     0h    0s    7t      3  ||  122  81  96   7   0   +
  3     601    11h   16s   43t     51  ||   22  64 150  43  27   +
  4     566     8h   11s   29t     35  ||   26  61 171  29  19   +
  5     678    11h   23s   54t     66  ||   14  28 176  54  34   +
  6     639    16h   20s   56t     69  ||   30  41 143  56  36   +
  7     699    14h   33s   58t     83  ||   15  35 151  58  47   +
  8     703    10h   32s   65t     71  ||   11  36 152  65  42   +
  9     568     4h    8s   47t     43  ||   33  49 165  47  12   +
 10     413     6h    6s   10t     21  ||   74  85 125  10  12   +
  

Note block number 0 in the next example.

For data file: 3CQ0-pm7b.wav
	using Hamming window and /tmp/pm7b-demod-decode5tl program
Block inner  |  outer code    | outer   |       inner code
  #   code   |   erasures     | code    |         changes
      changes|1st   2nd   3rd | changes |    0   1   2   3   4
----  ------ |---   ---   --- |   ---   |  --- --- --- --- ---
  0     693    22h   29s   49t     83  ||   16  38 152  49  51   +
  1     452     5h    5s   18t     25  ||   51  96 131  18  10   +
  2     368     1h    1s   15t     19  ||   86  91 112  15   2   +
  3     581     8h   13s   39t     47  ||   22  68 156  39  21   +
  4     566     4h   12s   20t     34  ||   18  62 190  20  16   +
  5     471     1h    2s   22t     14  ||   41  87 153  22   3   +
  6     341     0h    0s   17t     14  ||  103  82 104  17   0   +
  7     571    16h   13s   51t     52  ||   50  50 126  51  29   +
  8     586    10h   13s   40t     45  ||   23  66 154  40  23   +
  9     613     7h   13s   52t     53  ||   20  51 163  52  20   +
 10     341     5h    2s   12t     15  ||  112  73 102  12   7   +
  

Note block numbers: 2, 3, 4, 5, 7, 8, and 9 in the next example.

For data file: vk3lm300w3ap10-pm7b.wav
	using Hamming window and /tmp/pm7b-demod-decode5s program
Block inner  |  outer code    | outer   |       inner code
  #   code   |   erasures     | code    |         changes
      changes|1st   2nd   3rd | changes |    0   1   2   3   4
----  ------ |---   ---   --- |   ---   |  --- --- --- --- ---
  0     553    21h   12s   20t     45  ||   38  69 146  20  33   +
  1     635    26h   15s   28t     56  ||   16  55 166  28  41   +
  2     707    45h   23s   47t     86  ||   24  40 127  47  68   +
  3     653    27h   24s   39t     72  ||   24  52 140  39  51   +
  4     601    12h   10s   45t     71  ||   19  62 158  45  22   +
  5     691    25h   22s   43t     78  ||   14  30 172  43  47   +
  6     625    24h   22s   30t     56  ||   27  55 148  30  46   +
  7     665    27h   14s   39t     69  ||   12  44 170  39  41   +
  8     662    34h   13s   39t     72  ||   17  49 154  39  47   +
  9     640    35h   12s   27t     66  ||   18  57 157  27  47   +
 10     512    20h   11s   15t     37  ||   48  81 131  15  31   +
  

Note block numbers: 3, 7, and 9 in the next example.

For data file: VK4CS8-pm7b.wav
	using Hamming window and /tmp/pm7b-demod-decode5tn program
Block inner  |  outer code    | outer   |       inner code
  #   code   |   erasures     | code    |         changes
      changes|1st   2nd   3rd | changes |    0   1   2   3   4
----  ------ |---   ---   --- |   ---   |  --- --- --- --- ---
  0     680     7h   17s   55t     55  ||    2  31 194  55  24   +
  1     685    13h   19s   44t     55  ||    3  29 198  44  32   +
  2     652     7h   16s   42t     48  ||    7  34 200  42  23   +
  3     709    17h   24s   48t     66  ||    2  29 186  48  41   +
  4     684    10h   18s   49t     64  ||    2  29 198  49  28   +
  5     664     9h    3s   57t     42  ||    3  23 211  57  12   +
  6     708    18h   21s   43t     57  ||    1  23 200  43  39   +
  7     721    12h   31s   50t     74  ||    7  13 193  50  43   +
  8     678     4h   18s   53t     59  ||    4  23 204  53  22   +
  9     715    14h   23s   54t     72  ||    5  15 195  54  37   +
 10     667     4h   22s   41t     34  ||    2  34 203  41  26   +
  

15 August 2001, Barry Sanderson.