Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Кодирование в радиоэлектронных системах передачи информации

..pdf
Скачиваний:
15
Добавлен:
05.02.2023
Размер:
11.37 Mб
Скачать

181

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

В разрабатываемом программном комплексе имеется возможность пронаблюдать эффективность работы последовательного декодера свёрточных кодов как при наличии однократных ошибок, так и пачек длиною L > 1.

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

Рис. 3.77. Блок-схема для алгоритма имитации канала связи

За имитацию канала связи отвечает функция «Fun_SimulatorChannelCom». В ней, первым делом, определяется максимальное количество генерируемых ошибок:

max_mistake_dou = length_array * (CInt(probability_mistake) / 100),

где: max_mistake_dou – максимальное количество ошибок length_array – длина сообщения

probability_mistake – вероятность ошибки

Например, если длина сообщения равна 80 бит, а битовая вероятность ошибки – 0.1 то генератор сгенерирует от 0 до 8 ошибок.

Далее, активируется обычный генератор случайных чисел в диапазоне от 1 до 100:

Dim value As Integer = CInt(Int((100 * Rnd()) + 1))

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

182

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

Рис. 3.78. Элемент программного кода функции имитации канала связи Если были заданы двойные ошибки, инвертируются по два соседних бита.

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

Функция вычисления метрик путей

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

Расстояние Хэмминга — число позиций, в которых соответствующие символы двух слов одинаковой длины различны. Согласно выбранному алгоритму вычисления метрик путей, биты сообщения суммируются по модулю два со значениями возможных путей и полученному результату подставляется его десятичное значение, соответствующее величине расстояния Хемминга между слагаемыми. За это отвечает функция «Fun_Metric»,

программная реализация которой приведена на рисунке 3.70, где: s_1 – биты сообщения;

s_2 – возможные значения путей решетки;

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

res_1 - десятичное значение, соответствующее величине расстояния Хемминга между слагаемыми.

183

Рис. 3.79. Программный код функции вычисления метрик путей Из таблицы 3.4 видно, что значение 00 может стать результатом суммирования

только двух слов, биты которых не отличаются ни в одной из позиций, а это значит, что расстояние Хемминга между такими словами рано 0. Значения res = 01 и res = 10 возможны лишь в том случае, если по модулю 2 суммировались слова, соответствующие биты которых отличаются друг от друга в одной позиции, то есть расстояние Хемминга между ними равно 1. Что же касается значения res = 11, то оно может получиться только в результате сложения двух слов, биты которых в обеих позициях отличаются, и расстояние Хемминга между этими словами равно 2.

Таблица 3.4. Вычисление метрик путей

Вход

Состоя

Сумматор 1

 

Суммат

Выходн

такта

ной

ние

 

 

 

 

ор 2

ые кодовые

 

информац

регистра

 

 

 

 

 

комбинации

 

ионный

сдвига

 

 

 

 

 

 

 

бит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

-

0000

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

1

1

1000

1

0

0=1

 

1

11

 

 

 

 

 

 

0

0=1

 

 

 

 

 

 

 

 

 

 

2

0

0100

0

0

0=0

 

0

01

 

 

 

 

 

 

1

0=1

 

 

 

 

 

 

 

 

 

 

3

1

1010

1

1

0=0

 

1

01

 

 

 

 

 

 

0

0=1

 

 

 

 

 

 

 

 

 

 

4

1

1101

1

0

1=0

 

1

01

 

 

 

 

 

 

 

 

 

184

 

 

 

 

 

 

1

1=1

 

 

 

 

 

 

 

 

 

 

5

0

0110

0

1

0=1

 

0

11

 

 

 

 

 

 

1

0=1

 

 

 

 

 

 

 

 

 

 

6

1

1011

1

1

1=1

 

1

10

 

 

 

 

 

 

0

1=0

 

 

 

 

 

 

 

 

 

 

Функция декодирования последовательным алгоритмом

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

S_str_Array()).

Как мы уже знаем из теории, на первом шаге декодирования состояние декодера –

00, возможны только два пути, к узлам 00 и 10, которымсоответствуют кодовые символы с выхода кодера 00 и 11.

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

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

00 и 01 к переходу в узел 00, а кодовые комбинации 10 и 11 к переходу в узел 10. Так мы избавляемся от неопределённостей, заставляя декодер принять решение, даже если пришла не разрешенная комбинация.

Рис. 3.80. Элемент программного кода функции декодирования последовательным алгоритмом

После того как путь выбран, в переменную state_metric записывается значение метрики пути, вычисленное описанной функцией Fun_Metric. Далее ставится метка 0 или 1,

185

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

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

Далее происходит аналогичные операции, только количество возможных путей увеличивается до 4-х (00, 01, 10, 11), осуществляется переход ко второму шагу декодирования. Граф автомата, каковым является наш декодер, принимает вид показанный на рисунке 3.82

Рис. 3.81. Граф реализуемого последовательного декодера Стратегия представленная на рисунке 3.82 реализуется при помощи алгоритма

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

Если мы находимся в узле 00 или 11, и пришла комбинация 00 или 01 –

считаем что передавался ноль (двигаемся вверх), 10 или 11 – передавалась единица

(двигаемся вниз).

Если мы находимся в узле 01 или 10, и пришла комбинация 00 или 01 –считаем что передавалась единица (двигаемся вниз)., 10 или 11 – передавался ноль (двигаемся вверх).

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

