Главная              Рефераты - Разное

Задание на курсовую работу 2 - реферат

Министерство связи Российской Федерации

Санкт-Петербургский Государственный Университет Телекоммуникаций

имени профессора М.А. Бонч-Бруевича

Курсовая работа

по дисциплине

“Компьютерные Системы Передачи Данных”

преподаватель Федотова Л.В.

выполнил Крайнов М.А.

группа СК-76

Санкт-Петербург

2ooo год


Содержание

Заглавие

Лист

1. ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ

2

1.1. Введение

2

1.2. Исходные данные

2

2. ХАРАКТЕРИСТИКА СИСТЕМЫ РОС-НП

3

3. ОБЩАЯ ХАРАКТЕРИСТИКА КОДОВ, ПРИМЕНЯЕМЫХ В ПДС

6

3.1. Принцип построения корректирующих кодов

6

3.2. Классификация и характеристики корректирующих кодов

6

3.3. Циклические коды

7

4. Анализ возможностей заданного циклического кода

8

4.1. Составление порождающей матрицы и матрицы проверок

8

4.2. Определение минимального кодового расстояния

8

4.3. Составление таблицы всех разрешенных кодовых комбинаций

и определение их веса

9

4.4. Определение доли необнаруженных ошибок

10

5. Расчет эффективности заданного циклического кода

11

5.1. Канал с независимыми ошибками.

11

5.2. Канал с группированием ошибок.

11

6. Выбор оптимальной длины циклического кода

12

7. Разработка программы

13

7.1. Обзор методов программной реализации

13

7.2. Описание программы

14

7.3. Листинг программы

15

1. ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ.

1.1. Введение.

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

Система может быть с решающей обратной связью (РОС) и с информационной обратной связью (ИОС). В данном курсовом проекте будет разрабатываться кодирующее устройство системы РОС-НПбл .

Целью данной курсовой работы является самостоятельная разработка кодирующего устройство системы РОС-НПбл , составление и реализация на ЭВМ алгоритма и программы кодирования и декодирования циклического кода (n,k) с образующим полиномом P(x), а также экспериментальная проверка правильности программы.

1.2. Исходные данные (Вариант 8).

1. Задан обнаруживающий ошибки циклический код n,k = (15,5).

n – количество разрядов кодовой комбинации

k – количество информационных разрядов

2. Образующий полином:

Р(х) = x10 + x9 + x7 + x1 + 1

3. Комбинация простого кода:

G(х) = 24

4. Вероятность ошибки в канале:

Pо = 5*10-5

5. Коэффициент группирования ошибок:

a = 0.3

6. Способ представления циклического кодирования:

представление циклического кода проверочными соотношениями .

2. ХАРАКТЕРИСТИКА СИСТЕМЫ РОС-НП.

Структурная схема системы РОС-НПбл представлена далее. Работа системы происходит следующи м образом.

При отсутствии сигнала переспроса к ИС от УУ идет сигнал готовности аппаратуры к передаче (ЗОК) и ИС соответственно выдает информационные комбинации (Л 1). Они поступают в кодер II одновременно запоминаются в н акопите ле Нпер емкостью h комбинаций (при отсутствии сигнала переспроса инфо рмац ии в Нпер з аменяется, сдвигаясь каж дый раз на одну комбинацию) .

На приеме информационная часть очередной комбинации будет записана в Нпр и одновременно декодер так же, как и в системе с РОС-ОЖ, определит наличие или отсутствие ошибок в этой комбинации. Решающее устройство выдает соответствующий сигнал в УУ приемника ПК. Если ошибка не обнаружена, то УУ ст. Б формирует команду подтверждения, которая передается по обратному каналу и одновременно дает сигнал на вывод информационной комбинации из Нпр потребителю. Получая сигнал подтверждения, передатчик ст. А продолжает непрерывную передачу информации. Если же ошибка обнаружена, то УУ ст. Б формирует команду переспроса, передаваемую по обратному каналу на передатчик прямого канала ст. А.

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

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

