The task facing the designer of a digital communication system is that of providing a cost-effective system for transmitting information from a sender (at one end of the system) at a rate and a level of reliability that are acceptable to a user (at the other end).