Кодирования информации

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Сибирская государственная автомобильно-дорожная академия

(СибАДИ)"

Факультет Информационные системы в управлении

Специальность Комплексное обеспечение информационной безопасности автоматизированных систем

Кафедра Информационная безопасность

Пояснительная записка к курсовому проекту (работе)

по дисциплине Теория информации

Название работы

Кодирования информации

Содержание

Техническое задание

Введение

Теоретическое введение

1.1 Кодирование и декодирование. Помехозащищенные (корректирующие) коды

1.2 Коды с обнаружением и исправлением ошибок

1.3 Коды Хэмминга

1.4 Пример

1.5 Выводы

2. Постановка задачи

2.1 Анализ технического задания

2.2 Код Хэмминга (12,8)

2.3 Выводы

3. Описание разработки программы

3.1 Модульная структура программы

3.2 Спецификация на программные модули

3.3 Организация пользовательского интерфейса

3.4 Выводы

4. Техническая реализация

4.1 Выбор микросхем для реализации принципиальной схемы

4.2 Описание работы принципиальной схемы

4.3 Выводы

5. Тестирование системы

5.1. Выбор метода тестирования

5.2 Результаты тестирования

5.3 Выводы

Заключение

Список литературы

Приложения

Техническое задание

Построить математическую модель заданного корректирующего кода, найти образующую матрицу кода, технически реализовать средства для его кодирования/декодирования (на уровне принципиальной схемы).

Тип кода: Код Хэмминга;

Число сообщений: 253;

Корректир. способность кода (d): 3;

Устройство: Декодер.

Введение

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

С передачей информации связан ряд проблем:

повышение эффективности передачи, для повышения скорости передачи информации по каналу требуется разработка методов кодирования;

повышение надежности передачи путем использования помехоустойчивых кодов;

эффективное использование многоканальных систем передачи;

использование новых перспективных видов связи.

По назначению передаваемую информацию можно разделить на осведомительную и управляющую.

Информация, получаемая в результате измерения, передается как аналоговыми так и цифровыми (кодовыми) сигналами.

При передаче управляющей информацией применяются только кодовые сигналы, используемые для дискретного (обычно двухпозиционного) управления объектами.

Первые две проблемы, связанные с передачей информации, заключаются в кодировании информации.

Общие принципы кодирования информации справедливы для всех систем, основная функция которых — передача информации в пространстве (системы связи), так и для систем, основная функция которых — передача информации во времени (системы хранения информации).

Поставленная в Техническом задании задача относится к задачам курса «Передача информации».

Выполнение курсовой работы можно разбить на следующие этапы:

Изучение теоретического материала;

Построение математической модели корректирующего кода;

Разработка программы;

Построение функциональной схемы;

Построение принципиальной схемы;

Изучение теоретического материала проводилось с помощью технической литературы, список которой приведен ниже в РПЗ.

На основе полученных данных была построена математическая модель корректирующего кода.

Программа разработана на языке PASCAL и иллюстрирует работу данного кода.

Составленные схемы представляют собой технические средства для декодирования корректирующего кода.

1. Теоретическое введение

1.1 Кодирование и декодирование. Помехозащищенные (корректирующие) коды

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

Кодирование — преобразование дискретного сообщения в дискретный сигнал, осуществляемое по определенному правилу. Обратный процесс — декодирование — это восстановление дискретного сообщения по сигналу на выходе дискретного канала, осуществляемое с учетом правила кодирования.

Код — совокупность условных сигналов, обозначающих дискретные сообщения. Кодовая последовательность (комбинация) — представление дискретного сигнала.

В настоящее время кодирование нашло широкое применение.

Помехозащищенными (или корректирующими) называются коды, позволяющие обнаружить и исправить ошибки в кодовых комбинациях. Отсюда и деление этих кодов на две большие группы:

коды с обнаружением ошибок;

коды с обнаружением и исправлением ошибок.

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

Принципы обнаружения и исправления ошибок кодами хорошо иллюстрируются с помощью геометрических моделей. Любой n-элементарный двоичный код можно представить n-мерным кубом, в котором каждая вершина отображает кодовую комбинацию, а длина ребра куба соответствует одной единице. В таком кубе расстояние между вершинами (кодовыми комбинациями) измеряется минимальным количеством ребер, находящихся между ними, обозначается d и называется кодовым расстоянием Хэмминга.

Таким образом, кодовое расстояние — это минимальное число элементов, в которых любая кодовая комбинация отличается от другой.

Кодовое расстояние между двумя комбинациями двоичного кода равно числу единиц, полученных при сложении этих комбинаций по модулю 2.

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

Корректирующая способность кода зависит от кодового расстояния:

при d = 1 ошибка не обнаруживается;

при d = 2 обнаруживаются одиночные ошибки;

при d = 3 исправляются одиночные ошибки или обнаруживаются двойные.

В общем случае

