Сверточные коды. 4 Дисер с 15 СК и Мягкое дек с 55. Программноаппаратная реализация оптимального алгоритма декодирования каскадных кодов на базе кодов рида соломона в адаптивных системах обмена данными
Скачать 5.5 Mb.
|
Выход :λi2t ti2t , i2t i2t , i 0,1, ..., t . i 0,1, ..., t 1 . Предложенная архитектура значительно сокращает время, затрачиваемое на решение ключевого уравнения, что в свою очередь ведет к увеличению пропускной способности декодера. Кроме того, такая регулярная структура позволяет создавать схемы декодера с прогнозируемой длиной критического пути для различных кодов РС с разными параметрами m и t. Это свойство будет лежать в основе адаптивного декодера кодов РС [118, 120]. Сравнительная сложность аппаратной реализации различных алгоритмов решения ключевого уравнения представлена в таблице 3.2. Таблица 3.2. Сложность различных алгоритмов решения ключевого уравнения
Оптимальная реализацияCSEE-блока Для дальнейшего декодирования принятого блока кода РС следует определить позиции символов, на которых произошли ошибки, и значения этих ошибок. Для определения позиций искаженных символов необходимо найти корни многочлена локаторов ошибок x, рассчитанного в KES-блоке. Реализовать это можно с помощью простой процедуры полного перебора всех 2m – 1 возможных значений, известной как алгоритм Ченя [82]. Определение значения ошибки реализуется с помощью алгоритма Форни согласно формуле (3.3). В целях экономии аппаратных ресурсов оба алгоритма (Ченя и Форни) удобно реализовать в одном устройстве. При этом алгоритм Ченя за 2m – 1 тактов перебирает все возможные элементы поля Галуа. На каждом такте есть является ли оно его корнем. Если значение является корнем многочлена локаторов ошибок, то согласно алгоритму Форни вычисляется значение ошибки и ее корректировки. Алгоритм выглядит следующим образом [14, 16]: for i 1 step 1 until 2m1 do begin if i 0 end then end Ωαi Y2m1i R2m1i αi Вычисление ошибочных позиций и значения этих ошибок требует расчета трех полиномов: i степени t, i степени t – 1 и i степени t – 1. Представим полином x в виде суммы двух многочленов:
где even x включает компоненты полинома с четными степенями, а oddx x x включает только нечетные степени. Таким образом, сначала рассчитываются многочлены even x и odd x, затем x, а производная x вычисляется автоматически [79, 83]. Элементарная ячейка, осуществляющая перебор Ченя, изображена на рисунке 3.18а. Полная схема, реализующая алгоритм Ченя, состоящая из восьми таких ячеек, представлена на рисунке 3.18б.
На рисунке 3.19 представлена схема устройства, исправляющего ошибки, которое работает согласно алгоритму Форни.
Память ROM содержит таблицу обратных элементов поля Галуа i 2m1i , необходимых для осуществления операции деления. Блок FIFO содержит принятые из канала связи символы R. На этапе коррекции из этих символов R вычитается значение ошибки Y, рассчитанное по алгоритму Форни, после чего исправленные символы покидают декодер. Стоит отметить, что в конечном поле арифметические операции сложения и вычитания идентичны, поэтому на этапе коррекции используется сумматор. Листинги программ, реализующих описанные выше устройства, иожно найти, обратившись к Приложению Б. Разработка оптимального АЛУ для реализации арифметических операций в поляхГалуа Важным этапом оптимизации всего кодека является оптимальная реализация арифметических операций в конечных полях [48]. Все описанные выше операции сложения, умножения происходят в поле Галуа. Для разрабатываемой СПК поле имеет байтовую размерность, то есть GF(28). Существуют разные подходы к аппаратной реализации арифметических операций в поле Галуа. Одним из таких подходов является предварительная подготовка сверочных таблиц, хранящих результаты арифметических операций. На каждую операцию потребуется по одной такой таблице, которые должны храниться в памяти кодека. Такие таблицы на примере поля Галуа GF(23) имеют следующий вид [8, 20, 47]: Таблица 3.3. Сложение в поле GF23 Таблица 3.4. Умножение в поле GF23
Для реализации операции сложения (вычитания) в поле Галуа заготовка сверочных таблиц практического смысла не имеет, так как эта операция замещается простым побитовым сложением по модулю 2 [30]. Для байтового поля сумматор, вычисляющий выражение A + B = C, примет вид:
Гораздо сложнее реализовать операцию умножение. Для байтовых полей сверочная таблица операции умножения займет 256 256 байт. Так как в кодеке произведения вычисляются одновременно сразу несколькими блоками, для распараллеливания вычислений таких таблиц необходимо иметь большое количество, что, учитывая размер каждой таблицы, оказывается весьма расточительным. Поэтому оптимальным с точки зрения затрачиваемых ресурсов решением будет реализация операции умножении на вентильном уровне [51]. Для реализации умножения на вентильном уровне необходимо представить операнды в полиноминальной форме [61]. Так операнд A примет вид:
Тогда умножение операндов A и B будет выглядеть следующим образом:
где d a b . Так как hkGF2m, существует единственный k k i ki k i0 gi 0 i m1 такой, что m1 k ki h g h i для всех m k 2m 2 . В этом случае выражение (3.10) примет вид: i0
где k dk 2m2 d k j jm g j. Формула (3.11) представляет собой конечное выражение для вычисления произведения двух чисел в поле Галуа. Операция состоит из двух процедур: непосредственно умножения и деления по модулю. Данные внутри каждой операции независимы, и их обработка может осуществляться параллельно. В полиноминальном виде произведение (3.10) в конечном поле будет выглядеть как W x Ax Bxmod px. Это выражение можно привести к виду:
операции AND, а сложения в выражении (3.12) замещаются операцией XOR. Аппаратный умножитель в поле Галуа GF(28) представлен на рисунке 3.21.
Устройство содержит 64 вентиля AND и 77 элементов XOR. Верхняя часть схемы отвечает за умножение двух операндов, а нижняя осуществляет деление по модулю. |