The first thing we will want is to find a quick way of checking if a seven-bit word is a valid codeword. In order for (b1b2b3b4p123p124p134) to be a valid codeword, the four-bit sets b1b2b3p123, b1b2b4p124, and b1b3b4p134 must all have even parity. Since our computations are all done mod 2, this is the same as asking b1 + b2 + b3 + p123 = 0, b1 + b2 + b4 + p124 = 0, and b1 + b3 + b4 + p134 = 0. We can write this as a matrix equation
Let’s look at what happens to the syndrome if we have an error in our seven-bit codeword. We first compute our valid codeword (b1b2b3b4)G. Suppose now an error is made in the third bit. This gives us our new seven-bit word (b1b2b3b4)G + (0 0 1 0 0 0 0). If we now check this invalid codeword using the H matrix we find
| ((b1b2b3b4)G + (0 0 1 0 0 0 0))H | = (b1b2b3b4)GH + (0 0 1 0 0 0 0)H |
| = (0 0 0) + (1 0 1) | |
| = (1 0 1). |
The Hamming code illustrates the general approach to error-correcting codes. You choose an algebraic structure (in this case Z2) and carry out several calculations with the number you want to send. You then send both the number and the results of the computations. At the other end, the person (or computer) who gets your number can do a little algebra to check that everything came through all right, or to put it right if it didn't. The question becomes what is the best choice of algebraic structure and computation. You want it to be easy to implement the computations, without requiring too much work to check if a word is a valid codeword or to find the corrected codeword if the received word is invalid. At the same time, a good error-correcting code should be efficient, correcting as many errors as possible while requiring as few extra numbers be transmitted as possible. The Hamming code is easy to implement, but is not very efficient. While theoretical considerations showed more efficient codes must be possible, it took nearly a decade to develop better error-correcting codes than the Hamming code and so the Hamming code was actually used in computer systems through the 60's. Nowadays, there are several families of more efficient codes that are used in practice. In order to develop one of these more efficient codes, the Reed-Solomon codes that are used on CDs, we will study some new algebraic structures, polynomial domains and finite fields.