Во избежание усложнения и удорожания приемников, системы с РОС - НП строят в основном таким образом, что после обнаружения ошибки приемник стирает комбинацию с ошибкой и блокируется на Н комбинаций (т. е. не принимает Н последующих комбинаций), а передатчик по сигналу переспроса повторяет h комбинаций (комбинацию с ошибкой и h 1 комбинаций, следующих за ней). Такие системы с РОС-НП получили название систем с блокировкой РОС- НПбл . Эти системы позволяют организовать непрерывную передачу кодовых комбинаций с сохранением порядк а их следования. Поэтому одновременно с формированием сигнала переспроса УУ ст. Б блокирует (т. е. запрещает) вывод информации потребителю из Н пр на время, равное h комбинациям. Получив сигнал переспроса по обратному каналу, УУ ст. А ожидает конца передачи последней комбинации, во время которой получен этот сигнал. Затем ИС блокируется также на время передачи h комбинаций, а из Нпер в это время в канал через кодер передаются хранящиеся в накопителе последние h комбинаций. После их передачи ИС опять получает разрешение на передачу очередных комбинаций. Таким образом, последовательность передаваемых и принимаемых комбинаций не нарушается.

3. ОБЩАЯ ХАРАКТЕРИСТИКА КОДОВ, ПРИМЕНЯЕМЫХ В ПДС.

3.1. Принцип построения корректирующих кодов.

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

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

Общее число всевозможных комбинаций кода длины n равно: Nn =2n . Число разрешенных кодовых комбинаций определяется числом информационных разрядов и равно: Nk =2k =2n - r , где r - число проверочных разрядов. Таким образом, число разрешенных кодовых комбинаций в 2r раз меньше общего числа комбинаций.

3.2. Классификация и характеристики корректирующих кодов.

Корректирующие коды делятся на два класса - блочные и непрерывные. К блочным относятся коды, в которых каждому символу алфавита сообщений соответствует блок (кодовая комбинация) из n(i) элементов, где i – номер сообщения. Если n(i)=n, т.е. длина блока постоянна и не зависит от номера сообщения, то код называется равномерным. Если длина блока зависит от номера сообщения, то блочный код называется неравномерным. При использовании блочных кодов передаваемая информационная последовательность разбивается на отдельные блоки, которые кодируются и декодируются независимо друг от друга. Непрерывные коды представляют собой непрерывную последовательность разрядов, и разделение ее на отдельные блоки невозможно. В таких кодах проверочные элементы помещаются в определенном порядке между информационными.

Блочные коды, в свою очередь, делятся на разделимые и неразделимые. Разделимыми называются коды, в которых элементы разделяются на информационные и проверочне. Последние и вносят в код избыточность, необходимую для обнаружения или исправления ошибок. В разделимых кодах информационные и проверочные разряды занимают всегда одни и те же позиции в кодовой комбинации. Разделимые коды обозначаются как (n, k) - коды, где n - длина или число разрядов кода; k - число информационных разрядов. Неразделимые коды свойством разделимости не обладают.

Среди разделимых кодов различают коды систематические и несистематические. Систематическими называются такие блочные разделимые коды, в которых проверочные разряды представляют собой линейные комбинации информационных.

Основными характеристиками корректирующих кодов являются:

  1. Вес кодовой комбинации (W) - число единиц в кодовой комбинации.
  2. Минимальное кодовое расстояние (dmin). Число разрядов, которыми различаются две кодовые комбинации, называется кодовым расстоянием между двумя комбинациями. Наименьшее из кодовых расстояний в коде называется минимальным кодовым расстоянием.
  3. Степень различия комбинаций характеризуется расстоянием Хемминга. Расстояние Хемминга для любых двух кодовых комбинаций определяется числом несовпадающих в них разрядов.

3.3. Циклические коды.

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

Циклические коды относятся к блочным систематическим кодам. Код Хэмминга, исправляющий одиночные ошибки, представляет собой частный случай циклического кода.

Введем следующие обозначения:

G(x) - многочлен, отображающий комбинацию информационных элементов (степень многочлена - k-1);

R(x) - многочлен, отображающий комбинацию из r проверочных элементов;

F(x) - многочлен, отображающий кодовую комбинацию в целом (степень многочлена - n-1=k+r-1);

F(x) = xr G(x) + R(x).

Комбинация циклического кода F(x) образуется из исходной комбинации информационных разрядов G(x) путем умножения на полином P(x). Поэтому полином Р называется образующим. Разрешенные кодовые комбинации циклического кода характеризуются тем, что все они делятся без остатка на образующий полином P(x). Это условие выполняется, если R(x) равен остатку от деления xr G(x) на Р(x).

