Расширенный код Хэмминга.

5 комментариев • 1499 просмотров • 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 и затем добавления строки из единиц в качестве нижней строки.   Штука довольно мудреная никто за нее не берется.



Работа программы

Программа реализует расширенный код Хэмминга для обнаружения и исправления ошибок в двоичных данных. Расширенный код Хэмминга позволяет исправить одну ошибку и обнаружить две ошибки в переданных данных. Программа предоставляет графический интерфейс для ввода данных, кодирования, декодирования и внесения ошибок.

Основные компоненты программы
  1. Генерация проверочной матрицы и расширенной проверочной матрицы:

    • : Генерирует расширенную проверочную матрицу 
    • ELrEL_rELr​ путем добавления нулевого столбца и строки из единиц.
  2. Кодирование данных:

    • : Кодирует данные, добавляя биты четности, и возвращает закодированные данные.
  3. Декодирование данных:

    • : Декодирует данные, проверяет на наличие ошибок, исправляет одну ошибку (если есть) и возвращает исправленные данные, синдром и позиции ошибок (если были обнаружены).
  4. Внесение ошибок:

    • : Вносит одну или две случайные ошибки в закодированные данные.
  5. Графический интерфейс:

    • Программа использует библиотеку для создания графического интерфейса, который позволяет пользователям вводить данные, кодировать их, декодировать и вносить ошибки.

  1. Ввод данных:

    • Пользователь вводит данные "1010".
  2. Кодирование данных:

    • Программа кодирует данные и выводит закодированные данные, например: "00101010".
  3. Внесение ошибок:

    • Пользователь нажимает кнопку "Внести 1 ошибку", и программа изменяет один случайный бит, например: "00101000".
  4. Декодирование данных:

    • Пользователь нажимает кнопку "Декодировать", и программа исправляет ошибку, выводя исправленные данные "1010" и синдром "0001". Сообщение сообщает пользователю, что ошибка была обнаружена в 7-м бите.
Заключение

Программа предоставляет удобный интерфейс для работы с расширенным кодом Хэмминга, позволяя пользователям легко кодировать и декодировать данные, а также вводить ошибки для тестирования возможностей кода по обнаружению и исправлению ошибок.


  1. Ввод данных:

    • Данные: "1010".
  2. Кодирование данных:

    • Программа кодирует данные, добавляя контрольные биты.
    • Закодированные данные, например: "00101010".
  3. Внесение двух ошибок:

    • Допустим, в закодированные данные вносятся две ошибки в произвольные позиции, например: "01101000".
    • Ошибки внесены в позиции 1 и 8 (битовые индексы начинаются с 0).
  4. Декодирование данных:

    • Программа декодирует данные и проверяет на наличие ошибок.
    • Рассчитывает синдром, который указывает на наличие ошибок.
Расчет синдрома

Синдром рассчитывается путем умножения закодированных данных на расширенную проверочную матрицу:

  • Закодированные данные с ошибками: "01101000".

  • Рассчитывается синдром: H_extended * encoded_data % 2.

Вывод программы
  • Синдром: Примерное значение может быть что-то вроде "1011", что указывает на ошибки.

  • Обнаружение ошибок: Программа определяет, что ошибки присутствуют, но не может точно их исправить.

  • Исправленные данные: Программа попытается исправить ошибку, но результат может быть неверным, так как она предназначена для исправления только одной ошибки.

  • Вывод: В интерфейсе будет показана информация о наличии ошибок и позиции одной из них, но исправленные данные могут оказаться некорректными.

Пример выполнения программы:
plaintext
Копировать код
Ввод данных: 1010 Закодированные данные: 00101010 С ошибкой (2): 01101000 Декодирование: Исправленные данные: 1011 (некорректный результат) Синдром: 1011 Обнаружена ошибка в битах: [позиция одной из ошибок]
Заключение

При внесении двух ошибок программа правильно обнаружит наличие ошибок (синдром будет ненулевым), но исправление данных не будет корректным. Это связано с тем, что расширенный код Хэмминга предназначен для исправления одной ошибки и обнаружения двух ошибок, но не для их исправления. Поэтому при наличии двух ошибок данные могут быть восстановлены некорректно.


О чем я и зачем.   

Во первых,  с появлением ИИ мы разгрузили себя рутиной в написании кода.

Во вторых, если вы думаете что вы посадите обезьяну и она вам с помощью ИИ накодит шедевр это совсем не так.  

В третьих,  на фрил  приходят молодые, неопытные ни чего не знающие в расценках и хватают работы за копейки.    400 р за код!  За прогу,  которая пол года так и не реализована была, ну я не знаю....   



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