Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТКИОК.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
8 Мб
Скачать
☆
  1. Основные понятия теории помехоустойчивого кодирования. Простейшие коды. Правила кодирования.

  1. Коды Хэмминга как линейные коды. Простые преобразования линейного кода.

  1. Способы задания линейных кодов. Понятие двойственного кода.

  1. Коды Рида-Маллера.

  1. Конечные поля. Конструкция расширенного поля.

  1. Циклический код. Способы описания, кодирования и декодирования.

Циклическим является линейный код, который не изменяет своих свойств при

циклической перестановке компонентов кодовых слов. Почти все важнейшие коды

являются циклическими.

Пусть над полем GF(q) задан код C с параметрами (n,k) , кодовое слово

которого задается в виде вектора-строки c = (c0,c1...,cn−1) .

Если коду С вместе с кодовым словом c принадлежат его циклические сдвиги

(сn−1,c0,c1...,cn−2 ) , то код называется циклическим.

Циклические коды удобно представлять в виде полинома

c(x) = c0 + c1x + c2x

где x - формальная переменная, а полином c(x) имеет коэффициенты, которые

принадлежат полю GF(q) .

По аналогии с представлением линейного кода циклический код можно описать с помощью порождающей матрицы.

Т еорема. Если генераторный полином g(x) кода С имеет степень (n - k), тогда код с является циклическим (n, k)- кодом. Если g(x) = g0 + g1 x + g2 x2 +…+ gn-k xn-k, тогда генераторная матрица кода представляется как матрица размером (k × n) следующего вида:

Множество {xi g(x); 0 ≤ i ≤ k - 1} можно рассматривать как базис размерностью k

циклического кода С. Предположим, что C линейный (n, k,d) -код с генераторным полиномом g(x) , тогда существует такой полином h(x) степени k (deg(h(x)) = k ), что g(x) ⋅ h(x) = xn −1 ≡ 0 mod (x^n −1) .

Многочлен h(x) называется проверочным полиномом, он определяется как

Полином h(x) формирует циклический код Cэ размерностью (n - k). Определим два кодовых слова. Первое c1(x) = a1(x) g(x) принадлежит коду C, а c2(x) = a2(x) h(x) – коду Cэ. Тогда их произведение равно c1(x) c2(x) = a1(x) g(x) a2(x) h(x) = a1(x) a2(x) f(x) = 0 (mod f(x)), где f(x) = x n - 1.

Коды С и Cэ называются эквивалентными. Найдем условие существования двойственного кода. Определим два вектора a = (a0, a1,…, an-1) ∈ C,

b = (b0, b1,…, bn-1) ∈ Cэ. Умножим два полинома a(x) и b (x) друг на друга:

Коэффициенты произведения образуют вектор с= (с0, …, cn-1).

Коэффициент c0 равен с0 = a0 b0 + a1 bn-1 + a2 bn-1 +…+ an-1 b1.

Этот результат можно получить перемножением двух векторов

c0 = a b(1), где вектор b(1) получается из b путем циклического его сдвига влево на одну позицию и прочтения элементов в обратном порядке. Аналогично любой другой коэффициент получается как

ct = a b(t), где вектор b(t) получается из b путем циклического сдвига его влево на t позиций и прочтения элементов в обратном порядке.

Декодер Меггитта. Наиболее сложной частью простого синдромного декодирования является табулирование соответствия между синдромными

многочленами и соответствующих им многочленов ошибок. Декодер Меггитта использует соответствие для некоторых типичных синдромных многочленов и проверяет синдромы только тех конфигураций ошибок, которые располжены в старших позициях. Декодирование ошибок в остальных позициях основано на циклической структуре кода и осуществляется позже. Таблица синдромов содержит только те синдромы, которые соответствуют многочленам ошибок с ненулевыми коэффициентами. Если вычисленный синдром находится в этой таблице, то ошибка исправляется. Затем принятое слово циклически сдвигается и повторяется процесс нахождения возможной ошибки в предшествующей по старшинству позиции. Этот процесс повторяется последовательно для каждой компоненты; каждая компонента проверяется на наличие ошибки, и если ошибка найдена, то она исправляется. В действительности нет необходимости вычислять синдромы для всех циклических сдвигов принятого слова. Новый синдром можно легко вычислить по уже вычисленному. Основная взаимосвязь описывается следующей теоремой.

Теорема. Предположим, что g(x) h(x) = xn – 1 и Rg(x) [y(x)] = s(x). Тогда

Rg(x) [x y(x) mod(xn – 1)] = Rg(x) [x s(x)].

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

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

Алгоритм : 1. Вычисляется синдром s(x) для принимаемого сигнала y(x) с использованиемалгоритма деления на порождающий полином.

2. Установка i := 0 .

3. Если wt( si(x),) ≤ t, тогда полагаем e(x) = xi (si(x) 􀀣 0(x)) и корректируем ошибку, вычисляя y(x) - e(x).

