close

Вход

Забыли?

вход по аккаунту

?

Пояснительная Записка (6)

код для вставкиСкачать
Содержание
Введение ................................................................................................................... 2
1. Анализ способов построения СПД .................................................................... 3
1.1 Классификация СПД ................................................................................. 3
1.2 Способы передачи данных и методы фазирования ............................... 4
1.3 Передача алфавитно-цифровой информации ......................................... 7
1.4 Постановка задачи ..................................................................................... 9
1.5 Вывод к главе 1 ........................................................................................ 11
2. Расчет параметров и характеристик ................................................................ 12
2.1 Определение эффективно передаваемой полосы частот, оптимальной
скорости передачи. ............................................................................................ 12
2.2 Выбор вида модуляции ........................................................................... 16
2.3 Выбор формата сообщения и расчёт среднего времени запаздывания
информации ........................................................................................................ 16
2.4 Выводы к главе 2 ..................................................................................... 20
3. Разработка структурных схем и алгоритмов функционирования СПД ...... 21
3.1 Разработка структурной схемы передающего устройства .................. 21
3.2 Алгоритм функционирования передающего устройства .................... 22
3.3 Разработка структурной схемы приемного устройства ...................... 25
3.4 Алгоритм функционирования приёмного устройства......................... 26
3.5 Синтез схем кодирующего и декодирующего устройств ................... 28
3.6 Выводы к главе 3 ..................................................................................... 29
4. Разработка кодирующего и декодирующего устройства.............................. 30
4.1 Описание программы .............................................................................. 30
4.2 Тестирование программной реализации ............................................... 41
4.3 Выводы к главе 4 ..................................................................................... 44
Заключение ............................................................................................................ 46
Приложение A (обязательное) Список сокращений ......................................... 47
Приложение Б (обязательное) Листинг программы .......................................... 48
Приложение B (справочное) Список литературы.............................................. 73
ТПЖА.230201.032.026 ПЗ
Изм. Лит
Разработ.
Проверил
Н. контр.
Утв.
№ документа
Казакова С.И.
Бармин И.Н.
Подпись
Дата
Система сбора и
передачи информации.
Пояснительная записка
Литера
Лист
1
Листов
73
Кафедра АТ
Группа ИСУ-32
Введение
Современное общество является информационным обществом. В нём
главной ценностью является информация. Большинство людей в
информационном обществе занимаются сбором, обработкой, хранением,
редактированием, передачей информации различного вида, различной
природы и различного объёма. Передача информации имеет особый смысл с
учётом темпа жизни. Со временем на передачу информации накладываются
всё более жёсткие условия. В соответствии с условиями нужно создавать
необходимые системы передачи данных (СПД).
Современные системы телемеханики лучше защищены от помех за
счет более совершенных кодов, а сжатие данных позволяет увеличить объем
передаваемой информации по каналам связи.
Целью выполнения данного курсового проекта является закрепление
знаний, полученных при изучении курса «Узлы устройств обработки и
передачи данных», получение навыков расчета и проектирования различных
узлов системы передачи данных.
В первой главе курсового проекта приводится классификация СПД и
информация о способах передачи данных и методах фазирования,
формулируется цель работы и задача, которую нужно решить.
Во второй главе производится определение эффективно передаваемой
полосы частот, расчёт оптимальной скорости модуляции, выбор формата
сообщения при передаче данных и расчет среднего времени запаздывания
информации.
В третьей главе разрабатываются структурные схемы и алгоритмы
функционирования СПД: структурные схемы передающего устройства и
приемного устройства, алгоритмы функционирования передающего и
приемного устройства, схемы кодирующего и декодирующего устройств для
заданного образующего полинома.
В четвертой главе описана программная реализация кодирующего и
декодирующего устройств.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
2
1. Анализ способов построения СПД
1.1 Классификация СПД
Классифицировать СПД можно по различным признакам [1]:
1.По выполняемым функциям:
1) Система измерения — система, осуществляющие передачу
непрерывных
измеряемых
величин.
Информация
передается
с
контролируемого пункта на пункт управления. Принятые данные могут
вводиться в ЭВМ и представляться диспетчеру для визуальных наблюдений
на цифровых индикаторах и стрелочных приборах, а также регистрироваться
специальными приборами.
2) Система сигнализации — система, осуществляющая передачу
различных дискретных величин, которые могут вводиться в ЭВМ или
сообщать диспетчеру о состоянии контролируемых объектов с помощью
звуковой и световой сигнализации.
3) Система управления — система, осуществляющая передачу
информации в виде команд на включение или отключение различных
механизмов. Эти команды или посылаются диспетчером с пункта
управления, или подаются с ЭВМ на изменение установок в регуляторах.
При этом, если объекты управления находятся вблизи диспетчера, необходимость в обратной сигнализации отпадает: диспетчер визуально наблюдает за
исполнением посланных команд.
4) Система управления и сигнализации — система,
позволяющая передавать команды с пункта управления на контролируемый
пункт и получать известительную сигнализацию об исполнении команды,
посылаемой
контролируемым пунктом
на
пункт управления,
и
сигнализацию об изменении состояния объекта.
5) Система измерения и сигнализации — система, передающая
только известительную информацию с контролируемого пункта на пункт
управления. В такой системе возможна и передача производственно-статистической информации.
2. По характеру используемой линии связи. Линия связи - физическая
среда, по которой передаются сигналы. Для передачи информации могут
быть использованы следующие линии связи:
1) проводные;
2) электроснабжения;
3) световодные;
4) радиотракт.
В системах телемеханики передается на дальние расстояния большое
количество сообщений от многих источников или ко многим приемникам. По
одной линии связи передается много сообщений одновременно. Это
достигается применением так называемых каналов связи. Канал связи –
совокупность технических средств, обеспечивающих независимую передачу
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
3
сообщений по линии связи. В настоящее время понятие канала связи
расширилось, и в него часто включают характеристики передаваемых
сообщений. Применяются такие термины, как телеграфный, телефонный или
телемеханический канал. Каждый такой канал характеризуется определенной
полосой частот, необходимой для неискаженной передачи данного типа
сообщений.
3. По расположению управляемых объектов:
1) Система для сосредоточенных объектов — система, в которой
имеется один пункт управления и один контролируемый пункт.
2) Система для рассредоточенных объектов — система, в которой
есть один пункт управления и несколько контролируемых пунктов. Они в
свою очередь классифицируются по типу структуры телемеханической сети
(телемеханическая сеть – совокупность устройств телемеханики и
объединяющих их каналов связи):
- Многоточечная структура телемеханической сети — структура
сети, в которой два устройства (или более) контролируемых пунктов
соединяются каналами связи с устройством на пункте управления.
- Цепочечная структура сети — многоточечная структура сети, в
которой устройства контролируемых пунктов соединены общим каналом
связи с устройством пункта управления.
- Радиальная структура сети — многоточечная структура сети, в
которой устройство на пункте управления соединено отдельным каналом
связи с каждым устройством контролируемого пункта.
- Радиально-цепочечная структура сети — комбинация из
радиальной и цепочечной структур сети с использованием устройства на
пункте управления.
- Кольцевая структура сети — цепочечная структура сети, в
которой канал связи образует кольцо и пункт управления, при этом может
быть связан с каждым контролируемым пунктом двумя различными путями.
- Древовидная структура сети — радиально-цепочечная структура
сети, строящаяся по принципы формирования дерева.
1.2 Способы передачи данных и методы фазирования
Для передачи информации необходимо использовать такой физический
процесс, который мог бы, во-первых, распространяться по линии связи или
по радиоканалу и, во-вторых, изменять свои параметры. В телемеханике в
качестве переносчиков информации обычно используют электромагнитные
колебания в виде переменного тока или импульсов. Передача информации
осуществляется по каналам связи, которые делят на три типа: симплексный,
дуплексный и полудуплексный.
В симплексных (односторонних) устройствах повышение верности
может быть достигнуто тремя способами: путем многократного повторения
символов; одновременной передачей одной и той же информации по
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
4
нескольким параллельным каналам; применением кодов, исправляющих
ошибки.
Многократное повторение является наиболее простым способом
повышения верности, который состоит в том, что передатчик посылает в
канал нечетное число раз одну и ту же информацию, а на приемной стороне
происходит сравнение между собой одноименных кодовых комбинаций
(либо одноименных двоичных разрядов). Потребителю выдается тот символ
(или бит), который был принят большее число раз (мажоритарный метод).
Однако при выборе такого способа защиты следует иметь в виду, что
избыточность информации растет пропорционально количеству повторений
одних и тех же символов, аналогично увеличиваются и затраты времени на
передачу массива.
Способ одновременной передачи по нескольким каналам по
помехоустойчивости эквивалентен способу многократной передачи. Он
предусматривает наличие нечетного количества каналов, по которым
передаются одни и те же кодовые последовательности. На приеме
используется мажоритарный прием. Основное требование таких систем:
наличие параллельных каналов с независимыми ошибками. Недостатком
способа одновременной передачи является резкое повышение стоимости
СПД за счет использования для передачи сообщений от одного источника
нескольких каналов.
Наибольшей эффективностью в симплексных СПД обладает способ
защиты от ошибок, основанный на использовании кодов с исправлением
ошибок. В таких системах передаваемый блок кроме информационных
единичных элементов, полученных от источника информации, содержит и
проверочные биты, которые формируются кодирующим устройством на
основании информационных разрядов по определенным правилам. На
приемной стороне декодером по тем же правилам осуществляются
аналогичные проверки, при которых учитываются и проверочные элементы.
В результате проверки определяется номер позиции в принятом блоке,
значение которой необходимо в процессе исправления проинвертировать.
Вероятность ошибочного приема символа зависит не только от вероятности
ошибки в дискретном канале, но и от применяемого кода.
В односторонних СПД при выборе корректирующего кода приходится
рассчитывать на худшее состояние канала, т.е. избыточность в таких
системах является постоянной, независимо от того имеются ошибки в канале
или нет. В начальных условиях худшее состояние канала будет относительно
редко, его пропускная способность используется очень неэффективно.
Вторым недостатком систем с исправлением ошибок является резкое
возрастание сложности аппаратуры с увеличением количества исправляемых
ошибок. Существенное снижение аппаратурных затрат может быть получено
за счет применения в качестве кодирующих и декодирующих устройств
микропроцессоров.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
5
В симплексном канале информация может передаваться лишь в одном
направлении, в дуплексном – осуществлена двухсторонняя связь, в
полудуплексном – возможна передача информации в обоих направлениях, но
лишь поочередно. В дуплексных каналах связи повышение верности
передаваемой информации достигается за счет введения обратной связи. Они
делятся на системы с решающей (РОС), информационной (ИОС) и
комбинированной обратной связью. Сущность повышения верности в этих
системах состоит в том, что при обнаружении искажений в передаваемом
сообщении происходит запрос блока, в котором один или несколько
неправильно принятых знака. В системах с РОС передаваемые данные
кодируются избыточными кодами, позволяющими обнаруживать одиночные
ошибки или пачки ошибок. Решение о необходимости повторения блока
информации, в котором обнаружена ошибка, принимается приемником на
основании поступившей последовательности. В системах с ИОС нет
необходимости вводить избыточность в передаваемые данные. Двоичная
последовательность, зафиксированная приемником, запоминается и затем по
каналу ОС передается вся или в виде укороченной кодовой комбинации,
содержащей определенные признаки всей последовательности, на
передающую сторону. Полученная по каналу ОС информация анализируется
на передающей стороне, которая по результатам анализа принимает решение
о передаче следующего блока либо о повторении ошибочно принятого. Это
решение сообщается на приемную сторону и на его основании полученная
информация передается потребителю или стирается.
В зависимости от характера канала связи и формата передаваемых
сообщений выделяют синхронный и асинхронный методы передачи
информации. В случае использование синхронного метода фазирование
происходит лишь один раз перед передачей посылки. При этом циклы с
определенной длиной следуют друг за другом. В асинхронном (стартстопном) методе есть четко выраженные начало (старт) и конец (стоп)
кодовой комбинации, по которым и происходит синхронизация. Для
фазирования применяют устройства фазирования по циклу или УФЦ.
Устройства фазирования по циклу (УФЦ) служат для определения
начала блока информации (цикла) в принимаемой последовательности
цифровых сигналов, что необходимо для правильного декодирования
сообщения.
Способы фазирования по циклам можно разделить на две группы:
 безмаркерные (с одноразовым запуском), при которых во время
