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