Хэмминг вычислил, что если у нас есть кодовое слово
длиной
, и от кода требуется гарантированное исправление одной ошибки, то из
символов кодового слова необходимо назначить проверочными по крайней мере
символов. Потому что принятое слово
должно нести информацию не только о переданном сообщении, но и о месте ошибки (
вариантов), либо о том, что ошибки нет (
вариант), всего
вариантов, а это
символов. Но как выбрать их позиции в кодовом слове (ещё на этапе разработке кодера/декодера)?
Допустим, мы кодируем с помощью матрицы
из примера 14. Предположим, что мы решили символы
назначить информационными (то есть на этапе кодирования они известны), а символы
сделать проверочными (их надо найти из информационных). Распишем матричное уравнение
:
Смотрите, как плохо получается: ни одну из неизвестных
нельзя найти из уравнений
непосредственно, потому что в каждое уравнение входит ещё по крайней мере одна неизвестная.
Зато, если считать проверочными
, их можно вычислить из уравнений непосредственно:
На матричном языке причина очевидна: в этом хорошем случае проверочные символы — те, которые соответствуют столбцам единичной матрицы
, которая легко обращается:
А в каждом столбце
ровно одна единица (хотя в данном случае простота разрешимости системы — следствие того, что в каждой
строке ровно одна единица). Что и даёт степень двойки при «двоичной» трактовке
.