Далее в следующие 14 тактов происходит отправка исправленного сообщения на выход в приемник 01100000010111 (OUT) и одновременное чтение следующего сообщения.
3. И теперь самый «плохой» случай, когда искажения более, чем в одном символе, то есть сообщение нельзя будет исправить. Пусть на вход поступило следующее сообщение: 11000000010111
До 28 такта всё аналогично пункту 2, за исключением того, что не появляются сигналы NXT, ERCOR и соответственно F_NXT, F_ERCOR. На 28 такте происходит сброс счетчика, очистка памяти CLRN_OUT = 0 и чтение сообщения заново (так как на решатель кодера не приходит импульс F_NXT).
Соответственно далее всё происходит подобным образом. Более подробно работа решателя приведена в приложении на временных диаграммах.
В данной главе представлено описание работы кодирующего, декодирующего и решательных устройств, их функциональное изображение. Приведено их описание, а также представлен набор микросхем, используемых для реализации принципиальных схемы кодера с решателем и декодера с решателем.
Для решения задачи был применен наиболее простой подход. Был взят наиболее простой язык высокого уровня Паскаль.
Для данной разработки в программе должны содержаться массивы для хранения требуемых для работы переменных:
Для конкретной реализации в программе должны содержаться массивы для хранения требуемых для работы алгоритма переменных: CODE – массив разрядов, входящих в сообщение, должен вводиться пользователем (9 разрядов – информационные). И массив G_CODE для закодированного сообщения (9 разрядов – информационные, 5 разрядов – проверочные).
Проект также должен содержать справку об авторе, о назначении данной программы, а также о том, как с ней работать.
Входными данными является код, который вводит пользователь. Код вводится следующим образом: имеется 9 символов, по умолчанию они нули. С помощью курсорных клавиш перемещается курсор по символам и при нажатии клавиши пробел значение символа меняется на противоположное, то есть 1 на 0, а 0 на 1.
Результаты приведены в виде закодированного сообщения с помощью циклического кода (14,9).
Программа выполняет следующие функции:
1. Кодирование кодовой последовательности с помощью циклического кода (14,9);
2. Вывод закодированного сообщения (информационные и контрольные символы);
3. Возможность пользователя «искажать» закодированное сообщение для дальнейшего декодирования;
4. Декодирование закодированного сообщения и исправление ошибок в искаженном сообщении.
Итак, входные данные:
Code:Array[1..k]Of Boolean; – массив начальной кодовой комбинации;
Выходные данные:
G_Code:Array[1..n]Of Byte; – закодированная кодовая комбинация;
Константы:
a:Array[1..k,1..n]Of Byte=((0,0,0,0,0,0,0,0,1,0,0,1,1,1),
(0,0,0,0,0,0,0,1,0,0,1,1,1,0),
(0,0,0,0,0,0,1,0,0,1,1,1,0,0),
(0,0,0,0,0,1,0,0,0,1,1,1,1,1),
(0,0,0,0,1,0,0,0,0,1,1,0,0,1),
(0,0,0,1,0,0,0,0,0,1,0,1,0,1),
(0,0,1,0,0,0,0,0,0,0,1,1,0,1),
(0,1,0,0,0,0,0,0,0,1,1,0,1,0),
(1,0,0,0,0,0,0,0,0,1,0,0,1,1)); – образующая матрица;
stepen=6; – степень образующего многочлена=6, т.к. порядковый номер степени начинаем отсчитывать не с 0, а с 1;
Polynom:Array[1..stepen]Of byte=(1,0,0,1,1,1); – образующиймногочлен.
Минимальные:
Процессор: 80486-33
Память: 4 MbRAM
Видеопамять: 512KbDRAM
Свободное место на жестком магнитном диске: 1 Mb
Операционная система: DOS 3.30 или выше.
Программа соответствует требованиям технического задания. Она успешно кодирует, декодирует и исправляет введенную двоичную последовательность при помощи кодов. Созданный удобный дружественный интерфейс – понятен и прост. Кроме того комментарии позволяют быстро разобраться в программе и при необходимости внести в нее поправки.
В программе широко использовались элементы технологии TOP-DOWN.
Процедуры написанные для данной программы могут быть в дальнейшем использоваться в других программах.
Тестирование – это процесс, посредством которого проверяется правильность программы. Его цель – показать, что программа правильно работает в соответствии с проектными спецификациями.
При тестировании проверялась работа каждого модуля в отдельности, а также всей программы в целом. Было проведено несколько тестирований, после каждого из которых проводилась доработка программы и устранение ошибок. Тестирование проводилось из расчета на то, программой могут пользоваться неопытные пользователи, которые непредсказуемы в работе с программой.
На первом этапе тестирования вводилось несколько новых данных, и с ними проводились различные операции. Результаты этого тестирования показали правильную работу модуля, обеспечивающего ввод данных (проверялась защита от некорректного ввода и запоминание данных в память),
Результаты тестирования показали устойчивую работу программы .
Тестирование показало, что программа полностью соответствует техническому заданию. Верно разработаны алгоритмы и реализованы процедуры кодирования, декодирования и исправления ошибок.
При тестировании мы получили следующие примеры выполнения программы и алгоритма, что подтверждает правильность задания программы (в данном случае применялся метод черного ящика):
Приведем тестовую таблицу с введенными кодами, закодированными последовательностями, то есть покажем соответствие между входными и выходными данными.
Таблица 4.1. Тестирование программы
Введенный код | Код с проверочнымисимволами | Передаваемый код | Декодированный код |
101010101 | 10101010111100 | 11101010111100 | 10101010111100 |
010000001 | 01000000111101 | 01000000111001 | 01000000111101 |
010100000 | 01010000001111 | 01010000000011 | невозможнодекодировать |
111111110 | 11111111000101 | 11111111000101 | 11111111000101 |
После запуска программы на экране появляется меню, содержащее 4 пункта:
1. Кодировка
2. Помощь
3. О программе
4. Выход
После активации пункта номер 1 открывается окно, отображающее процессы кодирования и декодирования.
Изменение кода происходит с помощью курсорных клавиш и клавиши пробел. Нажатием Enter пользователь подтверждает введенную кодовую комбинацию. Далее отображается закодированное сообщение. Его можно «искажать» по усмотрению пользователя. Дальнейшее нажатие клавиши Enter приведет к декодированию сообщения, если это возможно, в противном случае выводится соответствующее сообщение.
Написанная программа полностью соответствует ТЗ, правильно кодирует и декодирует циклический код (14,9), а также исправляет ошибки.
В результате проделанной работы была построена математическая модель помехозащищенного циклического кода (14,9), который кодирует информацию так, что при приеме может быть обнаружено две ошибки и одна из них исправлена. Данный код кодирует передаваемое сообщение из 9 бит, количество различных сообщений – более 256 (согласно ТЗ).
Математическая модель данного кода представляет собой программу, написанную с помощью языка BorlandPascal 7.0. Составленная программа работает в соответствии с техническим заданием и позволяет кодировать и декодировать вводимые сообщения.
Также в данной работе были разработаны структурная схема передачи данных с решающей обратной связью, функциональные и принципиальные схемы кодера и декодера с решателями в соответствии с техническим заданием.
Полное описание проведенной работы с пояснительными рисунками, таблицами и различными расчетами содержатся в данной расчетно-пояснительной записке. Графическая часть записки – структурная, функиональная и принципиальная схемы – выполнена в соответствии с требованиями ЕСКД и вынесены в приложение. А также к расчетно-пояснительной записке прилагаются документированный текст программы, перечень элементов, используемых для построения принципиальных схем, текст программы решателя декодера, написанный на языке VHDL и техническое задание.
Также было проведено моделирование работы кодера, декодера и решателей на программе MAX+plusII, где были получены соответствующие временные диаграммы, которые также вынесены в приложение.
На основании вышеизложенного материала можно сделать вывод, что задача, поставленная в техническом задании, – выполнена.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY dec5 IS
PORT
(R1, R2, R3, R4, R5: IN STD_LOGIC;
ERCOR, NXT: OUT STD_LOGIC);
END dec5;
ARCHITECTURE decoder5 OF dec5 IS
BEGIN
process (R1, R2, R3, R4, R5)
begin
if (R1='0' and R2='0' and R3='0' and R4='0' and R5='0') then
ERCOR<='0';
NXT<='1';
elsif (R1='1' and R2='0' and R3='0' and R4='0' and R5='0') then
ERCOR<='1';