Обнаруживающие ошибки свойства циклического кода основаны на том, что разрешенные комбинации кода F(x) делятся на образующий полином P(x) без остатка, а запрещенные - с остатком.

Комбинации циклического кода формируются следующим образом:

  1. многочлен G(x), отображающий информационную k-разрядную кодовую комбинацию, умножается на xr , т.е. производим сдвиг k-разрядной кодовой комбинации на r разрядов.
  2. произведение xr G(x) делится на образующий полином P(x), и полученный остаток R(x) определяет r проверочных разрядов кодовой комбинации;
  3. кодовая комбинация F(x)=R(x)+xr G(x) является разрешенной, так как она делится без остатка на P(x).

4. АНАЛИЗ ВОЗМОЖНОСТЕЙ ЗАДАННОГО ЦИКЛИЧЕСКОГО КОДА.

4.1. Составление порождающей матрицы и матрицы проверок.

Образующий полином : p ( x ) = x 10 + x 9 + x 7 + x 1 +1

Составим образующую матрицу в неканоническом виде G(15,5) :

x4

* P(x)

x14 +x13 +x11 +x5 +x4

11010 0000110000

x3

* P(x)

x13 +x12 +x10 +x4 +x3

01101 0000011000

G(15,5) =

x2

* P(x)

=

x12 +x11 +x9 +x3 +x2

=

00110 1000001100

x1

* P(x)

x11 +x10 +x8 +x2 +x1

00011 0100000110

x0

* P(x)

x10 +x9 +x7 +x1 +1

00001 1010000011

Далее составим образующую матрицу в каноническом виде G(15,5) :

Номера строк, которые необходимо сложить по модулю 2

G(15,5) = |E(5,5) R(5,10)|

1+2+3+5

10000 0010100111

2+3+4

01000 1100010010

3+4+5

00100 0110001001

4+5

00010 1110000101

Переписываем

00001 1010000011

Матрица проверок H(15,5) :

01011 1000000000

01110 0100000000

10111 0010000000

00000 0001000000

H(15,5) = |RT (10,5) E(10,10)| =

10000 0000100000

01000 0000010000

00100 0000001000

10010 0000000100

11001 0000000010

10111 0000000001

4.2 Определение минимального кодового расстояния.

Минимальное кодовое расстояние равняется минимальному количеству столбцов матрицы H(15,5) , при сложении которых по модулю 2, получается столбец, состоящий из всех нулей.

Для определения минимального кодового расстояния dmin воспользуемся матрицей проверок H(15,5) :

01011 1 00 0000000

01110 0 10 0000000

10111 0 01 0000000

00000 0 00 1000000

H(15,5) = |RT (10,5) E(10,10)| =

10000 0 00 0100000

01000 0 00 0010000

00100 0 00 0001000

10010 0 00 0000100

11001 0 00 0000010

10111 0 00 0000001

Для данной матрицы проверок при сложении столбцов (выделенных на матрице жирным шрифтом) по модулю 2, мы получим столбец, состоящий из всех нулей. Таким образом, для данного образующего полинома:

Р(х) = x10 +x9 +x7 +x1 +1 , минимальное кодовое расстояние равно 5 .

4.3. Составление таблицы всех ненулевых разрешенных кодовых комбинаций и определение их веса.

Число

вариан-тов

№№ строк

G (15,5)

Информационные элементы

Проверочные

элементы

Вес

w

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1

1

1

0

0

0

0

0

0

1

0

1

0

0

1

1

1

6

2

2

0

1

0

0

0

1

1

0

0

0

1

0

0

1

0

5

C5 1 = 5

3

3

0

0

1

0

0

0

1

1

0

0

0

1

0

0

1

5

4

4

0

0

0

1

0

1

1

1

0

0

0

0

1

0

1

6

5

5

0

0

0

0

1

1

0

1

0

0

0

0

0

1

1

5

6

1+2

1

1

0

0

0

1

1

1

0

1

1

0

1

0

1

9

7

1+3

1

0

1

0

0

0

1

0

0

1

0

1

1

1

0

7

8

1+4

1

0

0

1

0

1

1

0

0

1

0

0

0

1

0

6

9

1+5

1

0

0

0

1

1

0

0

0

1

0

0

1

0

0

5

C5 2 = 10

10

2+3

0

1

1

0

0

1

0

1

0

0

1

1

0

1

1

8

11

2+4

0

1

0

1

