У меня возникли проблемы с кодом исправления ошибок SEC/DED. Кажется, я обнаружил несколько случаев, когда декодер считает, что произошло двойное переключение битов, но на самом деле произошло только одно. Я предполагаю, что я сделал что-то не так, но я не мог понять, что. Позвольте мне показать вам пример.
Предположим, я хочу закодировать 4 бита 1011
с помощью кода (7,4) плюс дополнительный бит, необходимый для обнаружения двух ошибок. Кодированное слово должно быть 00110011
, где старший бит — это дополнительный бит четности, следующие два — p0 и p1 и так далее.
Теперь предположим, что во время передачи младший бит переворачивается; таким образом, полученное слово будет 00110010
. Приемник извлечет из этого кода четыре принятых бита данных 1010 и создаст новый код, результатом которого будет 01011010
. Наконец, получатель выполнит побитовое исключающее ИЛИ двух кодов, получив 0111
. Последние три бита говорят, что бит 7 был перевернут (что правильно), но первый бит равен 0, и, насколько я знаю, декодер должен рассматривать эту ситуацию так, как если бы произошло более чем переворот бита.
Что я сделал не так?