d = r + s + 1;

где d — минимальное кодовое расстояние; r — число обнаруживаемых ошибок; s — число исправляемых ошибок.

При этом обязательным условием является r s.

Если код только обнаруживает ошибки, то

d = r + 1 или r = d — 1.

Если код только исправляет ошибки, то

d = 2 s + 1 или s = (d — 1) / 2.

В нашем случае d = 3, и если r = s = 1, то код может обнаружить одну ошибку и исправить ее. Если r = 2, s = 0, то код может только обнаружить две ошибки.

1.2 Коды с обнаружением и исправлением ошибок

Если кодовые комбинации составлены так, что отличаются друг от друга на кодовое расстояние d> =3, то они образуют корректирующий код, который позволяет по имеющейся кодовой комбинации избыточности не только обнаруживать, но исправлять ошибки.

Составление корректирующих кодов производят по следующему правилу. Сначала определяют количество контрольных символов m, которые следует добавить к данной кодовой комбинации, состоящей из k информационных символов. Далее устанавливают место, где эти контрольные символы должны быть расставлены в комбинации, и их состав, т. е. является ли данный контрольный символ 1 или 0. На приеме обычно делают проверку на четность определенной части разрядов.

1.3 Коды Хэмминга

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

В качестве исходного берут двоичный код на все сочетания с числом информационных символов k, к которому добавляют контрольные символы m. Таким образом, общая длина закодированной комбинации n=k+m.

Рассмотрим последовательность кодирования и декодирования по коду Хэмминга.

Кодирование Определение числа контрольных символов. При передаче по каналу с шумами может быть или искажен любой из n символов, или слово передано без искажений. Таким образом, может быть n+1 вариантов искажения (включая передачу без искажений). Используя контрольные символы, необходимо различить n+1 вариантов. С помощью контрольных символов m можно описать 2m в степени m событий.

Значит, должно быть выполнено условие:

2m n + 1 = k + m + 1.

Размещение контрольных символов. Для удобства обнаружения искаженного символа целесообразно размещать контрольные символы на местах, кратных степени 2, т. е. на позициях 1,2,4,8, и т. д. Информационные символы располагаются на оставшихся местах. Поэтому для семиэлементной закодированной комбинации можно записать: m1, m2,k4,m3,k3,k2,k1 (1.3.1.), где k4 — старший (четвертый) разряд исходной кодовой комбинации двоичного кода, подлежащий кодированию; k1 — младший (первый) разряд.

Определение состава контрольных символов. Какой из символов должен стоять на контрольной позиции (1 или 0), выявляют с помощью проверки на четность. Рассмотрим это на примере комбинации (1.3.1.). В таблице 1.3.2. записаны все кодовые комбинации (искл. нулевую) для трехразрядного двоичного кода на все сочетания и рядом справа, сверху вниз проставлены комбинации кода Хэмминга записанные в последовательности (1.3.1.).

Из таблицы 1.3.2. составляют таблицу 1.3.3., в которой записаны символы в трех строках в следующей закономерности.

В первую строку записываются символы, против которых проставлены единицы в первом разряде комбинации двоичного кода в таблице 1.3.2. (m1,k4,k3,k1).

Во вторую строку записываются символы, против которых проставлены единицы во втором разряде комбинации двоичного кода в таблице 1.3.2. (m2,k4,k2,k1).

В третью строку записываются символы, против которых проставлены единицы в третьем разряде комбинации двоичного кода в таблице 1.3.2. (m3,k3,k2,k1).

Состав контрольных символов с помощью проверок определяют следующим образом. Суммируют информационные символы, входящие в каждую строку таблицы 1.3.3.; если сумма единиц в данной строке четная, то значение символа m, входящего в эту строку, равно 0, если нечетная, то 1. По первой строке таблицы 1.3.3. определяют значение символа m1, по второй — m2, по третьей — m3.

Декодирование.

Для проверки правильности комбинации снова используют метод проверки на четность. Если комбинация принята без искажения, то сумма единиц по модулю 2 даст нуль. При искажении какого-либо символа суммирование при проверке может дать единицу. По результату суммирования каждой из проверок составляют двоичное число, указывающее на место искажения. Например, первая и вторая проверки показали наличие искажения, а суммирование при третьей проверке дало нуль. Записываем число 011 = 3, которое означает, что в третьем символе кодовой комбинации, включающей и контрольные символы (счет производится слева направо), возникло искажение, поэтому этот символ нужно исправить на обратный ему, т. е. 1 на 0 или 0 на 1. После этого контрольные символы, стоящие на заранее известных местах, отбрасывают.

1. 4 Пример

Предположим, что нужно передать комбинацию 1101, т. е. k = 4, закодировав ее по Хэммингу.

Согласно таблице 1.3.1. число контрольных символов m=3, и размещаются они на позициях 1,2 и 4, а информационные — на позициях 3,5,6 и 7. Эту последовательность в общем, виде можно записать так:

m1 m2 k4 m3 k3 k2 k1

?? 1? 1 0 1 (1.4.1.)

Для определения контрольных символов заполняем таблицу 1.3.3. значениями из последовательности (1.4.1.). По полученной таблице 1.4.1. производим проверку на четность.

Пример составления таблицы для кода Хэмминга.

Таблица 1.4.1.

Таким образом: m1=1; m2=0; m3=0.

В линию будет послан код: 1 010 101

Предположим, что при передаче помеха исказила один из символов и был принят код 1 010 111. Для нахождения номера ошибки принятого символа снова используют метод проверки на четность по таблице 1.3.3. Для этого запишем:

m1 m2 k4 m3 k3 k2 k1

1 0 1 0 1 1 1

По полученной последовательности символов и по таблице 1.3.3. составляем таблицу 1.4.2. После заполнения этой таблицы сумма символов первой строки оказалась четной (1+1+1+1=0), поэтому для четности справа в первой строке таблицы 1.4.2. приписываем нуль. Сумма символов второй строки равна трем, поэтому для четности добавляем единицу. Для получения четности необходимо приписать единицу также к третьей строке.

Пример декодирования кода Хэмминга.

1111 0

0111 1

0111 1

Таблица 1.4. 2

Все три приписанных символа дали число 110, так как первая проверка производилась по младшим разрядам. Двоичное число 110 означает десятичное число 6. Это значит, что искажение произошло в шестом символе, считая слева на право, и символ 1 нужно исправить на 0. Так как места расположения контрольных символов заранее известны, то после коррекции они выбрасываются и получают переданную кодовую комбинацию, состоящую из одних информационных символов 1101.

1.5 Выводы

Итак, для повышения помехоустойчивости кода необходимо посылать дополнительные контрольные символы, которые увеличивают длину кодовой комбинации, в следствии чего появляются избыточные кодовые комбинации, не используемые непосредственно для передачи информации. Так, семиразрядный код в принципе обеспечивает передачу 27=128 кодовых комбинаций, однако количество информационных символов в семиразрядном коде Хэмминга k=4, т. е. полезных информационных посылок всего Nk=24=16. Остальные 112 кодовых комбинаций из 128 предназначены для обеспечения помехоустойчивости кода и являются запрещенными.

2. Постановка задачи

2.1 Анализ технического задания

Согласно Техническому заданию необходимо построить математическую модель кода Хэмминга с заданным числом сообщений N = 253 и заданной корректирующей способностью d = 3, найти образующую матрицу кода, технически реализовать средства для его декодирования (на уровне принципиальной схемы).

Программа содержит основной алгоритм, позволяющий найти образующую матрицу кода, и средства для ее вывода их в виде таблицы.

Функциональная и принципиальная схемы представляют собой схематическое представление декодера. На примере функциональной схемы поясняется работа декодера, а принципиальная схема представляет собой реальный декодер состоящий из реальных элементов.

2.2 Код Хемминга (12,8)

Построение любого корректирующего кода производится исходя из необходимого числа передаваемых сообщений N.

Из неравенства 2k — 1 N можно определить число информационных разрядов k, необходимое для передачи заданного числа сообщений.

Пользуясь соотношением 2k — n — 1 = n, определяем общее число разрядов кода.

Так как k + m = n, то число контрольных символов определяется по формуле: m = n — k.

Таким образом, получаем при N = 253

k = 8

n = 12

m = 4

Исходный код (12,8) с кодовым расстоянием d = 3 позволяет исправлять одиночные ошибки.

Предположим, что нужно передать комбинацию 10 000 001, т. е. k = 8, закодировав ее по Хэммингу.

Т.к. число контрольных символов m = 4, и размещаются они на позициях 1, 2, 4 и 8, а информационные — на позициях 3, 5, 6, 7, 9, 10, 11 и 12. То эту последовательность, в общем, виде можно записать так:

m1 m2 k8 m3 k7 k6 k5 m4 k4 k3 k2 k1 (2.2.1.)

?? 1? 0 0 0? 0 0 0 1 (2.2.2.)

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

Опознаватель

Символы кода

0 0 0 1

M 1

0 0 1 0

M2

0 0 1 1

K8

0 1 0 0

M4

0 1 0 1

K7

0 1 1 0

K6

0 1 1 1

K5

1 0 0 0

M8

1 0 0 1

K4

1 0 1 0

K3

1 0 1 1

K2

1 1 0 0

K1

Таблица 2.2. 1

По полученной таблице 2.2.1. составляется таблица 2.2.2., по которой производим проверку на четность. Она составляется аналогично таблице 1.3.3.

M1

M2

M3

M4

K8

K8

K7

K4

K7

K6

K6

K3

K5

K5

K2

K2

K4

K3

K1

K1

K2

K2

Таблица 2.2. 2