0

0

0

1

0

0

1

0

1

1

1

7

12

2+5

0

1

0

0

1

0

1

1

0

0

1

0

0

0

1

6

13

3+4

0

0

1

1

0

1

0

0

0

0

0

1

1

0

0

5

14

3+5

0

0

1

0

1

1

1

0

0

0

0

1

0

1

0

6

15

4+5

0

0

0

1

1

0

1

0

0

0

0

0

1

1

0

5

16

1+2+3

1

1

1

0

0

1

0

0

0

1

1

1

1

0

0

8

17

1+2+4

1

1

0

1

0

0

0

0

0

1

1

0

0

0

0

5

18

1+2+5

1

1

0

0

1

0

1

0

0

1

1

0

1

1

0

8

19

1+3+4

1

0

1

1

0

1

0

1

0

1

0

1

0

1

1

9

C5 3 = 10

20

1+3+5

1

0

1

0

1

1

1

1

0

1

0

1

1

0

1

10

21

1+4+5

1

0

0

1

1

0

1

1

0

1

0

0

0

0

1

7

22

2+3+4

0

1

1

1

0

0

1

0

0

0

1

1

1

1

0

8

23

2+3+5

0

1

1

0

1

0

0

0

0

0

1

1

0

0

0

5

24

2+4+5

0

1

0

1

1

1

0

0

0

0

1

0

1

0

0

6

25

3+4+5

0

0

1

1

1

0

0

1

0

0

0

1

1

1

1

8

26

1+2+3+4

1

1

1

1

0

0

1

1

0

1

1

1

0

0

1

10

27

1+2+3+5

1

1

1

0

1

0

0

1

0

1

1

1

1

1

1

11

C5 4 = 5

28

1+2+4+5

1

1

0

1

1

1

0

1

0

1

1

0

0

1

1

10

29

1+3+4+5

1

0

1

1

1

0

0

0

0

1

0

1

0

0

0

6

30

2+3+4+5

0

1

1

1

1

1

1

1

0

0

1

1

1

0

1

11

C5 5 = 1

31

1+2+3+4+5

1

1

1

1

1

1

1

0

0

1

1

1

0

1

0

11

4.4. Определение доли необнаруженных ошибок.

Кратность

ошибок

Число вариантов

Cn i

Число

bi

Доля необнаруженных

ошибок

bi / Cn i

1/2n-k

1

C15 1 = 15

-

0

9,76*10-4

2

C15 2 = 105

-

0

9,76*10-4

3

C15 3 = 455

-

0

9,76*10-4

4

C15 4 = 1365

-

0

9,76*10-4

5

C15 5 = 3003

8

2,66*10-3

9,76*10-4

6

C15 6 = 5005

7

1,39*10-3

9,76*10-4

7

C15 7 = 6435

3

4,66*10-4

9,76*10-4

8

C15 8 = 6435

5

7,77*10-4

9,76*10-4

9

C15 9 = 5005

2

3,996*10-5

9,76*10-4

10

C15 10 = 3003

3

9,99*10-4

9,76*10-4

11

C15 11 = 1365

3

2,19*10-3

9,76*10-4

12

C15 12 = 455

-

0

9,76*10-4

13

C15 13 = 105

-

0

9,76*10-4

14

C15 14 = 15

-

0

9,76*10-4

15

C15 15 = 1

-

0

9,76*10-4

Доля необнаруженных ошибок


5. РАСЧЕТ ЭФФЕКТИВНОСТИ ЗАДАННОГО ЦИКЛИЧЕСКОГО КОДА.

Для расчета эффективности заданного циклического кода воспользуемся формулой эффективности, которая имеет следующий вид:

Э = P(³1,k) / Pн о

где:

P(³1,k) - вероятность того, что в комбинации простого кода будут ошибки ;

Рн о - вероятность необнаруживания ошибок для помехоустойчивого кода.

Произведем расчет эффективности заданного циклического кода для канала с независимыми ошибками и канала с группированием.

5.1. Канал с независимыми ошибками.

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

P(³1,k) @ k * P ,

n

Pн о = (1 / 2r ) * S ( Cn i *Pi *qn-i ) , где

i=d

k - длина информационной части кода;

r - длина избыточной части кода;

P - вероятность ошибки в канале;

q = (1 – P) - вероятность того, что в канале ошибки не будет;

d - минимальное кодовое расстояние;

