In this chapter, we consider block codes with a certain structure, which are defined over alphabets that are fields. Specifically, these codes, which we call linear codes, form linear spaces over their alphabets. We associate two objects with these codes: a generator matrix and a parity-check matrix. The first matrix is used as a compact representation of the code and also as a means for efficient encoding. The parity-check matrix will be used as a tool for analyzing the code (e.g., for computing its minimum distance) and will also be part of the general framework that we develop for the decoding of linear codes.
As examples of linear codes, we will mention the repetition code, the parity code, and the Hamming code with its extensions. Owing to their structure, linear codes are by far the predominant block codes in practical usage, and virtually all codes that will be considered in subsequent chapters are linear.
Denote by GF(q) a finite (Galois) field of size q. For example, if q is a prime, the field GF(q) coincides with the ring of integer residues modulo q, also denoted by ℤq. We will see more constructions of finite fields in Chapter 3.
An (n, M, d) code C over a field F = GF(q) is called linear if C is a linear subspace of Fn over F; namely, for every two codewords c1, c2 ∈ C and two scalars a1, a2 ∈ F we have a1c1 + a2c2 ∈ C.