The theory of channel coding for reliable communication and computer memories. Error correcting codes; linear, cyclic and convolutional codes; encoding and decoding algorithms; performance evaluation of codes on a variety of channels.