15, 11 Матрица генератора кода Хэмминга

#java #matrix #matrix-multiplication #hamming-code

#java #матрица #матрица-умножение #хэмминг-код

Вопрос:

Я пытался понять коды Хэмминга и написал программу, которая правильно кодирует и декодирует заданные входные данные для Хэмминга 7,4. При попытке сделать это для 15,11 я не могу получить правильный вывод при попытке кодирования.

Я ввел байт и добавил три ведущих нуля, затем умножил его на приведенную ниже матрицу генератора. После получения mod2 матрицы я все еще не получаю правильного ответа и не уверен, делаю ли я что-то не так или моя матрица неверна.

 int [][] byte = {{0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1}};

int [][] matrixG = { { 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                     { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                     { 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
                     { 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 
                     { 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
                     { 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0},
                     { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0},
                     { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0},
                     { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0},
                     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0},
                     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1} }; 
  

Коды Хэмминга — это очень новая концепция для меня, поэтому я могу упустить что-то очень очевидное! Я действительно ценю любую помощь, которую вы можете мне оказать!

Комментарии:

1. Многочлен генератора для Хэмминга (15,11) равен x^4 x 1 , который соответствует 1 0 0 1 1 циклическому коду, а 1 1 0 0 1 не в вашей матрице

Ответ №1:

Ваша G-матрица неверна.

 int [][] matrixG = { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
                     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0},
                     { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
                     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
                     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1},
                     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1},
                     { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1},
                     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1},
                     { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1},
                     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1},
                     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} }; 
  

Как вы можете видеть здесь, матрица G сохраняет исходные биты данных нетронутыми и добавляет дополнительные биты четности в конец вашей строки.