Рефераты. Проектирование системы передачи цифровых данных

Код БЧХ

Рассмотрим код БЧХ с общим числом разрядов 31. Как было определено выше, требуется построить код для . По таблице кодов БЧХ [2] находим образующий полином:



Получили код БЧХ (31,16). Как видно, этот код ещё менее эффективен, чем соответствующий код Хемминга.

Построение кода

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

Итак, по одной паре проводов за один такт возможна передача одного из двух видов импульсов (рис. 1), что значит 1 бит за такт. По трём другим парам возможна передача одного из девяти видов импульсов (рис. 2). Из этих импульсов будем использовать только 8, т.е. за такт можно передать 3 бита.


Рис. 1


Рис. 2


За один такт по четырём парам проводов возможна передача 1+3+3+3=10 бит. Будем рассматривать передаваемые 10 бит за такт как один символ. Это значит, при кодировании будем оперировать 10-битными символами, т.е. двоично-1024-ричным кодом.

Для передачи информационного кода по ЛС требуется:

1. Преобразовать исходный двоичный код в двоично-1024-ричный. Для этого достаточно разбить код на группы по 10 бит.

2. Найти контрольные (проверочные) символы (операция кодирования).

3. Добавить контрольные разряды к информационным и смодулировать сигнал для отправления по ЛС (операция модуляции).

4. После прохождения сигнала через ЛС, он должен быть демодулирован.

5. Полученный код проверяется на наличие ошибок.

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

Если задан двоичный 88-разрядный код (11 байт), то при записи его в двоично-1024-ричном виде, получится 9 символов (8 символов по 10 бит и 1 символ из 8 бит). Т.е. исходные 88 двоичных разряда разбиваются на 9 групп по 10 разрядов. Каждую группу назовём 1024-ричным символом.

Код будет обнаруживать 3 ошибки (на 9 двоично-1024-ричных разрядов), т.е. кодовое расстояние .

Сначала определим правило нахождения контрольных символов. Если записать в виде таблицы информационные разряды, то можно заметить, что три контрольных символа рассчитываются по соответствующим строкам (суммируются символы по модулю 32), три других – по строкам и один – по первым шести контрольным.


Рис. 2


Иначе говоря, , , ,(9)

, , , .


Построим матрицу кодирования (образующую матрицу). Матрица кодирования будет содержать 9 строк (по количеству разрядов), левая часть матрицы содержит единичную матрицу [2]. Правая часть задаёт контрольные разряды:


.(10)


Перемножая вектор информационного кода на эту матрицу, можно получить вектор, в котором информационные и контрольные разряды разделены, число контрольных разрядов равно 7:


.


Естественно, все операции должны выполняться по модулю 1024. Для проверки принятого кода на отсутствие ошибок требуется вектор умножить на проверочную матрицу. Проверочная матрица будет иметь следующий вид:


,(11)


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


.


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

Матрицы (10) и (11) описывают код (160,88). Нельзя сказать, что код получился оптимальнее, чем код Хемминга или БЧХ (по скорости кодирования), однако его преимущество – более высокая скорость передачи, за счёт усложнения формы сигнала и более полного использования линии связи. Недостаток полученного кода – сравнительно сложная схемная реализация.

Примеры кодирования-декодирования

Для примера рассмотрим кодирование последовательности

92 8E AA 9B A2 A5 9A 55 4B D2 B4.

Эта последовательность в двоично-1024-ричном виде будет выглядеть так:

1001001010.0011101010.1010100110.1110100010.1010010110.0110100101.

0101010010.1111010010.10110100.

Для выравнивания, добавим в конец ещё два нулевых бита.

Информационный вектор K= [1001001010 0011101010 1010100110 1110100010 1010010110 0110100101 0101010010 1111010010 1011010000]

умножаем на образующую матрицу (9):



Получили закодированную последовательность: к информационной части прибавились 7 контрольных символов (70 бит).

Допустим, при прохождении через ЛС, сигнал не исказился. Проведём декодирование:



Нулевой синдром свидетельствует об отсутствии ошибки.

Допустим теперь, что возникли три ошибки (во втором, девятом, тринадцатом символах):



Синдром ненулевой, ошибка обнаружена.


