Schaum's Outline of Theory and Problems of Analog and Digital Communications, Second Edition

In this chapter we treat the subject of designing codes for the reliable transmission of digital information over a noisy channel. Codes can either correct or merely detect errors, depending on the amount of redundancy contained in the code. Codes that can detect errors are called error-detecting codes, and codes that can correct errors are known as error-correcting codes. There are many different error control codes. These are classified into block codes and convolutional codes. The codes described here are binary codes for which the alphabet consists of only two elements: 0 and 1. The set {0,1} is denoted by K.
A basic block diagram for the channel coding is shown in Fig. 11-1. The binary message sequence at the input of the channel encoder may be the output of a source encoder or the output of a source directly. The channel encoder introduces systematic redundancy into the data stream by adding bits to the message bits in such a way as to facilitate the detection and correction of bit errors in the original binary message sequence at the receiver. The channel decoder in the receiver exploits the redundancy to decide which message bits are actually transmitted. The combined objective of the channel encoder and decoder is to minimize the effect of channel noise.
The channel coding theorem for a DMC is stated as follows:
Given a DMS X