- •Формальное описание[править | править вики-текст]
- •Построение[править | править вики-текст]
- •Примеры кодов[править | править вики-текст] Примитивный двоичный (15,7,5) код[править | править вики-текст]
- •Кодирование[править | править вики-текст]
- •Методы декодирования[править | править вики-текст]
- •Алгоритм Берлекемпа-Мэсси[править | править вики-текст]
- •Евклидов алгоритм[править | править вики-текст]
- •Прямое решение (алгоритм Питерсона — Горенстейна — Цирлера, пгц)[править | править вики-текст]
- •Поиск Ченя[править | править вики-текст]
Коди Боуза - Чоудхурі - Хоквінгема (БЧХ-коди, англ. BCH code) - в теорії кодування це широкий клас циклічних кодів, що застосовуються для захисту інформації від помилок (див. Попередня корекція помилок). Відрізняється можливістю побудови коду із заздалегідь визначеними коригувальними властивостями, а саме, мінімальною кодовою відстанню. Окремим випадком БЧХ-кодів є Код Ріда-Соломона. Код винайшов в 1959 році А.Хоквінгем (Hocquenghem), і незалежно в 1960 році Р.Боуз (Bose) і Д.Рой-Чоудхурі (Ray-Chaudhuri). Код отримав свою назву (BCH code) від прізвищ їх авторів. Коди БЧХ є узагальненням кодів Хеммінга і дозволяють виправляти кратні помилки.
Зміст
[сховати]
1 Методи декодування
2 Декодування
3 Обчислення синдрому помилки
4 Побудова полінома помилки
5 Знаходження коренів
6 Визначення характеру помилки і її виправлення
7 Див. також
8 Посилання
Методи декодування[ред. • ред. код]
Коди БЧХ є циклічними кодами, тому до них застосовні всі методи, використовувані для декодування циклічних кодів. Однак існують набагато кращі алгоритми, розроблені саме для БЧХ-кодів.
Головною ідеєю в декодуванні БЧХ кодів є використання елементів кінцевого поля для нумерації позицій кодового слова (або, еквівалентно, в порядку коефіцієнтів асоційованого многочлена).
Декодування[ред. • ред. код]
Декодер, що працює по авторегресивному спектральному методу декодування, послідовно виконує наступні дії:
Обчислює синдром помилки
Будує поліном помилки
Знаходить корені даного полінома
Визначає характер помилки
Виправляє помилки
Обчислення синдрому помилки[ред. • ред. код]
Обчислення синдрому помилки виконується синдромним декодером, який ділить кодове слово на породжувальний многочлен. Якщо виникає залишок, то у слові є помилка. Залишок від ділення є синдромом помилки.
Побудова полінома помилки[ред. • ред. код]
Обчислений синдром помилки не вказує на становище помилок. Ступінь полінома синдрому дорівнює 2t, що багато менше ступеня кодового слова n. Для отримання відповідності між помилкою і її положенням у повідомленні будується поліном помилок. Поліном помилок реалізується за допомогою алгоритму Берлекемпа - Мессі, або за допомогою алгоритму Евкліда. Алгоритм Евкліда має просту реалізацію, але вимагає великих витрат ресурсів. Тому частіше застосовується більш складний, але менш затратний алгоритм Берлекемпа - Мессі. Коефіцієнти знайденого полінома безпосередньо відповідають коефіцієнтам помилкових символів у кодовому слові.
Знаходження коренів[ред. • ред. код]
На цьому етапі шукаються корені полінома помилки, що визначають положення спотворених символів в кодовому слові. Реалізується за допомогою процедури Ченя, повним перебором. У поліном помилок послідовно підставляються всі можливі значення, коли поліном звертається в нуль - корені знайдені.
Визначення характеру помилки і її виправлення[ред. • ред. код]
По синдрому помилки і знайденим кореням полінома за допомогою алгоритму Форні визначається характер помилки і будується маска спотворених символів. Після того як маска знайдена, вона накладається на кодове слово за допомогою операції XOR і спотворені символи відновлюються. Після цього відкидаються перевірочні символи і виходить відновлене інформаційне слово.
Формальное описание[править | править вики-текст]
БЧХ-код
является циклическим
кодом,
который можно задать порождающим
полиномом.
Для его нахождения в случае БЧХ-кода
необходимо заранее определить длину
кода
(она
не может быть произвольной) и требуемое
минимальное расстояние
.
Найти порождающий полином можно следующим
образом.
Пусть
— примитивный
элемент поля
(то
есть
),
пусть
, —
элемент поля
порядка
.
Тогда нормированный полином
минимальной
степени над полем
, корнями которого
являются
подряд
идущих степеней
элемента
для
некоторого целого
(в
том числе 0 и 1), является порождающим
полиномом БЧХ-кода над полем
с
длиной
и
минимальный расстоянием
.
Поясним почему у получившегося кода
будут именно такие характеристики
(длина кода
,
минимальное расстояние
).
Действительно, как показано в [1] ,
длина БЧХ кода равна порядку элемента
,
если
и
равна порядку элемента
,
если
,
тогда, так как случай
нам
не интересен (такой код не может исправлять
ошибки, только обнаруживать), то длина
кода будет равна порядку элемента
,то
есть равна
.
Минимальное расстояние
может
быть больше
,
когда корнями минимальных функций(стр.83[2])
от элементов
будут
элементы расширяющие последовательность,
то есть элементы
.
Число
проверочных символов
равно
степени
,
число информационных символов
,
величина
называется конструктивным
расстоянием БЧХ-кода.
Если
,
то код называется примитивным,
иначе непримитивным.
Так
же, как и для циклического кода, кодовый
полином
может
быть получен из информационного
полинома
,
степени не больше
,
путём перемножения
и
:
.
Построение[править | править вики-текст]
Для нахождения порождающего полинома необходимо выполнить несколько этапов:
выбрать
,
то есть поле
,
над которым будет построен код;выбрать длину кода из условия
,
где
—
целые положительные числа;задать величину конструктивного расстояния;
1)
построить циклотомические
классы элемента
поля
над
полем
,
где
—
примитивный элемент
;
2)
поскольку каждому такому циклотомическому
классу соответствует неприводимый
полином над
,
корнями которого являются элементы
этого и только этого класса, со степенью
равной количеству элементов в классе,
то выбрать
таким
образом, чтобы суммарная длина
циклотомических классов была минимальна;
это делается для того, чтобы при заданных
характеристиках кода
и
минимизировать
количество проверочных символов
;
3)
вычислить порождающий полином
,
где
—
полином, соответствующий
-ому
циклотомическому классу; или вычислить
,
как НОК минимальных
функций от элементов
(стр.168[1]).
Примеры кодов[править | править вики-текст] Примитивный двоичный (15,7,5) код[править | править вики-текст]
Пусть
,
требуемая длина кода
и
минимальное расстояние
.
Возьмем
—
примитивный элемент поля
,
и
—
четыре подряд идущих степеней элемента
.
Они принадлежат двум циклотомическим
классам над полем
,
которым соответствуют неприводимые
полиномы
и
.
Тогда полином
имеет
в качестве корней элементы
и
является порождающим полиномом БЧХ-кода
с параметрами
.
16-ричный (15,11,5) код (код Рида — Соломона)[править | править вики-текст]
Пусть
и
—
примитивный элемент
.
Тогда
.
Каждый элемент поля можно сопоставить 4 битам, поэтому одно кодовое слово эквивалентно 60=15*4 битам, таким образом набору из 44 бит ставится в соответствие набор из 60 бит. Можно сказать, что такой код работает с полубайтами информации.
