From Wikipedia, the free encyclopedia
In coding theory, the Forney algorithm (or Forney’s algorithm) calculates the error values at known error locations. It is used as one of the steps in decoding BCH codes and Reed–Solomon codes (a subclass of BCH codes). George David Forney Jr. developed the algorithm.[1]
Procedure[edit]
- Need to introduce terminology and the setup…
Code words look like polynomials. By design, the generator polynomial has consecutive roots αc, αc+1, …, αc+d−2.
Syndromes
Error location polynomial[2]
The zeros of Λ(x) are X1−1, …, Xν−1. The zeros are the reciprocals of the error locations .
Once the error locations are known, the next step is to determine the error values at those locations. The error values are then used to correct the received values at those locations to recover the original codeword.
In the more general case, the error weights ej can be determined by solving the linear system
However, there is a more efficient method known as the Forney algorithm, which is based on Lagrange interpolation. First calculate the error evaluator polynomial[3]
Where S(x) is the partial syndrome polynomial:[4]
Then evaluate the error values:[3]
The value c is often called the «first consecutive root» or «fcr». Some codes select c = 1, so the expression simplifies to:
Formal derivative[edit]
Λ'(x) is the formal derivative of the error locator polynomial Λ(x):[3]
In the above expression, note that i is an integer, and λi would be an element of the finite field. The operator · represents ordinary multiplication (repeated addition in the finite field) and not the finite field’s multiplication operator.
Derivation[edit]
Lagrange interpolation
Gill (n.d., pp. 52–54) gives a derivation of the Forney algorithm.
Erasures[edit]
Define the erasure locator polynomial
Where the erasure locations are given by ji. Apply the procedure described above, substituting Γ for Λ.
If both errors and erasures are present, use the error-and-erasure locator polynomial
See also[edit]
- BCH code
- Reed–Solomon error correction
References[edit]
- ^ Forney 1965
- ^ Gill n.d., p. 24
- ^ a b c Gill n.d., p. 47
- ^ Gill (n.d., p. 48)
- Forney, G. (October 1965), «On Decoding BCH Codes», IEEE Transactions on Information Theory, 11 (4): 549–557, doi:10.1109/TIT.1965.1053825, ISSN 0018-9448
- Gill, John (n.d.), EE387 Notes #7, Handout #28 (PDF), Stanford University, pp. 42–45, archived from the original (PDF) on June 30, 2014, retrieved April 21, 2010
- W. Wesley Peterson’s book
From Wikipedia, the free encyclopedia
In coding theory, the Forney algorithm (or Forney’s algorithm) calculates the error values at known error locations. It is used as one of the steps in decoding BCH codes and Reed–Solomon codes (a subclass of BCH codes). George David Forney Jr. developed the algorithm.[1]
Procedure[edit]
- Need to introduce terminology and the setup…
Code words look like polynomials. By design, the generator polynomial has consecutive roots αc, αc+1, …, αc+d−2.
Syndromes
Error location polynomial[2]
The zeros of Λ(x) are X1−1, …, Xν−1. The zeros are the reciprocals of the error locations .
Once the error locations are known, the next step is to determine the error values at those locations. The error values are then used to correct the received values at those locations to recover the original codeword.
In the more general case, the error weights ej can be determined by solving the linear system
However, there is a more efficient method known as the Forney algorithm, which is based on Lagrange interpolation. First calculate the error evaluator polynomial[3]
Where S(x) is the partial syndrome polynomial:[4]
Then evaluate the error values:[3]
The value c is often called the «first consecutive root» or «fcr». Some codes select c = 1, so the expression simplifies to:
Formal derivative[edit]
Λ'(x) is the formal derivative of the error locator polynomial Λ(x):[3]
In the above expression, note that i is an integer, and λi would be an element of the finite field. The operator · represents ordinary multiplication (repeated addition in the finite field) and not the finite field’s multiplication operator.
Derivation[edit]
Lagrange interpolation
Gill (n.d., pp. 52–54) gives a derivation of the Forney algorithm.
Erasures[edit]
Define the erasure locator polynomial
Where the erasure locations are given by ji. Apply the procedure described above, substituting Γ for Λ.
If both errors and erasures are present, use the error-and-erasure locator polynomial
See also[edit]
- BCH code
- Reed–Solomon error correction
References[edit]
- ^ Forney 1965
- ^ Gill n.d., p. 24
- ^ a b c Gill n.d., p. 47
- ^ Gill (n.d., p. 48)
- Forney, G. (October 1965), «On Decoding BCH Codes», IEEE Transactions on Information Theory, 11 (4): 549–557, doi:10.1109/TIT.1965.1053825, ISSN 0018-9448
- Gill, John (n.d.), EE387 Notes #7, Handout #28 (PDF), Stanford University, pp. 42–45, archived from the original (PDF) on June 30, 2014, retrieved April 21, 2010
- W. Wesley Peterson’s book
В теория кодирования, то Алгоритм Форни (или же Алгоритм Форни) вычисляет значения ошибок в известных местах ошибок. Он используется как один из этапов декодирования Коды BCH и Коды Рида – Соломона (подкласс кодов BCH). Джордж Дэвид Форни мл. разработал алгоритм.[1]
Процедура
- Необходимо ввести терминологию и настройку …
Кодовые слова выглядят как полиномы. По замыслу порождающий полином имеет последовательные корни αc, αc+1, …, αc+d−2.
Синдромы
Многочлен определения места ошибки[2]
Нули Λ (Икс) находятся Икс1−1, …, Иксν−1. Нули — это обратные значения местоположений ошибок. .
После того, как места возникновения ошибок известны, следующим шагом будет определение значений ошибок в этих местах. Затем значения ошибок используются для исправления полученных значений в этих местах для восстановления исходного кодового слова.
В более общем случае веса ошибок еj можно определить, решив линейную систему
Однако существует более эффективный метод, известный как алгоритм Форни, который основан на Интерполяция Лагранжа. Сначала вычислите полином оценщика ошибок[3]
Где S(Икс) — полином частичного синдрома:[4]
Затем оцените значения ошибок:[3]
Значение c часто называют «первым последовательным корнем» или «fcr». Некоторые коды выбирают c = 1, поэтому выражение упрощается до:
Формальная производная
Λ ‘(Икс) это формальная производная полинома локатора ошибок Λ (Икс):[3]
В приведенном выше выражении обратите внимание, что я — целое число, а λя был бы элементом конечного поля. Оператор · представляет собой обычное умножение (повторное сложение в конечном поле), а не оператор умножения конечного поля.
Вывод
Интерполяция Лагранжа
Гилл (без даты., pp. 52–54) дает вывод алгоритма Форни.
Стирания
Определите полином локатора стирания
Где места стирания указаны jя. Примените процедуру, описанную выше, заменив Λ Γ.
Если присутствуют и ошибки, и стирания, используйте полином локатора ошибок и стирания
Смотрите также
- Код BCH
- Исправление ошибок Рида – Соломона
Рекомендации
- ^ Форни 1965
- ^ Гилл н.д., п. 24
- ^ а б c Гилл н.д., п. 47
- ^ Гилл (без даты., п. 48)
- Форни, Г. (Октябрь 1965 г.), «О декодировании кодов BCH», IEEE Transactions по теории информации, 11 (4): 549–557, Дои:10.1109 / TIT.1965.1053825, ISSN 0018-9448
- Джилл, Джон (нет данных), EE387 Заметки № 7, Раздаточный материал № 28 (PDF), Стэнфордский университет, стр. 42–45, заархивировано оригинал (PDF) 30 июня 2014 г., получено 21 апреля, 2010
- В. Уэсли Петерсон книга
внешняя ссылка
|
|
Макеты страниц
Уяснение работы декодера Пнтерсоиа-Горенстейна-Цирлера — лучший путь к пониманию процесса декодирования кодов БЧХ. Но при построении декодера приходится жертвовать концептуальной ясностью во имя вычислительной эффективности. Опи
санный в § 7.2 декодер Питерсона-Горенстейна-Цирлера предполагает обращение двух матриц размера
Хотя обращение матрицы в конечном поле не приводит к ошибкам округления, вычислительная работа, особенно для больших значений
может оказаться чрезмерно большой. В то же время обращения обеих матриц можно избежать. Обращение первой матрицы, необходимое для вычисления многочлена локаторов сшибок, можно обойти, используя алгоритм Берлекэмпа-Месси. Обращение второй матрицы, необходимое для вычисления значений ошибок, можно обойти, воспользовавшись процедурой, носящей название алгоритма Форнн. Этот параграф начнется с описания алгоритма Форни, а затем будет продолжено рассмотрение алгоритма Берлекэмпа-Месси.
Для описания алгоритма Форни нам понадобится многочлен локаторов ошибок
имеющий корни
Определим синдромный многочлен
и многочлен значений ошибок
Многочлен значений ошибок будет иногда использоваться в дальнейших рассуждениях. Его связь с локаторами и значениями ошибок устанавливается следующей теоремой.
Теорема 7.5.1. Многочлен значений ошибок можно записать в следующем виде:
Доказательство. Из определения сомножителей, входящих в равенство для
получаем
Выражение в квадратных скобках является разложением для
Таким образом,
Последнее выражение, взятое по модулю
совпадает с выражением, которое требуется доказать. Тем самым теорема доказана.
Теперь все готово для того, чтобы выписать выражение для значений ошибок, которое намного проще аналотнчного выражения, использующего обращение матрицы.
Теорема 7.5.2 (алгоритм Форни). Значения ошибок получаются из равенства
Доказательство. Используя равенство из утверждения теоремы 7.5.1 при
получим
откуда вытекает первая часть теоремы.
С другой стороны, производная многочлена
равна
и таким образом,
откуда сразу следует утверждение теоремы.
Алгоритм Форни обладает существенным преимуществом перед обращением матрицы, но использует деление. В гл. 9 будет предложено другое решение, не использующее деление.
Теперь вернемся к вычислению многочлена локаторов ошибок, использующему алгоритм Берлекэмпа-Месси теоремы 7.4.1. Предложенный Месси вариант решения этой задачи показан на рис. 7.4, а. По заданным
находится вектор
минимальной длины, удовлетворяющий
уравнениям
Это означает, что требуется по заданным 21 компонентам вектора
из свертки вычислить вектор А, если априори известно,
Рис. 7.4. Генерации спектра ошибок, а — вариант Месси; б — вариант Берлекэмпа.
что
Удовлетворяющий этому равенству вектор
определяет коэффициенты многочлена локаторов ошибок
где
являются локаторами ошибок. Многочлен значений ошибок не вычисляется с помощью этого алгоритма, но получается позже из
и
согласно определению
Вариант Берлекэмна решения этой задачи показан на рис. 7.4.6, из которого видно, что многочлену значений ошибок отводится центральная роль. Такой вариант предполагает поиск векторов
компоненты которых рапиы нулю при К.
и удовлетворяют 11 уравнениям
где
при
. Заметим, что
пробегает
значений. Решение задачи чается двумя многочленами: многочленом локаторов ошибок и многочленом значений ошибок.
Два описанных выше варианта эквивалентны. В дальнейшем будет рассмотрен варнант, предложенный Мессн При
необходимости алгоритм Берлекэмпа-Месси можно преобразовать в форму Берлекэмпа, производя итерации непосредственно для многочленов
На рис. 7.5 приведена блок-схема алгоритма Берлекэмпа— Месси. Как было показано, этот алгоритм позволяет вычислять многочлен локаторов ошибок исходя из заданных
компонент
Рис. 7.5. (см. скан) Алгоритм Берлекэмпа-Месси,
синдрома
Если
в коде отлично от 1, то определим
Эти компоненты синдрома участвуют в вычислениях точно так же, как и прежние компоненты. Сам алгоритм при этом не претерпевает никаких изменений, и дело сводится лишь к соответствующему изменению индексов внутренних переменных в алгоритме.
Этот алгоритм и его обоснование будут понятнее, если во всех деталях проследить работу алгоритма по схеме на рис. 7.5 для конкретных примеров. В табл. 7.3 приведены необходимые вычисления для
-кода Рида-Соломона, исправляющего тройные ошибки. В достоверности приведенных вычислений можно убедиться, проделав шесть итераций по изображенной на рис. 7.5 схеме. Табл. 7.4 содержит анвлогичные вычисления для исправляющего тройные ошибки
-кода БЧХ.
Внутренняя логика работы алгоритма Берлекэмпа-Месси может показаться несколько загадочной. Возможно, ответы на
Таблица 7.3 (см. скан) Алгоритм Берлекэмпа-Месси для
-кода Рида-Соломона, исправляющего тройные ошибки
Таблица 7.4 (см. скан) Алгоритм Берлекэмпа-Месси для
-кода БЧХ, исправляющего тройные ошибки
возникшие вопросы помогут найти следующие соображения. На некоторых итерациях, скажем на
итерации, наравне с выбранным по алгоритму Берлекэмпа-Месси регистром с линейной обратной связью могут существовать другие регистры минимальной длины с линейной обратной связью, генерирующие требуемые символы. Все эти регистры будут генерировать одну и ту же требуемую последовательность
компонент синдрома; в то же время последующие компоненты, не входящие в
итерацию, у них будут различны. Каждый раз, когда это возможно, на следующей итерации выбирается регистр сдвига с линейной обратной связью с прежней длиной, генерирующий следующую требуемую компоненту синдрома; если такого регистра не оказывается, то длину регистра приходится увеличивать. Однако при решении вопроса о необходимости увеличения длины регистра никак не учитывается значение следующей компоненты синдрома (проверяется лишь выполнение соотношения
Рис. 7.6. Схема аппаратурной реализации алгоритма Берлекэмпа-Месси. Замечания Требуется 21 итераций из
тактов каждая. Все данные передаются
параллельными битами.
Таким образом, на
-шаге имеется по меньшей мере столько же возможных вариантов регистра сдвига, сколько значений может принимать
Описанный алгоритм может быть реализован в виде программы для универсальных или специализированных ЭВМ, предназначенных для вычислений в полях Галуа. Если требуется очень большая скорость декодирования, то можно воспользоваться специальным жестким исполнением декодера, возможно включающим регистры сдвига.
Схема аппаратурной реализации построенного на регистрах сдвига устройства приведена на рис. 7.6. Три регистра, изображенные на рисунке, используются для хранения значений коэффициентов многочленов
длина каждого регистра должнабыть не меньше той, которая необходима для хранения соответствующего многочлена наибольшей степени, а иногда выбирается немного большей. Если регистры содержат многочлены со степенями меньше максимальных, то
ошибок, такой декодер выдаст правильное выражение для многочлена локаторов ошибок. В случае когда произойдет более
ошибок, декодирование будет неудачным и получится либо многочлен, не удовлетворяющий условиям, которым должен удовлетворять многочлен локаторов ошибок, либо допустимый, но неправильный многочлен. В первом случае декодер может обнаружить ошибку и пометить сообщение как не поддающееся декодированию. Решение об обнаружении неисправляемой конфигурации ошибок принимается тогда, когда выполняется хотя бы одно из двух условий:
1) число различных лежащих в
корней
отлично от
2) значения ошибок не лежат в поле символов кода.
При декодировании сначала осуществляется проверка многочлена локаторов ошибок. Если он удовлетворяет требуемым условиям, то декодер приступает к вычислению многочлена значений ошибок. Может случиться, что значения ошибок не будут лежать в поле символов кодовых слов, если последнее меньше поля локаторов ошибок. Такой символ не может быть внесен каналом, и, следовательно, его наличие указывает на то, что вектор ошибок содержит более
искаженных позиций.
В § 9.6 будут рассмотрены способы декодирования кодов БЧХ с исправлением некоторых конфигураций более чем
ошибок; здесь же мы обсудим противоположный случай, когда число исправляемых ошибок ограничивается конструктивным расстоянием. На практике такое декодирование используется для значительного уменьшения вероятности ошибки декодирования, платой за которое является увеличение вероятности отказа от декодирования
Для уменьшения вероятности неправильного декодирования число исправляемых декодером ошибок можно ограничить числом
таким, что
будет строго меньше
(при четном
это выполняется всегда). В этом случае декодер всегда будет обнаруживать неисправляемую конфигурацию ошибок при условии, что число
действительно случившихся ошибок удовлетворяет неравенству
поскольку для перехода кодового слова в неправильную сферу декодирования должно произойти не менее
ошибок.
В таком декодере хорошо применять алгоритм Берлекэмпа-Месси. Для вычисления
необходимо сделать 21 итераций по алгоритму Берлекэмпа — Месси. Остальные
итераций,
требуются для проверки равенства нулю невязок
Если хотя бы при одной из этих дополнительных
итераций
не равняется нулю, то принятое слово объявляется словом, в котором произошло более
ошибок.
Правомерность описанной процедуры доказывается следующей теоремой.
Теорема 7.5.3. Пусть произошло не более
ошибок и заданы
при
Пусть, далее,
регистр сдвига с линейной обратной связью, генерирующий последовательность
и
причем
равняются нулю при
Тогда произошло не более
ошибок и
будет являться правильным многочленом локаторов ошибок.
Доказательство. В условии теоремы заданы компоненты синдрома
для
Если бы имелись еще
компонент синдрома
то можно было бы исправлять
ошибок, т. е. любую конфигурацию предполагаемых ошибок. Вообразим на минуту, что эти дополнительные компоненты сообщены нам добрым волшебником или переданы по неведомому добавочному каналу. Тогда, используя алгоритм Берлекэмпа-Месси, можно найти многочлен локаторов ошибок, степень которого равна числу ошибок. Но при
итерации
и по предположению
равняется нулю при
Поэтому значение
не будет меняться до итерации с номером
и, следовательно, но правилу изменения
а это противоречит предположению о том, что произошло не более
ошибок.
Оглавление
- ОТ РЕДАКТОРА ПЕРЕВОДА
- ПРЕДИСЛОВИЕ
- ГЛАВА 1. ВВЕДЕНИЕ
- 1.1. ДИСКРЕТНЫЙ КАНАЛ, СВЯЗИ
- 1.2. ИСТОРИЯ КОДИРОВАНИЯ, КОНТРОЛИРУЮЩЕГО ОШИБКИ
- 1.3. ПРИЛОЖЕНИЯ
- 1.4. ОСНОВНЫЕ ПОНЯТИЯ
- 1.5. ПРОСТЕЙШИЕ КОДЫ
- ГЛАВА 2. ВВЕДЕНИЕ В АЛГЕБРУ
- 2.1. 2-ПОЛЕ И 6-10-ПОЛЕ
- 2.2. ГРУППЫ
- 2.3. КОЛЬЦА
- 2.4. ПОЛЯ
- 2.5. ВЕКТОРНЫЕ ПРОСТРАНСТВА
- 2.6. ЛИНЕЙНАЯ АЛГЕБРА
- ГЛАВА 3. ЛИНЕЙНЫЕ БЛОКОВЫЕ КОДЫ
- 3.1. СТРУКТУРА ЛИНЕЙНЫХ БЛОКОВЫХ КОДОВ
- 3.2. МАТРИЧНОЕ ОПИСАНИЕ ЛИНЕЙНЫХ БЛОКОВЫХ КОДОВ
- 3.3. СТАНДАРТНОЕ РАСПОЛОЖЕНИЕ
- 3.4. КОДЫ ХЭММИНГА
- 3.5. СОВЕРШЕННЫЕ И КВАЗИСОВЕРШЕННЫЕ КОДЫ
- 3.6. ПРОСТЫЕ ПРЕОБРАЗОВАНИЯ ЛИНЕЙНОГО КОДА
- 3.7. КОДЫ РИДА—МАЛЛЕРА
- ГЛАВА 4. АРИФМЕТИКА ПОЛЕЙ ГАЛУА
- 4.2. КОНЕЧНЫЕ ПОЛЯ, ОСНОВАННЫЕ НА КОЛЬЦЕ ЦЕЛЫХ ЧИСЕЛ
- 4.3. КОЛЬЦА МНОГОЧЛЕНОВ
- 4.4. КОНЕЧНЫЕ ПОЛЯ, ОСНОВАННЫЕ НА КОЛЬЦАХ МНОГОЧЛЕНОВ
- 4.5. ПРИМИТИВНЫЕ ЭЛЕМЕНТЫ
- 4.6. СТРУКТУРА КОНЕЧНОГО ПОЛЯ
- ГЛАВА 5. ЦИКЛИЧЕСКИЕ КОДЫ
- 5.2. ПОЛИНОМИАЛЬНОЕ ОПИСАНИЕ ЦИКЛИЧЕСКИХ КОДОВ
- 5.3. МИНИМАЛЬНЫЕ МНОГОЧЛЕНЫ И СОПРЯЖЕНИЯ
- 5.4. МАТРИЧНОЕ ОПИСАНИЕ ЦИКЛИЧЕСКИХ КОДОВ
- 5.5. КОДЫ ХЭММИНГА КАК ЦИКЛИЧЕСКИЕ КОДЫ
- 5.6. ЦИКЛИЧЕСКИЕ КОДЫ, ИСПРАВЛЯЮЩИЕ ДВЕ ОШИБКИ
- 5.7. ЦИКЛИЧЕСКИЕ КОДЫ, ИСПРАВЛЯЮЩИЕ ПАКЕТЫ ОШИБОК
- 5.8. ДВОИЧНЫЙ КОД ГОЛЕЯ
- 5.9. КВАДРАТИЧНО-ВЫЧЕТНЫЕ КОДЫ
- ГЛАВА 6. СХЕМНАЯ РЕАЛИЗАЦИЯ ЦИКЛИЧЕСКОГО КОДИРОВАНИЯ
- 6.1. ЛОГИЧЕСКИЕ ЦЕПИ ДЛЯ АРИФМЕТИКИ КОНЕЧНОГО ПОЛЯ
- 6.2. ЦИФРОВЫЕ ФИЛЬТРЫ
- 6.3. КОДЕРЫ И ДЕКОДЕРЫ НА РЕГИСТРАХ СДВИГА
- 6.4. ДЕКОДЕР МЕГГИТТА
- 6.5. ВЫЛАВЛИВАНИЕ ОШИБОК
- 6.6. УКОРОЧЕННЫЕ ЦИКЛИЧЕСКИЕ КОДЫ
- 6.7. ДЕКОДЕР МЕГГИТТА ДЛЯ. КОДА ГОЛЕЯ
- ГЛАВА 7. КОДЫ БОУЗА-ЧОУДХУРИ-ХОКВИНГЕМА
- 7.2. ДЕКОДЕР ПИТЕРСОНА ГОРЕНСТЕЙНА—ЦИРЛЕРА
- 7.3. КОДЫ РИДА СОЛОМОНА
- 7.4. СИНТЕЗ АВТОРЕГРЕССИОННЫХ ФИЛЬТРОВ
- 7.5. БЫСТРОЕ ДЕКОДИРОВАНИЕ КОДОВ БЧХ
- 7.6. ДЕКОДИРОВАНИЕ ДВОИЧНЫХ КОДОВ БЧХ
- 7.7. ДЕКОДИРОВАНИЕ С ПОМОЩЬЮ АЛГОРИТМА ЕВКЛИДА
- 7.8. КАСКАДНЫЕ (ГНЕЗДОВЫЕ) КОДЫ
- 7.9. КОДЫ ЮСТЕСЕНА
- ГЛАВА 8. КОДЫ, ОСНОВАННЫЕ НА СПЕКТРАЛЬНЫХ МЕТОДАХ
- 8.2. ОГРАНИЧЕНИЯ СОПРЯЖЕННОСТИ И ИДЕМПОТЕНТЫ
- 8.3. СПЕКТРАЛЬНОЕ ОПИСАНИЕ ЦИКЛИЧЕСКИХ КОДОВ
- 8.4. РАСШИРЕННЫЕ КОДЫ РИДА-СОЛОМОНА
- 8.5. РАСШИРЕННЫЕ КОДЫ БЧХ
- 8.6. АЛЬТЕРНАНТНЫЕ КОДЫ
- 8.7. ХАРАКТЕРИСТИКИ АЛЬТЕРНАНТНЫХ КОДОВ
- 8.8. КОДЫ ГОППЫ
- 8.9. КОДЫ ПРЕПАРАТЫ
- ГЛАВА 9. АЛГОРИТМЫ, ОСНОВАННЫЕ НА СПЕКТРАЛЬНЫХ МЕТОДАХ
- 9.2. ИСПРАВЛЕНИЕ СТИРАНИЙ И ОШИБОК
- 9.3. ДЕКОДИРОВАНИЕ РАСШИРЕННЫХ КОДОВ РИДА—СОЛОМОНА
- 9.4. ДЕКОДИРОВАНИЕ РАСШИРЕННЫХ КОДОВ БЧХ
- 9.5. ДЕКОДИРОВАНИЕ ВО ВРЕМЕННОЙ ОБЛАСТИ
- 9.6. ДЕКОДИРОВАНИЕ ЗА ГРАНИЦЕЙ БЧХ
- 9.7. ДЕКОДИРОВАНИЕ АЛЬТЕРНАНТНЫХ КОДОВ
- 9.8. ВЫЧИСЛЕНИЕ ПРЕОБРАЗОВАНИЙ В КОНЕЧНЫХ ПОЛЯХ
- ГЛАВА 10. МНОГОМЕРНЫЕ СПЕКТРАЛЬНЫЕ МЕТОДЫ
- 10.1. КОДЫ-ПРОИЗВЕДЕНИЯ
- 10.2. КИТАЙСКИЕ ТЕОРЕМЫ ОБ ОСТАТКАХ
- 10.3. ДЕКОДИРОВАНИЕ КОДА-ПРОИЗВЕДЕНИЯ
- 10.4. МНОГОМЕРНЫЕ СПЕКТРЫ
- 10.5. БЫСТРЫЕ КОДЫ БЧХ
- 10.6. ДЕКОДИРОВАНИЕ МНОГОМЕРНЫХ КОДОВ
- 10.7. ДЛИННЫЕ КОДЫ НАД МАЛЫМИ ПОЛЯМИ
- ГЛАВА 11. БЫСТРЫЕ АЛГОРИТМЫ
- 11.1. ЛИНЕЙНАЯ СВЕРТКА И ЦИКЛИЧЕСКАЯ СВЕРТКА
- 11.2. БЫСТРЫЕ АЛГОРИТМЫ СВЕРТКИ
- 11.3. БЫСТРЫЕ ПРЕОБРАЗОВАНИЯ ФУРЬЕ
- 11.4. АЛГОРИТМЫ АГАРВАЛА—КУЛИ ВЫЧИСЛЕНИЯ СВЕРТОК
- 11.5. АЛГОРИТМ ВИНОГРАДА БЫСТРОГО ПРЕОБРАЗОВАНИЯ ФУРЬЕ
- 11.6. УСКОРЕННЫЙ АЛГОРИТМ БЕРЛЕКЭМПА—МЕССИ
- 11.7. РЕКУРРЕНТНЫЙ АЛГОРИТМ БЕРЛЕКЭМПА—МЕССИ
- 11.8. УСКОРЕННОЕ ДЕКОДИРОВАНИЕ КОДОВ БЧХ
- 11.9. СВЕРТКА В СУРРОГАТНЫХ ПОЛЯХ
- ГЛАВА 12. СВЕРТОЧНЫЕ КОДЫ
- 12.2. ОПИСАНИЕ СВЕРТОЧНЫХ КОДОВ С ПОМОЩЬЮ МНОГОЧЛЕНОВ
- 12.3. ИСПРАВЛЕНИЕ ОШИБОК И ПОНЯТИЯ РАССТОЯНИЯ
- 12.4. МАТРИЧНОЕ ОПИСАНИЕ СВЕРТОЧНЫХ КОДОВ
- 12.5. НЕКОТОРЫЕ ПРОСТЫЕ СВЕРТОЧНЫЕ КОДЫ
- 12.6. АЛГОРИТМЫ СИНДРОМНОГО ДЕКОДИРОВАНИЯ
- 12.7. ОБЕРТОЧНЫЕ КОДЫ ДЛЯ ИСПРАВЛЕНИЯ ПАКЕТОВ ОШИБОК
- 12.8. АЛГОРИТМ ДЕКОДИРОВАНИЯ ВИТЕРБИ
- 12.9. АЛГОРИТМЫ ПОИСКА ПО РЕШЕТКЕ
- ГЛАВА 13. КОДЫ И АЛГОРИТМЫ ДЛЯ ДЕКОДИРОВАНИЯ МАЖОРИТАРНЫМ МЕТОДОМ
- 13.1. ДЕКОДИРОВАНИЕ МАЖОРИТАРНЫМ МЕТОДОМ
- 13.2. СХЕМЫ МАЖОРИТАРНОГО ДЕКОДИРОВАНИЯ
- 13.3. АФФИННЫЕ ПЕРЕСТАНОВКИ ДЛЯ ЦИКЛИЧЕСКИХ КОДОВ
- 13.4. ЦИКЛИЧЕСКИЕ КОДЫ, ОСНОВАННЫЕ НА ПЕРЕСТАНОВКАХ
- 13.5. СВЕРТОЧНЫЕ КОДЫ С МАЖОРИТАРНЫМ ДЕКОДИРОВАНИЕМ
- 13.6. ОБОБЩЕННЫЕ КОДЫ РИДА—МАЛЛЕРА
- 13.7. ЕВКЛИДОВО-ГЕОМЕТРИЧЕСКИЕ КОДЫ
- 13.8. ПРОЕКТИВНО-ГЕОМЕТРИЧЕСКИЕ КОДЫ
- ГЛАВА 14. КОМПОЗИЦИЯ И ХАРАКТЕРИСТИКИ КОНТРОЛИРУЮЩИХ ОШИБКИ КОДОВ
- 14.2. ВЕРОЯТНОСТИ ОШИБОЧНОГО ДЕКОДИРОВАНИЯ И НЕУДАЧНОГО ДЕКОДИРОВАНИЯ
- 14.3. РАСПРЕДЕЛЕНИЕ ВЕСОВ СВЕРТОЧНЫХ КОДОВ
- 14.4. ГРАНИЦЫ МИНИМАЛЬНОГО РАССТОЯНИЯ ДЛЯ БЛОКОВЫХ КОДОВ
- 14.5. ГРАНИЦЫ МИНИМАЛЬНОГО РАССТОЯНИЯ ДЛЯ СВЕРТОЧНЫХ КОДОВ
- ГЛАВА 15. ЭФФЕКТИВНАЯ ПЕРЕДАЧА СИГНАЛОВ ПО ЗАШУМЛЕННЫМ КАНАЛАМ
- 15.1. ОГРАНИЧЕННЫЙ ПО ПОЛОСЕ ГАУССОВСКИЙ КАНАЛ
- 15.2. ЭНЕРГИЯ НА БИТ И ЧАСТОТА ОШИБОК НА БИТ
- 15.3. МЯГКОЕ ДЕКОДИРОВАНИЕ БЛОКОВЫХ КОДОВ
- 15.4. МЯГКОЕ ДЕКОДИРОВАНИЕ СВЕРТОЧНЫХ КОДОВ
- 15.5. ПОСЛЕДОВАТЕЛЬНОЕ ДЕКОДИРОВАНИЕ
- ЛИТЕРАТУРА
Граница Синглтона
Пусть (C) – код над алфавитом мощности (q) с длиной кодового слова (n) и минимальным кодовым расстоянием (d.) Тогда, если построить на его основе код (C^*), просто удалив первые (d-1) символов из каждого кодового слова, новый код останется однозначным, и следовательно (abs{C^*} = abs{C}.)
Длина кодового слова в (C^*) равна (n — (d-1) = n-d+1,) и его мощность не может превышать (abs{C} = abs{C^*} le q^{n-d+1}.)
Соотношение (abs{C} le q^{n-d+1}) называется границей Синглтона.
БЧХ-коды
- Коды Боуза-Чоудхури-Хоквингема (БЧХ)
- класс помехоустойчивых кодов, являющийся подмножеством циклических кодов. БЧХ-коды задаются над полем (GF(p^k)), где (p) – простое число.
Основным интересным свойством БЧХ-кодов является возможность конструировать коды с заведомо известным минимальным кодовым расстоянием.
Конструкция порождающего многочлена примитивного БЧХ-кода
Как и любой циклический код, БЧХ-код задаётся порождающим многочленом, и допускает “простое” либо систематическое построение кодовых слов.
Порождающий многочлен БЧХ-кода задаётся следующим образом. Выбирается желаемое минимальное кодовое расстояние (d). Выбирается длина кодового слова (n = q^m — 1) (такой код называется примитивным). Пусть (α) – примитивный элемент поля (GF(q^m)). Пусть (m_i(x)) – минимальный многочлен с коэффициентами в (GF(q)) для (α^i), т.е. многочлен с минимальной степенью, имеющий корнем (α^i). Тогда порождающий многочлен БЧХ-кода может быть построен как [g(x) = lcm(m_1(x),ldots,m_{d-1}(x)).]
Конструкция порождающего многочлена обобщённого БЧХ-кода
Обобщённый БЧХ-код отличается от примитивного тем, что вместо примитивного элемента (α), выбирается корень (n)-той степени из (1). Длина кодового слова (n = mathrm{ord}(α),) т.е. порядок (α).
Выбирается (GF(q),) где (q) – целая степень простого числа. Выбираются целые (m, n, d, c,) такие, что (2 le d le n,) (gcd(n,q)=1,) (m) – мультипликативный порядок (q) по модулю (n). Пусть (α) – корень (n)-той степени из (1) в (GF(q^m)), и пусть (m_i(x)) – минимальный многочлен над (GF(q)) для (α^i). Порождающий многочлен тогда [g(x) = lcm(m_с(x),ldots,m_{с+d-2}(x)),] где (c) – некоторое целое, (cge 0.)
Кодирование БЧХ-кодом
Абсолютно аналогично кодированию любым другим циклическим кодом. Пусть (c(x)) – многочлен, соответствующий кодовому слову, (g(x)) – порождающий многочлен и (m(x)) соответствует сообщению. Тогда, либо [c(x) = g(x) m(x),] либо [c(x) = m(x)x^r — r(x),] где (r(x) = m(x) x^r pmod {g(x)},) а (r) – число проверочных символов.
Декодирование БЧХ-кодов
Декодирование БЧХ-кода использует оптимизированный метод декодирования по синдрому. Существуют различные алгоритмы нахождения вектора ошибки на основе синдрома, но большинство работает по следующему принципу:
- Вычисляются синдромы (s_j)
- Из синдрома определяется число ошибок (t) и вычисляется многочлен локатора ошибок (Λ(x))
- Вычисляются корни (Λ(x)), которые дают местонахождение ошибок (x_i)
- Вычисляются значения ошибок (y_i)
- Ошибки исправляются.
Вычисление синдромов
Полученный вектор (r(x)) вычисляется в нулях порождающего многочлена: (α^c,ldots,α^{c+d-2}). Понятно, что если кодовое слово передано без ошибок, оно делится на (g(x)), и все синдромы будут равны нулю. В противном случае, какие-то из синдромов не будут равны нулю, и какие именно – содержит информацию о положении ошибок.
Вычисление (Λ(x))
Если синдромы не равны (0,) то вектор ошибки имеет вид [e(x) = e_1x^{i_1} + e_2x^{i_2} + ldots + e_tx^{i_t}]
Тогда находится многочлен [Λ(x) = prod_{j=1}^{t} paren{xα^{i_j} — 1},] такой, что (t) минимально, и (e(x)) соответствует найденным синдромам.
Корнями этого многочлена являются (x = α^{-i_j},) что позволяет вычислить (i_j) (отсюда название “локатор ошибок”).
Существует три популярных алгоритма для нахождения (Λ(x)):
-
Алгоритм Питерсона-Горнстейна-Цирлера
Достаточно неэффективный и по сути сводится к прямому поиску.
-
Алгоритм Берлекэмпа-Мэсси
Достаточно эффективен, но сравнительно сложен, поэтому чаще используется в программной реализации.
-
Евклидов алгоритм (алгоритм Сугиямы)
Основан на расширенном алгоритме Евклида, существуют крайне эффективные аппаратные реализации.
Нахождение значений ошибок
Если известны места, в которых произошли ошибки, то нахождение значений ошибок сводится к решению системы линейных уравнений
[s_j = e_1 α^{(j+с) i_1} + e_2 α^{(j+с) i_2} + ldots]
Для решения этой системы уравнений можно использовать любой стандартный метод, но существует более эффективный алгоритм, известный как алгоритм Форни.
Алгоритм Форни
Алгоритм Форни основан на применении интерполяции Лагранжа, но в конечном итоге эта деталь не слишком нас интересует.
Смысл в том, чтобы найти многочлен [Ω(x) = s(x)Λ(x) pmod {x^{d-1}},] называемый вычислителем ошибок, где [s(x) = sum_{i=0}^{d-2} x^i s_i,] и вычислить значения ошибок прямо как [e_j = — frac{X_j^{1-c}Ω(X_j^{-1})}{Λ'(X_j^{-1})},] где (X_j^{-1}) – корни (Λ(x),) а (Λ'(x)) – так называемая формальная производная, [Λ'(x) = sum_{i=1}^{t} i λ_i x^{i-1}]
Алгоритм Сугиямы
Многочлен синдромов (s(x),) локатор ошибок (Λ(x)) и вычислитель ошибок (Ω(x)) удовлетворяют соотношению [Λ(x)s(x) = q(x)x^{d-1} + Ω(x),] эквивалентно [Ω(x) = Λ(x)s(x) — q(x)x^{d-1},]
Расширенный алгоритм Евклида может найти последовательность многочленов, [r_i(x) = a_i(x) s(x) + b_i(x) x^{d-1},] причём степень (r_i) убывает с увеличением (i). Тогда, как только степень (r_i(x)) меньше ((d-1)/2,) т.е. количеству ошибок, которые код может исправить, имеем [a_i(x) = Λ(x),] [b_i(x) = -q(x),] [r_i(x) = Ω(x).]
Коды Рида-Соломона
Исторически, коды Рида-Соломона не являлись БЧХ-кодами, однако наиболее популярная (в силу эффективности) модификация кодов Рида-Соломона представляет собой ни что иное как БЧХ-код с (m=1). Обычно, под кодами Рида-Соломона понимается именно эта модификация.
Коды Рида-Соломона являются оптимальными в смысле границы Синглтона (что прямо следует из свойств циклических кодов).
Наибольшее распространение получили коды Рида-Соломона:
- В записи на оптические носители информации
- В высокоскоростной связи
- В мобильной связи
- В космической связи (со спутниками, зондами и т.п.)
- В штрих- и QR-кодах
По построению, код Рида-Соломона не может быть двоичным. Действительно, длина кода (n) не больше, чем степень примитивного элемента, а для двоичного кода, (n = 1,) и такой код был бы бесполезен.
Преимущество кодов РС в том, что ошибки редко случаются в одном бите: обычно они возникают в нескольких битах подряд. Поскольку код РС работает над алфавитом большей размерности, он более эффективно справляется с сериями битовых ошибок, чем двоичные коды.
В качестве размера поля обычно выбирается степень двойки. Крайне распространён вариант (GF(2^8),) т.е. кода, построенного над октетами (байтами) – что кстати сказать упрощает работу с таким кодом.
Форни-алгоритм
В теории кодирования algorithm Форни (или algorithm Форни) вычисляет значения ошибок в известных местоположениях ошибок. он используется как один из шагов в декодировании кодов BCH и кодов Рида-Соломона (подкласс кодов BCH). Джордж Дэвид Форни-младший разработал algorithm.
Процедура
Нужно представить терминологию и установку…
Кодовые слова выглядят как многочлены. По замыслу образующий многочлен имеет последовательные корни & alpha; c, & alpha; c + 1,…, & alpha; c + d & minus; 2.
Синдромы
Полином расположения ошибок
Нули & Lambda; (x) — X1 & minus; 1,…, X & nu; & minus; 1. Нули — это значения rechyprocals для мест возникновения ошибок.
Как только местоположения ошибок известны, следующим шагом является определение значений ошибок в этих местоположениях. Затем значения ошибок используются для коррекции полученных значений в этих местоположениях для восстановления исходного кодового слова.
В более общем случае ошибки могут быть определены путем решения линейной системы
Однако существует более эффективный метод, известный как algorithm Форни, который основан на интерполяции Лагранжа. Сначала вычислите полином генератора ошибок
Где — полином парциального синдрома:
Затем значения ошибок:
Значение часто называют «первый освящённый корень» или «fcr». Некоторые коды выбираются, поэтому выражение :
Формальный вативный
& Lambda; (x) — формальный параметр полинома локатора ошибок & Lambda; (x):
В приведенном выше выражении обратите внимание, что i является целым числом, и & lambda; i будет элементом конечного поля. Оператор & ot; представляет собой ординарную лицензию (повторяющееся сложение в конечном поле), а не оператор лицензии конечного поля.
Ивация
Интерполяция Лагрейнджа
даёт прилив форнеевского альгоритма.
Стирания
Определение полинома локатора стирания
Где места стирания даны по ji. Примените описанную выше процедуру, sub uting & Gamma; для & Lambda;.
Если присутствуют и ошибки, и стирание, используйте полином локатора ошибок и стирания
См. также
- Код BCH
- Ошибка Рида-Соломона
- Книга Юли Петерсона
Внешние связи
Способы
кодирования и декодирования РС-кодов
достаточно хорошо разработаны в
теоретическом и реализационном плане.
Их основу составляют процедуры исправления
стираний, ошибок и совместного исправления
ошибок и стираний. Рассмотрим процедуры,
нашедшие применение в отечественной
технике передачи данных.
Рассмотрим
процедуру декодирования с исправлением
ошибок, известную [ 4 ] как алгоритм Форни.
Пусть
в приемник аппаратуры передачи данных
(АПД) поступила кодовая комбинация
РС-кода
C(x)=f(x)+e(x),
где
f(x)
– переданная передатчиком (АПД) кодовая
комбинация, в которой в процессе передачи
по каналу связи произошло v
ошибок , отображаемых многочленом e(x)
степени .
Каждый ненулевой компонент e(x)
описывается парой элементов: Yi –
величина ошибок и Xi
– номер позиции ошибки (локатор ошибки).
Yi,
Xi
– элементы GF(q),
и элемент Xi=αi,αi
Є GF(q).
Для описания ошибок
используются:
1. Многочлен локаторов ошибок:
![]()
имеющий
корни Xi–1,
i
= 1, …,v
взаимные к локаторам ошибок, т. е.
Xi–1∙αi
= 1.
2.Синдромный многочлен
–многочлен
бесконечной степени, для которого
известны только
2t
коэффициентов
для поступившей комбинации РС-кода.
Здесь
– элемент синдрома, αj
– корень порождающего многочлена
РС-кода. Значения Sj e(αj)
задаются проверками:
Sj=C(αj)=f(αj)+e(αj)=e(αj),
где
m0jm0+2t–1
при m0=1.
3. Многочлен значений ошибок
Ω(x)S(x)Λ(x)
(modx2t),
(*)
Равенство
(*) определяет множество из (2t–υ)
уравнений и называетсяключевым
уравнением, так как оно представляется
«ключом» решения задачи декодирования.
Это
становится понятным, если учесть, что
степень Ω(x)
не превышает υ–1 и поэтому справедливо:
,
(**),
где
.
Из
(**) можно получить υ уравнений для υ
неизвестных коэффициентов Λk.
Эти уравнения являются линейными. Они
могут быть решены обычными методами
либо с помощью итерационных процедур.
После нахождения многочлена Λ(x)
ключевое уравнение позволяет найти
неизвестные компоненты вектора e(x)
и по ним выходной вектор декодера:
f(x)=C(x)+e(x).
Простейшим
путем нахождения корней многочлена
Λ(x)
является метод проб и ошибок, известный
как процедура
Ченя. Эта
процедура состоит в последовательном
вычислении Λ(αj)
для каждого j
и проверки полученных значений на ноль.
Если величина Λ(α–k)
равна нулю, то αk
является
взаимным к корню многочлена локаторов
ошибок и k-й
элемент кодовой комбинации содержит
ошибку. Наиболее простым способом
вычисления значения Λ(x)
в точке β является схема
Горнера:
.
Для
вычисления Λ(β)
по схеме Горнера требуется только υ
умножений и υ сложений, где υ – степень
Λ(x).
После
определения локаторов ошибок с помощью
ключевого уравнения находим значения
ошибок. Для этого, используя значения
сомножителей, входящих в равенство для
Ω(x),
перепишем ключевое уравнение следующим
образом:

Сворачивая
выражение в квадратных скобках, получаем
окончательно
![]()
Приводя
это выражение по модулю x2t
, получаем
.
Вычислим многочлен
значений ошибок на позиции l:
.
,
Откуда
.
Найдем производную
от многочлена локаторов ошибок Λ(x):
.
Для l-й
позиции получаем:
.
С учетом последнего
выражения Ylзначение ошибки на позицииlпринимает вид
.
Рассмотренный
способ декодирования позволяет найти
значение ошибок по известным многочленам
локаторов и значений ошибок. Он известен
в литературе [ 4 ] как алгоритм Форни.
Указанные многочлены вычисляются в
результате решения ключевого уравнения.
Более подробно декодирование кодов
Рида-Соломона рассматривается в разделе
7.2.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