4. Устанавливаем i := i + 1;

5. Если i = n, тогда алгоритм останавливается и ошибка считается невыловленной.

6. Если deg(si-1(x) < n – k - 1, тогда si(x) = x si-1(x); в противном случае получаем si(x) = x si-1(x) – g(x).

7. Перейти к шагу 3.

  1. Декодер с вылавливанием ошибок.

  1. Коды Боуза-Чоудхури-Хоквингвема.

  1. Алгоритм декодирования Питерсона-Горенштейна-Цирлера.

  1. Вычисляются компоненты синдрома: Si = y(α j ), j = 1,2,...,2t

Задается величина ν =t.

  1. Составляется матрица синдромов Mν = [Sl +k +1], l,k = 0,1,…, ν-1.

3. Вычисляется определитель матрицы Δ = detMν . Если Δ = 0 , то матрица является сингулярной, и обратной матрицы не существует. В этом случае изменяется размер матрицы ν:= (ν - 1) до тех пор, пока определитель не станет отличным от нуля. После чего повторяют второй шаг.

4. Определяются коэффициенты полинома локаторов ошибок:

  1. Находятся корни σ (x) = 0 и через инверсию корней вычисляются значения Xi .

  2. Оцениваются величины ошибок {Qi } при решении системы

  3. Корректируется принятый вектор, подставляя на позиции Xi вычисленные значения Qi

Для исправления одиночной ошибки можно использовать выражения

Если код бинарный, то σ1 = −S1 , следовательно, σ (x) =1− S1 ⋅ x . Полином

σ (x) имеет 0 в точке 1/ S1. Следовательно, S1 =αi и ошибка локализуется в позиции 2m −1− i .

Рассмотрим случай, когда код исправляет 2 ошибки. Тогда имеем

Если определитель матрицы Δ ≠ 0, то получаем:

Для бинарного кода:

При большом количестве ошибок алгоритм ПГЦ характеризуется значительной вычислительной сложностью. В таких случаях для вычисления полинома локаторов ошибок используют алгоритмы Сигуяма, Берлекемпа–Месси, а для оценки значений ошибок для q-ичных кодов – алгоритм Форни

  1. Коды Рида-Соломона.

  1. Декодирование при помощи алгоритма Берлекемпа-Месси.

Алгоритм Берлекэмпа — Мэсси — алгоритм построения наиболее короткого регистра с обратными связями, порождающего m компонент синдрома S по правилу:

где ν - количество произошедших ошибок; r=ν+1, …, 2ν

и перестраивающего свою структуру в зависимости от возможной ошибки в структуре формируемого сигнала:

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

Теорема Берлекемпа–Месси. Пусть заданы компоненты синдрома S1, … S2t из некоторого поля, тогда при начальных условиях σ(0)(x)=1, B(0)(x)=1, L0=1 выполняются следующие рекуррентные равенства, использующиеся для вычисления σ(x):

При выполнении таких условий полином σ(x) является многочленом наименьшей степени, коэффициенты которого удовлетворяют равенству

Граф-схема алгоритма Берлекемпа–Месси приведена на рисунке.

Задача декодера – найти полином Λ(z) или σ(z) минимальной степени ν , где ν - число ошибок, причём заранее не известное. Алгоритм Берлекемпа – Месси позволяет строить такую последовательность полиномов σj (z), j=1, 2, …m, в которой каждый последующий полином удовлетворяет большему числу уравнений. Одновременно итеративно вычисляется полином величин ошибок Ω(z).

Исходные данные - это m компонент синдрома S , где обычно b=1 . Начальные условия для полиномов σ(z), Ω(z), C(z), D(z) и переменной L задаются вначале.

Алгоритм выполняется за m итераций. Если в процессе вычислений невязка Δ=0 , то полиномы σ(z) и Ω(z) не изменяются, в противном случае осуществляется их коррекция

где Cj-1(z) и Dj-1(z) - вспомогательные полиномы, взятые из предыдущего шага. На шаге j они формируются из следующих соображений. Если 2Lj-1 > j-1, то содержание регистров, хранящих эти вспомогательные полиномы, сдвигается: C(z)=z C(z); D(z)= zD(z) , а переменная L не изменяется. При 2L j-1 ≤ j-1 указанные полиномы и переменная L трансформируются :

По окончании m итераций целесообразно выполнить проверку : deg σ(z)=L ; если это равенство несправедливо, то вырабатывается сигнал FLAG=1 защитного отказа от декодирования, так как принятое слово содержит более чем t ошибок.

Линейной сложностью конечной двоичной последовательности Sn называется число, которое равно длине самого короткого регистра сдвига с обратными связями, который генерирует последовательность, имеющую в качестве первых членов Sn . То есть с помощью алгоритма БМ составляется регистр сдвига, длина которого численно равна линейной сложности последовательности.