#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 сохраняет исходные биты данных нетронутыми и добавляет дополнительные биты четности в конец вашей строки.