Для определения контрольных символов заполняем таблицу 2.2.2. значениями из последовательности (2.2.2.). По полученной таблице производим проверку на четность.

M1

M2

M3

M4

1

1

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

Таблица 2.2. 3

Таким образом: m1=1; m2=1; m3=1,m4=1.

В линию будет послан код: 1 1 1 1 0 0 0 1 0 0 0 1

Предположим, что при передаче помеха исказила один из символов и был принят код 1 010 111. Для нахождения номера ошибки принятого символа снова используют метод проверки на четность по таблице 2.2.2. Для этого запишем:

m1 m2 k8 m3 k7 k6 k5 m4 k4 k3 k2 k1 (2.2.3.)

1 1 1 1 0 0 0 1 0 0 0 1 (2.2.4.)

По полученной последовательности символов и по таблице 2.2.2. составляем таблицу 2.2.4. После заполнения этой таблицы сумма символов первой строки оказалась нечетной (1 1 0 0 0 1 = 1), поэтому для четности справа в первой строке таблицы 2.2.4. приписываем единицу. Сумма символов второй строки — четная, поэтому для четности добавляем единицу. Для получения четности необходимо приписать нуль к третьей строке и единицу к четвертой строке.

1 1 0 0 0 1 1

1 1 0 0 0 1 1

1 0 0 0 1 0

1 0 0 1 1 1

Таблица 2.2. 4

Все четыре приписанных символа дали число 1011, так как первая проверка производилась по младшим разрядам. Двоичное число 1011 означает десятичное число 11. Это значит, что искажение произошло в 11 символе, считая слева на право, и символ 1 нужно исправить на 0. Так как места расположения контрольных символов заранее известны, то после коррекции они выбрасываются и получают переданную кодовую комбинацию, состоящую из одних информационных символов 10 000 001.

2.3 Выводы

В этой главе был произведен анализ Техического Задания и рассмотрен код Хэмминга (12,8), полученный из данного задания. Этот код позволяет исправлять одиночные ошибки (т.к. d = 3). Такие коды (с исправлением одиночной ошибки) применяют в том случае, если статистика показывает, что наиболее вероятны одиночные искажения в канале связи. Однако если вероятность искажения двух символов в кодовой комбинации велика, то целесообразно применение кода Хэмминга, позволяющего исправить одиночные ошибки, если была только одиночная ошибка, и, кроме того, обнаружить двойные ошибки, если были две ошибки.

3. Описание разработки программы

3.1 Модульная структура программы

3.2 Спецификация на программные модули

Имя модуля: Kodirovanie;

Имя вызывающего модуля: нет;

Входные данные: k: array [1. 8]of byte — массив информационных разрядов;

m: array [1. 8]of byte — массив проверочных разрядов;

n: array [1. 8]of byte — массив всех разрядов;

Выходные данные: k: array [1. 8]of byte — массив информационных разрядов;

m: array [1. 8]of byte — массив проверочных разрядов;

n: array [1. 8]of byte — массив всех разрядов;

Выполняемые функции: реализация кода Хэмминга;

Особенности: нет.

Имя модуля: GetMenu;

Имя вызывающего модуля: Kodirovanie;

Входные данные: c, cn: byte — позиция курсора;

Выходные данные: men: menu — элемент меню;

n: integer — количество пунктов меню;

col1, col2: byte — основной цвет и цвет фона;

Выполняемые функции: реализация пользовательского интерфейса;

Особенности: нет.

Имя модуля: Coder;

Имя вызывающего модуля: Kodirovanie;

Входные данные: k: array [1. 8]of byte — массив информационных разрядов;

m: array [1. 8]of byte — массив проверочных разрядов;

Выходные данные: n: array [1. 8]of byte — массив всех разрядов;

Выполняемые функции: кодирование принятого сообщения;

Особенности: нет.

Имя модуля: DeCoder;

Имя вызывающего модуля: Kodirovanie;

Входные данные: n: array [1. 8]of byte — массив всех разрядов;

Выходные данные: k: array [1. 8]of byte — массив информационных разрядов;

m: array [1. 8]of byte — массив проверочных разрядов;

Выполняемые функции: декодирование принятого сообщения;

Особенности: нет.

3.3 Организация пользовательского интерфейса

кодирование информационный дискретный матрица

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

После запуска программы на экране появляется меню, содержащее следующие пункты: ЗАДАНИЕ, КОДИРОВАНИЕ, ДЕКОДИРОВАНИЕ, ВЫХОД.

Первый пункт дает общую информацию о данной программе.

Пункт Кодирование и Декодирование выполняют саму суть проекта.

В Кодирование мы задаем информационные символы, кодируем и передаем сообщение. В Декодирование принимаем информацию, раскодироваем сообщение, исправляя его, если надо, и выдаем на экран.

Пункт Выход обеспечивает выход из программы.

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

3.4 Выводы

