Московский Технический Университет Связи и Информатики
Кафедра радиотехнических систем
Лабораторный практикум по дисциплине
ПОМЕХОУСТОЙЧИВОЕ КОДИРОВАНИЕ
Лабораторная работа №3
Исследование процессов кодирования и
декодирования кодов Рида-Соломона
Выполнил:
студент группы ПС0601
Яшин П.А.
Проверил:
доц. Русанов В.Э.
Москва 2011
Цель работы:
1. Получение практических навыков по формированию поля Галуа для построения кодов Рида-Соломона, изучение алгоритмов формирования кодовых слов.
2. Изучение процессов декодирования кодов Рида-Соломона, алгоритма обнаружения и исправления ошибок в кодовых словах.
Исходные данные:
а)
тип кода – код Рида Соломона на основе
поля Галуа GF(16), построенного на основе
многочлена g(x)=
,
примитивный элемент GF
010
б) разрядность 4 бита;
б) n =15 длина кодового слова (блока) циклического кода ;
в) k=11 - длина информационного слова (блока) циклического кода;
г) t=2 - кратность обнаруживаемых и исправляемых ошибок.
д) кодируемая информация – Ф (первая буква фамилии)
Выполнение работы:
Получим элементы поля Галуа GF(16), построенного на основе многочлена g(x)= , примитивный элемент GF 010.
100000000000000000000000 | 10011
10011 1001101011110
010110 α4
00000
01100 α5
00000
00000 α6
10011
00010 α7
10011
00000 α8
00000
10100 α9
10011
01111 α10
00000
11101 α11
10011
11110 α12
10011
11110 α13
10011
10010 α14
10011
00010 α0
00000
01100 α1
α-∞ |
α0 |
α1 |
α2 |
α3 |
α4 |
α5 |
α6 |
α7 |
α8 |
α9 |
α10 |
α11 |
α12 |
α13 |
α14 |
0 |
1 |
2 |
4 |
8 |
15 |
15 |
15 |
13 |
10 |
10 |
7 |
14 |
12 |
13 |
9 |
0000 |
0001 |
0010 |
0100 |
1000 |
1111 |
1111 |
1111 |
1111 |
0111 |
1011 |
1111 |
1111 |
1111 |
1001 |
1001 |
Согласно варианту 8 бит кодируемой информации 1111.1110. Получим 11 четырёхзначных элемента поля GF(16), добавив к 8 информационным битам ещё 36, в итоге имеем: 1001.0100.0000.0000.0000.0000.0000.0000.0000.0000.0000,
При записи в виде полинома со степенями элементов GF(16), получим:
a(x)=α14*x10+ α2*x9
Запишем образующий полином кода Рида-Соломона g(x)по теореме Безу:
Применив правила операций над элементами поля GF, окончательно получим g(x):
Кодовое
слово формируется по правилу:
,
где
,
где r-
число исправляемых символов по 4 бита
Кодовое слово, переданное в канал можно представить в виде полинома
или
в виде набора двоичных символов:
с=1001.0100.0000.0000.0000.0000.0000.0000.0000.0000.0000.0010.0010.1101.1110
В ходе передачи информация были повреждены два блока по 4 бита, именно столько может исправить наш код Рида-Соломона. Для упрощения ручного вычисления синдрома пусть это будут предпредпоследняя и предпоследняя группы бит по 4:
с`=1001.0100.0000.0000.0000.0000.0000.0000.0000.0000.0000. 0010.1101.0010.1110
В
полиномиальном виде:
Синдром, согласно которому происходит исправление ошибки, находится как остаток от деления c`(x) на g(x)
Этапы деления до сноса проверочных символов в нашем случае повторяют процедуру вычисления остатка от деления a(x) xr на g(x), поэтому опущены. Дальнейшие операции приведены ниже:
В
результате вычислений получаем синдром
в форме полинома:
В двоичной форме s=0000.1111.1111.0000
Проверим правильность выполнения ручных операций
с помощью программы из комплекта ЛР.
Для проверки будем закладывать в программу необходимые многочлены в виде степеней элементов поля Галуа при степенях x.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
R |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
Например:
можно записать в виде:
E2RRRRRRRRR11DB
Здесь
R
заменяет символ
,
то есть показатель степени при нулевом
элементе
Получение проверочных символов как остатка от деления a(x)*xr/g(x):
Числитель до дел: E2RRRRRRRRRRRRR Знаменатель до дел: 0D63A
Делим:i=14
Div Proizv=C1*A: EC529RRRRRRRRRR
Текущее делимое: 7529RRRRRRRRRR
Делим:i=13
Div Proizv=C1*A: 75DA2RRRRRRRRR
Текущее делимое: ED2RRRRRRRRR
Делим:i=11
Div Proizv=C1*A: EC529RRRRRRR
Текущее делимое: 1129RRRRRRR
Делим:i=10
Div Proizv=C1*A: 1E74BRRRRRR
Текущее делимое: 7CEBRRRRRR
Делим:i=9
Div Proizv=C1*A: 75DA2RRRRR
Текущее делимое: E2E2RRRRR
Делим:i=8
Div Proizv=C1*A: EC529RRRR
Текущее делимое: 7CR9RRRR
Делим:i=7
Div Proizv=C1*A: 75DA2RRR
Текущее делимое: EDD2RRR
Делим:i=6
Div Proizv=C1*A: EC529RR
Текущее делимое: 17R9RR
Делим:i=5
Div Proizv=C1*A: 1E74BR
Текущее делимое: 17EBR
Делим:i=4
Div Proizv=C1*A: 1E74B
Текущее делимое: 11DB
Остаток: 11DB
Числитель: E2RRRRRRRRRRRRR
Знаменатель: 0D63A
Частное: E7RE17E7E11
Остаток: 11DB
Результат совпадает с ручными вычислениями
Проверка деления c(x)/g(x) без ошибки в канале:
Числитель до дел: E2RRRRRRRRR11DB Знаменатель до дел: 0D63A
Делим:i=14
Div Proizv=C1*A: EC529RRRRRRRRRR
Текущее делимое: 7529RRRRRR11DB
Делим:i=13
Div Proizv=C1*A: 75DA2RRRRRRRRR
Текущее делимое: ED2RRRRR11DB
Делим:i=11
Div Proizv=C1*A: EC529RRRRRRR
Текущее делимое: 1129RRR11DB
Делим:i=10
Div Proizv=C1*A: 1E74BRRRRRR
Текущее делимое: 7CEBRR11DB
Делим:i=9
Div Proizv=C1*A: 75DA2RRRRR
Текущее делимое: E2E2R11DB
Делим:i=8
Div Proizv=C1*A: EC529RRRR
Текущее делимое: 7CR911DB
Делим:i=7
Div Proizv=C1*A: 75DA2RRR
Текущее делимое: EDD51DB
Делим:i=6
Div Proizv=C1*A: EC529RR
Текущее делимое: 1713DB
Делим:i=5
Div Proizv=C1*A: 1E74BR
Текущее делимое: 1E74B
Делим:i=4
Div Proizv=C1*A: 1E74B
Текущее делимое:
Остаток: RRRR
Числитель: E2RRRRRRRRR11DB
Знаменатель: 0D63A
Частное: E7RE17E7E11
Остаток: RRRR
Остаток нулевой, ошибки в канале не было – значит c(x) сформирован правильно
Проверка деления с ошибкой в полиноме при 2 и 1 степенях:
Числитель до дел: E2RRRRRRRRR1D1B Знаменатель до дел: 0D63A
Делим:i=14
Div Proizv=C1*A: EC529RRRRRRRRRR
Текущее делимое: 7529RRRRRR1D1B
Делим:i=13
Div Proizv=C1*A: 75DA2RRRRRRRRR
Текущее делимое: ED2RRRRR1D1B
Делим:i=11
Div Proizv=C1*A: EC529RRRRRRR
Текущее делимое: 1129RRR1D1B
Делим:i=10
Div Proizv=C1*A: 1E74BRRRRRR
Текущее делимое: 7CEBRR1D1B
Делим:i=9
Div Proizv=C1*A: 75DA2RRRRR
Текущее делимое: E2E2R1D1B
Делим:i=8
Div Proizv=C1*A: EC529RRRR
Текущее делимое: 7CR91D1B
Делим:i=7
Div Proizv=C1*A: 75DA2RRR
Текущее делимое: EDD5D1B
Делим:i=6
Div Proizv=C1*A: EC529RR
Текущее делимое: 171A1B
Делим:i=5
Div Proizv=C1*A: 1E74BR
Текущее делимое: 1E26B
Делим:i=4
Div Proizv=C1*A: 1E74B
Текущее делимое: CCR
Остаток: RCCR
Числитель: E2RRRRRRRRR1D1B
Знаменатель: 0D63A
Частное: E7RE17E7E11
Остаток: RCCR
Результаты совпали с ручным расчётом
Выводы: в ходе работы была освоена методика построения полей Галуа и работы с их элементами. На практике была проведена операция кодирования/декодирования Рида-Соломона. Из-за ошибки в канале синдром отличен от нуля. Произошло две групповых ошибки, обе могут быть исправлены.