n - длина кода;

Подставив исходные данные ( Р = 5*10-4 ) в эти формулы, получим:

P(³1,k) @ 5*5*10-4 @ 2 5 * 10 -4

15

Pн о = (1/210 ) * S (Cn i * Pi * qn-i ) = 9.119 * 10 -17

i=5

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

Э = (25*10-4 ) / (9.119*10-17 ) = 2,74*1013

5.2. Канал с группированием ошибок.

Для канала с группированием вероятности определяются по следующим формулам:

P(³1,k) @ k1- a * P,

Pн о @ (1 / 2r ) * P * (n / d)1- a , где

a - коэффициент группирования;

Подставив исходные данные ( Р = 5*10-4 , a = 0.3 ) в эти формулы, получим:

P(³1,k) @ 51-0.3 * 5*10-4 @ 1.543*10 -3 ,

Pно @ (1/2r )* P0 *(n/d)1- a @ (1/210 )* 5*10-3 *(15/5)0,7 @ 1.11*10 -6

Тогда эффективность заданного циклического кода для канала с группированием будет равна:

Э = (1.543*10-3 )/ (1.11*10-6 ) @ 1,39*103

Сравнив эти две эффективности, можно сделать вывод, что в канале с группированием код работает намного хуже, чем в канале с независимыми ошибками.


6. Выбор оптимальной длины циклического кода

Найдем такой оптимальный код, который при заданной вероятности ошибочного приема комбинации циклического кода Рзад = 10-6 обеспечивал бы максимальную скорость передачи информации Rmax .

R получим по формуле : R=Rk *Ra ,

где Rk - скорость кода;

Ra - скорость алгоритма;

Rk =k/n;

Ra =1-(nh)1- a *Pно ;

R=Rk *Ra

n.k

D

P н o

Rk

Ra

R

1

15,11

3

9,64115E-05

0,7333

0,9897

0,725803

1

2

15,7

5

4,2142E-06

0,4667

0,9897

0,461875

3

15,5

7

8,32464E-07

0,3333

0,9897

0,329910

4

31,26

3

8,01287E-05

0,8387

0,9829

0,824394

2

5

31,21

5

1,75123E-06

0,6774

0,9829

0,665857

6

31,16

7

4,32419E-08

0,5161

0,9829

0,507319

7

63,57

3

6,58178E-05

0,9048

0,9720

0,879392

3

8

63,51

5

7,19233E-07

0,8095

0,9720

0,786824

9

63,45

7

8,87973E-09

0,7143

0,9720

0,694257

10

127,120

3

5,37573E-05

0,9449

0,9542

0,901602

4

11

127,113

5

5,8744E-07

0,8898

0,9542

0,849008

12

127,106

7

1,81315E-09

0,8346

0,9542

0,796415

13

255,247

3

4,37848E-05

0,9686

0,9254

0,896353

5

14

255,239

5

1,19616E-07

0,9373

0,9254

0,867321

15

255,231

7

3,69198E-10

0,9059

0,9254

0,838290

16

511,502

3

3,56131E-05

0,9824

0,8786

0,863146

6

17

511,493

5

4,86458E-08

0,9648

0,8786

0,847672

18

511,483

7

7,50734E-11

0,9472

0,8786

0,832197

Определение оптимальной длины блока

Как видно из данной графической зависимости (а также из предыдущей таблицы), длина блока n = 255 является оптимальной для аппаратуры передачи данных с РОС-НПБЛ .


7. РАЗРАБОТКА ПРОГРАММЫ.

7.1 Обзор методов программной реализации

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

7 .1.1. Матричный способ представления циклического кодирования.

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

7 .1.2. Представление циклического кода проверочными соотношениями.

Этот способ основывается на записи в памяти проверочных соотношений(синдромов), полученных по образующей G (для кодирования) или проверочной H (для декодирования) матрицы. Эти соотношения позволяют определить значения проверочных разрядов по информационным элементам. Проверочные соотношения получаются в общем виде путем умножения информационной комбинации на матрицу остатков R. Для нахождения проверочных элементов кода необходимо вычислить (n-k) сумм по mod2. Программная реализация этой процедуры заключается в следующем. В соответствии с (n-k) проверочными соотношениями формируются маски в виде двоичных комбинаций, на которые умножается (логическое "И") информационная комбинация. Результат логического умножения проверяется специальной командой на четность. Если результат содержит четное число единиц, то соответствующий проверочный элемент равен 0; если же результат нечетный, то 1. Процедура декодирования с обнаружением ошибок программно отличается лишь тем, что проверочные соотношения получаются в результате умножения принятой n- элементной комбинации в общем виде на транспонированную проверочную матрицу HT . В результате умножения будет получен синдром, который свидетельствует об обнаружении ошибок в случае его неравенства нулю.

7 .1.3. Способ алгебраического кодирования.

В основе программной реализации такого способа циклического систематического (n,k) кода лежит известное правило получения проверочных элементов как остатка от деления одночлена xn - k f(x) на образующий полином Р(х) степени (n-k), где f(x) - полином исходной информационной комбинации длиной К разрядов. Алгебраическое декодирование программно реализуется аналогично с той лишь разницей, что на образующий полином делится вся n- элементная комбинация. По виду полученного в результате деления остатка обнаруживают и исправляют ошибки.

7.1.4. Табличный способ программной реализации процедуры кодирования.

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

7 .2. Описание программы

Данная программа написана на языке Borland Pascal в интегрированной среде Borland Delphi 5.0 и предназначена для кодирования и декодирования циклического кода, путем представления циклического кода проверочными соотношениями.


Для запуска данной программы необходимо запустить файл opds . exe . При запуске данного файла перед пользователем появляется окно О создателях… (в котором можно найти информацию о данном программном продукте: название, фамилию технического руководителя, а также студента, осуществлявшего программную реализацию проекта).

После нажатия кнопки “дальше …” , открывается диалоговое окно, в котором, с помощью контекстного меню, возможно выбрать вид обнаруживающего полинома P(x) – по умолчанию задан полином p ( x ) = x 10 + x 9 + x 7 + x 1 +1 согласно варианту задания, а также просмотреть значения матриц (образующей матрицы в канонической виде и матрицы проверок), которое становится возможным только после задания Р(х). Затем в разрядах информационной комбинации вводится то число которое мы хотим закодировать и нажав кнопку “послать комбинацию ”, осуществляем кодировку последовательности. При этом в разрядах принятой комбинации мы можем наблюдать информационную комбинацию с десятью проверочными разрядами.

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


ошибкой или нет), номера разрядов с ошибками.

Если в качестве полинома ошибки вводится разрешенная кодовая комбинация, то программа воспринимает переданную комбинацию, как правильную. Это связано со свойствами циклического кода.

Если программа может исправить ошибки, то она пишет номера разрядов с ошибками в окне.




7.3. Листинг (текст) программы

unit kurs;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls, Menus;

type

TCool = class(TForm)

procedure SendClick(Sender: TObject);

procedure ClosClick(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure GenerateSindromes;

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

TArray=array[1..15] of integer;

rr=array[1..5,1..10] of integer;

hh=array[1..10] of TArray;

sind=array[1..100,1..10] of integer;

var

Dmin,MaxSindr,RightError:integer;

Cool: TCool;

e,o:TArray;

P:TArray;

g:array[1..5] of TArray;

R1:rr;

H1:hh;

a:array[1..5] of integer;

b:array[1..10] of integer;

FormationMatrix: array [1..2 shl 5] of TArray;

sindr:^sind;

implementation

uses Dialog, AboutK, Matr;

{$R *.DFM}

function Find(var A: TArray): integer;

var

N, I, S: integer;

begin

Result := 15;

for N := 1 to (1 shl 4) do

begin

S := 0;

for I := 1 to 15 do

if A[I] <> FormationMatrix[N, I] then Inc(S);

if S < Result then

begin

Result := S;

end;

if Result = 0 then Break;

end;

end;

procedure ZeroArray(var A: TArray);

var

N: Byte;

begin

for N := 1 to 15 do

A[N] := 0;

end;

procedure XorArrays(var A: TArray; const B: TArray);

var

N: Byte;

begin

for N := 1 to 15 do

A[N] := (A[N]+B[N]) mod 2;

end;

procedure TCool.GenerateSindromes;

var

i,j,bb,k1,k2,k3:integer;

err:TArray;

begin

MaxSindr:=1;

for i:=15 downto 15-trunc(Dmin/2)-1 do

MaxSindr:=MaxSindr*i;

FreeMem(sindr);

GetMem(sindr,sizeof(integer)*10*MaxSindr);

ZeroArray(err);

for k1:=1 to 15 do begin

err[k1]:=1;

for j:=1 to 10 do

begin

bb:=0;

for i:=1 to 15 do begin

if ((err[i]=1)and(h1[j,i]=1)) then bb:=bb+1;end;

if (bb mod 2) <> 0 then sindr[k1,j]:=1 else sindr[k1,j]:=0;

end;

ZeroArray(err);;

end;

for k1:=1 to 15 do begin

for k2:=k1+1 to 15 do begin

if (k2<>k1) then begin

err[k1]:=1;

err[k2]:=1;

for j:=1 to 10 do

begin

bb:=0;

for i:=1 to 15 do begin

if ((err[i]=1)and(h1[j,i]=1)) then bb:=bb+1;end;

if (bb mod 2) <> 0 then sindr[k1+k2*15,j]:=1 else sindr[k1+k2*15,j]:=0;

end;

ZeroArray(err);

end;

end;

end;

if trunc(dmin/2)>2 then begin

for k1:=1 to 15 do begin

for k2:=k1+1 to 15 do begin

for k3:=k2+1 to 15 do begin

if (k2<>k1)and(k3<>k2)and(k3<>k1) then begin

err[k1]:=1;

err[k2]:=1;

err[k3]:=1;

for j:=1 to 10 do

begin

bb:=0;

for i:=1 to 15 do begin

if ((err[i]=1)and(h1[j,i]=1)) then bb:=bb+1;end;

if (bb mod 2) <> 0 then sindr[k1+k2*15+k3*15*15,j]:=1 else sindr[k1+k2*15+k3*15*15,j]:=0;

end;

ZeroArray(err);

end;

end;

end;

end;

end;

end;

procedure Normalize();

var

N, K: Byte;

begin

for K := 1 to 4 do

for N := k+1 to 5 do

if g[K, N]=1 then

XorArrays(g[K], g[N]);

end;

procedure Error;

begin

e[1]:=strtoint(cool.e1.Text);

e[2]:=strtoint(cool.e2.Text);

e[3]:=strtoint(cool.e3.Text);

e[4]:=strtoint(cool.e4.Text);

e[5]:=strtoint(cool.e5.Text);

e[6]:=strtoint(cool.e6.Text);

e[7]:=strtoint(cool.e7.Text);

e[8]:=strtoint(cool.e8.Text);

e[9]:=strtoint(cool.e9.Text);

e[10]:=strtoint(cool.e10.Text);

e[11]:=strtoint(cool.e11.Text);

e[12]:=strtoint(cool.e12.Text);

e[13]:=strtoint(cool.e13.Text);

e[14]:=strtoint(cool.e14.Text);

e[15]:=strtoint(cool.e15.Text);

XorArrays(o,e);

end;

procedure DeCode(mass:hh);

var

w:string;

i,j,bb,k,er:integer;

z:array[1..10] of integer;

begin

cool.mem.Clear;

w:='';

er:=0;

cool.S.Text:='Комбинация принята без ошибок';

for j:=1 to 10 do

begin

bb:=0;

for i:=1 to 15 do begin

if ((o[i]=1)and(mass[j,i]=1)) then bb:=bb+1;end;

if (bb mod 2) <> 0 then cool.S.Text:='Комбинация принята с ошибками';

if (bb mod 2) <> 0 then z[j]:=1 else z[j]:=0;

end;

for i:=1 to MaxSindr do begin

bb:=0;

for j:=1 to 10 do bb:=bb+(sindr[i,j]+z[j])mod 2;

er:=er+1;

if bb=0 then break;

end;

j:=0;

for i:=1 to 10 do j:=j+z[i];

k:=0;

for i:=1 to 15 do k:=k+e[i];

if (bb=0)and(j=0)and(k<>0) then

begin

cool.Label7.Visible:=true;

cool.Label9.Visible:=true;

cool.Label10.Visible:=true;

end;

if (k>trunc(Dmin/2)) then

begin

cool.Label7.Visible:=true;

cool.Label9.Visible:=true;

cool.Label10.Visible:=true;

end;

if (bb=0)and(j<>0) then begin

for i:=2 to 15 do begin

if ((er-1)/(15*15*i)<1) then break;

end;

if (i>2) then cool.mem.Lines.add(inttostr(i-1));

if (i>2) then er:=er-(i-1)*15*15;

for i:=1 to 15 do begin

if ((er-1)/(15*i)<1) then break;

end;

if (i>1) then cool.mem.Lines.add(inttostr(i-1));

er:=er-(i-1)*15;

cool.mem.Lines.add(inttostr(er));

end;

end;

procedure Code(mass:rr);

var

i,j,bb:integer;

begin

cool.Label7.Visible:=false;

cool.Label9.Visible:=false;

cool.Label10.Visible:=false;

for j:=1 to 10 do

begin

bb:=0;

for i:=1 to 5 do

begin

bb:=bb+A[i]*mass[i,j];

end;

if (bb mod 2)=1 then b[j]:=1;

end;

for i:=1 to 5 do o[i]:=a[i];

for i:=1 to 10 do o[i+5]:=b[i];

end;

procedure TCool.SendClick(Sender: TObject);

var

i:integer;

begin

for i:=1 to 5 do A[i]:=0;

for i:=1 to 10 do b[i]:=0;

A[1]:= strtoint(a5.Text);

A[2]:= strtoint(a4.Text);

A[3]:= strtoint(a3.Text);

A[4]:= strtoint(a2.Text);

A[5]:= strtoint(a1.Text);

Code(R1);

Error;

c1.text:=IntTostr(o[1]);

c2.text:=IntToStr(o[2]);

c3.text:=IntToStr(o[3]);

c4.text:=IntToStr(o[4]);

c5.Text:=IntToStr(o[5]);

c6.text:=IntToStr(o[6]);

c7.text:=IntToStr(o[7]);

c8.text:=IntToStr(o[8]);

c9.text:=IntToStr(o[9]);

c10.text:=IntToStr(o[10]);

c11.text:=IntToStr(o[11]);

c12.text:=IntToStr(o[12]);

c13.text:=IntToStr(o[13]);

c14.text:=IntToStr(o[14]);

c15.text:=IntToStr(o[15]);

Decode(H1);

end;

procedure Show_Main;

begin

Cool.Show;

end;

procedure TCool.ClosClick(Sender: TObject);

begin

About.Close;

Close;

end;

procedure TCool.Button1Click(Sender: TObject);

var

k,i,j:integer;

e:TArray;

begin

// обнуляем

for j := 1 to 5 do ZeroArray(g[j]);

for j := 1 to 1 shl 4 do ZeroArray(FormationMatrix[j]);

with Form1 do

begin

if (Form1.ShowModal=MROK) then

begin

N1.Enabled:=true;

Send.Enabled:=true;

p[1]:=strtoint(q0.Text);

p[2]:=strtoint(q1.Text);

p[3]:=strtoint(q2.Text);

p[4]:=strtoint(q3.Text);

p[5]:=strtoint(q4.Text);

p[6]:=strtoint(q5.Text);

p[7]:=strtoint(q6.Text);

p[8]:=strtoint(q7.Text);

p[9]:=strtoint(q8.Text);

p[10]:=strtoint(q9.Text);

p[11]:=strtoint(q10.Text);

for i:=1 to 5 do begin

for j:=1 to 11 do begin

g[i,(j+i-1)]:=p[j];

end;

end;

// приведем к виду с единичной матрицей в начале

Normalize;

// создаем кодовую таблицу

for I := 1 to 1 shl 5 do

for j := 1 to 6 do

if (I and(1 shl (j - 1))) <> 0 then

XorArrays(FormationMatrix[I], g[j]);

end;

end;

Dmin:=Find(p);if Dmin=6 then dmin:=5;

RightError:=trunc(Dmin/2);

EditDmin.Text:=IntToStr(Dmin);

EditError.Text:=IntToStr(RightError);

for i:=1 to 5 do begin

for j:=1 to 10 do begin

R1[i,j]:=g[i,j+5];

end;

end;

for i:=1 to 10 do ZeroArray(H1[i]);

for i:=1 to 5 do

for j:=1 to 10 do

h1[j,i]:=r1[i,j];

for j:=6 to 15 do

h1[j-5,j]:=1;

GenerateSindromes;

end;

procedure TCool.N1Click(Sender: TObject);

begin

Matrix.Show;

end;

procedure TCool.FormCreate(Sender: TObject);

begin

GetMem(sindr,sizeof(integer)*5);

MaxSindr:=0;

end;

procedure TCool.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Dispose(sindr);

end;