5.3.4 Построение и декодирование конкретных циклических кодов
Коды исправляющие одиночную ошибку d0 = 3
1. Расчет соотношений между контрольными и информационными символами кода производится на основании следующих выражений.
Если задано число информационных разрядов k, то число контрольных разрядов находим из выражения
= [ log2 {( k + 1 ) + log2 ( k + 1 )}].
Общее число символов кода
n = k +
Если задана длина кода n, то число контрольных разрядов
= [ log2 ( n + 1 ) ].
2. Выбор образующего многочлена производится по таблицам неприводимых двоичных многочленов.
Таблица 5.13 – Фрагменты таблицы образующих многочленов
| Коды многочленов | |||
---|---|---|---|---|
11 101 111 1001 1011 1101 1111 10001 10011 10101 10111 11001 11011 11101 11111 100001 100011 100101 100111 101001 101011 101101 101111 110001 | 110011 110101 110111 111001 111011 111111 1000001 1000011 1000101 1000111 1001001 1001011 1001101 1001111 1010001 1010011 1010101 1010111 1011001 1011011 1011101 1011111 1100001 1100011 | 1100101 1100111 1101001 1101011 1101101 1101111 1110001 1110011 1110101 1110111 1111001 1111011 1111101 1111111 10000001 11100001 100000001 100000011 1000000001 1100000001 10000000001 100000000001 100000000011 100000000101 |
|
Образующий многочлен P(x) следует выбирать как можно более коротким, но степень его должна быть не менее числа контрольных разрядов , а число нулевых членов ‑ не меньше минимального кодового расстояния d0.
3. Выбор параметров единичной транспонированной матрацы происходит из условия, что число столбцов (строк) матрицы определяется числом информационных разрядов, т. е. ранг единичной матрицы равен k.
4. Определение элементов дополнительной матрицы производится по остаткам от деления последней строки транспонированной матрицы (единицы с нулями) на образующий многочлен.
Полученные остатки должны удовлетворять следующим требованиям:
а) число разрядов каждого остатка должно быть равно числу контрольных символов , следовательно, число разрядов дополнительной матрицы должно быть равно степени образующего многочлена;
б) число остатков должно быть не меньше числа строк единичной транспонированной матрицы, т. е. должно быть равно числу информационных разрядов k.
в) число единиц каждого остатка, т. е. его вес, должно быть не менее величины r = d0 - 1, где d0 ‑ минимальное кодовое расстояние, не меньшее числа обнаруживаемых ошибок;
г) количество нулей, приписываемых к единице с нулями при делении ее на выбранный многочлен, должно быть таким, чтобы соблюдались условия а), б), в).
5. Образующая матрица составляется дописыванием элементов дополнительной матрицы справа от единичной транспонированной матрицы либо умножением элементов единичной матрицы на образующий многочлен.
6. Комбинациями исходного кода являются строки образующей матрицы и все возможные суммы по модулю 2 различных сочетаний строк образующей матрицы.
7. Обнаружение и исправление ошибок производится по остаткам от деления принятой комбинации F(x) на образующий многочлен P(x). Если принятая комбинация делится на образующий многочлен без остатка, то код принят без ошибок. Остаток от деления свидетельствует о наличии ошибки, но не указывает, какой именно.
Для того чтобы найти ошибочный разряд и исправить его в циклических кодах, осуществляют следующие операции:
а) принятую комбинацию делят на образующий многочлен и
б) подсчитывают количество единиц в остатке (вес остатка). Если W , где ‑ допустимое число исправляемых данным кодом ошибок, то принятую комбинацию складывают по модулю 2 с полученным остатком. Сумма даст исправленную комбинацию. Если W > , то
в) производят циклический сдвиг принятой функции F(x) влево на один разряд. Комбинацию, полученную в результате циклического сдвига, делят на P(x). Если в результате этого деления W , то делимое суммируется с остатком, затем
г) производится циклический сдвиг вправо на один разряд комбинации, полученной в результате суммирования последнего делимого с последним остатком. Полученная в результате комбинация уже не содержит ошибок. Если после первого циклического сдвига и последующего деления остаток получается таким, что его вес W > , то
д) повторяют операцию пункта в) до тех пор, пока не будет W . В этом случае комбинацию, полученную в результате циклического сдвига, суммируют с остатком от деления этой комбинации на образующий многочлен, а затем
е) производят циклический сдвиг вправо ровно на столько разрядов, на сколько была сдвинута суммируемая с последним остатком комбинация относительно принятой комбинации. В результате получим исправленную
комбинацию.
Пример.
Построить все комбинации циклического кода, исправляющего одиночные ошибки в каждой комбинации кода. Число различных комбинаций кода должно обеспечивать передачу 26 букв латинского алфавита.
Показать процесс исправления ошибки в одной из комбинаций, полученной в результате суммирования нескольких строк образующей матрицы.
Решение.
Определяем число информационных разрядов
Тогда число корректирующих разрядов
Выбираем образующий многочлен
Строим образующую матрицу
по которой находим разрешенные комбинации кода:
0 0 0 0 1 1 0 0 1 1
0 0 0 1 0 1 0 0 1 1
0 0 1 0 0 1 0 0 1 1
0 1 0 0 0 1 0 0 1 1
1 0 0 0 0 1 0 0 1 1
a1 a2 = 0 0 0 1 1 0 1 0 1;
a1 a3 = 0 0 1 0 1 1 1 1 1;
a1 a4 = 0 1 0 0 0 1 0 1 1;
a1 a5 = 1 0 0 1 0 0 0 1 1;
a2 a3 = 1 0 1 1 0 1 0 1 0;
a2 a4 = 0 1 0 1 1 1 1 1 0;
a2 a5 = 1 0 0 0 1 0 1 1 0;
a3 a4 = 0 1 1 0 1 0 1 0 0;
a3 a5 = 1 0 1 1 1 1 1 0 0;
a3 a5 = 1 1 0 1 0 1 0 0 0;
a1 a2 a3 = 0 0 1 1 1 1 0 0 1;
a1 a2 a4 = 0 1 0 1 0 1 1 0 1;
a1 a2 a5 = 1 0 0 0 0 0 1 0 1;
a1 a3 a4 = 0 1 1 0 0 0 1 1 1;
a1 a3 a5 = 1 0 1 1 0 1 1 1 1;
a1 a4 a5 = 1 1 0 1 1 1 0 1 1;
a2 a3 a4 = 0 1 1 1 1 0 0 1 0;
a2 a3 a5 = 1 0 1 0 1 1 0 1 0;
a2 a4 a5 = 1 1 0 0 0 1 1 1 0;
a3 a4 a5 = 1 1 1 1 0 0 1 0 0;
a1 a2 a3 a4 = 0 1 1 1 0 0 0 0 1;
a1 a2 a3 a5 = 1 0 1 0 0 1 0 0 1;
a1 a2 a4 a5 = 1 1 0 0 1 1 1 0 1;
a1 a3 a4 a5 = 1 1 1 1 1 0 1 1 1;
a2 a3 a4 a5 =1 1 1 0 0 0 0 1 0;
a1 a2 a3 a4 a5 = 1 1 1 0 1 0 0 0 1;
Для передачи 26 букв латинского алфавита можно выбрать любые 26 из полученных 31 комбинации.
Исправление ошибки.
Предположим, ошибка произошла в комбинации № 29, т.е. принятая комбинация - 111110110.
Исправляем ошибку
1 1 1 1 1 0 1 1 0 1 0 0 1 1
1 0 0 1 1
1 1 0 0 0
1 0 0 1 1 W =
1 0 1 1 1
1 0 0 1 1
1 0 0 1 0
1 0 0 1 1
1
Так как получили W = то суммируем остаток с принятой кодовой комбинацией и тем самым получаем исправленную комбинацию.
1 1 1 1 1 0 1 1 0
1
1 1 1 1 1 0 1 1 1
Циклические коды, исправляющие две и большее количество ошибок,
d0 5
Методика построения циклических кодов с d0 5 отличается от методики построения циклических кодов с d0 < 5 только в выборе образующего многочлена. В литературе эти коды известны как БЧХ (первые буквы фамилий Боуз, Чоудхури, Хоквинхем ‑ авторов методики построения циклических кодов с d0 5).
Построение образующего многочлена зависит, в основном, от двух параметров: от длины кодового слова n и от числа исправляемых ошибок . Остальные параметры, участвующие в построении образующего многочлена, в зависимости от заданных n и могут быть определены при помощи таблиц и вспомогательных соотношений, о которых будет сказано ниже.
Для исправления числа ошибок 2 еще не достаточно условия, чтобы между комбинациями кода минимальное кодовое расстояние d0 = 2 + 1, необходимо также чтобы длина кода n удовлетворяла условию
n = 2h 1,
при этом n всегда будет нечетным числом. Величина h определяет выбор числа контрольных символов и связана с и следующим соотношением:
h • = [ log2 (n + 1)]
С другой стороны, число контрольных символов определяется образующим многочленом и равно его степени.
При больших значениях h длина кода n становится очень большой, что вызывает вполне определенные трудности при технической реализации кодирующих и декодирующих устройств. При этом часть информационных разрядов порой остается неиспользованной.
В таких случаях для определения h удобно пользоваться выражением
2h - 1 = n • C
где С является одном из сомножителей, на которые разлагается число n.
Соотношения между n, C и h могут быть сведены в следующую таблицу:
Таблица 5.14 – Соотношения между h, n, C
-
№ п/п
h
n = 2h - 1
C
1
3
7
1
2
4
15
5; 3
3
5
31
1
4
6
63
7; 3; 3
5
7
127
1
6
8
255
17; 5; 3
7
9
511
7; 3; 7
8
10
1023
31; 11; 3
9
11
2047
89; 23
10
12
4095
3; 3 ;5 ; 7; 13
Пример.
При h = 10 длина кодовой комбинации может быть равна и 1023 (С = 1), и 341 (С = 3), и 33 (С = 31), 31 (С = 33), понятно что n не может быть меньше h •.
Величина С влияет на выбор порядковых номеров минимальных многочленов, так как индексы первоначально выдранных многочленов умножаются на С.
Построение образующего многочлена P(x) производится при помощи так называемых минимальных многочленов M(x), которые являются простыми неприводимыми многочленами.
Таблица 5.15 – Минимальные неприводимые многочлены в поле Галуа GF (2) степени от 2 до 7
Степень |
2 |
3 |
4 |
5 |
6 |
7 |
1 3 5 7 9 11 13 15 17 19 21 | 111 | 1011 1101 | 10011 1111 111 11001 | 100101 111101 110111 101111 110111 111011 | 1000011 1010111* 1100111 1001001* 1101 1101101
| 10001001 10001111 10011101 11110111 10111111 11010101 10000011
11001011 11100101 |
Степень |
2 |
3 |
4 |
5 |
6 |
7 |
Таблица 5.16 – Минимальные неприводимые многочлены в поле Галуа GF (2) степени от 8 до 10
Степень |
8 |
9 |
10 |
1 3 5 7 9 11 13 15 17 19 21 23 25 27 | 100011101 101110111* 111110011* 101101001 110111101* 111100111 100101011 111010111* 010011 101100101 110001011* 101100011 100011011* 100111111* | 1000010001 1001011001 1100110001 1010011001* 1100010011 1000101101 1001110111 1101100001 1011011011 1110000101 1000010111* 1111101001 1111100011 1110001111 | 10000001001 10000001111* 10100001101 11111111001 10010101111* 10000110101* 10001101111 10110101011* 11101001101 10111111011 11111101011* 10000011011 10100100011 11101111011* |
Примечание:
Неприводимый многочлен степени m над полем GF (q) называется примитивным, если:
его корнем является примитивный элемент поля GF (qm);
когда принадлежит показателю qm – 1;
когда он не является делителем многочлена xn – 1 при n, меньших, чем qm – 1.
Звездочкой обозначены все непримитивные многочлены.
Образующий многочлен представляет собой произведение нечетных минимальных многочленов и является их наименьшим общим кратным (НОК). Максимальный порядок r определяет номер последнего из выбираемых табличных минимальных многочленов
= 2 - 1.
Порядок многочлена используется при определении числа сомножителей P(x). Например, если = 6, то r = 2 - 1 = 11. Так как для построения P(x) используются только нечетные многочлены, то ими будут: M1(x), M3(x), M5(x), M7(x), M9(x), M11(x), старший из них имеет порядок r. Как видим, число сомножителей P(x) равно 6, т. е. числу исправляемых ошибок. Таким образом, число минимальных многочленов, участвующих в построении образующего многочлена
L = ,
а старшая степень l = h
(l указывает колонку в столбце минимальных многочленов, из которой обычно выбирается многочлен для построения P(x)).
Степень образующего многочлена, полученного в результате перемножения выбранных минимальных многочленов,
= l • = h •.
В общем виде
P(x) = НОК [M1(x) • M3(x) • . . . • Mr(x)].
Декодирование кодов БЧХ производится по той же методике, что и декодирование циклических кодов с d0 < 5. Однако в связи с тем, что практически все коды БЧХ представлены комбинациями с n 15, могут возникнуть весьма сложные варианты, когда для обнаружения и исправления ошибок необходимо производить большое число циклических сдвигов. В этом случае для облегчения можно комбинацию, полученную после k - кратного сдвига и суммирования с остатком, сдвигать не вправо, а влево на n – k циклических сдвигов. Это целесообразно делать только при k > n/2.
- Дискретная математика
- 6.050102 “Компьютерная инженерия” содержание
- 1 Теория множеств 7
- 2 Математическая логика 15
- 3 Формальные теории 35
- 4 Теория графов 47
- 5 Элементы теории чисел 80
- 6 Теория алгоритмов 121
- Введение
- 1 Теория множеств
- 1.1 Множества и подмножества
- 1.1.1 Элементы множества
- 1.2 Аксиомы теории множеств
- 1.3 Способы задания множеств
- 1.4 Операции над множествами
- 1.5 Элементы алгебры множеств
- 1.5.1 Определение алгебры множеств
- 1.5.2 Основные законы алгебры множеств
- 1.5.3 Принцип двойственности
- 2 Математическая логика
- 2.1 Функции алгебры логики (булевые функции)
- 2.1.1 Способы задания булевых функций
- 2.1.2 Логические функции одной переменной
- 2.1.3 Логические функции двух переменных
- 2.2.6 Функционально полные системы булевых функций
- 2.3 Алгебра буля
- 2.3.1 Определение алгебры. Теорема Стоуна
- 2.3.2 Законы алгебры логики
- 2.3.3 Разложения функций по переменным
- 2.3.4 Приведение логических функций
- 2.3.5 Импликанты и имплициенты булевых функций
- 2.3.6 Методы минимизации логических функций
- 2.4 Алгебра жегалкина
- 2.4.1 Преобразование функций в алгебре Жегалкина
- 2.4.2 Переход от булевой алгебры к алгебре Жегалкина
- 3 Формальные теории
- 3.1 Основные принципы построения формальных теорий исчисления
- 3.2 Определение исчисления высказываний
- 3.2.1 Метатеоремы исчисления высказываний
- 3.2.2 Схемы исчисления высказываний
- 3.3 Исчисление предикатов
- 3.3.1 Определение формальной теории pl
- 3.3.2 Принцип резолюции в исчислении предикатов
- 3.3.3 Схемы доказательств в исчислении предикатов
- 4 Теория графов
- 4.1 История теории графов
- 4.2 Основные определения
- 4.3 Способы представления графов
- 4.3.1 Матрицей смежности
- 4.3.2 Матрицей инцидентности
- 4.4 Пути в графах
- 4.4.1 Задача о кратчайшем пути
- 4.4.2 Алгоритм Дейкстры нахождения кратчайшего пути в графе
- 4.5 Транспортные сети
- 4.5.1 Потоки в транспортных сетях
- 4.5.2 Задача нахождения наибольшего потока в транспортной сети
- 4.5.3 Алгоритм Форда и Фалкерсона нахождения максимального потока транспортной сети
- 4.5.4 Транспортная задача
- 4.6 Обходы в графах
- 4.6.1 Эйлеровы графы
- 4.6.2 Алгоритм Флёри нахождения эйлерова цикла
- 4. Если получился цикл, но не ейлеров, то отбрасываем данную последнюю вершину и повторяем пункт 2.
- 4.6.3 Гамильтоновы циклы
- 4.6.4 Метод ветвей и границ.
- 4.6.5 Метод ветвей и границ в задаче о коммивояжёре
- 4.7 Деревья
- 4.7.1 Построение экономического дерева
- 4.7.2 Алгоритм Краскала
- 5 Элементы теории чисел
- 5.1 Модулярная арифметика
- 5.1.1 Алгоритм Евклида для нахождения наибольшего общего делителя
- 5.1.2 Вычисление обратных величин
- 5.1.3 Основные способы нахождения обратных величин
- 5.1.4 Китайская теорема об остатках
- 5.2 Кодирование
- 5.2.1 Оптимальное кодирование
- 5.3 Обнаружение и исправление ошибок
- 5.3.1 Общие понятия
- 5.3.2 Линейные групповые коды
- 5.3.2 Код Хэмминга
- 5.3.3 Циклические коды
- 5.3.4 Построение и декодирование конкретных циклических кодов
- 5.4 Сжатие информации
- 5.4.1 Исключение повторения строк в последующих строках
- 5.4.2 Алгоритм lzw
- 6 Теория алгоритмов
- 6.1. Основные понятия
- 6.1.1 Основные требования к алгоритмам
- 6.1.2 Блок–схемы алгоритмов
- 6.1.3 Представление данных
- 6.1.4 Виды алгоритмов
- 6.1.5 Правильность программ
- 6.1.6 Эффективность алгоритмов
- 6.1.7 Сходимость, сложность, надежность
- 6.2 Универсальные алгоритмы
- 6.2.1 Основные понятия
- 6.2.2 Машины Тьюринга
- 6.2.3 Рекурсивные функции
- 6.2.5 Тезис Черча-Тьюринга
- 6.2.6 Проблема самоприменимости
- 6.3 Языки и грамматики
- 6.3.1 Общие понятия
- 6.3.2 Формальные грамматики
- 6.3.3 Иерархия языков
- 6.4 Параллельные вычисления
- Рекомендованная литература