Overview
Coding theory is the branch of mathematics and engineering that examines methods for representing information so it can be stored, transmitted, and processed with desired properties. Practitioners ask how to make messages compact, secure, and robust against noise. Two broad aims are source coding (making data smaller) and channel coding (protecting data from errors during transmission or storage).
Basic concepts and characteristics
Codes map original messages to sequences of symbols drawn from a finite alphabet. Important performance measures include the rate (how much redundancy is added), the distance between codewords (which controls error-detection and -correction power), and the complexity of encoding and decoding. Several common families of codes are studied:
- Block codes — fixed-length input to fixed-length output (e.g., linear codes).
- Convolutional codes — streaming codes that mix recent inputs to produce outputs.
- Turbo and LDPC codes — modern families used in high-performance communication systems.
- Source codes — algorithms for compression that remove redundancy in the original data.
History and theoretical foundations
Early work on codes grew from practical needs in telegraphy, telephony, and later radio and digital storage. A key development was a theoretical framework that quantifies limits on reliable communication over noisy channels. This led to the study of optimal trade-offs between rate and reliability and to constructive families of codes that approach those limits.
Applications and examples
Coding methods are pervasive in modern technology. Error-correcting codes are embedded in hard drives, solid-state storage, satellite and cellular links, and deep-space probes. Source coding algorithms are the basis for file compression and multimedia formats; see discussions of data compression and general data representation. Cryptographic systems can employ coding ideas for confidentiality and integrity; see cryptography for related concepts.
Distinctions and notable facts
It is useful to distinguish between coding aimed at reducing size (lossless or lossy compression) and coding aimed at protecting against errors. Some schemes combine both goals in layered systems. Practical code design balances theoretical performance with implementation costs: decoding speed, memory use, and patent or standard constraints often determine which codes are used in a particular product or network.