передачи информации фазирующие сигналы (маркеры) не
передаются, а фазирование осуществляется за счет выдачи в канал
специальной фазирующей последовательности перед началом
передачи сообщения и в паузах между передачей отдельных
блоков информации;
 маркерные (с непрерывной синхронизацией), при которых в
течение всего сеанса связи по каналу совместно с информационТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
6
ными сигналами передаются специальные кодовые комбинации
(маркеры), используемые для фазирования АПД по циклу.
Также различают синхронные и старт-стопные способы фазирования. В
синхронных — циклы фиксированной длины следуют непрерывно друг за
другом, в связи с чем их начало и конец в сфазированном приемнике заранее
известны. При старт-стопном способе — цикл может начаться в
произвольный момент времени, а длина его — быть произвольной. В
промежутках между выдачей блоков передающий и приемный
распределители находятся на «стопе». Запуск их происходит под действием
команды «Старт», подаваемой перед началом блока в канал связи. Команда
«Старт» может быть представлена отдельным сигналом или кодовой
комбинацией.
Независимо от способа фазирования любая схема УФЦ должна
содержать блок ввода в передаваемую последовательность маркерной
комбинации на передающей стороне и блок выделения этой комбинации в
приемнике.
Если информация от источника поступает нерегулярно, небольшими
массивами, блоками различной длины и по каким-либо причинам не
представляется концентрация этой информации на передающей стороне, то
наиболее целесообразным является применение старт-стопного метода
фазирования. В этом случае средняя длина блока и вид фазирующей
комбинации
определяются
из
условий
обеспечения
требуемой
помехоустойчивости.
В большинстве систем передачи дискретной информации выгодно
применять синхронные маркерные и безмаркерные способы фазирования. В
дуплексных и полудуплексных СПД при передаче небольших массивов
информации, в диалоговом режиме работы абонентов, при наличии пауз
между передаваемыми сообщениями, а также в системах данных по
выделенным каналам, когда не требуется непрерывный контроль за
процессом
фазирования
по
циклам,
целесообразно
применение
безмаркерного способа, который обеспечивает более высокую эффективную
скорость передачи информации.
При непрерывной передаче сообщений или передаче больших массивов
информации в результате различных возмущающих воздействий, способных
нарушить синфазный режим работы системы, необходимо обеспечить
систематический контроль за состоянием фазирующих устройств
непрерывной передачей в канал маркерных комбинаций. В таких случаях
следует применять маркерный способ фазирования [2].
1.3 Передача алфавитно-цифровой информации
Существуют разные способы передачи алфавитно-цифровой
информации. Одними из самых распространенных являются коды КОИ-8,
МТК-2 и МТК-5 и ASCII [3].
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
7
КОИ-8 - восьмибитовая ASCII-совместимая кодовая страница,
разработанная для кодирования букв кириллических алфавитов.
Существует также семибитовая версия кодировки, не полностью
совместимая с ASCII — КОИ-7.
В КОИ-8 символы русского алфавита располагаются в верхней части
кодовой таблицы таким образом, что позиции кириллических символов
соответствуют их фонетическим аналогам в английском алфавите в нижней
части таблицы. Это означает, что если в тексте, написанном в КОИ-8,
убирать восьмой бит каждого символа, то получается легко читаемый текст,
хотя он и написан латинскими символами. Как побочное следствие, символы
кириллицы расположены не в алфавитном порядке.
Существует несколько вариантов кодировки КОИ-8 для различных
кириллических алфавитов. Русский алфавит описывается в кодировке KOI8R.
Телеграфный трёхрегистровый код МТК-2 был принят в СССР в 1963
г. Код 5-битовый (всего 32 разных кода), поэтому используются 3 разных
регистра (русский, латинский, цифры), переключаемые управляющими
символами РУС, ЛАТ, ЦИФ. Букв Ъ и Ё нет; вместо буквы Ч использовали
цифру 4.
МТК-2 основан на международном телеграфном коде № 2 (ITA2),
рекомендованном Международным консультативным комитетом по
телефонии и телеграфии в 1932 г. (в международном коде 00000 не
используется).
Соответствие между английским и русским регистрами, принятое в
МТК-2, было использовано при создании компьютерных кодировок КОИ-7 и
КОИ-8.
Международный телеграфный код №5 (International Telegraph Alphabet
number 5).
Код был создан в результате совместного соглашения между
Международным консультативным комитетом телеграфии и телефонии
(МККТТ), в настоящее время МСЭ-Т, Международного союза электросвязи
(МСЭ) и Международной организацией по стандартизации (ИСО). Он
опубликован как рекомендация МККТТ (МСЭ-Т) V.3 и ИСО 646. МТК-5 был
также принят НАТО для использования в военных целях.
МТК-5 – кодировка, в которой используется 128 7-битных комбинаций
для кодирования строчных и прописных букв, десятичных цифр,
специальных знаков и символов, разделителей данных и передачи
управляющих символов.
Стандарт ICO 646 предусматривает возможность размещения
национальных символов на месте # $ @ [ \ ] ^ ` { | } ~. В дополнение к этому,
на месте # может быть размещён £, а на месте $ — ¤. Такая система хорошо
подходит для европейских языков, где нужны лишь несколько
дополнительных символов. Вариант кода МТК-5 без национальных символов
получил название ASCII, или US-ASCII.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
8
Для языков с нелатинской письменностью (русского, греческого,
арабского, иврита) существовали более радикальные модификации МТК-5.
Одним из вариантов был отказ от строчных латинских букв – на их месте
размещались национальные символы (для русского и греческого – только
заглавные буквы). Другой вариант – моментальное переключение между
основным и национальным вариантом с помощью символов SO (Shift Out) и
SI (Shift In) – в этом случае в национальном варианте можно полностью
устранить латинские буквы и занять все полученное пространство под свои
символы.
7-битный код оказался удобным для использования и в компьютерах,
поскольку компьютеры оперировали 8-битными байтами, а 8-й бит можно
было использовать для контроля чётности. Системы, не использовавшие
контроль чётности, обычно делали старший бит нулевым.
Впоследствии оказалось удобнее использовать 8-битные кодировки,
где нижнюю половину кодовой таблицы (0–127) занимают символы USASCII, а верхнюю (128–255) – разные другие нужные символы. В настоящее
время национальные 7-битные кодировки практически не используются.
1.4 Постановка задачи
Целью данного курсового проекта является разработка системы
передачи данных со следующими исходными данными:
1) Параметры для определения эффективно передаваемой полосы
частот ∆F и оптимальной скорости модуляции Bопт (таблица 1.1).
Таблица 1.1 – Параметры для определения ∆F и Вопт.
F,кГц
∆а, дБ
∆τ, мс
0,1
12
2,4
0,3
8,7
1,6
0,5
4,3
0,96
0,7
1,2
0,72
0,9
0,05
0,28
1,1
0,05
0,14
1,3
0
0,12
1,5
0
0,04
1,7
0,05
0,04
1,9
0,05
0
2,1
0,1
0,04
2,3
0,2
0,12
2,5
0,3
0,11
2,7
0,4
0,16
2,9
0,5
0,23
3,1
0,6
0,34
3,3
0,7
0,52
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
9
Продолжение таблицы 1.1
3,5
3,7
3,9
4,1
4,3
4,5
4,7
4,9
0,8
0,9
1,6
4
6
8,1
10,2
12,2
0,87
0,98
1,22
1,56
1,74
1,91
2,12
2,43
2) Данные для выбора формата сообщения и определения среднего
времени запаздывания информации (таблица 1.2).
Таблица 2.2 – Параметры разрабатываемой СПД
Источник информации
Канал связи
-1
N
Объем
λ, с
Тип Рош Кп
10
2*103 мтк5
10-4
С
10-2
1
Примечание
Циклический код, p(x)=7488
N - количество источников информации;
Объем - количество бит информации, производимой каждым
источником;
λ - плотность потока поступления заявок на обслуживание от источников
информации.
Тип - тип канала связи (C – симплексный).
Рош - вероятность ошибки при передаче одного двоичного символа.
Кп - категория помехоустойчивости системы.
Примечание – данные о коде, используемом при передаче данных.
В соответствии с заданными требованиями нужно:
1) определить эффективно передаваемую полосу частот ∆F и
оптимальную скорость модуляции Bопт при использовании сигналов ЧМ,
ФМ и АМ с двумя боковыми полосами. После чего выбрать значение В из
стандартного ряда (ГОСТ 17422-82) и вид модуляции, обеспечивающий
наибольшую скорость передачи.
2) выбрать формат сообщения и определить среднее время запаздывания
информации.
3) разработать структурные схемы и алгоритмы функционирования
СПД.
4) реализовать программно один из узлов СПД.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
10
1.5 Вывод к главе 1
В этой главе была рассмотрена классификация систем передачи данных,
способы передачи данных и методы фазирования, а также рассмотрены
основные виды кодов, использующихся для передачи алфавитно-цифровой
информации.
В данном курсовом проекте будет разработана СПД, использующая для
передачи данных международный телеграфный код МТК-5. В устройстве
защиты от ошибок данной СПД будет использовано кодирующее и
декодирующее устройство
циклического кода. Тип канала связи
симплексный. Это означает, что информация в данной системе сможет
передаваться лишь в одном направлении.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
11
2. Расчет параметров и характеристик
2.1 Определение эффективно
оптимальной скорости передачи.
передаваемой
полосы
частот,
Качество передачи дискретной информации зависит от частотных
характеристик канала, причём тем в большей степени, чем выше скорость
передачи. К частотным характеристикам канала относятся амплитудночастотная (АЧХ) и фазочастотная (ФЧХ) характеристики. Построим данные
характеристики, в соответствии с заданным вариантом, исходя из таблицы
1.1.
Рисунок 2.1 – Характеристика остаточного затухания
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
12
Рисунок 2.2 – Характеристика группового времени прохождения
Для оценки фазочастотных искажений в канале пользуются
характеристикой группового времени прохождения (ГВП), которая
представляет собой производную ФЧХ по частоте
d()
гр
d
(2.1)
Минимально необходимая полоса частот определяется по формуле:
1 B

F


F
 
min
2

0 2
(2.2)
где В – скорость модуляции, определяемая для двухпозиционных
видеосигналов как
B
1
(
0
2.3)
(2.3)
При передаче модулированных сигналов (ЧМ, АМ, ФМ) минимально
необходимая полоса частот увеличится вдвое, так как необходимо передавать
верхнюю и нижнюю полосы частот:
1

F
 B
min

(2.4)
Предельная скорость передачи в этом случае
Bmax
F
(2.5) (
2.5)
Для сохранения удовлетворительной формы посылок на выходе канала
на практике скорость модуляции Впр выбирают несколько меньше, чем
предельно допустимые Вmax, а именно:
(
2.6)
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
13
В

0
,
35

В

0
,
7