В этой главе были приведены основные этапы проектирования системы. Представлена модульная структура системы и подробно описаны функции каждого модуля системы. Также в данной главе был описан пользовательский интерфейс системы.

4. Техническая реализация

4.1 Выбор микросхем для реализации принципиальной схемы

Микросхема К155ЛП5

Микросхемы представляют собой 4 двухвходовых логических элемента исключающее ИЛИ. Содержат 104 интегральных элемента. Корпус типа 201. 14−1 масса не более 1 г.

Номинальное напряжение питания: 5В5%.

Выходное напряжение низкого уровня: 0,4 В.

Выходное напряжение высокого уровня: 2,4 В.

Потребляемая статическая мощность на 1 элемент: 65мВт.

Максимальное время фронта и спада входного импульса: 150 нс.

Время задержки распространения при включении: 30 нс.

Микросхема К155ИД3

Микросхемы представляют собой дешифратор-демультикомплексор 4 линии на 16. Содержат 255 интегральных элемента. Корпус типа 201. 14−1 масса не более 1 г.

Номинальное напряжение питания: 5В5%.

Выходное напряжение низкого уровня: 0,4 В.

Выходное напряжение высокого уровня: 2,4 В.

Потребляемая статическая мощность: 294мВт.

Число входов: 4.

Число выходов: 16.

Время задержки распространения при включении: 30 нс.

Время задержки распространения при выключении: 30 нс.

Время дешифрации: 35нс.

Микросхема К155ЛЕ5

Микросхемы представляют собой 6 одноходовых логических инвертора. Содержат 68 интегральных элемента. Корпус типа 201. 14−2 масса не более 1 г.

Номинальное напряжение питания: 5В5%.

Выходное напряжение низкого уровня: 0,4 В.

Выходное напряжение высокого уровня: 2,4 В.

Потребляемая статическая мощность на 1 элемент: 65,2мВт.

Время задержки распространения при включении: 12 нс.

Время задержки распространения при выключении: 9 нс.

Коэффициент разветвления по выходу: 30.

4.2 Описание работы принципиальной схемы

Для реализации декодирующего устройства использовалось всего три типа чипов: микросхема дешифратора К155ИД3, микросхема исключающего ИЛИ К155ЛП5, микросхема инвертора К155ЛН1.

Главный элемент дешифратор. На его входы подаются контрольные разряды, которые реализуются, каждый каскадом на логическом элементе исключающего ИЛИ. На элемент исключающее ИЛИ подаются информационные разряды согласно проверочной таблице для кода Хэмминга — таблица 2.2.2.

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

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

4.3 Выводы

Итак, в данной главе мы рассмотрели принцип работы декодирующего устройства. А также используемые микросхемы для реализации принципиальной схемы. Дали их полную характеристику, привели параметры. Функциональная и принципиальная схемы декодера содержатся в Приложении. Временная диаграмма находится там же.

5. Тестирование системы

5.1 Выбор метода тестирования

Целью тестирования данной программы является выявление ошибок кодирования и проверка работоспособности программы при различных данных.

Если при тестировании не учитывается внутренняя структура программы, а принимается во внимание лишь значения входных и выходных данных, то такое направление называется тестированием программы как «черного ящика». Если при тестировании принимается во внимание также и внутренняя структура программы, то такое направление называется тестированием программы как «белого ящика».

При тестировании программ по методу «белого ящика» тестовые данные для программы формируются с учетом ее внутренней структуры. При этом задача тестирования преобразуется в задачу обеспечения полноты проверки ее внутренней структуры, которая отражает алгоритм функционирования.

Анализируя возможные методы тестирования, целесообразно применить тестирование программы как черного ящика, как наименее трудоемкий и быстрый способ.

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

5.2 Результаты тестирования

При тестировании программы был использован восходящий метод тестирования. С помощью этого метода сначала были протестированны отдельные модули пргограммы, а затем и вся программа.

Программа была протестирована с различными наборами входных данных.

В обычном режиме работа программы была устойчивой. По верно введённым входным данным программа безошибочно вычислила результат.

Результаты тестирования показали устойчивую работу программы во всех режимах. Отклонений от Технического Задания и спецификации не обнаружено.

5.3 Выводы

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

Заключение

Составленная программа написана в соответствии с техническим заданием и позволяет проиллюстрировать процесс декодирования кода Хэмминга.

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

Были разработаны функциональная и принципиальная схемы кодера. После проверки их работы было сделано заключение в правильности работы приведенных схем.

Список использованной литературы

Тутевич В. Н. Телемеханика: Учеб. пособие для студентов вузов спец. «Автоматика и телемеханика». -- 2_е издание., перераб. и доп. -- М.: Высш. шк., 1985. -- 423 с., ил.

Игнатов В. А. Теория информации и передачи сигналов: Учебник для вузов. -- М.: Сов. радио, 1979. -- 280 с., ил.