2.2 СХЕМОТЕХНИЧЕСКАЯ И ПРОГРАММНАЯ РЕАЛИЗАЦИЯ КОДЕРА И ДЕКОДЕРА


Для схемной реализации кодера и декодера потребуются 10-разрядные сумматоры. Схемы кодера и декодера приведены в приложении 1. Кодер позволяет получить контрольные символы по информационным. Схема составлена в полном соответствии с выражениями (9) и матрицей (10). Декодер соответствует матрице (11).

В приложении 2 приведена схема всей системы передачи данных. Исходный код (11 байт) подаётся на регистр REG1. Это можно сделать, например, трёхкратной передачей по 32 разряда (4 байта). Регистр может быть также буфером, необходимым для синхронной передачи, независимой от работы программного обеспечения. Регистр с рабочей частотой выставляет на выходные 10-разрядные шины (9 таких шин) данные. При прохождении их через кодер К, на его выходе появляются контрольные разряды, которые соединяются с информационными разрядами, прошедшими через элемент задержки Т. На выходе элементов Т и К появляются 20 байт помехоустойчивого кода, который по 16 10-разрядным шинам поступает на регистр REG2. Этот регистр преобразует параллельный код в последовательный для передачи по линии. Код, поступивший по 16 шинам, будет отправлен за 16 тактов (передачи). Далее следует модулятор М, преобразующий 10 бит кода, пришедшего с REG2, в сигнал, отправляемый по четырём линиям (один двухуровневый и три трёхуровневых). Сигналы отправляются синхронно.

Передающая часть с помощью демодулятора ДМ преобразует физический сигнал в 10 бит кода. 10-битные слова записываются в регистр REG3 (для преобразования в параллельный код). При накоплении нужного количества разрядов, данные по 16 10-разрядным шинам поступают на декодер ДК. После декодирования синдром ошибки с выхода ДК поступает на ключ Кл (в общем случае это может быть какое-либо решающее и управляющее устройство). При отсутствии ошибки код поступает на регистр REG4 (буфер), откуда снимается последовательно по 32 разряда (4 байта).

Схемотехническая реализация на бинарных элементах – один из способов кодирования-декодирования. Можно программно их реализовать. В приложении 3 помещены листинги программ кодера и декодера (принципиальная реализация кодирования-декодирования).

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


2.3 ВЫБОР КАНАЛА СВЯЗИ И МОДУЛЯЦИИ


Вид огибающей для кода был описан выше. Для одной пары проводов это манчестерское кодирование, для других трёх – сигнал, составленный из импульсов, изображённых на рис. 2. Будем использовать импульсы, изображённые на рис. 3.


Рис. 3


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


1.001.001.010…0.011.101.010…1.010.100.110…1.110.100.010

1.010.010.110…0.110.100.101…0.101.010.010…1.111.010.010

1.011.010.000…0.111.011.010…1.111.011.101…1.111.110.100

1.100.111.110…1.101.010.010…1.100.011.011…1.101.010.110


Сигнал, проходяший синхронно по четырём парам проводников, изображен на рис. 4.


Рис. 4


Уже было сказано, что в качестве линии связи выбрана витая пара. Кабели на витых парах позволяют использовать большое число пар в кабеле (до 250), передавать данные на частотах 16–100 МГц, компенсировать наводки (возникающие за счёт вихревых токов), они обладают невысокой стоимостью. Однако к недостаткам можно причислить малую помехозащищённость, невозможность использования длинных кабелей (больше 1000 м).

Поскольку за 20 тактов передаётся 11 байт полезной информации, то за 1 такт – 4.4 бита. Поэтому если, например, удвоенная частота (для манчестерского кода) будет составлять 50 МГц, то частота тактов составит 25 МГц и скорость передачи достигнет 25*4.4=110 Мбит/с. Т.е. поставленная задача даже перевыполнена. Для линии связи будем использовать кабель категории 5. Как видно из табл. 1, на частоте около 50 МГц затухание составит около 15 дБ, т.е. на каждые 100 м линии сигнал будет затухать в 5,5 раз. Чтобы приёмник распознал сигнал, линия не должна быть длиннее 120–150 м (тогда сигнал затухнет в ≈ 15 раз).