F
пр
max
min
(2.6)
при использовании сигналов ЧМ, АМ, и ФМ с двумя боковыми
полосами.
При этом для определения ширины полосы пропускания ∆Fк используют
частотную характеристику неравномерности остаточного затухания канала
∆а(f). Если затухание нарастает плавно и симметрично относительно
несущей частоты, то граница полосы пропускания определяется на уровне
затухания 6дБ, когда в полосе пропускания имеются нечетно-симметричные
и колебательные отклонения затухания, то они не должны превосходить 1,752,6 дБ.
Характеристика остаточного затухания нарастает плавно и симметрично
относительно несущей частоты, поэтому граница полосы пропускания
определяется на уровне затухания 6 дБ. Отметим на графике ∆а=6 дБ.
Ширина полосы пропускания канала равна.
∆Fк = 4.3 – 0.42 = 3.88 кГц.
Максимальная скорость модуляции при использовании АМ, ЧМ, ФМ с
двумя боковыми полосами определяем по формуле (2.6):
Bпр = 0,7*3.88*103 = 2716 Бод.
Для того, чтобы межсимвольные помехи (эхо-сигналы) Uэхо,
возникающие за счет нелинейности частотной характеристики ГВП, не
превышали допустимой величины Uэхо≤(0,1-0,2)U0, где U0 – амплитуда
основного сигнала, необходимо, чтобы неравномерность характеристики
ГВП Δτгр(f) не превышала: для четно-симметрической и колебательной
характеристик ГВП:

гр_доп1/В
(2.7)
для нечетно-симметрической зависимости ГВП:

гр_доп
0
,3
/В
(2.8) (
2.8)
Следовательно, с учетом ограничений, при расчете скорости передачи
или выборе полосы пропускания канала необходимо проверить,
удовлетворяет ли неравномерность характеристики ГВП в выбранной полосе
∆Fk условию гргрдоп
. Если не удовлетворяет, то необходимо уменьшить
скорость передачи либо откорректировать частотную характеристику ГВП.
Так как характеристика группового времени прохождения имеет чёткосимметричный характер, то допустимая неравномерность ГВП в этом случае
во всей полосе пропускания вычисляется по формуле (2.7):
∆τгрдоп ≤ 1/2716 = 0,37 * 10-3с.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
14
Отметим на рисунке 2.2 полученное значение  гр _ доп . При этом полоса
частот ∆Fк=3.14-0.86=2.28 кГ, что несколько меньше рассчитанного выше.
Следовательно, необходимо провести коррекцию частотной характеристики
либо уменьшить скорость передачи.
Уменьшим скорость передачи.
Для нахождения оптимальной скорости передачи Вопт необходимо
решить графически систему двух уравнений, одно из которых задано
зависимостью вида В  k * F , а второе представлено графиком В  (F ) .
Полагая, что гр1/Впр, для соответствующих значений ∆F , построим
K
K
к
зависимость В=ψ(∆Fk).
Составим таблицу 2.1 для построения графика:
Таблица 2.1 – Характеристики для нахождения оптимальной скорости
∆τгр, мс
∆Fк, кГц
Bпр, Бод
0.2
1.8
5000
0.25
2
4000
0.3
2.1
3300
0.4
2.3
2500
0.5
2.47
2000
0.55
2.53
1800
0.6
2.6
1700
Рисунок 2.3 – Нахождение оптимальной скорости передачи
Оптимальная скорость передачи Вопт равна 1780 Бод, при этом условие
∆τгр ≤∆τгрдоп выполняется. Из ряда стандартных скоростей для передачи
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
15
данных (ГОСТ 17422-82) выбираем ближайшую меньшую скорость
модуляции В=1200 Бод.
2.2 Выбор вида модуляции
Вид модуляции сигналов для каждого конкретного случая
проектирования выбирается на основе отдельных критериев, так как единого
обобщенного критерия для сравнения различных методов модуляции,
которым можно было бы воспользоваться на практике, нет. В качестве таких
критериев наиболее распространенными являются: помехоустойчивость,
требуемая полоса частот, относительная сложность аппаратуры.
Так как для передачи сигнала будет использован симплексный канал, то
решающим фактором при определении метода модуляции является его
помехоустойчивость. В то же время значительным фактором будет являться
и сложность реализации.
Наименьшей помехоустойчивостью обладают устройства передачи
сигналов с амплитудной модуляцией. В то же время аппаратурная
реализация такого устройства является самой простой. Наибольшей
помехоустойчивостью обладает метод фазовой модуляции с двумя боковыми
полосами.
Частотная модуляция занимает промежуточное значение по
помехоустойчивости, а его реализация проще по сравнению с фазовой.
Преимуществом частотной модуляции является также независимость
коэффициента ошибок от сдвига частоты в канале (до Гц) и скачков фазы
(до 40°).
Поэтому метод частотной модуляции является более предпочтительным
в данном случае.
2.3 Выбор формата сообщения
запаздывания информации
и
расчёт
среднего
времени
По заданию, необходимо реализовать передачу кода МТК5, состоящего
из 2000 слов по 7 бит в каждом от 10 источников информации со скоростью
модуляции 1200 Бод, λ=10-5, Рош=10-2. Так как тип канала по заданию
симплексный,
то
целесообразно
использовать
помехоустойчивое
кодирование. Дан циклический код и полином р(х)=7478=1111001112.
р(х)=х8+х7+х6+х5+х2+х+1.
(2.9)
Определим
оптимальную
максимально
возможную
длину
информационного сообщения, которое можно закодировать с помощью
данного образующего полинома, т.е. мы должны вычислить максимальное
число информационных разрядов.
Для упрощения передачи и приёма информации длину
информационного блока выберем таким, что:
1. в каждом блоке должно передаваться целое число слов МТК-5;
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
16
2. время передачи данных от источника к приёмнику должно быть
минимально;
3. число информационных разрядов должно быть как можно ближе к
максимальному.
Число проверочных разрядов: r=8, тогда общая длина кодовой
комбинации n=2r-1= 28-1=255. Число информационных разрядов: k=n-r =2558=247.
Общее число посылок:
m = V/ku,
где V - объём источника информации;
ku – количество информационных бит в сообщении.
(2.10)
Вероятность трансформации для Гаусового канала:
(n  Pош ) j
Pтр  1  
е
j!
j 0
d 1
 nPош
,
(2.11)
где d – кодовое расстояние.
Кодовое расстояние d должно быть больше или равно двум, чтобы
обеспечить возможность обнаружения и исправления ошибок. Возьмем d = 3.
Категория помехоустойчивости Кп = 1 для алфавитно-цифровой
информации, к которой относится код мтк5 допускает вероятность
трансформации в канале не более 10-7.
Pтр  (Ртр ) .
(2.12)
Составим таблицу
информационной части:
2.2
для
нахождения
оптимальной
длины
Таблица 2.2 - Выбор длины информационной части сообщения
Количество Общее колДлина
Общее Вероятность
Количество
повторов
во
всего
число
трансфоринф. бит
передачи переданных
сообщения посылок
мации
сообщения
бит
175
197
80
0.3152
14
220640
70
93
200
0.0679
7
130200
63
86
220
0.0564
6
113520
56
79
250
0.046
5
98750
49
72
290
0.036
5
102960
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
17
Из таблицы 2.2 видим, что оптимальная длина информационной части
будет достигаться при количестве информационных бит 56 (количество
повторов передачи сообщения и общее количество переданных бит
минимально).
Организуем передачу информации асинхронным (старт-стопным)
методом, который позволит использовать произвольную длину кадра.
Длина информационной посылки будет состоять из адреса источника –
4 бита и 56 бит информации. Длина стартовой посылки 1,5 бита, 0,5 бит –
контрольная пауза и 1 бит - стоповая, т.е. защитная пауза между посылками,
8 бит для передачи номера блока. Таким образом, длина посылки будет
составлять 71 бит.
Для образующего полинома вида р(х)=х8+х7+х6+х5+х2+х+1 потребуется
r=8 проверочных бит, т.е. к информационной части кода добавится r = 8 и
длина сообщения будет L=79 бит.
Старт
Пауза
1,5
0,5
Номер
Проверочные
Информация
блока
биты
4
8
56
8
Рисунок 2.5 – Формат сообщения
Адрес
Стоп
1
Время передачи от одного источника с обеспечением заданной
вероятности трансформации определяется по формуле:
LM
T

k,
пер
В
(2.13)
где
L – длина посылки с учетом старта и стопа;
М – общее число посылок;
В – скорость передачи данных.
Подставив данные, получим:
Tпер 
79  250
 5  82(с)
1200
Время цикла передачи от N источников информации определяется по
формуле:
tц  TперN
(2.14)
tц = 82 * 10 = 820 (с).
Время запаздывания информации, в общем случаем, есть случайная
величина. Для ее определения необходимо знать закон распределения этой
величины. Это возможно только в некоторых, наиболее простых случаях
функционирования
СПД.
Поэтому
определяем
количественно
своевременность доставки сообщений получателем при помощи среднего
времени запаздывания информации:
WCT,
(2.13)
где T  Tсбора  Tобраб  Tпер ;
(2.14)
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
18
С – среднее время ожидания сообщением обслуживания на выходе
источника информации.
Для большинства СПД время сбора информации и ее обработки
несоизмеримо мало по сравнению с временем передачи, поэтому обычно
берут
(2.15)
W  C  Tпер.
При циклическом обслуживании для определения пользуются формулой
Хинчина-Поллачека:
tц2
C
2
(1tц),
(2.16)
где λ – интенсивность поступления заявок на обслуживание с
источников информации.
104  8202
С
 36(с)
2  (1104  820)
W = 36 + 82 = 118c.
При асинхронном методе передачи с использованием старт-стопного
метода и без непосредственного воздействия на приемный тактовый
генератор рассчитываем относительный коэффициент его нестабильности:

K
,
(2.17)
2  Tн  B
где ε – относительное искажение импульса, которое принимается не
более 40%;
Тн – время передачи информационной части посылки без старта и
стопа;
В – скорость передачи.
n
.
В
76
Тн 
 0,06(c) .
1200
40
K
 0,28% .
2  0,06 1200
Tн 
(2.18)
Нестабильность генераторов, выполненных на ИС без кварцевых
резонаторов с использованием времязадающих RС - цепочек колеблется в
пределах от 5 до 10%. Кварцевые генераторы без термостатирования имеют
абсолютную нестабильность 10-4 -10-6 Гц.
Таким образом, нужно выбирать кварцевые тактовые генераторы на
передающей и приемной частях системы.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
19
2.4 Выводы к главе 2
Во 2 главе была определена оптимальная скорость модуляции, выбран
наиболее подходящий метод модуляции, разработан формат сообщения для
старт-стопного метода передачи информации. Получено, что для
обеспечения требуемой вероятности трансформации кодовой комбинации
используется многократная передача кодовой последовательности.
Рассчитано среднее время запаздывания информации.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
20
3. Разработка структурных схем и алгоритмов
функционирования СПД
3.1 Разработка структурной схемы передающего устройства
В общем виде структурная схема передающего устройства состоит из
следующих блоков:
 устройства управления (УУ)
 блока сбора информации от источников (БСИ)
 устройства защиты от ошибок (УЗО) с кодирующим устройством и
устройством фазирования по циклам
 блока передачи данных в канал связи.
При этом каждый из блоков состоит из функционально более мелких
блоков.
Получим, что для реализации заданных функций структурная схема
передающего устройства должна содержать:
 К — коннектор для связи с несколькими источниками информации
 БППИ — блок приема и преобразования информации
 БН — буферный накопитель
 БНУ — блок начальной установки
 ДНУ — датчик номера устройства
 ДНБ — датчик номера блока
 ФССС — формирователь сигнала «старт/стоп»
 КУ — кодирующее устройство
 ФСО1, ФСО2 — формирователи сигналов обмена с ООД и УПС
 БАСИ — блок аварийной сигнализации и индикации
 СПП — счетчик повторной передачи
 ФТИ — формирователь тактовых импульсов
 УУ — устройство управления
 УПС — устройство преобразования сигнала для передачи по каналу