Приложение 1. «Документированный текст программы»

Program KODIROVANIE;

Uses Crt, Graph, WinDos;

type menu=array[1. 4] of record

comment: string[30];

x, y: byte;

end;

const d=3;

ns=12;

ks=8;

ms=4;

var l, prs, kch: word;

x, pos, ps: byte;

men: menu;

k: array [1. 8] of byte;

m: array [1. 4] of byte;

n: array [1. 12] of byte;

dc: array [1. 4] of byte;

s: string;

mdop: byte;

f: boolean;

Procedure Cursor (show: boolean);

var reg: tregisters;

Begin

reg. ah:=1;

if show then reg. cx:=1286 else reg. cx:=256;

intr ($ 10,reg)

End;

Procedure WriteXY (x, y: byte;s:string);

GotoXY (x, y);

Write (s);

End;

Procedure Clear (x1,y1,x2,y2,col: byte;ch:char);

var x, y: byte;

Begin

TextAttr: =col;

for y: =y1 to y2 do

for x: =x1 to x2 do

WriteXY (x, y, ch);

End;

Procedure Ramka (x1,y1,x2,y2: byte);

var x, y: byte;

Begin

WriteXY (x1,y1,'Й');

WriteXY (x2,y1,'"');

WriteXY (x1,y2,'И');

WriteXY (x2,y2,'ј');

if (x2-x1)>1 then

for x: =x1+1 to x2−1 do

begin

WriteXY (x, y1,'Н');

WriteXY (x, y2,'Н');

end;

if (y2-y1)>1 then

for y: =y1+1 to y2−1 do

begin

WriteXY (x1,y,'є');

WriteXY (x2,y,'є');

end;

End;

Function Soob (s: string): char;

var cols: byte;

Begin

cols: =TextAttr;

TextAttr: =7*16;

WriteXY ((80-length (s)) div 2,25,s);

TextAttr: =cols;

End;

Procedure GetMenu (M: Menu;n, col1, col2:byte; var c: byte);

var

i, cn: byte;

sym: char;

Begin

cn: =c;

