Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом_Петрук.doc
Скачиваний:
35
Добавлен:
13.08.2019
Размер:
829.44 Кб
Скачать

3.2 Описание блок схем алгоритмов программы

На рисунке 3.1 представлены этапы преобразования данных в разработанной программе.

Рисунок 3.1 – Этапы преобразования исходных данных в программе

Ниже представлены блок схемы алгоритмов каждого этапа .

Рисунок 3.2 - Блок схема для алгоритма преобразования текстового сообщения в двоичный код

Как видно из рисунка 3.2 исходное текстовое сообщение преобразуется в набор бит посимвольно. Каждый символ имеет свое двоичное представление (ASCII код). На очередной итерации применяя операцию побитового маскирования (1 shl j > 0) алгоритм определяет, является ли текущий бит символом 1 или 0 и конкатенирует результат в итоговую строку str.

Стандартный набор символов ASCII состоит из 128 десятичных чисел в пределах от 0 до 127, назначенных буквам, цифрам, знакам препинания и самым употребляемым специальным символам. Расширенный набор символов ASCII дополнительно содержит 128 десятичных чисел в пределах от 128 до 255, представляющих дополнительные специальные, математические, графические и иностранные символы (См. Приложение Б).

На рисунке 3.3 приведена блок схема для алгоритма функционирования сверточного кодера.

Рисунок 3.3 - Блок схема для алгоритма функционирования сверточного кодера

На очередном этапе преобразования сообщения вызывается функция coding класса MealyAutomaton, которая осуществляет преобразование согласно формуле приведенной на рисунке 3.3

На рисунке 3.4 приведена блок схема алгоритма имитации передачи через канал связи.

Рисунок 3.4 - Блок схема для алгоритма имитации передачи через канал связи

Как видно из приведенного выше алгоритма максимальное количество генерируемых ошибок вычисляется по формуле:

Max = Nсообщ * Pош / 100 (3.1)

где Мax – максимальное количество ошибок

Nсообщ – длина сообщения

Рош – вероятность ошибки (%)

Т.е. если длина сообщения равна 100 бит, а вероятность ошибки - 10 % то генератор сгенерирует от 0 до 10 ошибок. Схема генерации ошибок такова: функция на очередной итерации генерирует случайную величину X, используя стандартную функцию rand следующим образом:

random(99) + 1

затем данное если данное значение меньше вероятности ошибки:

if (random(99) + 1 <= errorProbability)

то происходит генерации ошибочных бит (нули заменяются на единицы и наоборот) в зависимости от параметра «длина пачки ошибок» начиная с позиции i (переменная цикла обработки). Затем происходит инкремент переменной цикла i и все повторяется сначала до тех пор, пока не закончится сообщение или число сгенерированных ошибок не превысит число допустимых ошибок.

На рисунке 3.5 приведено распределение функции random для чисел от 1 до 100.

Рисунок 3.5 – Распределение функции random

Как видно из рисунка 3.5, данное распределение близко к равновероятному, а это, в свою очередь, позволяет достаточно хорошо имитировать случайные ошибки в канале связи.

На рисунках ниже приведена статистика по тестированию генератора ошибок при длине тестового сообщения 100 бит.

Рисунок 3.6 – Тестирование генератора ошибок:

Длина тестового сообщения – 100 бит; Вероятность ошибок: 0,02; Длина пачки ошибок: 1

Рисунок 3.7 – Тестирование генератора ошибок:

Длина тестового сообщения – 100 бит; Вероятность ошибок: 0,1; Длина пачки ошибок: 1

Рисунок 3.8 – Тестирование генератора ошибок:

Длина тестового сообщения – 100 бит; Вероятность ошибок: 0,02; Длина пачки ошибок: 2

Рисунок 3.9 – Тестирование генератора ошибок:

Длина тестового сообщения – 100 бит; Вероятность ошибок: 0,1; Длина пачки ошибок: 2

На рисунке 3.10 приведена блок схема алгоритма функционирования декодера.

Рисунок 3.10 - Блок схема для алгоритма функционирования декодера

На каждой итерации декодер (TTreeHandler) вызывает процедуру createLevel которая исходя из входящего кода (3 декодируемых бита) строит очередной уровень сети (который может иметь до 16 узлов) и рассчитывает метрики путей. Согласно структуре TListElemPtr все уровни сети связаны указателями pnext и pprev. После полного построения сети декодер выбирает узел на последнем уровне с минимальной метрикой пути, а затем, возвращаясь по указателям pprev, строит декодируемый путь (процедура decode). После чего отображает построенную сеть (функции printTree);

Рисунок 3.11 - Блок схема для алгоритма преобразования из двоичного кода в текстовое сообщение

Как видно из рисунка 3.11 исходный набор бит преобразуется в текстовое сообщение поблочно (по 8 бит – 1символ в ASCII представлении). На очередной итерации преобразования переменная sym (это будущий текстовый символ) сдвигается на 1 бит вправо (sym shr j), после чего к ней прибавляется очередной бит X. После того как в переменную sym попало 8 бит, результирующая строка конкатенируется с переменной sym.

На рисунках ниже приведена статистика по тестированию декодера при длине тестового сообщения 100 бит.

Рисунок 3.12 – Тестирование сверточного декодера:

Длина тестового сообщения – 100 бит; Вероятность ошибок: 0,05; Длина пачки ошибок: 1

Рисунок 3.13 – Тестирование сверточного декодера: Длина тестового сообщения – 100 бит; Вероятность ошибок: 0,1; Длина пачки ошибок: 1

Рисунок 3.14 – Тестирование сверточного декодера:

Длина тестового сообщения – 100 бит; Вероятность ошибок: 0,05; Длина пачки ошибок: 2

Рисунок 3.15 – Тестирование сверточного декодера:

Длина тестового сообщения – 100 бит; Вероятность ошибок: 0,1; Длина пачки ошибок: 2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]