связи (КС).
Основным блоком УЗО является устройство управления (УУ), которое
управляет работой всех остальных блоков. Управляющие воздействия на
выходе УУ вырабатываются на основе анализа входящих сигналов и зависят
от режима работы УЗО и временной позиции . Переключение УУ происходит
под действием тактовых импульсов, формируемых ФТИ. Для выработки
необходимых
сигналов
обмена
используются
соответствующие
формирователи ФСО. Для установления устройств в начальное состояние
применяется блок начальной установки. Данные, поступающие с источников,
отправляются в буферный накопитель, затем объединяются с адресом
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
21
источника, поступающим с ДНУ. Эти данные составляют информационную
последовательность от источника, и ее формирование происходит в БППИ.
Данные передаваемые в дискретный канал связи кодируются
помехоустойчивым кодом.
Для индикации аварийных ситуаций в схему включен блок аварийной
сигнализации и индикации (БАСИ). Также этот блок служит для индикации
состояния УЗО. Индицировать целесообразно следующие возможные
ситуации: включение питания АПД; передача/прием; ожидание; ошибка
периферийного устройства; ошибка нумерации блоков.
Для временного хранения данных используется буферный накопитель
(БН), в который будет помещаться информация, полученная от источника
информации, и хранится до передачи их приёмнику.
Так как для обеспечения требуемой вероятности трансформации,
необходимо повторять передачу одного сообщения 5 раз, используем
счетчик, который будет подсчитывать количество передач одного
сообщения. Количество повторов будет подсчитываться, и данные будут
подаваться на УУ. По сигналу с управляющего устройства счетчик числа
повторов будет обнуляться.
В устройстве приёма и передачи к сообщению добавляются стартовая и
стоповая комбинации с помощью ФССС.
Структурная схема передающего устройства представлена на рисунке
3.1.
информация
БППИ
запись данных
+1
начальная
установка
управляющий
сигнал
Источник
информации 10
ФСО2
переключение
УУ
УУ
код
аварии
БНУ
ФСО1
БАСИ
данные
УПС
в КС
управляющий
сигнал
ФТИ
синхронизация
+1
К
ФССС
перебор
Источник
информации 3
ДНУ
кодирование
ДНБ
форм-е
старт/
стоп
БН
перебор
Источник
информации 2
КУ
номер
устр-ва
Источник
информации 1
СПП
Рисунок 3.1 - Структурная схема передающего устройства
3.2 Алгоритм функционирования передающего устройства
При включении питания передающего устройства сигнал поступает на
БНУ, который устанавливает все остальные блоки в начальное состояние.
Затем УУ подаст сигнал на БАСИ о наличии питания.
Источник информации посылает сигнал о запросе передачи на
коннектор. Коннектор подключает один из источников информации к СПД и
направляет сигнал запроса через ФСО1 в УУ. При поступлении сигнала УУ
направляет номер устройства в ДНУ и с помощью ФСО2 посылает запрос в
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
22
УПС о готовности аппаратуры канала. После приема сигнала запроса от УПС
линия связи удаленной аппаратуры передачи данных (АПД) переключается
на вход УПС. Если АПД не готова к процессу передачи данных, то
включается аварийная сигнализация, а аппаратура переключается снова в
режим ожидания вызова. При готовности АПД система переходит в
состояние передачи информации. Через К информация с источника
поступает на БППИ, номер источника записывается в ДНУ, а ДНБ
устанавливается в 0.
После чего СПД посылает в канал сообщение. Передаваемое
сообщение содержит стартовую и стоповую комбинации, которые
формируются ФССС; информационную последовательность, поступающую с
источника информации через К и преобразуемую в последовательный код в
БППИ; номер блока с датчика ДНБ, номер устройства с датчика ДНУ.
Данные, передаваемые в дискретный канал связи, кодируются в
помехоустойчивым кодом. Сформированные КУ проверочные элементы
добавляются к информационным. Поступившая источника информации через
К информационная последовательность одновременно с передачей в канал
связи записывается в буферный накопитель БН. Так как одно и то же
сообщение передается несколько раз, то последующая повторная передача
будет осуществляться напрямую из БН без запроса к источнику информации.
СПП контролирует количество повторно переданных сообщений и при
достижении установленного числа посылает сигнал на УУ. После чего УУ
посылает через ФСО1 сигнал на К о получении и передаче в БППИ новой
порции информации и увеличивает ДНБ. После сигнала от ДНБ о том, что
передано необходимое количество блоков информации от данного
источника, УУ прекращает передачу сообщений, обнуляет ДНБ и ДНУ, через
ФСО1 посылает сигнал на К о прекращении получения информации от
источника и через ФСО2 посылает сигнал на УПС о переходе в режим
ожидания.
Если данные больше передавать не требуется, можно отключить
питание.
Алгоритм работы передатчика изображен на Рисунок 3.2.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
23
Начало
Включение питания
Индикация вкл. питания
Начальная установка
Запрос АПД на готовность к
передаче информации
Оборудование готово?
нет
Аварийный сигнал
Подключение источника
информации
Установка датчиков номера
устройства и блока
Ввод и преобразование
информации
Запись информации в буфер
Кодирование информации
Передача сообщения в
канал
Инкремент счетчика
повторений
нет
Число повторений >5?
да
Обнуление счетчика
повторений
Инкремент датчика номера
блока
нет
Передано сообщений
> 250?
Обнуление датчика номера
блока
да
да
Питание?
нет
Конец
Рисунок 3.2 – Блок-схема алгоритма работы передатчика
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
24
3.3 Разработка структурной схемы приемного устройства
Вторая часть СПД располагается на приемной стороне, в её состав
входят следующие блоки:
 УПС — устройство преобразования сигнала
 ФСО1, ФСО2 — формирователи сигналов обмена
 ФТИ — формирователь тактовых импульсов
 РгСК – регистр служебной комбинации
 ДшСК – дешифратор служебной комбинации
 БФЦ — блок фазирования по циклу
 М – мажоритарное устройство
 ДК — декодер (декодирующее устройство)
 БН — буферный накопитель
 БПВИ — блок преобразования и выдачи информации
 БНУ — блок начальной установки
 БАСИ — блок аварийной сигнализации и индикации
Работой приемной части управляет устройство управления (УУ). Как и
в передающей части, необходимы в схеме блоки: БАСИ, ФТИ, БНУ, ФСО. В
режиме передачи данных основное назначение приемного устройства
состоит в том, чтобы принять данные, декодировать их и передать
информацию получателю.
Так как сообщение передаётся несколько раз, для обеспечения
необходимой вероятности трансформации, нужно применить устройство для
подсчета количества повторов, а также мажоритарный элемент, который
используется для мажоритарного декодирования циклического кода.
В
блоке
БПВИ осуществляется
преобразование принятой
последовательности в требуемый формат.
Структурная схема принимающего устройства представлена на
рисунке 3.3
данные
управляющий
сигнал
ФТИ
ФСО2
ДК
УУ
БНУ
приемник
декод.
рез-т
БН
запись
данных
запись
данных
М
рез-т
старт/
стоп
БФЦ
код
аварии
синхронизация
ДшСК
дешифр.
запись данных
перекл-е
УУ
рез-т
РгСК
сравнение и
прин. реш-я
УПС
начальная
установка
из КС
запись
данных
ФСО1
БПВИ
информация
управляющий
сигнал
БАСИ
Рисунок 3.3 – Структурная схема принимающего устройства
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
25
3.4 Алгоритм функционирования приёмного устройства
При включении питания принимающего устройства УУ подаст сигнал
на БАСИ о наличии питания. Сигнал поступает на БНУ, который
устанавливает все остальные блоки в начальное состояние. После этого схема
перейдет в режим ожидания стартовой посылки из канала связи. При
длительном отсутствии стартовой посылки УУ формирует сигнал для БАСИ
об отсутствии данных в канале.
Из канала связи через УПС данные поступают на приемную часть
СПД. Информация разделяется на служебную и информационную.
Служебная записывается в РгСК, после чего поступает на ДшСК, от куда
информация поступает на БФЦ. БФЦ выявляет стартовую стартовую
комбинацию и отправляет сигнал на УУ, после чего следующая за стартовой
комбинацией информация (информационная) записывается в М. Получение
информации от УПС осуществляется до выявления УВССС стоповой
комбинации.
При повторном получении сообщения, информация, записанная с М,
сравнивается с полученной, в результате по нечетному количеству принятых
комбинаций формируется результирующая комбинация. При достижении
заданного числа принятых блоков, ДшСК отправляет на УУ сигнал о
завершении приема. По завершению приема блока информации, информация
записывается в БН, от куда поступает на ДК для декодирования информации.
После декодирования УУ через ФСО1 запрашивает готовность приемника к
получению данных и, в случае получения разрешающего сигнала, направляет
данные в БПВИ. В блоке БПВИ осуществляется преобразование принятой
последовательности в требуемый формат и согласование по уровню с
уровнем приемника.
При возникновении ошибки на любом из этапов: не обнаружена
стартовая или стоповая комбинации, недопустимое значение номера блока
или номера источника, невозможность исправления ошибки ДК и т.д. УУ
подает на БАСИ сигнал об аварии.
Прием осуществляется до выключения питания.
Алгоритм работы приемника изображен на рисунке 3.4.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
26
Начало
Включение питания
Индикация вкл. питания
Начальные установки
Получение данных из КС
Выявление стартовой
посылки
«Старт»?
нет
да
Запись информации в
мажоритарный элемент
«Стоп» получен?
нет
да
нет
Принято 5 сообщений?
да
Сравнение принятых
сообщений и принятие
решения по принципу
«большинства»
Запись в буферный
накопитель
Декодирование информации
Наличие ошибок
да
Исправление ошибки
нет
Передача информации
приемнику
нет
Выключение питания?
да
Конец
Рисунок 3.4 – Блок схема алгоритма работы приемника
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
27
3.5 Синтез схем кодирующего и декодирующего устройств
Задан образующий полином:
Р(х)=7478=111100111=х8+х7 +х6 +х5 +х2+x1+1.
С помощью данного полинома можно закодировать n-r бит информации,
где n — общая длина кодовой комбинации, которая для данного полинома
равна 28-1 = 255; r – число проверочных элементов, равное степени
образующего полинома. Рассчитав, получим, что с помощью данного
полинома можно закодировать 247 информационных бит.
Необходимо синтезировать структурные схемы кодирующего и
декодирующего устройств на основе данного полинома.
Основные правила синтеза:
1) Число ячеек регистра равно старшей степени образующего полинома
(для заданного полинома получаем 8 ячеек). Ячейка для старшей степени
многочлена отсутствует, а для х0 всегда присутствует.
2) Число сумматоров на единицу меньше числа ненулевых членов
многочлена (в данном случае 6).
3) В структурной схеме кодирующего устройства отсутствует сумматор
для старшего члена многочлена. В структурной схеме декодирующего
устройства – для младшего.
4) Сумматоры всегда устанавливаются перед ячейками регистра,
соответствующими ненулевым членам многочлена.
5) В кодирующем устройстве полином должен подаваться только на
первый сумматор, в декодирующем — одновременно на вход и все
сумматоры.
6) Полином подается на входы схем старшим разрядом вперед.
На основе данных правил, синтезируем структурные схемы
кодирующего (рисунок 3.5) и декодирующего (рисунок 3.6) устройств.
Нас схеме кодирующего устройства k1,k2 – ключи. На схеме
декодирующего устройства Я1..Я247 – ячейки буферного информационного
регистра.
k2
вход
+
х0
+
х1
+
х2
х3
х4
+
х5
+
х6
+
х7
выход
k1
Рисунок 3.5. - Структурная схема кодирующего устройства
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
28
8
8
8
8
8
8
&
+
n-тактов
х0
х1
+
х2
+
1
х3
2
1
2
х4
3
3
4
5
6
5
4
7
х5
+
+
х6
х7
+
6
8
7
8
1
2
Дешифратор синдрома
1
3
4
1
2
&
5
247
6
7
n-такт
8
494
&
Я1
Я247
Я2
k-тактов
248
248
249
1
249
2
494
+
+
+
247
Информационный регистр на k ячеек
Запись по
n-такту
Рисунок 3.6. - Структурная схема декодирующего устройства
3.6 Выводы к главе 3
В данной главе были разработаны структурные схемы передающего и
приемного устройств, описано функциональное назначение входящих в них
блоков.
Описана работа передающей и приемной сторон, приведены алгоритмы
их функционирования в форме блок-схем.
Построены структурные схемы кодирующего и декодирующего
устройств для циклического кода на заданном образующем полиноме
Р(х)=7478=111100111=х8+х7 +х6 +х5 +х2+x1+1
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
29
4. Разработка кодирующего и декодирующего устройства
4.1 Описание программы
Общие сведения
В соответствии с вариантом задания на курсовой проект в качестве узла
СПД разработана программная реализация устройства кодирования и
декодирования циклического кода.
Программирование выполнено в среде С++Builder 6.0 для операционной
системы Windows XP. Программная реализация устройства оформлена в виде
класса и выделена в отдельный программный модуль. Разработанный
программный модуль включен в состав демонстрационной программы.
Компиляция программы выполнена без использования динамических
библиотек и runtime пакетов.
Функциональное значение
Программная реализация устройства кодирования и декодирования
циклического кода (далее - программа) работает с введенными
пользователем
образующим
полиномом
и
информационной
последовательностью, в итоге получая кодированную и декодированную
информацию. На кодированную последовательность может быть наложен
вектор помех.
Программа должна поддерживать кроме заданного образующего полинома любой произвольный образующий полином до 31 степени
включительно. Размер входной последовательности – до 32768 бит.
Программа должна обеспечивать:
 ввод и преобразование входной последовательности из двоичного
файла и вручную;
 сохранение входной последовательности в двоичный файл;
 ввод образующего полинома из файла и вручную;
 сохранение образующего полинома в двоичный файл;
 вывод результата кодирования/декодирования на экранную форму и в
файл;
 наложение вектора помех (вручную и из файла с возможностью записи
введенного вектора помех в файл);
 сравнение данных до преобразования и после восстановления.
Входные данные
Входными данными являются: образующий полинома, исходная
информация и вектор ошибок. Ввод данных осуществляется пользователем с
клавиатуры либо из бинарного файла (*.pol, *.inf, *.err).
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
30
Таблица 4.1 Входные данные
Имя
переменной
Тип
переменной
R
int
N
int
Pol
bool*
Указатель на массив образующего полинома
Inf
bool*
Указатель на массив информационной
последовательности
Err
bool*
Указатель на массив вектора помех
Пояснение
Степень образующего полинома, количество
проверочных бит
Общая длина последовательности
(информационные+проверочные биты)
Выходные данные
Выходными
данными
являются:
кодирующая
комбинация
(сформированные проверочные биты), декодирующая комбинация (остаток
от деления), декодированная информация, сообщении о наличии ошибок и
результате их исправления. Возможно сохранение кодированной и
декодированной информации в бинарный файл (*.cod, *.dec).
Таблица 4.2 Выходные данные
Имя
переменной
Тип
переменной
Пояснение
Cod
bool*
Указатель на массив кодирующей
комбинации
Ost
bool*
Указатель на массив остатка от деления
Dec
bool*
Указатель на массив декодированной
информационной последовательности
Математическая постановка задачи
Циклические коды находят наибольшее распространение в системах
передачи данных с решающей обратной связью, что обусловлено их
высокими
корректирующими
свойствами,
сравнительно
простой
реализацией, невысокой избыточностью. Особенно они эффективны при
обнаружении пакетов ошибок. Циклические коды относятся к блочным
систематическим кодам, в которых каждая комбинация кодируется
самостоятельно в виде блока таким образом, что информационные k и
проверочные r элементы всегда находятся на определенных местах. Для
упрощения процедуры кодирования и декодирования проверочные биты
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
31
размещают в конце блока. Кодирование передаваемого сообщения
осуществляется умножением двоичной последовательности G(x) на одночлен
хr, имеющий ту же степень, что и образующий полином Р(х), с добавлением к
этому произведению остатка R(x), полученного после деления произведения
G(x)*xr на образующий полином, т. е. передаваемое в канал связи сообщение
F(x) имеет вид:
F(x) = G(x)*xr+R(x).
(4.1)
При декодировании принимаемая последовательность F(x) снова
делится на образующий полином Р(х). Полученный нулевой остаток R(x)=0
свидетельствует об отсутствии ошибок в принятом блоке, а отличие от нуля о наличии ошибок.
Описание логической структуры
1) Функции и переменные созданного класса
class coder
{
protected:
private:
int R; //степень образующего полинома=кол-во проверочных бит
int N; //N=информационные+проверочные биты
bool *Pol; //указатель на массив образующего полинома
bool *Inf; //указатель на массив инф. последовательности
bool *Cod; //указатель на массив кодирующ.комбинации
bool *Err; //указатель на массив вектора помех
bool *Ost; //указатель на массив остатка от деления
bool *Dec; //указатель на массив декодированной информации
public:
void Init(); //начальная инициализация
int getR(); //возврат степени образующего полинома
int getN(); //возврат общей длины комбинации
bool* getPol(); //возврат указателя на массив полинома
bool* getInf(); //возврат указателя на массив инф.послед-ти
bool* getCod(); //возврат указателя на массив кодир.комб-ии
bool* getErr(); //возврат указателя на массив вектора помех
bool* getOst(); //возврат указателя на массив остатка
bool* getDec(); //возврат указателя на массив декодиров. инф-ии
void setR(int); //запись значения степени полинома в переменную
void setN(int); //запись значения длины комб в переменную
void setPol(bool* ); //запись ук-ля на полином в переменную
void setInf(bool* ); //запись ук-ля на инф.послед-ть в переменную
void setCod(bool* ); //запись ук-ля на кодир.комб в перемен
void setErr(bool* ); //запись ук-ля на вектор помех в переменную
void setOst(bool* ); //запись ук-ля на остаток в переменную
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
32
void setDec(bool* ); //запись ук-ля на декодир.инф в переменную
void Coder(); //кодирование
void Decod(); //декодирование
};
2) Алгоритм кодирования
Перед началом кодирования, программа проверяет, существует ли
информационная комбинация и образующий полином. Если да, то создается
новый массив под кодирующую комбинацию (если ещё не был создан).
Затем к информационной комбинации дописываются нули (их количество
соответствует степени образующего многочлена). После чего начинается
деление информационной последовательности на образующий полином.
Программно это реализуется следующим образом. Первые R бит
информационной последовательности записываются в кодирующую
комбинацию (где R-степень полинома и число проверочных бит). Затем
выполняется проверка: равен ли первый бит кодирующей комбинации нулю.
Если нет, то выполняется «деление» - сложению по модулю два кодирующей
комбинации и образующего полинома, если да, то комбинация сдвигается в
сторону старшего разряда, а в младший разряд сносится следующий бит
информационной комбинации. Процесс деления повторяется. Деление
завершится, когда в информационной комбинации не останется
неиспользованных (не переписанных в кодирующую комбинацию)
элементов. После завершения деления проверочные биты, сформированные в
массиве кодирующей комбинации, дописываются к информационной
последовательности.
Так как процедура деления нам понадобится и при декодировании,
вынесем ее в отдельную функцию bool* d (int n, int m, bool* a, bool* b), где n
– длина делителя, m – длина делимого, a – делитель, b – делимое. Функция
возвращает остаток от деления. Реализация деления представлена на рисунке
4.1.
Данный алгоритм представлен на рисунке 4.2.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
33
Начало d(n, m, a, b)
i=0(1)n+1
ost[i]=b[i]
i
i=0(1)m-n
Нет
ost[0]!=0
Да
j=0(1)n+1
j=0(1)n
ost[j]=
=ost[j]^a[j]
ost[j]=
=ost[j+1]
i--
j
j
ost[n]=
=b[n+i+1]
i
return ost
Рисунок 4.1 – Блок–схема алгоритма деления.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
34
Начало Coder()
Нет
Inf!=0&&Pol!=0
Да
Нет
Cod==0
Да
CodComb=new bool[R+1]
i=0(1)R
Inf[N-R+i]=0
i
Cod=d(R, N, Pol, Inf)
i=0(1)R
Inf[N-R+i]=
=Cod[i+1]
i
Конец
Рисунок 4.2 – Блок–схема алгоритма функции Coder().
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
35
3) Алгоритм декодирования:
Перед началом декодирования вводится переменную error под количество
единиц в векторе помех, также проверяется существование информационной
последовательности, полинома и вектора ошибок. Если они существуют, то
создаются новые массивы под остаток от деления и декодированную
информацию. Выполняется подсчет количества единиц в векторе помех.
Вводятся дополнительные переменные: KolEd –количество единиц в остатке;
Sdvig – сколько раз был выполнен сдвиг; a – булева переменная для
использования в качестве буфера при перезаписи массивов; k – счетчик
проходов; W – счетчик проходов для цикла (изначально равен единице). В
массив декодированной информации переписываются элементы из массива
исходной информации, сложенные по модулю два с элементами вектора
помех. Затем выполняется первичное деление полученной информации на
образующий полином. Затем подсчитывается количество единиц в остатке от
деления. Информация считается переданной без ошибок, если оно равно 0.
Иначе если оно меньше или равно количеству ошибок, то декодированная
информация складывается по модулю два с остатком (со стороны младших
разрядов). В результате получаем исправленную информацию. Если
количество единиц в остатке больше числа ошибок, то выполняется
циклический сдвиг информационной комбинации на единицу в сторону
старших разрядов и деление повторяется. Действия будут повторяться, пока
количество единиц в остатке не будет меньше либо равно количеству
ошибок, либо, во избежание зацикливания программы, не более 6 раз. После
чего декодированная информация аналогично складывается по модулю два с
остатком, и выполняется обратный циклический сдвиг (в сторону младших
разрядов). В результате получаем исправленную информацию.
Данный алгоритм представлен на рисунке 4.2.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
36
B
Начало Decod()
Ost=d(R, N, Pol, Dec);
int error=0
Inf!=0&&Pol!=0&&
&&Err!=0
k++;
KolEd=0
Нет
B
Да
i=0(1)R
Ost=new bool[R+1];
Dec=new bool[N]
Нет
Ost[i]!=0
j=0(1)N
Да
KolEd++;
Err[j]
Нет
Да
i
error++
q
j
i=0(1)R+1
int KolEd=0;
int Sdvig=0;
bool a=0
Dec[N-1-i]=
=Dec[N-1-i]^Ost[R-i]
int k=0;
int W=1
j
i=0(1)N
j=Sdvig(-1)0
Dec[i]=Inf[i]^Err[i]
a=DecInf[N-1]
i
i=0(1)N-1
q=0(1)W
Dec[N-1-i]=Dec[N-2-i]
Нет
k>0
Да
i
a=Dec[0]
Dec[0]=a
i=0(1)N
j
Dec[i]=Dec[i+1]
B
Конец
j
Dec[N-1]=a;
Sdvig++
A
Рисунок 4.3 – Блок–схема алгоритма функции Decod().
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
37
Вызов и загрузка
Вызов программы производится щелчком на ярлыке Program.exe. В
начале работы пользователю доступны только некоторые из функций
(рисунок 4.4) – необходимо сначала ввести степень полинома и затем ввести
его вручную, нажав кнопку «Вручную», загрузить из файла, нажав
«Загрузить». Далее пользователь может ввести информационную
последовательность.
Ввод
информационной
последовательности
осуществляется таким же способом, что и ввод полинома. После ввода
информационной последовательности будет доступна функция кодирования
информации, для этого нужно нажать кнопку «Кодировать». После
кодирования информации становится доступной функция декодирования,
кнопка «Декодировать». Если необходимо, перед началом декодирования
можно заполнить вектор ошибок вручную или загрузить его из файла.
Значения в ячейке меняется двойным кликом по нужной ячейке. К концу
работы форма принимает вид, указанный на рисунке 4.5.
В любой момент можно сбросить введенную информацию, нажав
«Сброс». Так же осуществляется сохранение входных/выходных данных в
бинарный файл, для этого нужно нажать кнопку «Сохранить» рядом с
соответствующим полем данных. Возможно случайное заполнение
образующего полинома и информационной последовательности. Это
производится нажатием кнопки «Рандом», после чего нужно указать степень
полинома и длину информационной последовательности и нажать «ОК».
Результат заполнения случайной информацией представлен на рисунке 4.6.
Рисунок 4.4 Форма в начале работы
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
38
Рисунок 4.5 – Форма по окончанию работы
Рисунок 4.6 – Результат заполнения случайной информацией
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
39
Выше перечисленные функции так же доступны с помощью главного
меню программы: загрузка/сохранение данных (рисунок 4.7), действия
(рисунок 4.8)
Рисунок 4.7 – Главное меню программы (загрузка/сохранение)
Рисунок 4.8 – Главное меню программы (действия)
Правила пользования программой и её возможности пользователь
может прочитать в справке, которая вызывается из пункта меню «О
программе» (Рисунок 4.9).
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
40
Рисунок 4.9 – Справка программы
Выход из программы реализуется нажатием пункта главного меню
«Выход».
4.2 Тестирование программной реализации
Тест №1:
Задан образующий полином: Р(х)= 111100111=х8+х7 +х6 +х5 +х2+x1+1
Задана информационная последовательность: 1010101010
1) Кодирующая комбинация:
101010101000000000/111100111=00000011
2) Кодированное сообщение: 101010101000000011
3) Вектор ошибок: 000000000000000000
4) Декодированная комбинация:
101010101000000011/111100111=00000000
Складываем полученную последовательность 101010101000000011 и
остаток 00000000 по модулю 2, получаем 101010101000000011.
5) Декодированное сообщение соответствует переданному в канал связи,
так как декодирующая комбинация =0.
Декодированное сообщение: 1010101010
Результат: информация передана без ошибок (Рисунок 4.10).
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
41
Рисунок 4.10 – Тест №1
Тест №2:
Исходные данные те же. Введем вектор ошибок: 000000000001000000
1) Декодированная комбинация:
101010101001000011/111100111=01000000
Информация передана с ошибками. Количество единиц в остатке равно
числу ошибок, завершаем деление.
2) 101010101001000011+01000000=101010101000000011
Декодированное сообщение: 1010101010
Результат: информация передана с ошибками, ошибки исправлены
(Рисунок 4.11)
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
42
Рисунок 4.11 – Тест №2
Тест №3:
Исходные данные те же. Введем вектор ошибок: 010000000000000000
1) Декодированная комбинация:
111010101000000011/111100111=01111101
Информация передана с ошибками. Количество единиц в остатке
больше числа ошибок, сдвинем комбинацию циклически в сторону
старших бит и продолжим деление.
110101010000000111/111100111=11101000
101010100000001111/111100111=00100101
010101000000011111/111100111=01011000
101010000000111110/111100111=10110000
010100000001111101/111100111=10010101
Выполнено уже 5 сдвигов, а количество единиц в остатке так и не стало
меньше или равно единице. Завершаем деление.
2) 010100000001111101+10010101=010100000011101000
Полученную комбинацию сдвигаем циклически на 5 в сторону
младших разрядов: 010000101000000111
Декодированное сообщение: 01000010
Результат: информация передана с ошибками, ошибки не были
исправлены (Рисунок 4.12)
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
43
Рисунок 4.12 – Тест №3
Вывод: программа работает верно, в соответствии с алгоритмом,
однако в некоторых случаях ошибку исправить невозможно, причем
искаженный бит может оказаться в любом месте декодированной
комбинации. Для улучшения работоспособности системы можно увеличить
количество проходов (деления в декодере), однако это скажется на скорости
декодирования и, по-прежнему, не будет гарантировать исправления ошибки
в любом случае.
4.3 Выводы к главе 4
В этой главе разработана программная реализация устройства
кодирования и декодирования циклического кода. Программа поддерживает
кроме заданного образующего полинома любой произвольный образующий
полином до 31 степени включительно. Размер входной последовательности –
до 32768 бит.
Программа обеспечивает:
 ввод и преобразование входной последовательности из двоичного
