Автор M0nstr0 задал вопрос в разделе Естественные науки
Линейный блочный код, коды Хеминга, Порождающая матрица и Проверочная матрица. и получил лучший ответ
Ответ от Личный Кабинет Удален[гуру]
Я не особый спец по этому вопросу, особенно в теории, но решение задачи о поиске позиции ошибки могу дать:
Значит код Хэмминга, общий вид (n,k), где k- количество информационных символов, n - всех.
Общая суть - согнать воедино 2 кода антипода: с проверкой на четность и с повторением. Первый быстро обнаруживает факт ошибки, но не находит ее. Второй исправляет любое число ошибок, но затратен по времени.
В примере, так понимаю, классический код (7,4). Ещё понадобится разница k'=n-k (в примере k'=3)
Теперь необходимо строить проверочную и кодирующую матрицы. Начинают с проверочной H, но нам потребуется транспонированная к ней. Строится так: внизу единичная матрица размерности k' *k', строки сверху заполняются с расчетом, что не должно быть повторяющихся. И нулевую тоже не следует писать. Это задается рандомно и не суть как, лишь бы выполнялись эти условия.
Кодирующая матрица G строится просто. Все внимание на схему!! ! Здесь нижние индексы обозначают количество строк и столбцов у матриц. a - исходное слово из к символов, с - слово из n символов (наше a с k' дополнительными ), c' - слово с с одной ошибкой. Как получается Ht и G - также описал выше и на схеме.
Так вот, три строки снизу на картинке - процесс кодирования и декодирования с исправлением одной ошибки, возникаемой при шумах.
На сколько я понимаю, в твоем случае 1й шаг уже сделан и получено сообщение c либо c' (я не знаю на данный момент, содержит ли оно ошибку) .
Теперь иду на шаг 3) и умножаю c' *Ht. (помним, что все операции по mod 2!) В результате получу вектор 1*k'. Если все элементы вектора нули, то ошибки не было. Иначе смотрим в матрицу Ht и ищем, в какую строку входит наш вектор.
Номер строки, в которую он входит - номер позиции ошибки в слове c'
Собственно все.
Единственное что. Все эти операции я проделывал полностью по алгоритму, т. е. исходил из слова a. Хотя думаю, что и при заданном слове c' рассуждения аналогичны, просто мне не пришлось с помощью G добавлять эти k' дополнительных символа.
Итак, у тебя дано слово, например последнее, c'=1100110. Достроишь матрицу Ht(7*3). В произведении получится строка st(1*3)
Ищешь st(1*3) в Ht(7*3), номер строки, куда входит - номер позиции ошибки в c'.
Удачи!
Источник: На последок могу посоветовать только попробовать почитать теорию из книги Хэмминга "Теория кодирования и информации"
Здравствуйте! Можете пожалуйста объяснить как в блочном кодировании сообщение переводится в блочный код
Вектор сообщенияКодовое слово
000 000000
100 110100
010 011010
110 101110
001 101001
101 011101
011 110011
111 000111