Простая идея как обнаружить единичную ошибку (да и вообще нечетное число ошибок): посчитать четность. Такие коды называются SPC (Single Parity Check). +-+-+-+-+-+-+-+-+ +-+ | | | | | | | | | |B| +-+-+-+-+-+-+-+-+ +-+ BYTE CONTROL BIT B = A0 (+) A1 (+) A2 (+) A3 (+) A4 (+) A5 (+) A6 (+) A7 Если четность не совпадает - то обнаружена ошибка. (Этот метод используется в RS-232-C [COM port]). Пример реализации:
Порождающая матрица для SPC кода (4,3) | 1 0 0 1 | | 0 1 0 1 | | 0 0 1 1 | Data [1]| 1 0 0 1 | ------ >[2]| 0 1 0 1 | [3]| 0 0 1 1 | ------------------ [1][2][3][4] | V Code c1 = d1 c2 = d2 c3 = d3 Код систематический c4 = d1 (+) d2 (+) d3
Простая идея как исправить ошибку. Если нам надо переслать данные мы их пересылаем 2*N + 1 раз. Это позволит исправить до N ошибок включительно. Нам в этом может помочь мажоритарный элемент. Но вот только кто на это согласится?. Пересылать так много.