Все CRC являются линейными блоковыми кодами коррекции ошибок над GF(2)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Oldring 22 сентября 2003 г. 14:23
В ответ на: Блоков - очень много :) отправлено SFlood 22 сентября 2003 г. 14:06

Если на пальцах - можете считать, что каждый бит входной последовательности некоторой конкретной длины соответсвует вектору из 4 контрольных битов. Вклад от каждого единичного бита входной последовательности ксорится в результат. Дополнительно нужно проксорить с некоторым неизвестным постоянным 4-битным вектором, чтобы получить реальные контрольные разряды.

Только учтите, что при другой длине блока вклад каждого битика будет другой.

Чтобы проверить гипотезу линейного кода - можно записать достаточно много блоков одинаковой длины из входных данных дополненных контрольными битами в виде матрицы над GF(2) (строки - входные вектра дополненные контрольными разрядами) и стандартными методами линейной алгебры проверить, что строки линейно зависимы и ранг матрицы равен числу битов данных. Блоков должно быть больше, чем ожидаемый ранг матрицы :) Зная, что код линейный, можно для каждой длины блока данных найти базис ненулевого пространства матрицы, в котором в каждом базисном векторе ровно по 1 ненулевому биту входных данных, затем немного подумать - и найти все параметры CRC, если это действительно циклический код, а не линейный код общего вида.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru