
Практика 1
.pdf
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
ПОМЕХОУСТОЙЧИВОЕ КОДИРОВАНИЕ. КОД ХЕММИНГА
Отчет по практической работе №1
по дисциплине «Теория электрической связи»
Студент гр. 730–1
|
|
|
|
К.В. Подойницын |
|
« » |
|
2024 г. |
|||
|
|
|
|
|
|
Руководитель Преподаватель каф. КИБЭВС
|
|
|
|
В.С. Аврамчук |
|
« » |
|
2024 г. |
|||
|
|
|
|
|
|
Томск 2024
Введение
Целью данной работы является изучение назначения и принципов помехоустойчивого кодирования, ознакомление с некоторыми группами помехоустойчивых кодов, а также моделирование простейшей ситуации передачи данных по ненадежному каналу связи с использованием кода Хемминга.
Основной задачей работы является разработка программной модели системы передачи данных (строки символов кодировки ASCII) по ненадежному каналу связи, в котором возможны только единичные ошибки.

2 Ход работы
2.1Краткие теоретические сведения о кодах Хемминга
2.1.1Основополагающий принцип.
Воснове кодов Хемминга лежит принцип проверки четности количества единичных битов в информационных разрядах кодового блока. Идею проверки четности можно проиллюстрировать на примере простейшего кода с проверкой четности. Процесс кодирования сводится к добавлению единственного контрольного бита к безызбыточному коду. Контрольный бит является 1, если количество 1 в исходной кодовой комбинации нечетное, иначе в контрольный разряд вписывается 0. Таким образом, правило формирования проверочного символа сводится к следующему:
|
= |
|
… , |
(2.1) |
1 |
1 |
2 |
|
|
где – количество информационных разрядов в блоке;
, = 1, – информационные биты;
1 – контрольный бит.
Добавление дополнительного разряда увеличивает общее число комбинаций в два раза, а условие четности разделяет все комбинации на разрешенные и неразрешенные. Следовательно, код с проверкой четности имеет минимальное кодовое расстояние равное двум и позволяет обнаруживать единичные ошибки, так как они нарушают условие четности.
2.1.2Маркировка кодов Хемминга.
Внастоящее время разработаны и используются различные коды Хемминга, отличающиеся числом информационных и проверочных символов.
Обозначение кодов осуществляется парой чисел ( , ), где – общее количество
разрядов в блоке, – число информационных разрядов. Классическими кодами
Хемминга называются коды, для которых выполняются соотношения = 2 − 1
и = 2 − 1 − , где - количество контрольных разрядов. Примерами классических кодов являются коды (7,4), (15,11), (31,26).
2.1.3 Классический код (7,4).
Заданы четыре информационных бита ( 1, 2, 3, 4), для удобства будем полагать, что они сосредоточены в начале блока. Для получения итогового блока они дополняются тремя контрольными битами ( 1, 2, 3). Контрольные биты определяются в результате проверки на четность, следующим образом:
1 = 1 2 3,
2 = 2 3 4,
3 = 1 2 4.
Для обнаружения и исправления ошибок на принимающей стороне строится последовательность (штрих над символом говорит о возможности ошибки в нем), следующим образом:
1 = 1′ 1′ 2′ 3′,2 = 2′ 2′ 3′ 4′,
3 = 3′ 1′ 2′ 4′.
Трехсимвольную последовательность ( 1, 2, 3) называют синдромом.
Синдром позволяет сделать вывод о разряде, в котором имела место единичная
ошибка. Соответствие между синдромами и ошибками |
приведено в таблице |
|||||||||
2.1. |
|
|
|
|
|
|
|
|
|
|
|
Таблица 2.1 – Соответствие синдромов и ошибок |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
Синдром |
000 |
001 |
010 |
011 |
100 |
|
101 |
110 |
111 |
|
|
|
|
|
|
|
|
|
|
|
|
Ошибка в символе |
Нет |
3 |
2 |
4 |
1 |
|
1 |
3 |
4 |
Как видно из таблицы 3, каждая единичная ошибка имеет свой единственный синдром. Нулевой синдром показывает, отсутствие ошибок или их не единичную кратность. Данный код, как и все классические коды, имеет число синдромов, точно равное их необходимому числу, и называется плотноупакованным. Усеченные коды не являются плотноупакованными.
2.1.4 Универсальный алгоритм кодирования/декодирования.
Процедура кодирования происходит по следующему алгоритму:
1.Задается число информационных разрядов в одиночном информационном блоке, на его основании определяется число контрольных разрядов и общее число разрядов .
2.Позиции контрольных разрядов выбираются определенным образом.
Под контрольные биты отводятся позиции, номера которых подчиняются закону
= 2 , где – целое число. То есть контрольные элементы занимают позиции
= 1,2,4, … .
3.Порядок следования информационных битов в блоке сохраняется, но при этом они размещаются между контрольными разрядами.
4.С учетом позиций контрольных и информационных разрядов составляется таблица кодирования, содержащая полный перечень разрешенных комбинаций. На данном шаге, позиции, отведенные под контрольные разряды,
оставляются незаполненными.
5. Заполняются позиции контрольных разрядов по результатам регулярных проверок на четность/нечётность в соответствии с таблицей проверок (таблица 2.2). Основная идея проверок заключается в следующем: на каждом этапе проверки, необходимо подобрать значение контрольного бита таким образом, чтобы выполнялось контрольное условие.
Процедура декодирования происходит по следующему алгоритму:
1. По принятому информационному блоку (содержащему ) бит, в соответствии с таблицей проверок (таблица 2), определяется двоичное слово,
количество разрядов в котором соответствует количеству контрольных бит .
Данное двоичное слово составляют биты 1, 2, . . . , , где – представляет собой двоичный результат -ой проверки и принимает значение «1» в случае, если контролируемое условие в принятом блоке выполняется и «0» в
противоположном случае.
2. В случае если все из битов ложны 1 = 2 = = = 0, то информационный блок считается принятым без ошибок (если возможность кратных ошибок исключена). В противном случае считают, что блок был принят с единичной ошибкой. Для определения позиции бита, в котором имела места ошибка, двоичное слово, составленное из битов 1, 2, . . . , , представляют в десятичной системе счисления. Затем бит, находящийся на определенной позиции, инвертируется.
Таблица 2.2 – Таблица проверок
Номер |
Определяемая |
|
|
проверки |
контрольная |
Контролируемое условие четности |
|
|
позиция |
|
|
|
|
|
|
1 |
1, бит 1 |
Число единиц на позициях, взятых по одной через |
|
одну, начиная с позиции 0, является чётным |
|||
|
|
||
|
|
|
|
2 |
2, бит 2 |
Число единиц на позициях, взятых по две через |
|
две, начиная с позиции 1, является чётным. |
|||
|
|
||
|
|
|
|
|
|
Число единиц на позициях, взятых по четыре |
|
3 |
4, бит 3 |
через четыре, начиная с позиции 3, является |
|
|
|
чётным |
|
|
|
|
|
4 |
8, бит 4 |
Число единиц на позициях, взятых по восемь через |
|
восемь, начиная с позиции 7, является чётным |
|||
|
|
||
|
|
|
|
L |
2−1 − 1, |
Число единиц на позициях, взятых по 2−1 через |
|
бит |
2−1, начиная с позиции 2−1, является чётным |
||
|
|||
|
|
|

3. На заключительном этапе, из принятого и не содержащего ошибок информационного блока отбрасываются контрольные биты, а оставшиеся при этом информационных бит в точности повторяют отправляемое сообщение.
2.2 Выбор среды для реализации программной модели
Для реализации программной модели были выбраны язык программирования C# и среда программирования Visual Studio. Язык программирования C# был выбран поскольку он изучался ранее. Среда программирования Visual Studio является удобной средой разработки, которая не нагружена ненужными функциями и позволяющая пользователю быстро разобраться в ней.
2.3 Описание программы
Структуру программы основана на схеме, приведенной ниже.
Рисунок 2.1 – Схема программной модели

2.3.1 Функция преобразования символов строки в восьмибитные блоки
На рисунке 2.2 приведен код функции, которая преобразует каждый символ в двоичный код, согласно ASCII и дополняет незначащими нулями чтобы получился восьмибитный блок. Функция возвращает массив из восьмибитных блоков.
Рисунок 2.2 – Функция преобразования символов строки в восьмибитные блоки
2.3.2 Функция вычисления контрольных битов и добавления их в блоки кода
На рисунке 2.3 приведена функция, которая перебирает каждый блок,
вычисляет контрольные биты и добавляет их в восьмибитный блок, тем самым преобразуя его в двенадцатибитный.
Рисунок 2.3 – Функция вычисления контрольных битов и добавления их в блоки кода

2.3.3 Функция искажения случайного бита в некоторых блоках
На рисунке 2.4 приведена функция, которая в случайной строке и столбце делает ошибку в бите.
Рисунок 2.4 – Функция искажения случайного бита в некоторых блоках
2.3.4 Функция обнаружения и исправления ошибок
На рисунке 2.5 приведена функция, которая перебирает каждый блок,
вычисляет синдром, если синдром не равен нулю, определяет в каком бите была ошибка и исправляетеё.
Рисунок 2.5 – Функция обнаружения и исправления ошибок

2.3.5 Вычисление байтовых блоков и преобразование их в строку
На рисунке 2.6 приведена функция, которая получает на вход массив из восьмибитных блоков, далее перебирает каждый блок, вычисляет десятичное число ASCII символа и затем переводит в строковой символ. Функция возвращается символьную строку.
Рисунок 2.6 – Функция преобразования байтовых блоков в строку