Расширенный код Хэмминга.
5
комментариев
•
1263
просмотра
•
07 июня 2024, 10:35
Этот заказ висел пол года на зад,.. Просили за него смешные 400 р как тогда так и сейчас. Короче я психанул, и между делом попытался что то подобное накодить. ИИ такое с трудом переваривал. Это матрицы и продвинутая математика.
https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B...
Код Хэ́мминга — самоконтролирующийся и самокорректирующийся код. Построен применительно к двоичной системе счисления.
Позволяет исправлять одиночную ошибку (ошибка в одном бите слова) и находить двойную[1].
Назван в честь американского математика Хэмминга Ричарда Уэсли, предложившего код.
Расширенный код Хэмминга , обозначаемый EHamr(2), получается из двоичного кода Хэмминга Hamr(2) добавлением бита проверки на четность. Минимальное расстояние кода при этом увеличивается до 4, и, таким образом, мы получаем исправляющий 1 ошибку
и обнаруживающий 2 ошибки линейный [2r
, 2
r − r]-код.
Если мы будем добавлять бит проверки на четность в начало
каждого кодового слова, то проверочная матрица ELr для расширенного кода Хэмминга EHamr(2) может быть получена путем добавления нулевого столбца в начало Lr и затем добавления строки
из единиц в качестве нижней строки. Штука довольно мудреная никто за нее не берется.
Работа программы
Программа реализует расширенный код Хэмминга для обнаружения и исправления ошибок в двоичных данных. Расширенный код Хэмминга позволяет исправить одну ошибку и обнаружить две ошибки в переданных данных. Программа предоставляет графический интерфейс для ввода данных, кодирования, декодирования и внесения ошибок.
Основные компоненты программы
Генерация проверочной матрицы и расширенной проверочной матрицы:
- : Генерирует расширенную проверочную матрицу
- ELrEL_rELr путем добавления нулевого столбца и строки из единиц.
Кодирование данных:
- : Кодирует данные, добавляя биты четности, и возвращает закодированные данные.
Декодирование данных:
- : Декодирует данные, проверяет на наличие ошибок, исправляет одну ошибку (если есть) и возвращает исправленные данные, синдром и позиции ошибок (если были обнаружены).
Внесение ошибок:
- : Вносит одну или две случайные ошибки в закодированные данные.
Графический интерфейс:
- Программа использует библиотеку для создания графического интерфейса, который позволяет пользователям вводить данные, кодировать их, декодировать и вносить ошибки.
Ввод данных:
- Пользователь вводит данные "1010".
Кодирование данных:
- Программа кодирует данные и выводит закодированные данные, например: "00101010".
Внесение ошибок:
- Пользователь нажимает кнопку "Внести 1 ошибку", и программа изменяет один случайный бит, например: "00101000".
Декодирование данных:
- Пользователь нажимает кнопку "Декодировать", и программа исправляет ошибку, выводя исправленные данные "1010" и синдром "0001". Сообщение сообщает пользователю, что ошибка была обнаружена в 7-м бите.
Заключение
Программа предоставляет удобный интерфейс для работы с расширенным кодом Хэмминга, позволяя пользователям легко кодировать и декодировать данные, а также вводить ошибки для тестирования возможностей кода по обнаружению и исправлению ошибок.
Ввод данных:
Кодирование данных:
- Программа кодирует данные, добавляя контрольные биты.
- Закодированные данные, например: "00101010".
Внесение двух ошибок:
- Допустим, в закодированные данные вносятся две ошибки в произвольные позиции, например: "01101000".
- Ошибки внесены в позиции 1 и 8 (битовые индексы начинаются с 0).
Декодирование данных:
- Программа декодирует данные и проверяет на наличие ошибок.
- Рассчитывает синдром, который указывает на наличие ошибок.
Расчет синдрома
Синдром рассчитывается путем умножения закодированных данных на расширенную проверочную матрицу:
Вывод программы
Синдром: Примерное значение может быть что-то вроде "1011", что указывает на ошибки.
Обнаружение ошибок: Программа определяет, что ошибки присутствуют, но не может точно их исправить.
Исправленные данные: Программа попытается исправить ошибку, но результат может быть неверным, так как она предназначена для исправления только одной ошибки.
Вывод: В интерфейсе будет показана информация о наличии ошибок и позиции одной из них, но исправленные данные могут оказаться некорректными.
Пример выполнения программы:
Ввод данных: 1010
Закодированные данные: 00101010
С ошибкой (2): 01101000
Декодирование:
Исправленные данные: 1011 (некорректный результат)
Синдром: 1011
Обнаружена ошибка в битах: [позиция одной из ошибок]
Заключение
При внесении двух ошибок программа правильно обнаружит наличие ошибок (синдром будет ненулевым), но исправление данных не будет корректным. Это связано с тем, что расширенный код Хэмминга предназначен для исправления одной ошибки и обнаружения двух ошибок, но не для их исправления. Поэтому при наличии двух ошибок данные могут быть восстановлены некорректно.
О чем я и зачем.
Во первых, с появлением ИИ мы разгрузили себя рутиной в написании кода.
Во вторых, если вы думаете что вы посадите обезьяну и она вам с помощью ИИ накодит шедевр это совсем не так.
В третьих, на фрил приходят молодые, неопытные ни чего не знающие в расценках и хватают работы за копейки. 400 р за код! За прогу, которая пол года так и не реализована была, ну я не знаю....