Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > [?] Модифицированный код Хемминга


Автор: XuTMAH 4.10.2005, 21:42
Для начала - обозначения (чтобы не запутаться):
d3, d2, d1, d0 - информационные разряды
k, k3, k2, k1 - контрольные разряды
kp, p3, p2, p1 - разряды проверки

Если я не ошибаюсь то:

Кодирование:
k1 = d0 xor d1 xor d3
k2 = d0 xor d2 xor d3
k3 = d1 xor d2 xor d3
k = k1 xor k2 xor d0 xor k3 xor d1 xor d2 xor d3

Декодирование:
p1 = k1 xor d0 xor d1 xor d3
p2 = k2 xor d0 xor d2 xor d3
p3 = k3 xor d1 xor d2 xor d3
kp = k1 xor k2 xor d0 xor k3 xor d1 xor d2 xor d3 xor k

Насколько я понимаю "Модифицированный код Хеммнга" гарантирует возможность исправления еденичной ошибки, при том это возможно только в случае если
kp = 1
а слово p3-p2-p1 принимает ненулевое значение

В тех же случаях когда
kp = 0 и p3-p2-p1 = ненулевое значение
или
kp = 1 и p3-p2-p1 = 0
шибку исправить нельзя, т.е. ошибка двойной или большей кратности...

kp = 0 и p3-p2-p1 = 0
ошибки нет

Если я всё правильно написал(поправьте меня если что), то возьмём следующий пример для проверки:

1101

кодирование

k1 = 0
k2 = 1
k3 = 0
k = 0

сделаем одну ошибку

0101

декодирование

k1' = 1
k2' = 0
k3' = 1
k' = 0

p1 = 1
p2 = 1
p3 = 1
kp = 0

в итоге этот резкльтат подподает под тот случай где ошибка не устранима, т.е. ошибка двойной или большей кратности, а я делал одиночную ошибку...

Отсюда и следует вопрос - в чём я наврал?

Автор: cardinal 4.10.2005, 23:15
Цитата(XuTMAH @ 4.10.2005, 19:42)
k1 = d0 xor d1 xor d3
k2 = d0 xor d2 xor d3

А может тут
Цитата(XuTMAH @ 4.10.2005, 19:42)
k1 = 0
k2 = 1

k2 = 0?

Просто 1 xor 1 xor 0 = 1 xor 0 xor 1
или я торможу... smile

Автор: XuTMAH 5.10.2005, 11:45
2cardinal

Я забыл написать что d0 - это младший разряд (нулевой), d1 - первый, d2 - второй, d3 - третий
т.е. в исходном примере

1101

d3 = 1
d2 = 1
d1 = 0
d0 = 1

и следовательно по формулам

k1 = d0 xor d1 xor d3
k2 = d0 xor d2 xor d3

получаем

k1 = 1 xor 0 xor 1 = 0
k2 = 1 xor 1 xor 1 = 1

Невижу противоречий...
Может я слепой?

Цитата(cardinal @ 4.10.2005, 23:15)
Просто 1 xor 1 xor 0 = 1 xor 0 xor 1

Это бесспорно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)