Soob (''#27#26' - Перемещение; Enter — Выбор. ');

for i: =1 to n do

begin

if i=c then TextAttr: =col2 else TextAttr: =col1;

with M[i] do WriteXY (x, y, comment)

end;

Repeat

if c< >cn then

begin

TextAttr: =col1;

with M[cn] do WriteXY (x, y, comment);

TextAttr: =col2;

with M[c] do WriteXY (x, y, comment);

cn: =c

end;

sym: =ReadKey;

if sym=#0 then sym: =ReadKey;

case sym of

#27: begin c: =0; break end;

#13: break;

'M','P': c: =c+1;

'K','H': c: =c-1;

end;

if c=0 then c: =n;

if c=n+1 then c: =1;

if c=1 then

Until false;

End;

Procedure Zadanie;

Begin

Clear (21,9,62,17,7*16,' ');

Ramka (21,9,62,17);

GotoXY (35,9);

Writeln ('О Программе: ');

Window (22,10,61,18);

Writeln (' Курсовая работа по');

Writeln (' передачи информации. ');

Writeln (' Группа: АСб-411. ');

Writeln (' Студент: Марченко М.П.);

Writeln (' Преподаватель: Панина О. Л. ');

Writeln (' Задание реализация кода ');

Writeln (' d=3; k=8; Декодер');

Window (1,1,80,25);

Clear (1,25,79,25,7*16,' ');

Soob ('Нажмите любую клавишу');

ReadKey;

End;

Procedure NSymvol;

var i: integer;

Begin

For i: =1 to 2 do

n[i]: =m[i];

n[4]: =m[3];

n[8]: =m[4];

n[3]: =k[8];

For i: =5 to 7 do

n[i]: =k[12-i];

For i: =9 to 12 do

n[i]: =k[13-i];

End;

Procedure KSymvol;

var i: integer;

Begin

k[8]: =n[3];

For i: =5 to 7 do

k[12-i]: =n[i];

For i: =9 to 12 do

k[13-i]: =n[i];

End;

Procedure MSymvol;

Begin

m[1]: =n[1];

m[2]: =n[2];

m[3]: =n[4];

m[4]: =n[8];

End;

Procedure Prs_v_k;

begin

If prs=3 then kch: =8;

If prs=5 then kch: =7;

If prs=6 then kch: =6;

If prs=7 then kch: =5;

If prs=9 then kch: =4;

If prs=10 then kch: =3;

If prs=11 then kch: =2;

If prs=12 then kch: =1;

end;

Procedure Dopol;

var i: integer;

ch: word;

Begin

ch: =0;

For i: =1 to 12 do

ch: =ch+n[i];

If (ch=0) or (ch=2) or (ch=4) or (ch=6) or (ch=8) or (ch=10) or (ch=12) then

mdop: =0

else mdop: =1;

End;

Procedure Cod;

var mp: integer;

Begin

mp: =k[8]+k[7]+k[5]+k[4]+k[2];

If (mp=0) or (mp=2) or (mp=4) then

m[1]: =0

else m[1]: =1;

mp: =k[8]+k[6]+k[5]+k[3]+k[2];

If (mp=0) or (mp=2) or (mp=4) then

m[2]: =0

else m[2]: =1;

mp: =k[7]+k[6]+k[5]+k[1];

If (mp=0) or (mp=2) or (mp=4) then

m[3]: =0

else m[3]: =1;

mp: =k[4]+k[3]+k[2]+k[1];

If (mp=0) or (mp=2) or (mp=4) then

m[4]: =0

else m[4]: =1

End;

Procedure Avtomat;

var i: integer;

kp: array [1. 8] of byte;

Begin

Clear (21,9,63,17,7*16,' ');

Ramka (21,9,63,17);

GotoXY (36,9);

Write (' Кодирование ');

GotoXY (32,10);

Write ('Передаваемое сообщение');

GotoXY (35,11);

Write ('Ст. ');

GotoXY (48,11);

Write ('Мл. ');

Clear (39,11,46,11,2*16,'. ');

Randomize;

For i: =1 to 8 do

begin

k[i]: =random (2);

end;

For i: =1 to 8 do

begin

GotoXY (38+i, 11);

Write (k[i]);

end;

For i: =1 to 8 do

kp[i]: =k[i];

For i: =1 to 8 do

k[i]: =kp[9-i];

GotoXY (33,13);

TextAttr: =7*16;

Write ('Закодируем сообщение');

GotoXY (25,14);

Write ('m1 m2 k8 m3 k7 k6 k5 m4 k4 k3 k2 k1');

Cod;

NSymvol;

TextAttr: =2*16;

For i: =1 to 12 do

begin

GotoXY (22+3*i, 15);

Write (' ');

Write (n[i]);

end;

ReadKey;

End;

Procedure Ruch;

var i, code: integer;

kp: array [1. 8] of byte;

Begin

Clear (21,9,63,17,7*16,' ');

Ramka (21,9,63,17);

GotoXY (36,9);

Write (' Кодирование ');

GotoXY (32,10);

Write ('Передаваемое сообщение');

GotoXY (35,11);

Write ('Ст. ');

GotoXY (48,11);

Write ('Мл. ');

Clear (39,11,46,11,2*16,'. ');

For i: =1 to 8 do

begin

GotoXY (38+i, 11);

Repeat

Cursor (true);

s: =Readkey;

val (s, k[i], code);

If (code< >0) or (k[i]< 0) or (k[i]> 1) then

GotoXY (38+i, 11)

Until (code=0) and (k[i]> =0) and (k[i]< =1);

Write (k[i]);

end;

For i: =1 to 8 do

kp[i]: =k[i];

For i: =1 to 8 do

k[i]: =kp[9-i];

Cursor (false);

GotoXY (33,13);

TextAttr: =7*16;

Write ('Закодируем сообщение');

GotoXY (25,14);

Write ('m1 m2 k8 m3 k7 k6 k5 m4 k4 k3 k2 k1');

Cod;

NSymvol;

TextAttr: =2*16;

For i: =1 to 12 do

begin

GotoXY (22+3*i, 15);

Write (' ');

Write (n[i]);

end;

ReadKey;

End;

Procedure Coder (x: byte);

var pos: byte;

men: menu;

Begin

l: =1;

pos: =1;

men[1]. comment:=' Сгенерировать код '; men[1]. x:=x+1; men[1]. y:=3;

men[2]. comment:=' Задать в ручную '; men[2]. x:=x+1; men[2]. y:=4;

Clear (x, 2, x+length (men[1]. comment)+1,5,7*16,' ');

Ramka (x, 2, x+length (men[1]. comment)+1,5);

GetMenu (men, 2,7*16,16+5*6,pos);

If pos=0 then exit;

case pos of

1: Avtomat;

2: Ruch;

end;

End;

Procedure Oshibka;

Begin

Clear (21,10,64,13,7*16,' ');

TextBackGround (2*26);

Ramka (21,10,64,13);

GotoXY (22,11);

TextAttr: =8*24;

Writeln (' Для декодирования полученного сообщения ');

GotoXY (22,12);

Writeln (' необходимо его сначала! ');

Clear (1,25,79,25,7*16,' ');

Soob ('Нажмите любую клавишу');

ReadKey;

End;

Procedure Decod;

var ch: word;

i, mp: integer;

Begin

ch: =0;

For i: =1 to 12 do

ch: =ch+n[i];

ch: =ch+mdop;

If (ch=0) or (ch=2) or (ch=4) or (ch=6) or (ch=8) or (ch=10) or (ch=12) then

f: =true

else

begin

f: =false;

KSymvol;

MSymvol;

mp: =k[8]+k[7]+k[5]+k[4]+k[2]+m[1];

If (mp=0) or (mp=2) or (mp=4) or (mp=6) then

dc[4]: =0

else dc[4]: =1;

mp: =k[8]+k[6]+k[5]+k[3]+k[2]+m[2];

If (mp=0) or (mp=2) or (mp=4) or (mp=6) then

dc[3]: =0

else dc[3]: =1;

mp: =k[7]+k[6]+k[5]+k[1]+m[3];

If (mp=0) or (mp=2) or (mp=4) then

dc[2]: =0

else dc[2]: =1;

mp: =k[4]+k[3]+k[2]+k[1]+m[4];

If (mp=0) or (mp=2) or (mp=4) then

dc[1]: =0

else dc[1]: =1;

prs: =0;

If dc[1]=1 then

prs: =prs+8;

If dc[2]=1 then

prs: =prs+4;

If dc[3]=1 then

prs: =prs+2;

If dc[4]=1 then

prs: =prs+1;

end;

End;

Procedure DeCoder;

var i, code: integer;

mp, np: byte;

Begin

prs: =0;

If l< >1 then

Oshibka

else

begin

Dopol;

Clear (21,9,63,17,7*16,' ');

Ramka (21,9,63,17);

GotoXY (35,9);

Write (' Декодирование ');

GotoXY (34,10);

Write ('Прринятое сообщение');

GotoXY (25,11);

Write ('m1 m2 k8 m3 k7 k6 k5 m4 k4 k3 k2 k1');

TextAttr: =2*16;

For i: =1 to 12 do

begin

GotoXY (22+3*i, 12);

Write (' ');

Write (n[i]);

end;

For i: =1 to 12 do

begin

mp: =n[i];

GotoXY (23+i*3,12);

Repeat

Cursor (true);

s: =Readkey;

val (s, n[i], code);

Cursor (false);

If (code< >0) or (n[i]< 0) or (n[i]> 1) then

GotoXY (23+i*3,12)

Until (code=0) and (n[i]> =0) and (n[i]< =1);

Write (n[i]);

If n[i]< >mp then break;

end;

TextAttr: =7*16;

GotoXY (32,14);

Write ('Раскодируем сообщение');

DeCod;

If f=true then

begin

GotoXY (37,15);

Write ('Ошибки нет');

GotoXY (35,16);

Write ('Ст. ');

GotoXY (48,16);

Write ('Мл. ');

TextAttr: =2*16;

For i: =1 to 8 do

begin

GotoXY (37+i, 16);

Write (k[9-i]);

end;

end;

If f=false then

begin

If (prs=1) or (prs=2) or (prs=4) or (prs=8) then

begin

GotoXY (29,15);

Write ('Ошибка в контрольном разряде');

GotoXY (35,16);

Write ('Ст. ');

GotoXY (48,16);

Write ('Мл. ');

TextAttr: =2*16;

For i: =1 to 8 do

begin

GotoXY (37+i, 16);

Write (k[9-i]);

end;

end

else

begin

prs_v_k;

GotoXY (33,15);

Write ('Ошибка в разряде');

GotoXy (42,15);

Write (kch);

GotoXY (35,16);

Write ('Ст. ');

GotoXY (48,16);

Write ('Мл. ');

np: =n[prs];

If np=0 then

n[prs]: =1

else

n[prs]: =0;

KSymvol;

TextAttr: =2*16;

For i: =1 to 8 do

begin

GotoXY (37+i, 16);

Write (k[9-i]);

end;

end;

end;

end;

ReadKey;

End;

BEGIN

Cursor (false);

x: =1; pos: =1;

men[1]. comment:=' Задание '; men[1]. x:=x; men[1]. y:=1;

x: =x+length (men[1]. comment)+1;

men[2]. comment:=' Кодирование '; men[2]. x:=x; men[2]. y:=1;

x: =x+length (men[2]. comment)+1;

men[3]. comment:=' Декодирование '; men[3]. x:=x; men[3]. y:=1;

x: =x+length (men[3]. comment)+1;

men[4]. comment:=' Выход '; men[4]. x:=x; men[4]. y:=1;

Repeat

Clear (1,2,80,25,113,'°');

Clear (1,1,80,1,7*16,' ');

ps: =pos;

GetMenu (men, 4,7*16,16+5*6,pos);

case pos of

1: Zadanie;

2: Coder (men[2]. x);

3: DeCoder;

4: Break;

end;

if pos=0 then pos: =ps;

Until false;

Textattr: =7;

ClrScr;

END.

Приложение 2. «Образцы выходных экранных форм»

Приложение 3. «Функциональная схема декодера»

Вход Выход

М1, М2, М3, М4 — каскады логических элементов исключающего ИЛИ для нахождения контрольных разрядов.

DC — дешифратор.

СК — схема коррекции.

ПоказатьСвернуть
Заполнить форму текущей работой