Essential for proper operation and design of digital communications systems and storage media, coding theory provides a means to transmit information across time and space over noisy and unreliable communications channels. This provides both undergraduates and graduate students an accessible and logical overview of channel coding theory and practice and the relevant signal processing architectures. Topics include algebraic coding theory, including linear block codes and cyclic codes; convolutional codes, including encoding, trellis diagrams and the Viterbi algorithm, distance properties and error bounds, soft-input and soft-output decoding, and coding in mobile communications; turbo codes, including concatenation, EXIT charts, weight distribution and woven convolutional codes,; and space-time codes, including spatial channels, performance measures, orthogonal space-time block codes and spatial multiplexing. Appendices include information on algebraic structures and linear algebra. Examples and illustrations abound and are very helpful.