- •Коды Рида-Соломона
- •Вероятность появления ошибок для кодов Рида-Соломона
- •8.1.2. Почему коды Рида-Соломона эффективны при борьбе с импульсными помехами
- •8.1.3. Рабочие характеристики кода Рида-Соломона как функция размера, избыточности и степени кодирования
- •8.1.4. Конечные поля
- •8.1.4.1. Операция сложения в поле расширения gf(2m)
- •8.1.4.2. Описание конечного поля с помощью примитивного полинома
- •8.1.4.3. Поле расширения gf(23)
- •8.1.4.4. Простой тест для проверки полинома на примитивность
- •8.1.5. Кодирование Рида-Соломона.
- •8.1.5.1. Кодирование в систематической форме
- •8.1.5.2. Систематическое кодирование с помощью (n-k)-разрядного регистра сдвига
- •8.1.6. Декодирование Рида-Соломона
- •8.1.6. Декодирование Рида-Соломона
- •8.1.6.3. Значения ошибок
8.1.5.1. Кодирование в систематической форме
Так
как код Рида-Соломона является циклическим,
кодирование в систематической форме
аналогично процедуре двоичного
кодирования, разработанной в разделе
6.7.3. Мы можем осуществить сдвиг полинома
сообщения m(X)
в крайние правые k
разряды
регистра кодового слова и провести
последующее прибавление полинома
четности p(X)
в крайние левые n
– k разряды.
Поэтому мы умножаем m(X)
на
,
проделав алгебраическую операцию таким
образом, что m(X)
оказывается сдвинутым вправо на n
– k позиций.
В главе 6 это показано в уравнении (6.61)
на примере двоичного кодирования. Далее
мы делим
на
полиномиальный генератор g(X),
что можно записать следующим образом.
Здесь q(X) и p(X) – это частное и остаток от полиномиального деления. Как и в случае двоичного кодирования, остаток будет четным. Уравнение (8.23) можно представить следующим образом.
(8.24)
Результирующий полином кодового слова U(X), показанный в уравнении (6.64), можно переписать следующим образом.
(8.25)
Продемонстрируем шаги, подразумеваемые уравнениями (8.24) и (8.25), закодировав сообщение из трех символов
с
помощью кода (7,3), генератор которого
определяется уравнением (8.22). Сначала
мы умножаем (сдвиг вверх) полином
сообщения
,
что дает
Далее
мы делим такой сдвинутый вверх
полином сообщения на полиномиальный
генератор из уравнения (8.22),
Полиномиальное
деление недвоичных коэффициентов –
это еще более утомительная процедура,
чем ее двоичный аналог (см. пример 6.9),
поскольку операции сложения (вычитания)
и умножения (деления) выполняются
согласно табл. 8.2 и 8.3. Мы оставим числителю
в качестве вспомогательного упражнения
проверку того, что полиномиальное
деление даст в результате следующей
полиномиальный остаток (полином
четности).
Заметим, из уравнения (8.25), полином кодового слова можно записать следующим образом.
8.1.5.2. Систематическое кодирование с помощью (n-k)-разрядного регистра сдвига
Как
показано на рис. 8.9, кодирование
последовательности из 3 символов в
систематической форме на основе кода
(7,3), определяемого генератором g(X)
из уравнения (8.22), требует реализации
регистра LFSR. Нетрудно убедиться, что
элементы умножителя на рис. 8.9, взятые
справа налево, соответствуют коэффициентам
полинома в уравнении (8.22). Этот процесс
кодирования является недвоичным аналогом
циклического кодирования, которое
описывалась в разделе 6.7.5. Здесь, в
соответствии с уравнением (8.20), ненулевые
кодовые слова образованы
символами,
и каждый символ состоит из m
= 3 бит.
Следует
отметить сходство между рис. 8.9, 6.18 и
6.19. Во всех трех случаях количество
разрядов в регистре равно n
–
k.
Рисунки
в главе 6 отображают пример двоичного
кодирования, где каждый разряд содержит
1 бит. В данной главе приведен пример
двоичного кодирования, так что каждый
разряд регистра сдвига, изображенного
на рис. 8.9, содержит 3-битовый символ. На
рис. 6.18 коэффициенты, обозначенные
являются
двоичными. Поэтому они принимают одно
из значений 0 или 1, просто указывая на
наличие или отсутствие связи в LFSR. На
рис. 8.9 каждый коэффициент является
3-битовым, так что они могут принимать
одно из 8 значений.
Недвоичные операции, осуществляемые кодером, показанным на рис. 8.9, создают кодовые слова в систематической форме, так же как и в двоичном случае. Эти операции определяются следующими шагами.
1. Переключатель 1 в течение первых k тактовых импульсов закрыт, для того чтобы подавать символы сообщения в (n - k)-разрядный регистр сдвига.
2. В течение первых k тактовых импульсов переключатель 2 находится в нижнем положении, что обеспечивает одновременную процедуру всех символов сообщения непосредственно на регистр выхода (на рис. 8.9 не показан).
3. После передачи k-го символа на регистр выхода, переключатель 1 открывается, а переключатель 2 переходит в верхнее положение.
4. Остальные (n-k) тактовых импульсов очищают контрольные символы, содержащиеся в регистре, подавая из на регистр выхода.
5.
Общее число тактовых импульсов равно
n,
и содержимое регистра выхода является
полиномом кодового слова
,
где p(X)
представляет собой кодовые символы, а
m(X)
– символы сообщения в полиномиальной
форме.
Для проверки возьмем те же последовательность символов, что и в разделе 8.1.5.1.
Здесь крайний правый символ является самым первым и крайний правый бит также является самым первым. Последовательность действий в течение первых k = 3 сдвигов в цепи кодирования на рис. 8.9 будет иметь следующий вид.
Очередь ввода Такт Содержимое регистра обратная связь
|
|
|
0 |
0 |
0 |
0 |
0 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
2 |
|
0 |
|
|
|
|
|
- |
3 |
|
|
|
|
- |
Как
можно видеть, после третьего такта
регистр содержит 4 контрольных символа,
.
Затем переключатель 1 переходит в верхнее
положение, и контрольные символы,
содержащиеся в регистре, подаются на
выход. Поэтому выходное слово, записанное
в полиномиальной форме, можно представить
в следующим виде.
(8.26)
Процесс проверки содержимого регистра во время разных тактов несколько сложнее, чем в случае бинарного кодирования. Здесь сложение и умножение элементов поля должны выполняться согласно табл. 8.2 и 8.3.
Корни полиномиального генератора g(X) должны быть и корнями кодового слова, генерируемого g(X), поскольку правильное кодовое слово имеет следующий вид.
(8.27)
Следовательно, произвольное кодовое слово, выражаемое через корень генератора g(X), должно давать нуль. Представляется интересным, действительно ли полином кодового слова в уравнении (8.26) дает нуль, когда он выражается через какой-либо из четырех корней g(X). Иными словами, это означает проверку следующего.
Независимо выполнив вычисления для разных корней, получим следующее.
Эти вычисления показывают, что, как и ожидалось, кодовое слово, выражаемое через любой корень генератора g(X), должно давать нуль.
