CRC кодирование обладает как минимум 2 изюминками. Во первых Код позволяет полностью заменить весь пакет на любой произвольный, и если правильно подобрать 2 последних (в зависимости от длинны полинома) байта, ни один декодер никогда не распознает что была подмена. Во вторых я не слышал чтобы эти коды использовались для испраления ошибок.
Если посмотреть на рисунок то видно что информационная последовательность помещается в трехмерный массив, каждая ячейка которого может хранить 1 бит. Красные ячейки -- информационные, зеленые дополнение до четности строки(столбца). Последний слой (не показан) содержит только биты четности для однотипных ячеек всех слоев. При помещении в таблицу элементы располагаются так чтобы быстрее всего изменялся первый индекс массива, а медленнее всего -- последний индекс. При извлечении данных для передачи данные извлекаются таким образом чтобы быстрее всего изменялся самый последний индекс и медленнее всего самый первый. Разумеется в декодере биты в массив помещаются в обратном порядке.
Данный код не только может исправить ошибки при передаче, он позволяет восстановить данные даже в случае пропадания(повреждения) нескольких битов идущих подряд (при 8 слоях) данный код легко справиться с восстановлением целого байта который был потерян
И хотя размер посылки увеличивается (при размерности 8.8.
коэф использования 0,67. Но представьте если сбои бита идут чаще чем время передачи вашей посылки. Замирания, отражения, таксисты со своими рациями, мед кабинеты ... В этом случае CRC код просто приведет к тому что связь БУДЕТ ПОТЕРЯНА. И в самом деле каждая посылка будет содержать 1..2 ошибки и вы никогда не сможете успешно передать ни один пакет. Борьба с этим только в использовании кодов позволяющих исправлять ошибки. А тот пример который привел я относиться к классу турбо кодирования и позволяет бороться с идущими подряд ошибками, что очень актуально при условиях повышенного уровня помех.