«Қоғамды ақпараттандыру» III Халықаралық ғылыми-практикалық конференция
300
УДК 517.51
ЕФИМОВ Д. А.
Евразийский Национальный университет им. Л. Н. Гумилева. Астана, Казахстан ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ ТУРБОКОДОВ НА ПРИМЕРЕ КЛИЕНТ-
СЕРВЕРНОГО ПРИЛОЖЕНИЯ
Программа представляет собой клиент-серверное приложение. Все клиенты обмениваются сообщениями через сервер[1]. Когда пользователь отправляет сообщение, они приходит на сервер, откуда впоследствии рассылается всем пользователям сети. Каждое сообщение кодируется при помощи турбокодов. Сообщения проходят через канал с шумами между клиентом и сервером, где некоторые биты сообщения повреждаются. Сообщение при получении клиентом декодируется, ошибки исправляются, затем сообщение выводится на экран.
Класс представляет собой кодировщик символов в бинарный код, а также их обратное преобразование. В классе описаны два алфавита: символьный и бинарный, реализованные в виде массивов. Каждому символу одного массива ставится в соответствие восьми битный код другого массива.
Класс Binary реализует два метода. strToBinary() и binaryToStr(). Первый метод реализует перевод символов в бинарный код, второй метод производит обратное преобразование[2].
Рассмотрим использование данного класса на конкретном примере.
Предположим, пользователь отправил сообщение с текстом «привет». В этом случае вызывается метод strToBinary(), в который в качестве входного параметра передается пользовательское сообщение. Сообщение представляется в виде строки (массива с символьными данными). Далее происходит считывание символов из строки и сопоставление каждого из них с алфавитом символов. При обнаружении сходства будет добавлен восьми битный код, соответствующий найденному символу.
Для сообщения с текстом «привет» будет найдено следующее соответствие:
Таким образом, результатом выполнения процедуры strToBinary() будет двоичное слово:
. (1)
Аналогично для процедуры binaryToStr(). Если в качестве входной информации в процедуру будет передано сообщение (1), то на выходе процедуры получим сообщение «привет».
Классы Interleaver и Deinterleaver реализуют периодические перемежитель и деперемежитель.
Перемежение реализуется с помощью матрицы перемежения, в которую по строкам записывается информационное слово. Результатом операции перемежения является слово, считанное по столбцам матрицы перемежения.
Рассмотрим пример, когда в перемежитель будет передано информационное слово «привет» в двоичном виде (формула (1)). На рисунке 1 изображена матрица перемежения, построенная из формулы (1), переданной в качестве входного параметра для процедуры Interleave() класса Interleaver.
«Қоғамды ақпараттандыру» III Халықаралық ғылыми-практикалық конференция
301
Рисунок 1. Матрица перемежения
В случае, когда вызывается процедура деперемежения, строится матрица деперемежения, аналогичная той, что изображена на рисунке 1. Однако в этом случае считывание элементов производится по столбцам матрицы.
Результатом процедуры Deinterleave() класса Deinterleaver будет слово:
. (2)
Класс RSC. Рекурсивный сверточный кодер реализован в классе RSC в файле RSC.cs. В данном классе описана одна процедура getParityBits(), входным параметром которой является информационное слово, проверочные биты которого нужно получить. Возвращает процедура массив проверочных бит.
Основное отличие моего программно реализованного рекурсивного сверточного кодера от кодера, описанного в литературе, является его возврат лишь проверочных бит без возврата самого информационного слова. Это отличие обуславливается строением турбокодера. Как видно из рисунка в дальнейшем используется лишь информация относительно проверочных бит, информационное слово же напрямую поступает в мультиплексор. Поэтому логично было не реализовывать часть функций RSC-кодера, где идет возврат информационных бит.
Рассмотрим работу RSC-кодера, для информационного слова в формуле (1).
Для удобства изложения, информационные биты будем обозначать символом «И» с индексом, соответствующим номеру информационного бита в исходной последовательности ( – пятый информационный бит). Проверочные биты будем обозначать символом «П» с индексом соответствующим номеру проверочного бита ( – третий проверочный бит).
Для получения первого проверочного символа сложим первый и второй информационные символы исходной последовательности
и запишем результат в массив проверочный бит.
Аналогичные действия проводим со всеми остальными информационными битами последовательности. В результате получим следующую последовательность информационных бит:
(3) Для случая, когда входной последовательностью является информационное слово, предварительно перемеженное (формула (2)), то на выходе RSC-кодера будем иметь последовательность:
. (3)
«Қоғамды ақпараттандыру» III Халықаралық ғылыми-практикалық конференция
302
Программный код, реализующий работу RSC-кодера представлен в Приложении Е.
TurboEncoder. Турбокодер реализован в классе TurboEncoder. В своей работе кодер использует в качестве компонентов классы Interleaver и RSC[3].
Метод encode() данного класса использует двоичные последовательности, представленные в формулах (1), (3) и (4), и производит мультиплексирование.
В конечном итоге получается такая последовательность бит:
(4) На этом этапе все шаги кодирования сообщения «привет» закончены. Сообщение из формулы (4), состоящее из 132 бит, передается на сервер через зашумленный канал.
Класс Noise. Зашумленный канал реализован в классе Noise. Класс запрограммирован таким образом, чтобы повреждать каждый блок из 22 бит (8 информационных, 7 проверочных одного RSC- кодера и 7 проверочных другого RSC-кодера), соответствующих одному символу переданного сообщения.
Таким образом, если не исправлять ошибки при приеме, то пользователь вместо сообщения
«привет» увидит на экране что-то похожее на «аDеЮD».
Класс ComponentDecoder. Данный класс реализует компонент турбодекодера, который по поступающей в него информации дает заключение о декодировании сообщения.
В классе описаны две процедуры. Первая реализуется на первой итерации декодирования, когда еще отсутствует информация от другого декодера. Вторая – когда эта информация присутствует (на последующих итерациях).
Первая процедура принимает два параметра. После выполнения процедуры на выходе получаем декодированное информационное слово, которое затем поступает на второй аналогичный компонент, который помимо него еще принимает информационное слово из канала и проверочное слово. Для трех параметров используется второй перегруженный метод.
Класс Turbodecoder. Данный класс реализует трех итеративный турбодекодер с двумя компонентами декодера.
Класс использует в качестве отдельных элементов классы Interleaver, Deinterlaever и ComponentDecoder.
Сначала в турбодекодер поступает поврежденное слово из формулы (4) из канала. Далее с помощью операции демультиплексирования эта последовательность бит разделяется на информационное слово и два проверочных. На первой итерации информационное слово и первое проверочное попадают в первый компонент декодера. Заключение первого компонента, пропущенное через перемежитель, служит дополнительной информацией для второго компонента. На второй компонент попадают также информационное слово, предварительно перемеженное, и вторая последовательность проверочных бит.
После трех итераций заключение второго компонента, пропущенное через деперемежитель, и будет являться исправленным информационным словом.
На последнем этапе декодирования полученное сообщение без ошибок прогоняется через метод преобразования битов в символы класса Binary и выводится на экран пользователя.
Литература
1. Васильев В. И., Хоанг Тху Ха. Турбокод – основные характеристики, особенности применения и
моделирования. – ВЕСТНИК ВГУ, 2004.
№ 2. – С. 8-14.
2. Berrou C., Glavieux A., Thitimajshima P. «Near Shannon Limit Error-Correcting Coding and Decoding:
Turbo Codes» in Proceedings of the International Conference on Communications, (Geneva, Switzerland), pp. 1064–1070, May 1993.
3. Невдяев Л. М. Мобильная связь 3-го поколения. – М.: Связь и бизнес, 2000. – 208 с.