файла и вручную;
 сохранение входной последовательности в двоичный файл;
 ввод образующего полинома из файла и вручную;
 сохранение образующего полинома в двоичный файл;
 вывод результата кодирования/декодирования на экранную форму и в
файл;
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
44
 наложение вектора помех (вручную и из файла с возможностью записи
введенного вектора помех в файл);
 сравнение данных до преобразования и после восстановления.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
45
Заключение
В данном курсовом проекте была разработана СПД с заданными
параметрами.
В первой главе был проведен анализ СПД, исследованы теоретические
сведения о способах передачи информации.
Во второй главе был произведен расчёт параметров и характеристик,
определена оптимальная скорость модуляции, выбран способ модуляции,
разработан формат сообщения
В третьей главе были разработаны структурные схемы и алгоритмы
функционирования СПД. Составлены схемы кодирующего и декодирующего
устройств для заданного образующего полинома.
В четвертой главе был разработан программный продукт с заданными
возможностями, выполняющий кодирование и декодирование сверточным
кодом.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
46
Приложение A
(Обязательное)
Список сокращений
УПС — устройство преобразования сигнала
ФСО1, ФСО2 — формирователи сигналов обмена
ФТИ — формирователь тактовых импульсов
РгСК – регистр служебной комбинации
ДшСК – дешифратор служебной комбинации
БФЦ — блок фазирования по циклу
М – мажоритарное устройство
ДК — декодер (декодирующее устройство)
БН — буферный накопитель
БПВИ — блок преобразования и выдачи информации
БНУ — блок начальной установки
БАСИ — блок аварийной сигнализации и индикации
УУ – устройства управления
БСИ – блока сбора информации от источников
УЗО - устройства защиты от ошибок.
К — коннектор для связи с несколькими источниками информации
БППИ — блок приема и преобразования информации
ДНУ — датчик номера устройства
ДНБ — датчик номера блока
ФССС — формирователь сигнала «старт/стоп»
КУ — кодирующее устройство
СПП — счетчик повторной передачи
КС – канал связи
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
47
Приложение Б
(Обязательное)
Листинг программы
Файл coder.h
#ifndef codH
#define codH
//----------------class coder
{
protected:
private:
int R; //степень образующего полинома=кол-во проверочных бит
int N; //N=информационные+проверочные биты
bool *Pol; //указатель на массив образующего полинома
bool *Inf; //указатель на массив инф. последовательности
bool *Cod; //указатель на массив кодирующ.комбинации
bool *Err; //указатель на массив вектора помех
bool *Ost; //указатель на массив остатка от деления
bool *Dec; //указатель на массив декодированной информации
public:
void Init(); //начальная инициализация
int getR(); //возврат степени образующего полинома
int getN(); //возврат общей длины комбинации
bool* getPol(); //возврат указателя на массив полинома
bool* getInf(); //возврат указателя на массив инф.послед-ти
bool* getCod(); //возврат указателя на массив кодир.комб-ии
bool* getErr(); //возврат указателя на массив вектора помех
bool* getOst(); //возврат указателя на массив остатка
bool* getDec(); //возврат указателя на массив декодиров. инф-ии
void setR(int); //запись значения степени полинома в переменную
void setN(int); //запись значения длины комб в переменную
void setB(int);
void setM(int);
void setPol(bool* ); //запись ук-ля на полином в переменную
void setInf(bool* ); //запись ук-ля на инф.послед-ть в переменную
void setCod(bool* ); //запись ук-ля на кодир.комб в перемен
void setErr(bool* ); //запись ук-ля на вектор помех в переменную
void setOst(bool* ); //запись ук-ля на остаток в переменную
void setDec(bool* ); //запись ук-ля на декодир.инф в переменную
void Coder(); //кодирование
void Decod(); //декодирование
};
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
48
//--------------------------------------------------------------------------extern PACKAGE coder *Kod;
//--------------------------------------------------------------------------#endif
Файл coder.cpp
#include <vcl.h>
#pragma hdrstop
#include "cod.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
//--------------------------------------------------------------------------void coder::Init()
{
R=0;
N=0;
Pol=0;
Inf=0;
Cod=0;
Err=0;
Ost=0;
Dec=0;
}
//-----------------------------------------------------------------------------int coder::getR() {return R;}
int coder::getN() {return N;}
bool* coder::getPol()
{return Pol;}
bool* coder::getInf()
{return Inf;}
bool* coder::getCod() {return Cod;}
bool* coder::getErr()
{return Err;}
bool* coder::getOst()
{return Ost;}
bool* coder::getDec() {return Dec;}
void coder::setR(int B) {R=B;}
void coder::setN(int B) {N=B;}
void coder::setPol(bool* A) {Pol=A;}
void coder::setInf(bool* A)
{Inf=A;}
void coder::setCod(bool* A) {Cod=A;}
void coder::setErr(bool* A)
{Err=A;}
void coder::setOst(bool* A) {Ost=A;}
void coder::setDec(bool* A) {Dec=A;}
//-----------------------------------------------------------------------------bool* d (int n, int m, bool* a, bool* b)
{
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
49
int i, j;
bool* ost=new bool[n+1];
for(i=0; i<=n; i++)
{
ost[i]=b[i];
}
for(i=0; i<m-1-n; i++)
{
if(ost[0]==0)
{
for(j=0; j<n; j++)
ost[j]=ost[j+1];
ost[n]=b[n+i+1];
}
else
{
for(j=0; j<=n; j++)
ost[j]=ost[j]^a[j];
i--;
}
}
if(ost[0]==1)
for(j=0; j<=n; j++)
ost[j]=ost[j]^a[j];
return ost;
}
//-----------------------------------------------------------------------------void coder::Coder()
{
int i, j, k;
if(Inf!=0&&Pol!=0)
{
if (Cod==0)
Cod=new bool[R+1];
for(i=0; i<R; i++)
{
Inf[N-R+i]=0;
}
Cod=d(R, N, Pol, Inf);
for(i=0;i<R;i++)
Inf[N-R+i]=Cod[i+1];
}
}
//-----------------------------------------------------------------------------ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
50
void coder::Decod()
{
int s=0;
int error=0;
int i, j;
if(Inf!=0&&Pol!=0&&Err!=0)
{
Ost=new bool[R+1];
Dec=new bool[N];
for(j=0;j<N;j++)
{
if(Err[j])
error++;
} //подсчёт кол-ва ошибок
int Kol=0;
int Sdv=0;
bool a=0;
int k=0, q;
s=0;
int W=1;
for (i=0;i<N;i++) Dec[i]=Inf[i]^Err[i];
q=0;
while (q<W)
{
if (k>0)
{
a=Dec[0];
for (i=0;i<N;i++) Dec[i]=Dec[i+1];
Dec[N-1]=a;
Sdv++;
}
Ost=d(R, N, Pol, Dec);
k++;
Kol=0;
for (i=1;i<=R;i++) {if (Ost[i]!=0) Kol++;}
if (Kol>error&&k<6) W++;
q++;
}
for (i=0;i<R+1;i++) Dec[N-1-i]=Dec[N-1-i]^Ost[R-i];
for (j=Sdv;j>0;j--)
{
a=Dec[N-1];
for (i=0;i<N-1;i++) Dec[N-1-i]=Dec[N-2-i];
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
51
Dec[0]=a;
}
}
}
//-----------------------------------------------------------------------------Файл Unit1.h
//--------------------------------------------------------------------------#ifndef Unit1H
#define Unit1H
//--------------------------------------------------------------------------#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <Grids.hpp>
#include <Dialogs.hpp>
#include "CSPIN.h"
#include <ExtCtrls.hpp>
//--------------------------------------------------------------------------class TForm1 : public TForm
{
__published:
// IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N5;
TMenuItem *N6;
TMenuItem *N7;
TMenuItem *N8;
TMenuItem *N9;
TMenuItem *N10;
TMenuItem *N11;
TMenuItem *N14;
TMenuItem *N15;
TMenuItem *N16;
TMenuItem *N17;
TMenuItem *N18;
TMenuItem *N19;
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
52
TMenuItem *N20;
TMenuItem *N21;
TStringGrid *StringGrid1;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
TLabel *Label6;
TLabel *Label7;
TLabel *Label8;
TLabel *Label9;
TStringGrid *StringGrid2;
TStringGrid *StringGrid3;
TStringGrid *StringGrid4;
TStringGrid *StringGrid5;
TStringGrid *StringGrid6;
TStringGrid *StringGrid7;
TOpenDialog *OpenDialog1;
TSaveDialog *SaveDialog1;
TButton *Button1;
TButton *Button2;
TButton *Button4;
TButton *Button5;
TButton *Button7;
TButton *Button11;
TButton *Button12;
TCSpinEdit *CSpinEdit1;
TCSpinEdit *CSpinEdit2;
TLabel *Label10;
TButton *Button14;
TLabel *Label11;
TMemo *Memo1;
TButton *Button3;
TButton *Button8;
TButton *Button10;
TButton *Button13;
TButton *Button15;
TButton *Button6;
TMenuItem *N12;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall StringGrid1DblClick(TObject *Sender);
void __fastcall StringGrid1SelectCell(TObject *Sender, int ACol,
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
53
int ARow, bool &CanSelect);
void __fastcall StringGrid2DblClick(TObject *Sender);
void __fastcall StringGrid2SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect);
void __fastcall Button11Click(TObject *Sender);
void __fastcall StringGrid5DblClick(TObject *Sender);
void __fastcall StringGrid5SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect);
void __fastcall Button12Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
void __fastcall Button5Click(TObject *Sender);
void __fastcall Button7Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button14Click(TObject *Sender);
void __fastcall Button8Click(TObject *Sender);
void __fastcall Button10Click(TObject *Sender);
void __fastcall Button13Click(TObject *Sender);
void __fastcall Button15Click(TObject *Sender);
void __fastcall N4Click(TObject *Sender);
void __fastcall N3Click(TObject *Sender);
void __fastcall Button6Click(TObject *Sender);
private:
// User declarations
public:
// User declarations
__fastcall TForm1(TComponent* Owner);
};
//--------------------------------------------------------------------------extern PACKAGE TForm1 *Form1;
//--------------------------------------------------------------------------#endif
Файл Unit1.cpp
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "cod.h"
#include "cod.cpp"
#include "Unit1.h"
#include <fstream.h>
#include <stdio.h>
#include "Unit2.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
54
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------coder* Kod;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Label11->Hide();
CSpinEdit2->Hide();
Button11->Hide();
Button12->Hide();
Button7->Hide();
Button2->Hide();
Button5->Hide();
Button3->Hide();
// N6->Enabled=0;
N20->Enabled=0;
N21->Enabled=0;
Kod=new coder[1];
Kod->Init();
StringGrid1->Enabled=0;
StringGrid2->Enabled=0;
StringGrid5->Enabled=0;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Button1->Caption=="Вручную")
{
Label10->Show();
Button4->Caption="Сохранить";
CSpinEdit1->Show();
StringGrid1->ColCount=CSpinEdit1->Value+1;
int R=CSpinEdit1->Value;
Kod->setR(R);
bool *pol=new bool[R+1];
pol[0]=1;
int i;
for(i=1; i<=R; i++)
pol[i]=0;
Kod->setPol(pol);
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
55
for(i=0; i<=R; i++)
StringGrid1->Cells[i][0]=IntToStr(Kod->getPol()[i]);
Button1->Caption="Отмена";
Button2->Show();
Button5->Show();
int max=1;
for(i=0;i<R;i++)
max*=2;
max=max-1-R;
if (max>32768) max=32768;
if (max<1) max=1;
CSpinEdit2->MaxValue=max;
StringGrid1->Enabled=1;
CSpinEdit2->Show();
Label11->Show();
N7->Enabled=0;
}
else
{
CSpinEdit2->Hide();
Label11->Hide();
Button1->Caption="Вручную";
Button4->Caption="Загрузить";
StringGrid1->ColCount=20;
for(int i=0; i<20; i++)
StringGrid1->Cells[i][0]="";
StringGrid1->Enabled=0;
N7->Enabled=1;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(Button2->Caption=="Вручную")
{
Button5->Caption="Сохранить";
StringGrid2->ColCount=CSpinEdit2->Value;
int N=CSpinEdit2->Value;
Kod->setN(Kod->getR()+N);
bool *inf=new bool[Kod->getN()];
int i;
for(i=0; i<N; i++)
inf[i]=0;
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
56
Kod->setInf(inf);
for(i=0; i<N; i++)
StringGrid2->Cells[i][0]=IntToStr(Kod->getInf()[i]);
Button2->Caption="Отмена";
StringGrid2->Enabled=1;
Button11->Show();
N20->Enabled=1;
}
else
{
Button2->Caption="Вручную";
Button5->Caption="Загрузить";
StringGrid2->ColCount=20;
for(int i=0; i<20; i++)
StringGrid2->Cells[i][0]="";
StringGrid2->Enabled=0;
Button11->Hide();
N20->Enabled=0;
}
}
//--------------------------------------------------------------------------int Col=0;
void __fastcall TForm1::StringGrid1DblClick(TObject *Sender)
{
if(Col!=0)
{
Kod->getPol()[Col]=StrToInt(StringGrid1->Cells[Col][0])^1;
StringGrid1->Cells[Col][0]=IntToStr(Kod->getPol()[Col]);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
Col=ACol;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid2DblClick(TObject *Sender)
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
57
{
Kod->getInf()[Col]=StrToInt(StringGrid2->Cells[Col][0])^1;
StringGrid2->Cells[Col][0]=IntToStr(Kod->getInf()[Col]);
}
//--------------------------------------------------------------------------void __fastcall TForm1::StringGrid2SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
Col=ACol;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button11Click(TObject *Sender)
{
Kod->Coder();
StringGrid3->ColCount=Kod->getR();
StringGrid4->ColCount=Kod->getN();
StringGrid5->ColCount=Kod->getN();
int i;
for(i=0; i<Kod->getR(); i++)
StringGrid3->Cells[i][0]=IntToStr(Kod->getCod()[i+1]);
bool *err=new bool[Kod->getN()];
for(i=0; i<Kod->getN(); i++)
{
err[i]=0;
StringGrid4->Cells[i][0]=IntToStr(Kod->getInf()[i]);
StringGrid5->Cells[i][0]=IntToStr(err[i]);
}
Kod->setErr(err);
StringGrid5->Enabled=1;
Button7->Show();
Button12->Show();
Button3->Show();
N21->Enabled=1;
}
//--------------------------------------------------------------------------void __fastcall TForm1::StringGrid5DblClick(TObject *Sender)
{
Kod->getErr()[Col]=StrToInt(StringGrid5->Cells[Col][0])^1;
StringGrid5->Cells[Col][0]=IntToStr(Kod->getErr()[Col]);
}
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
58
//--------------------------------------------------------------------------void __fastcall TForm1::StringGrid5SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
Col=ACol;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button12Click(TObject *Sender)
{
Kod->Decod();
StringGrid6->ColCount=Kod->getR();
StringGrid7->ColCount=Kod->getN()-Kod->getR();
for(int i=0; i<Kod->getN(); i++)
{
StringGrid5->Cells[i][0]=IntToStr(Kod->getErr()[i]);
}
int err=0, k=0, i;
for(i=0; i<Kod->getR(); i++)
{
if(Kod->getOst()[i+1]==1)
k=1;
StringGrid6->Cells[i][0]=IntToStr(Kod->getOst()[i+1]);
}
for(i=0; i<Kod->getN()-Kod->getR(); i++)
{
if(Kod->getDec()[i]!=Kod->getInf()[i])
err++;
StringGrid7->Cells[i][0]=IntToStr(Kod->getDec()[i]);
}
if(k==0)
Memo1->Lines->Add("Передано без ошибок");
else
{
Memo1->Lines->Add("Ошибки при передаче");
if(err==0)
Memo1->Lines->Add("Ошибки исправлены");
else Memo1->Lines->Add("Передано с "+IntToStr(err)+" ошибками");
}
Button14->Show();
}
//---------------------------------------------------------------------------
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
59
void __fastcall TForm1::Button4Click(TObject *Sender)
{
if(Button4->Caption=="Загрузить")
{
bool* pol;
OpenDialog1->Filter="*.pol|*.pol";
if(OpenDialog1->Execute())
{
AnsiString filename=OpenDialog1->FileName;
FILE *P=fopen(filename.c_str(),"rb");
fseek(P,0l,0);
char A=128;
int i=0;
char a[5]={0};
do
{
a[i]=fgetc(P);
i++;
} while(feof(P)==0&&i<4);
Kod->setR(a[0]);
pol=new bool[Kod->getR()+1];
int q=0;
for(i=0;i<4;i++)
{
A=128;
for(int j=0;j<8;j++)
{
if((8*i+j)<=Kod->getR())
{pol[8*i+j]=((a[i+1]&A)>>(7-j))&0x1;
A=A/2;
q++; }
}
}
fclose(P);
StringGrid1->ColCount=Kod->getR()+1;
for(int i=0; i<=Kod->getR(); i++)
StringGrid1->Cells[i][0]=IntToStr(pol[i]);
Kod->setPol(pol);
Button2->Show();
Button5->Show();
int max=1, R=Kod->getR();
for(int i=0;i<R;i++)
max*=2;
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
60
max=max-1-R;
if (max>32768) max=32768;
if (max<1) max=1;
CSpinEdit2->MaxValue=max;
StringGrid1->Enabled=1;
CSpinEdit2->Show();
Label11->Show();
Button4->Caption="Сохранить";
N7->Enabled=0;
N14->Enabled=1;
Memo1->Lines->Add("Загружен файл "+filename);
CSpinEdit1->Value=Kod->getR();
}
}
else
{
SaveDialog1->Filter="*.pol|*.pol";
if(SaveDialog1->Execute())
{
AnsiString filename=SaveDialog1->FileName+".pol";
AnsiString s="";
FILE *P=fopen(filename.c_str(),"w+b");
fseek(P,0l,0);
if(Kod->getPol()!=0)
{
char L=0;
int A=128;
L=L|(Kod->getR());
fputc(L,P);
for(int i=0;i<=Kod->getR()/8;i++)
{
L=0;
A=0x80;
for(int j=0;j<8;j++)
{
if(8*i+j<=Kod->getR()) L=L|((Kod->getPol()[i*8+j])*A);
A=A/2;
}
fputc(L,P);
}
}
fclose(P);
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
61
Memo1->Lines->Add("Полином сохранен "+filename);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
if(Button5->Caption=="Загрузить")
{
bool* inf;
int K;
OpenDialog1->Filter="*.inf|*.inf";
if(OpenDialog1->Execute())
{
AnsiString filename=OpenDialog1->FileName;
FILE *P=fopen(filename.c_str(),"rb");
fseek(P,0l,0);
char A=128;
int i=0;
fread(&K, sizeof(K), 1, P);
if(K>CSpinEdit2->MaxValue)
K=CSpinEdit2->MaxValue;
Kod->setN(K+Kod->getR());
inf=new bool[Kod->getN()];
char m, c;
for(i=0;i<=K/8;i++)
{
A=128;
c=fgetc(P);
for(int j=0;j<8;j++)
{
if((8*i+j)<K)
{
m=0;
m=m|1<<7-j;
m=c&m;
m=m>>7-j;
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
62
if(m)
inf[8*i+j]=true;
else
inf[8*i+j]=false;
}
}
}
fclose(P);
StringGrid2->ColCount=K;
for(int i=0; i<K; i++)
StringGrid2->Cells[i][0]=IntToStr(inf[i]);
Kod->setInf(inf);
Button2->Caption="Отмена";
StringGrid2->Enabled=1;
Button11->Show();
Button5->Caption="Сохранить";
N20->Enabled=1;
Memo1->Lines->Add("Загружен файл "+filename);
CSpinEdit2->Value=Kod->getN()-Kod->getR();
}
}
else
{
SaveDialog1->Filter="*.inf|*.inf";
if(SaveDialog1->Execute())
{
AnsiString filename=SaveDialog1->FileName+".inf";
AnsiString s="";
FILE *P=fopen(filename.c_str(),"w+b");
fseek(P,0l,0);
bool*inf=Kod->getInf();
if(Kod->getInf()!=0)
{
char L=0;
int A=128;
int K=(Kod->getN()-Kod->getR());
fwrite(&K, sizeof(K), 1, P);
for(int i=0;i<=K/8;i++)
{
L=0;
for(int j=0;j<8;j++)
{
if(8*i+j<K)
if(inf[8*i+j])
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
63
L=L|1<<7-j;
}
fputc(L,P);
}
}
fclose(P);
Memo1->Lines->Add("Информация сохранена "+filename);
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button7Click(TObject *Sender)
{
bool* err;
int K;
OpenDialog1->Filter="*.err|*.err";
if(OpenDialog1->Execute())
{
AnsiString filename=OpenDialog1->FileName;
FILE *P=fopen(filename.c_str(),"rb");
fread(&K, sizeof(K), 1, P);
if(K>Kod->getN())
K=Kod->getN();
char c, m;
int i=0;
/*char *a=new char;
do
{
a[i]=fgetc(P);
i++;
} while(feof(P)==0&&i<=b/8); */
err=new bool[Kod->getN()];
for(i=0;i<=K/8;i++)
{
c=fgetc(P);
for(int j=0;j<8;j++)
{
if((8*i+j)<K)
{
// err[8*i+j]=((a[i]&A)>>(7-j))&0x1;
// A=A/2;
m=0;
m=m|1<<7-j;
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
64
m=c&m;
m=m>>7-j;
if(m)
err[8*i+j]=true;
else
err[8*i+j]=false;
}
}
}
fclose(P);
if(K<Kod->getN())
for(int i=K; i<Kod->getN(); i++)
err[i]=0;
for(int i=0; i<Kod->getN(); i++)
StringGrid5->Cells[i][0]=IntToStr(err[i]);
Kod->setErr(err);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
SaveDialog1->Filter="*.err|*.err";
if(SaveDialog1->Execute())
{
AnsiString filename=SaveDialog1->FileName+".err";
AnsiString s="";
FILE *P=fopen(filename.c_str(),"w+b");
fseek(P,0l,0);
bool*err=Kod->getErr();
if(Kod->getErr()!=0)
{
char L=0;
int A=128;
int K=Kod->getN();
fwrite(&K, sizeof(K), 1, P);
//L=L|K;
//fputc(L,P);
for(int i=0;i<=K/8;i++)
{
L=0;
A=0x80;
for(int j=0;j<8;j++)
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
65
{
if(8*i+j<K)
if(err[i*8+j])
L=L|1<<7-j;
}
fputc(L,P);
}
}
fclose(P);
Memo1->Lines->Add("Ошибки сохранены "+filename);
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button14Click(TObject *Sender)
{
Label11->Hide();
CSpinEdit2->Hide();
Button11->Hide();
Button12->Hide();
Button7->Hide();
Button2->Hide();
Button5->Hide();
Button3->Hide();
Button1->Caption="Вручную";
Button2->Caption="Вручную";
Button4->Caption="Загрузить";
Button5->Caption="Загрузить";
Button6->Caption="Рандом";
// N6->Enabled=0;
N20->Enabled=0;
N21->Enabled=0;
StringGrid1->Enabled=0;
StringGrid2->Enabled=0;
StringGrid5->Enabled=0;
StringGrid1->ColCount=20;
StringGrid2->ColCount=20;
StringGrid3->ColCount=20;
StringGrid4->ColCount=20;
StringGrid5->ColCount=20;
StringGrid6->ColCount=20;
StringGrid7->ColCount=20;
for(int i=0; i<20; i++)
{
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
66
StringGrid1->Cells[i][0]="";
StringGrid2->Cells[i][0]="";
StringGrid3->Cells[i][0]="";
StringGrid4->Cells[i][0]="";
StringGrid5->Cells[i][0]="";
StringGrid6->Cells[i][0]="";
StringGrid7->Cells[i][0]="";
}
CSpinEdit2->MaxValue=32768;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{
SaveDialog1->Filter="*.cod|*.cod";
if(SaveDialog1->Execute())
{
AnsiString filename=SaveDialog1->FileName+".cod";
AnsiString s="";
FILE *P=fopen(filename.c_str(),"w+b");
fseek(P,0l,0);
if(Kod->getInf()!=0)
{
char L=0;
int A=128;
int K=Kod->getN();
fwrite(&K, sizeof(K), 1, P);
for(int i=0;i<=K/8;i++)
{
L=0;
A=0x80;
for(int j=0;j<8;j++)
{
if(8*i+j<K)
if(Kod->getInf()[8*i+j])
L=L|1<<7-j;
}
fputc(L,P);
}
}
fclose(P);
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
67
Memo1->Lines->Add("Кодированное
сообщение
"+filename);
}
}
//---------------------------------------------------------------------------
сохранено
void __fastcall TForm1::Button10Click(TObject *Sender)
{
bool* cod;
OpenDialog1->Filter="*.cod|*.cod";
if(OpenDialog1->Execute())
{
AnsiString filename=OpenDialog1->FileName;
FILE *P=fopen(filename.c_str(),"rb");
fseek(P,0l,0);
int K;
fread(&K, sizeof(K), 1, P);
char A=128;
int i=0;
char c, m;
//char b=fgetc(P);
/*char *a=new char;
do
{
a[i]=fgetc(P);
i++;
} while(feof(P)==0&&i<=b/8); */
cod=new bool[K];
for(i=0;i<=K/8;i++)
{
c=fgetc(P);
for(int j=0;j<8;j++)
{
if((8*i+j)<K)
{
/*cod[8*i+j]=((a[i]&A)>>(7-j))&0x1;
A=A/2;*/
m=0;
m=m|1<<7-j;
m=c&m;
m=m>>7-j;
if(m)
cod[8*i+j]=true;
else
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
68
cod[8*i+j]=false;
}
}
}
fclose(P);
StringGrid4->ColCount=K;
for(int i=0; i<K; i++)
StringGrid4->Cells[i][0]=IntToStr(cod[i]);
Kod->setInf(cod);
Memo1->Lines->Add("Загружен файл "+filename);
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button13Click(TObject *Sender)
{
SaveDialog1->Filter="*.dec|*.dec";
if(SaveDialog1->Execute())
{
AnsiString filename=SaveDialog1->FileName+".dec";
AnsiString s="";
FILE *P=fopen(filename.c_str(),"w+b");
int K;
fseek(P,0l,0);
if(Kod->getDec()!=0)
{
char L=0;
int K=Kod->getN()-Kod->getR();
fwrite(&K, sizeof(K), 1, P);
for(int i=0;i<=K/8;i++)
{
L=0;
for(int j=0;j<8;j++)
{
if(8*i+j<K)
if(Kod->getDec()[i*8+j])
L=L|1<<7-j;
}
fputc(L,P);
}
}
fclose(P);
Memo1->Lines->Add("Декодированное
сообщение
"+filename);
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
сохранено
Лист
69
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button15Click(TObject *Sender)
{
bool* dec;
int K;
OpenDialog1->Filter="*.dec|*.dec";
if(OpenDialog1->Execute())
{
AnsiString filename=OpenDialog1->FileName;
FILE *P=fopen(filename.c_str(),"rb");
fread(&K, sizeof(K), 1, P);
char c, m;
int i=0;
dec=new bool[K];
for(i=0;i<=K/8;i++)
{
c=fgetc(P);
for(int j=0;j<8;j++)
{
if((8*i+j)<K)
{
m=0;
m=m|1<<7-j;
m=c&m;
m=m>>7-j;
if(m)
dec[8*i+j]=true;
else
dec[8*i+j]=false;
}
}
}
fclose(P);
StringGrid7->ColCount=K;
for(int i=0; i<K; i++)
StringGrid7->Cells[i][0]=IntToStr(dec[i]);
Kod->setDec(dec);
Memo1->Lines->Add("Загружен файл "+filename);
}
}
//--------------------------------------------------------------------------ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
70
void __fastcall TForm1::N4Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
Form2->Show();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button6Click(TObject *Sender)
{
randomize();
if(Button6->Caption=="Рандом")
{
CSpinEdit2->Show();
Button6->Caption="OK";
Label11->Show();
Button1->Hide();
Button2->Hide();
Button4->Hide();
}
else
{
int i;
bool *a, *b;
Kod->setR(CSpinEdit1->Value);
int max=1;
for(i=0;i<Kod->getR();i++)
max*=2;
max=max-1-Kod->getR();
StringGrid1->Enabled=1;
StringGrid2->Enabled=1;
if (max>32768) max=32768;
if (max<1) max=1;
CSpinEdit2->MaxValue=max;
Kod->setN(CSpinEdit2->Value+Kod->getR());
a=new bool[Kod->getR()];
b=new bool[Kod->getN()];
StringGrid1->ColCount=Kod->getR();
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
71
StringGrid2->ColCount=Kod->getN()-Kod->getR();
a[0]=1;
StringGrid1->Cells[0][0]=IntToStr(a[0]);
for(i=1; i<Kod->getR(); i++)
{
a[i]=rand()%2;
StringGrid1->Cells[i][0]=IntToStr(a[i]);
}
for(i=0; i<Kod->getN()-Kod->getR(); i++)
{
b[i]=rand()%2;
StringGrid2->Cells[i][0]=IntToStr(b[i]);
}
Kod->setPol(a);
Kod->setInf(b);
Button11->Show();
Button4->Show();
Button5->Show();
Button5->Caption="Сохранить";
Button4->Caption="Сохранить";
Button2->Caption="Отмена";
}
}
//---------------------------------------------------------------------------
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
72
Приложение B
(справочное)
Библиографический список
1. Тутевич В.Н. Телемеханика. – М.:Высшая школа, 1985. – 423 с.
2.Чернега В.С., Василенко В.А., Бондарев В.Н. Расчет и проектирование
технических средств обмена и передачи информации. – М.:Высш. шк., 1990.
– 224 с.
3.Супрун Б.А. Первичные коды. М., Связь, 1970 - 161 с.
4.Методические
указания
по
выполнению
курсового
проекта.
Проектирование системы передачи данных. – Киров 2007.
5.СТП ВятГУ 101 – 2004. Общие требования к оформлению текстовых
документов. – Киров, 2004. – 29 с.
6.СТП ВятГУ 102 – 2004. Общие требования к структуре, оформлению и
представлению курсовых проектов и работ. – Киров, 2004. – 26 с.
7.Бармин И.Н. Курс лекций 2011 г.
ТПЖА.230201.032.026 ПЗ
Изм. Лсит
.
№ документа
Подпись
Дата
Лист
73
Документ
Категория
Компьютеры, Программирование
Просмотров
141
Размер файла
2 030 Кб
Теги
пояснительная, записка
1/--страниц
Пожаловаться на содержимое документа