Подготовка к выводу результатов декодирования

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

по 8 бит и каждую пачку преобразуем в десятичное число по принципу: + + + +

 

186

+ + +

а затем получаем символ из его ASCII-кода. Повторяем операции пока не

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

Сверточное декодирование. Практическая часть

ЗАДАНИЕ №1

Вариант 1

Сверточный код: g1(X) = l+ X2 + X3 , g2(X) = 1 + X + X3.

Входная последовательность: V = 10110.

На рисунке 3.73 представлен сверточный кодер.

Рис. 3.82. Свёрточный кодер

Произвели кодирование входной последовательности V данным свёрточным кодером и нарисовали таблицу кодирования информационного потока. Данные представлены в таблице

3.5.

Таблица 3.5. Процесс кодирования информационного потока

Вход

Состоя

Сумматор 1

 

Суммат

Выходн

такта

ной

ние

 

 

 

ор 2

ые кодовые

 

информац

регистра

 

 

 

 

 

комбинации

 

ионный

сдвига

 

 

 

 

 

 

 

бит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

-

0000

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

1

1

1000

1

0

0=1

 

1

11

 

 

 

 

 

 

0

0=1

 

 

 

 

 

 

 

 

 

 

2

0

0100

0

0

0=0

 

0

01

 

 

 

 

 

 

 

 

 

187

 

 

 

 

 

 

1

0=1

 

 

 

 

 

 

 

 

 

 

3

1

1010

1

1

0=0

 

1

01

 

 

 

 

 

 

0

0=1

 

 

 

 

 

 

 

 

 

 

4

1

1101

1

0

1=0

 

1

01

 

 

 

 

 

 

1

1=1

 

 

 

 

 

 

 

 

 

 

5

0

0110

0

1

0=1

 

0

11

 

 

 

 

 

 

1

0=1

 

 

 

 

 

 

 

 

 

 

6

1

1011

1

1

1=1

 

1

10

 

 

 

 

 

 

0

1=0

 

 

 

 

 

 

 

 

 

 

Построили решетку кодера:

Рис. 3.83. Решетка кодера Изобразили решетку декодера и произвели декодирование:

Рис. 3.84. Решетка декодера

188

В результате были выявлены 6 ошибок: После декодера был получен результат:

11 10 11 01 10 01. Подчеркиванием выделены места, где были совершены ошибки.

Вариант 2

Сверточный код: g1(X) =X+ X2 + X3, g2(X) = 1 + X + X2.

Входная последовательность: V = 010100.

На рисунке 3.85 представлен сверточный кодер.

Рис. 3.85. Свёрточный кодер

Произвели кодирование входной последовательности V данным свёрточным кодером и нарисовали таблицу кодирования информационного потока. Данные представлены в таблице

3.6.

Таблица 3.6. Процесс кодирования информационного потока

Вход

Состоя

Сумматор 1

 

Суммат

Выходн

такта

ной

ние

 

 

 

ор 2

ые кодовые

 

информац

регистра

 

 

 

 

 

комбинации

 

ионный

сдвига

 

 

 

 

 

 

 

бит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

-

0000

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

1

0

0000

0

0

0=0

 

0

00

 

 

 

 

 

 

0

0=0

 

 

 

 

 

 

 

 

 

 

2

0

0000

0

0

0=0

 

0

00

 

 

 

 

 

 

0

0=0

 

 

 

 

 

 

 

 

 

 

3

1

1000

1

0

0=1

 

1

11

 

 

 

 

 

 

 

 

 

189

 

 

 

 

 

 

0

0=1

 

 

 

 

 

 

 

 

 

 

4

0

0100

0

0

0=0

 

0

01

 

 

 

 

 

 

1

0=1

 

 

 

 

 

 

 

 

 

 

5

1

1010

1

1

0=0

 

1

00

 

 

 

 

 

 

0

1=0

 

 

 

 

 

 

 

 

 

 

6

0

0101

0

0

1=1

 

0

11

 

 

 

 

 

 

1

0=1

 

 

 

 

 

 

 

 

 

 

Построили решетку кодера:

 

 

 

 

 

 

Рис. 3.86. Решетка кодера Изобразили решетку декодера и произвели декодирование:

Рис. 3.87. Решетка декодера В результате были выявлены 5 ошибок: После декодера был получен результат:

00 00 10 11 01 00. Подчеркиванием выделены места, где были совершены ошибки.

ЗАДАНИЕ №2

Построить графики зависимости числа ошибок от вероятности ошибок для одиночной и двойной длины ошибок.

190

 

Рис. 3.88. Процесс кодирования и декодирования

 

График зависимости числа ошибок от вероятности ошибок для одиночной длины ошибок

представлен на рисунке 3.89, а для двойной длины ошибок на рисунке 3.90.

 

35

 

 

 

 

 

 

30

 

 

 

 

 

 

25

 

 

 

 

 

ошибок

20

 

 

 

 

 

 

 

 

 

 

 

Число

15

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

5

 

 

 

 

 

 

0

 

 

 

 

 

 

0

0,1

0,2

0,3

0,4

0,5

 

 

 

Вероятность ошибки

 

 

Рис. 3.89. График зависимости числа ошибок от вероятности ошибок для одиночной

 

 

 

длины ошибок

 

 

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