Encoder for (306,178) Outer Code

Each outer codeblock (of the (306,178) code) consists of 306 symbols. 178 of these come from the information being transfered, the remaining 128 symbols are the redundancy symbols. Each set of 128 redundancy symbols is generated by multiplying the 178 information symbols, written as a [1 x 178] row vector, by a [178 x 128] matrix. The resultant [1 x 128] row vector contains the redundancy symbols corresponding to the 178 information symbols. The codeblock is just the concatenation of the [1 x 178] information vector with the [1 x 128] redundancy vector.

The multiplications and additions required to perform the matrix multiplication are normal multiplication and addition, modulo 307.

The [178 x 128] redundancy generating matrix is pre-calculated, so that it can be incorporated into the encoding program by the compiler.

(8,4) Inner Encoder

Each inner codeblock (of the (8,4) code) consists of 8 symbols. 4 of these specify which of the 307 possible outer code symbols is being represented. The other 4 are the redundancy symbols.

The inner encoder is implemented with a look up table. The relatively small size of this code makes this practical.

The symbol numbers, produced by the outer encoder, are the "information" input to the inner encoder. These symbol numbers are in the range from 0 through 306. They are used as an index into a look up table that contains the proper "phase change" for each of the 8 subcarriers for the inner code.

Each of the 8 subcarriers conveys one of the 8 symbols of the inner code. The inner codeblock is sent in parallel, all 8 subcarriers are transmitted at the same time.

The inner decoder can recover the correct outer code symbol number from any 6 of the 8 inner code symbols (subcarriers). Thus, on each outer code symbol, any two subcarriers can be corrupted and the inner decoder will still produce the correct result from the remaining 6 uncorrupted subcarriers.

In come cases, it is possible to recover the correct outer code symbol if only 4 of the subcarriers are not corrupted. If, by some means external to the decoder, you are able to determine which 4 subcarriers are not corrupted, then those 4 can be used to determine the correct outer code symbol number.

Two different inner codes have been tested. Both have 8 symbols per codeblock, and are sent in parallel, with each of the 8 subcarriers representing one of the 8 symbols of the inner codeblock.

The inner code used for the Australia to United States tests is an (8,4) Reed-Solomon Code, over the Galois Field containing 9 elements, GF(9). In this code, 4 of the symbols (subcarriers) represent the "information", and the other 4 are the redundancy symbols of the inner code.

The other inner code was used successfully in tests between various points in the United States. It is an (8,6) Reed-Solomon Code, also over GF(9). In this code, 6 of the symbols (subcarriers) represent the "information", and the other 2 are the redundancy symbols of the inner code. Each 8 symbol codeblock of this code represents two outer code symbols. Three of the subcarriers represent one outer code symbol and the other three information symbols represent a second outer code symbol.

Outer Codes

Four different amounts of redundancy are provided by the outer codes used with each inner code. The approximate percentage of redundant symbols provided by the codes actually tested are as follows:

Based on the test results these percentages will be changed to:

For the (8,4) inner code, each outer codeblock contains 306 symbols. The number of information symbols in each codeblock for the 4 different levels of redundancy will be:

For the (8,6) inner code, each outer codeblock contains 358 symbols. The number of information symbols in each codeblock for the 4 different levels of redundancy will be:

Why 307 and 359?

For the case of 9 different values each, for 4 subcarriers, the number of possibilities is 9*9*9*9, which equals 6561. The number of different ways to pick 307 elements from a set containing 6561 elements is shown below. Note that it takes 537 base 10 digits to express this number.

Reed and Solomon published a method of finding, in this case, a combination of 307 of these 6561 elements to be used as the redundant portion of an (8,4) code, such that the distance between nearest neighbors is as great as it can be.

To get a better idea of how futile an attempt to find a combination of 307 elements from a set of 6561 elements that maximized the distance between nearest neighbors, the image below shows how many microseconds have elapsed in the last 15 billion years. It only takes 24 base 10 digits to express this number.

If you had 10 billion computers, each examining a different combination of 307 elements from a set of 6561 elements every nanosecond for the last 15 billion years, only 10 the 36th power combinations would have been examined so far. This would leave about 10 to 500th power combinations yet to be checked.


Links to: