- Related Questions & Answers
- C++ Program to Implement Levenshtein Distance Computing Algorithm
- What is Dijikstra Algorithm?
- Python Helpers for Computing Deltas
- What is Congestion Control Algorithm?
- Are You Ready For Cloud Computing?
- What is Distance Vector Routing Algorithm?
- Traditional Computing vs Mobile Computing
- Computing Ackerman number for inputs in JavaScript
- Is Quantum Computing changing the future of our world?
- What is a Non-Adaptive Routing Algorithm?
- Difference between Cluster Computing and Grid Computing
- Difference between Cloud Computing and Grid Computing
- Conventional Computing vs Quantum Computing in C++
- Difference Between Soft Computing and Hard Computing
- The Future of Cloud Computing

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

Cyclic Redundancy Check (CRC) is a block code that was invented by W. Wesley Peterson in 1961. It is commonly used to detect accidental changes to data transmitted via telecommunications networks and storage devices.

CRC involves binary division of the data bits being sent by a predetermined divisor agreed upon by the communicating system. The divisor is generated using polynomials. So, CRC is also called polynomial code checksum.

Before sending the message over network channels, the sender encodes the message using CRC. The receiver decodes the incoming message to detect error. If the message is error-free, then it is accepted, otherwise, the receiver asks for re-transmission of the message.

The process is illustrated as follows:

When messages are encoded using CRC (polynomial code), a fixed polynomial called generator polynomial,𝐺*G(x)* is used. The value of is mutually agreed upon by the sending and the receiving parties. A *k *– bit word is represented by a polynomial which ranges from *X ^{0}* to

**Algorithm for Encoding using CRC**The communicating parties agrees upon the size of message,

*M(x)*and the generator polynomial,*G(x)*.If

*r*is the order of*G(x)*,*r*, bits are appended to the low order end of*M(x)*. This makes the block size bits, the value of which is*x*.^{r}M(x)The block

*x*is divided by^{r}M(x)*G(x)*using modulo 2 division.The remainder after division is added to

*x*using modulo 2 addition. The result is the frame to be transmitted,^{r}M(x)*T(x)*. The encoding procedure makes exactly divisible by*G(x)*.

**Algorithm for Decoding using CRC**The receiver divides the incoming data frame T(x) unit by G(x) using modulo 2 division. Mathematically, if E(x) is the error, then modulo 2 division of [

*M(x) + E(x)*] by*G(x)*is done.If there is no remainder, then it implies that

*E(x)*. The data frame is accepted.A remainder indicates a non-zero value of E(x), or in other words presence of an error. So the data frame is rejected. The receiver may then send an erroneous acknowledgment back to the sender for retransmission.

Advertisements