Если у меня есть определенное количество байтов для передачи серийно, как определить, какой CRC (CRC8, CRC16 и т. Д., В основном, сколько бит CRC?) Использовать и по-прежнему иметь процент обнаружения ошибок? Есть ли формула для этого?Как определить, какой CRC использовать?
ответ
Чтобы ответить на этот вопрос, вам необходимо знать bit error rate вашего канала, который может быть определен только эмпирически. И тогда, как только у вас будет измеренное значение BER, вам нужно решить, какой уровень обнаружения «достаточно высок» для ваших целей.
Отправка каждого сообщения, например, 5 раз даст вам довольно неплохое обнаружение даже на очень шумном канале, но это немного затруднит вашу пропускную способность. Однако, если вы отправляете команды на глубокий космический зонд, вам может понадобиться эта избыточность.
С точки зрения длины КПР применяются нормальные статистические данные. Для бит-ширины CRC у вас есть 1/(2^n)
вероятность наличия ложного срабатывания. Таким образом, для 8-битного CRC у вас есть шанс 1/255 и т. Д.
Однако выбранный полином также оказывает большое влияние. Математика сильно зависит от передаваемых данных и не является легким ответом.
Вы должны оценить больше, чем просто CRC в зависимости от вашего механизма связи (FEC с такими системами турбокодов очень полезен и распространен).