Кодирования информации
Кодирование и декодирование, преобразование дискретного сообщения в дискретный сигнал. Построение математической модели корректирующего кода. Образующая матрица информационного кода. Модульная структура программы. Спецификация на программные модули.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.11.2014 |
Размер файла | 98,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Сибирская государственная автомобильно-дорожная академия
(СибАДИ)»
Факультет Информационные системы в управлении
Специальность Комплексное обеспечение информационной безопасности автоматизированных систем
Кафедра Информационная безопасность
Пояснительная записка к курсовому проекту (работе)
по дисциплине Теория информации
Название работы
Кодирования информации
Содержание
Техническое задание
Введение
Теоретическое введение
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.
В линию будет послан код: 1010101
Предположим, что при передаче помеха исказила один из символов и был принят код 1010111. Для нахождения номера ошибки принятого символа снова используют метод проверки на четность по таблице 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 Выводы
Итак, для повышения помехоустойчивости кода необходимо посылать дополнительные контрольные символы, которые увеличивают длину кодовой комбинации, в следствии чего появляются избыточные кодовые комбинации, не используемые непосредственно для передачи информации. Так, семиразрядный код в принципе обеспечивает передачу 2^7=128 кодовых комбинаций, однако количество информационных символов в семиразрядном коде Хэмминга k=4, т.е. полезных информационных посылок всего Nk=2^4=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 позволяет исправлять одиночные ошибки.
Предположим, что нужно передать комбинацию 10000001, т.е. 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
Предположим, что при передаче помеха исказила один из символов и был принят код 1010111. Для нахождения номера ошибки принятого символа снова используют метод проверки на четность по таблице 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. Так как места расположения контрольных символов заранее известны, то после коррекции они выбрасываются и получают переданную кодовую комбинацию, состоящую из одних информационных символов 10000001.
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 Выбор микросхем для реализации принципиальной схемы
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Микросхема К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 - дешифратор.
СК - схема коррекции.
Размещено на Allbest.ru
Подобные документы
Определение понятий кода, кодирования и декодирования, виды, правила и задачи кодирования. Применение теорем Шеннона в теории связи. Классификация, параметры и построение помехоустойчивых кодов. Методы передачи кодов. Пример построения кода Шеннона.
курсовая работа [212,6 K], добавлен 25.02.2009Выбор и обоснование основных параметров кода. Коды Рида-Маллера первого порядка. Кодирование информации путем умножения исходного информационного сообщения на порождающую матрицу. Разработка структурной и функциональной схем кодера Рида-Маллера.
курсовая работа [555,2 K], добавлен 24.03.2013Генерация порождающего полинома для циклического кода. Преобразование порождающей матрицы в проверочную и обратно. Расчет кодового расстояния для линейного блокового кода. Генерация таблицы зависимости векторов ошибок от синдрома для двоичных кодов.
доклад [12,6 K], добавлен 11.11.2010Сущность линейного и двухмерного кодирования. Схема проверки подлинности штрих-кода. Анализ способов кодирования информации. Расчет контрольной цифры. Штриховое кодирование как эффективное направление автоматизации процесса ввода и обработки информации.
презентация [1,1 M], добавлен 05.10.2014Непрерывная и дискретная информация. Кодирование как процесс представления информации в виде кода. Особенности процедуры дискретизации непрерывного сообщения. Позиционные и непозиционные системы счисления. Представление информации в двоичном коде.
реферат [117,3 K], добавлен 11.06.2010Кодирование как процесс представления информации в виде кода. Кодирование звуковой и видеоинформации, характеристика процесса формирования определенного представления информации. Особенности универсального дружественного интерфейса для пользователей.
контрольная работа [20,3 K], добавлен 22.04.2011Описание и особенности некоторых алгоритмов архивации. Построение кода Хаффмана. Динамический алгоритм построения кода Хаффмана. Обратное восстановление текста. Способы двухступенчатого кодирования информации. Практическая реализация алгоритма LZ77.
курсовая работа [51,7 K], добавлен 24.12.2012Содержание и особенности этапов синтеза дискретного автомата. Граф переходов-выходов автомата Мура, кодирование входных и выходных сигналов. Построение функциональной схемы автомата Мура на RS–триггерах и элементах И-НЕ в программе Electronic WorkBench.
курсовая работа [964,2 K], добавлен 20.07.2015Определение среднего количества информации. Зависимость между символами матрицы условных вероятностей. Кодирование методом Шеннона–Фано. Пропускная способность канала связи. Эффективность кодирования сообщений методом Д. Хаффмана, характеристика кода.
контрольная работа [94,6 K], добавлен 04.05.2015Применение коды Файра при необходимости последовательной обработки информации. Синтез кодера и декодирующего устройства. Разработка структурной и принципиальной схемы кодера. Устранение временной задержки при декодировании. Выбор и обоснование кода Файра.
курсовая работа [401,6 K], добавлен 21.03.2013