Для правильного определения границ передаваемого сообщения необходимо обеспечить синхронизацию передатчика и приёмника. В системе, рассматриваемой в данной работе, целесообразно использовать старт-стоповые символы, передаваемые до и после основного сообщения. Для этого можно использовать неиспользованные комбинации импульсов (номер 8 на рис. 2). Поскольку приём отдельных символов подразумевается синхронным благодаря манчестерскому коду, передаваемому по первой паре проводов, старт-стоповые символы можно передавать достаточно редко (в начале и в конце пакетов длиной около нескольких сотен байт). Синхронизация будет называться фреймовой (блочной).

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



ЗАКЛЮЧЕНИЕ


В ходе работы удалось составить помехозащищённый код (160,88). Информационная скорость (отношение числа информационных разрядов к общему) составляет 0,55, что близко к характеристикам других кодов. Данный код может передавать большое количество информации (длинную последовательность) в одном пакете, что достигается параллельной передачей данных по четырём линиям (парам проводников), из которых состоит витая пара, выбранная в качестве линии передачи. По одной паре проводников передаётся манчестерский код, что обеспечивает синхронность приёма, однако возникают жёсткие требования к синхронизации между отдельными парами в кабеле, поскольку синхронизация остальных пар проводов осуществляется по первой паре.

Такое использование линии связи несколько усложняет практическую реализацию системы по сравнению с использованием обычных кодов (например, полиномиальных) и передачей по независимым каналам. Однако такое небольшое усложнение окупается возрастанием на порядок скорости передачи.



СПИСОК ИСПОЛЬЗОВАНЫХ ИСТОЧНИКОВ


1.                 Буга Н.Н. Основы теории связи и передачи данных, – М.: ЛВИКА им. Можайского. – 1970.

2.                 Кларк Дж., Кейн Дж. Кодирование с исправлением ошибок в системах цифровой связи. – М.: Радио и связь. – 1987.

3.                 Тутевич В.Н. Телемеханика. – М: Высшая школа, 1985. – 423 с.

4.                 Цымбал В.П. Теория информации и кодирование. – Киев: «Вища школа». –1992.

5.                 Шувалов В.П., Захарченко Н.В., Шварцман В.О. Передача дискретных сообщений/ под ред. Шувалова В.П. – М.: Радио и связь. – 1990.



ПРИЛОЖЕНИЕ 1

Программная реализация кодера

// Реализация кодера на языке С

// a0..a8 – информационные символы

// s0..s6 – контрольные символы


void coder(int a0, int a1, int a2, int a3,

int a4, int a5, int a6, int a7, int a8)

{

int s0,s1,s2,s3,s4,s5,s6;

s0=(0x3FF)&(a0+a1+a2);

s1=(0x3FF)&(a3+a4+a5);

s2=(0x3FF)&(a6+a7+a8);

s3=(0x3FF)&(a0+a3+a6);

s4=(0x3FF)&(a1+a4+a7);

s5=(0x3FF)&(a2+a5+a8);

s6=(0x3FF)&(s0+s1+s2+s3+s4+s5);

// передача контрольных разрядов

// . . . . .

}


Программная реализация декодера


// Реализация декодера на языке С

// a0..a8 – информационные символы

// s0..s6 – контрольные символы

// k – синдром ошибки


int decoder(int a0, int a1, int a2, int a3,

int a4, int a5, int a6, int a7, int a8,

int s0, int s1, int s2, int s3, int s4, int s5, int s6)

{

int k0,k1,k2,k3,k4,k5,k6,k;

k0=(0x3FF)&(a0+a1+a2-s0);

k1=(0x3FF)&(a3+a4+a5-s1);

k2=(0x3FF)&(a6+a7+a8-s2);

k3=(0x3FF)&(a0+a3+a6-s3);

k4=(0x3FF)&(a1+a4+a7-s4);

k5=(0x3FF)&(a2+a5+a8-s5);

k6=(0x3FF)&(2*(a0+a1+a2+a3+a4+a5+a6+a7+a8)-s6);

k=k0&k1&k2&k3&k4&k5&k6;

return k;

}


Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.