Какой метод обнаружения ошибок наиболее эффективен? - PullRequest
0 голосов
/ 04 февраля 2020

Чтобы обнаружить количество n_errors ошибок в коде длиной n_total бит, мы должны пожертвовать определенным числом n_check битов для какой-то контрольной суммы.

Мой вопрос: Каков метод, где я должен пожертвовать наименьшим количеством битов n_check, чтобы обнаружить заданное количество ошибок n_errors в коде n_total длины битов.

Если общего ответа нет На этот вопрос я был бы очень признателен за некоторые подсказки, касающиеся методов для следующих условий: n_total=32, n_errors>1 и, очевидно, n_check должно быть как можно меньше.

Спасибо.

1 Ответ

0 голосов
/ 05 февраля 2020

Ссылка на CR C Примечания зоопарка:

http://users.ece.cmu.edu/~koopman/crc/notes.html

Если вы посмотрите на таблицу для 3 битов cr c:

http://users.ece.cmu.edu/~koopman/crc/crc3.html

Вы можете видеть, что вторая запись, 0xb => x ^ 3 + x + 1, имеет HD (расстояние Хэмминга) 3 для 4 битов данных, для общий размер 7 бит. Это может обнаружить все 2-битные комбинации ошибок (из 7 битов), но некоторые 3-битные комбинации будут терпеть неудачу, очевидный случай, когда все биты должны быть равны нулю, будет

0 0 0 1 0 1 1    (when it should be 0 0 0 0 0 0)

Это простой пример, где Количество битов в полиноме определяется максимальным количеством битовых ошибок. Чтобы проверить HD = 3 (обнаружены 2-битные ошибки), были проверены все 21 случай 7-битного общего количества, 2-битные повреждены.

Если вы проверите 32-битные CRC, вы увидите, что 0x04c11db7 (ethe * 1033) * 802.3 имеет HD = 6 (обнаружение 5-битных ошибок) при 263 битах данных => 263 + 32 = 295 битов, тогда как 0x1f4acfb13, имеет HD = 6 при 32736 битах данных => 32736 + 32 = 32768 битов.

Вот статья в формате PDF о поиске хороших CRC:

https://users.ece.cmu.edu/~koopman/networks/dsn02/dsn02_koopman.pdf


Поиск "хороших" CRC для указанных c Расстояния Хемминга требуют определенных знаний о процессе. Например, в случае 0x1f4acfb13 с HD = 6 (обнаружение 5 плохих битов) существует 314 728 365 660 920 250 35068 возможных комбинаций из 5 битов с ошибками из 32768 битов, но 0x1f4acfb13 = 0x1f4acfb13 = 0xc85f * 0x801 * 0x3 * 0x3, и любой из терминов 0x3 (x + 1) обнаружит любое нечетное количество битов ошибки, что сокращает число поисков до 4 ошибочных битов. Для минимального размера сообщения, которое завершается неудачно с этим полиномом, первый и последние биты будут ба д. Это сокращает поиск до 2 из 5 битов, что сокращает количество случаев до 536 миллионов. Вместо вычисления CR C для каждой битовой комбинации можно создать таблицу CRC для каждого 1 бита во всем остальном 0-битном сообщении, а затем записи таблицы, соответствующие указанным c битам, могут быть скорректированы на скорость до процесса. Для полинома, в котором он не является первым и последним битами, таблица CR C может быть сгенерирована для всех 2-битных ошибок (при условии, что такая таблица помещается в памяти), затем сортируется, затем проверяется на наличие дублирующихся значений ( с отсортированными данными это требует только одного последовательного прохода отсортированной таблицы). Дублирующиеся значения будут соответствовать 4-битному отказу. Другие ситуации потребуют других подходов, а в некоторых случаях это все еще занимает много времени.

...