===== Error Correction Codes ===== ==== Why do we need ECC ==== Even if several pixels are responsible for the representation of a single bit, the accuracy of the measured value still depends upon the video coding/decoding on the application. Frame Intra/Inter prediction and the codec's quantization process can introduce noise in our modified video frames. A badly interpreted bit on the capture process is enough to cause confusion when aggregating all the transmitted file parts. Thus, a frame should only be accepted as part of a file if all of the data pertaining to it is correct. ==== Introducing Error Control Methods ==== Although some schemes are able to detect errors, they force the retransmission of the data. This can impact latency sensitive applications like VoIP. However, they may still be useful for use cases like web browsing. An example is depicted below: * ARQ (Automatic Repeat reQuest) -> Error-control method for data transmission that uses acknowledgements and timeouts - Used in TCP. * Stop-and-wait ARQ * Go-back-N ARQ * Selective repeat ARQ =====Forward Error Correction (FEC) strategies===== * **Triple Modular Redundancy:** The same data unit is sent 3 times. The idea is to cast a majority vote in the received data. This method is able to correct 1 error. * **Hamming Codes(7,4):** Can detect up to two simultaneous bit errors, and correct single-bit errors. * **Extended Binary Golay Code(24,12,8):** Encodes 12 bits of data in a 24 bit long codeword. It is able to correct 3 errors and detect up to 7 errors. * **Reed-Solomon Codes:** Can detect and correct multiple symbol errors - especially good for burst errors. RS(255,223) is a NASA standard. It employs 32 parity bits to correct up to 16 errors and detect up to 32. ==== Reed-Solomon ECC ==== A given codeword is given by the expression **codeword= k + 2t** where **k** = payload data, **t** = error correction threshold, **2t** = redundant symbols The R-S decoder for the (255, 247) code will correct any four-symbol errors without regard to the type of damage suffered by the symbol. In other words, when a decoder corrects a byte, it replaces the incorrect byte with the correct one, whether the error was caused by one bit being corrupted or all eight bits being corrupted. Thus if a symbol is wrong, it might as well be wrong in all of its bit positions. This gives an R-S code a tremendous burst-noise advantage over binary codes, even allowing for the interleaving of binary codes. ===== Error Correction Codes Experiments ===== Reed-Solomon is being tested on DeltaShaper. Refer to [[https://github.com/pjkundert/ezpwd-reed-solomon|ezpwd]] implementation. === References === http://ptgmedia.pearsoncmg.com/images/art_sklar7_reed-solomon/elementLinks/art_sklar7_reed-solomon.pdf http://stackoverflow.com/questions/11243272/error-correcting-codes