
ПЕРМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «Автоматика и телемеханика»
МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ
ПО КУРСУ «Теория электрической связи», часть 2.
Пермь, 2007
Данное руководство является учебно-методическим пособием для выполнения лабораторных работ по курсу «Теория электрической связи», часть 2, для студентов специальности 210406 «Сети связи и системы коммутации».
В сборник включены лабораторные работы, освещающие основные вопросы помехоустойчивого кодирования информации, циркулирующей по цифровым системам обработки и передачи дискретных сообщений.
Лабораторные работы включают в себя основные теоретические положения, исследуемые в данной работе; описание основных этапов проектирования комбинаторных и декомбинаторных узлов системы передачи дискретных сообщений; методические указания по выполнению работы и содержание отчета. В конце методических указаний приведен список литературы, которой следует пользоваться при подготовке к лабораторным работам.
Лабораторная работа №4. ИССЛЕДОВАНИЕ ПРИНЦИПОВ ДЕКОДИРОВАНИЯ И
ПРОЕКТИРОВАНИЕ ДЕКОДЕРОВ БЧХ-КОДОВ
Цель работы. Исследование избыточных циклических систематических кодов, в частности, БЧХ-кодов. Анализ декодирующих устройств для укороченных кодов в приемных полукомплектах трактов передачи дискретных сообщений.
I.ОБЩИЕ ПОЛОЖЕНИЯ
1.Декодирование циклических кодов (БЧХ-кодов)
1.1.Принцип синдромного декодирования БЧХ-кодов
Воснову рассматриваемой процедуры декодирования циклических кодов положен алгоритм синдромного декодирования. Это означает, что при приеме кодовой комбинации циклического кода рассчитывается синдром – вектор, который показывает величину (вид) и место ошибки.
Согласно рассматриваемой модели двоичного дискретного канала связи, в котором возможны только ошибки перехода, искажение приводит
кинверсии символа кодовой комбинации. Поэтому возникновение ошибок при передаче кодовой комбинации циклического кода можно представить следующей аддитивной моделью:
′ |
(1.1) |
V (x) =V (x) e(x), |
где e(x) – полином ошибки; V(x) – передаваемый полином; V ′(x) – приня-
тый полином.
Разделим обе части представленного уравнения на порождающий полином g(x):
V ′(x) |
= |
V (x) e(x) |
= |
V (x) |
|
e(x) |
. |
g(x) |
g(x) |
g(x) |
|
||||
|
|
|
g(x) |
Из представления полинома V(x) известно, что он делится на порождающий полином g(x) без остатка. Назовем синдромом остаток (вычет), который образуется в результате деления полинома V ′(x) на порождающий
полином g(x). Согласно правилам операций над вычетами можно оставить только их в обеих частях уравнения. Поэтому выражение можно представить в следующем виде:
S (x) ≡ e(x) mod(g(x)) = re (x), |
(1.2) |
где re(x) – остаток от деления полинома ошибки e(x) на полином g(x).
Из приведенного выражения очевидно, что синдром, рассчитываемый по принятому полиному V ′(x) (кодовому вектору V'), однозначно оп-
ределяет полином ошибки e(x) (вектор ошибки e), который воздействовал на полином V(x) во время передачи по каналу связи. Поэтому, заранее определив возможные значения синдрома для разных вариантов ошибок и сравнив их с рассчитанным по конкретному полиному V ′(x) (кодовому
вектору V') значением синдрома, можно определить полином ошибки e(x) (вектор ошибки e). Зная полином (вектор) ошибки, можно реализовать корректирующие свойства кода, направив их на исправление и/или обнаружение ошибки (стирание сообщения). Очевидно, что при безошибочной передаче (e(x)=0) синдром тоже равен 0.
Определим, какое количество вариантов полинома ошибки необходимо рассчитать для наиболее сложной корректирующей операции – исправления ошибок. Указанное значение N определяется как
S |
n |
(1.3) |
N = ∑ , |
||
i=1 |
i |
|
где s – кратность исправляемых ошибок; n – общая длина кодовой комбинации циклического кода.
Как известно из верхней границы Хэмминга, количество разных вариантов синдромов (2k) достаточно для однозначного соответствия каждому виду s-кратной ошибки,
N ≤ 2k. |
(1.4) |
Оценим сложность устройства, которое реализует сравнение рассчитанного значения синдрома и заранее определенных значений ri(x). Количество элементов должно быть равно N. Поскольку указанное устройство осуществляет функции сравнения и выбора, оно получило название декомбинатор синдрома (ДКМС). Поэтому число N в ДКМС определяет количество k-входовых конъюнкторов. Таким образом, можно сделать вывод, что декомбинаторсиндроманастраиваетсянаполиномошибки.
Принцип синдромного декодирования применим и к обнаружению ошибок. В данном случае необходимо установить только факт возникновения ошибки. Очевидно следующее условие наличия ошибок: S(x) ≠ 0 .
Поэтому ДКМС в данном случае состоит из одного логического дизъюнктора, который проверяет на равенство 0 полином S(x).
Для синдромного декодирования кода, исправляющего и обнаруживающего ошибки, можно выделить два способа декодирования: общий и частный. Частный способ может быть применен для декодирования ко-
дов Хэмминга с dmin = 4.
В общем случае обнаружение ошибок, приводящее к стиранию кодовой комбинации, должно произойти в случае, когда синдром S(x) ≠ 0 , и
ни один из элементов (конъюнкторов) ДКМС, настроенных для исправления соответствующей ошибки, не сработал.
В рассматриваемом частном случае для построения циклического кода с четным dmin используется переход от ближайшего кода с нечетным dmin. При этом порождающий полином определяется путем домножения полинома g(x) на полином (1 x). В данном конкретном случае при декодировании применяется способ раздельного деления. Это означает, что отдельно рассчитывается синдром S(x) от деления полинома V ′(x) на порож-
дающий полином g(x), а отдельно – на полином (1 x). Остаток от деления полинома V ′(x) на полином (1 x) имеет нулевую степень, то есть он мо-
жет быть равен либо 0, либо 1. Это означает, что он указывает четность веса полинома V ′(x) . Синдром S(x) рассчитывается для обнаружения места
ошибки. Рассмотрим варианты соотношения векторов синдрома на примере БЧХ-кода с dmin = 4 (табл. 1.1).
|
|
|
|
Таблица 1.1 |
|
|
|
|
|
′ |
′ |
|
|
e(x) |
V (x) mod g(x) |
x) |
|||
|
V (x) mod (1 |
|
|
|
0 |
0 |
|
|
Ошибок нет |
≠0 |
1 |
|
|
1-кратная ошибка |
≠0 |
0 |
|
|
2-кратная ошибка |
Примечание. Ситуация «≠0» означает, что хотя бы один из разрядов полинома синдрома S(x) отличен от 0.
При безошибочной передаче все координаты полинома синдрома равны 0. При однократной ошибке нарушается четность кодового полинома, поэтому такую ошибку можно обнаружить и исправить. При двукратной ошибке четность кодового полинома не нарушается, поэтому такую ошибку можно обнаружить, а все сообщение – стереть.
В общем случае синдромного декодирования для исправления и/или обнаружения ошибок произвольной кратности в зависимости от реализации корректирующей способности применяется один из следующих алгоритмов:
1. Для кодов, исправляющих ошибки кратности не более s, рассчитываются настройки ДКМС для каждого вида полинома ошибки кратности
не более s. Если после вычисления синдрома по принятому полиному V ′(x) его значение совпадает с одной из настроек ДКМС, то происходит
исправление ошибок путем инвертирования соответствующих разрядов. 2. Для кодов, обнаруживающих ошибки кратности не более r,
ДКМС представляет собой устройство проверки равенства 0 значения синдрома. Если после вычисления синдрома по принятому полиному V ′(x)
ДКМС не обнулился, то происходит ситуация обнаружения ошибок, поэтому все сообщение стирается.
3. Для кодов, исправляющих ошибки кратности не более s и обнаруживающих ошибки кратности не более r, рассчитываются настройки ДКМС для каждого вида полинома ошибки кратности не более s. Если после вычисления синдрома по принятому полиному V ′(x) его значение
совпадает с одной из настроек ДКМС, то происходит исправление ошибок путем инвертирования соответствующих разрядов. Если значение синдрома не совпало ни с одной настройкой, то происходит ситуация обнаружения ошибок, поэтому все сообщение стирается.
Корректирующая способность кода реализуется на такте, следующем после расчета синдрома, т. е. на такте с номером (n + 1).
1.2. Принципы декодирования БЧХ-кодов по алгоритму Меггита (декодер Меггита)
Синдромное декодирование для БЧХ-кодов наиболее эффективно реализуется при помощи алгоритма, предложенного американским ученым Меггитом. Поясним декодирование по алгоритму Меггита на самом простом примере – исправлении однократной ошибки (s = 1), а затем распространим приведенные соображения на произвольное значение s.
Предположим, что однократная ошибка исказила разряд ai′ (полином
ошибки e(x) = xi). При циклическом сдвиге вектора V' в сторону старших разрядов, что эквивалентно умножению полинома V ′(x) на x, ошибочный
разряд ai′ будет также смещаться. При этом за счет замкнутости векторно-
го пространства БЧХ-кодов относительно операции циклического сдвига (Т) старший разряд всегда будет присутствовать у слагаемого xn–1. До позиции старшего разряда an′−1 ошибочный разряд ai′ дойдет в результате
умножения полинома на величину xn–1–i. При попадании ошибочного разряда в старший разряд полином ошибки может быть представлен как e(x) = = xn–1. На этот единственный вариант полинома ошибки и настраивается декомбинатор синдрома. Для декодера Меггита декомбинатор синдрома принято называть селектор. Количество элементов в селекторе, настроенном на исправление однократной ошибки, равно 1. Настройка селектора определяется как

rn–1(x) ≡ xi xn–1–i = xn–1 mod g(x). |
(1.5) |
Декодирование происходит следующим образом. После приема из |
|
′ |
последова- |
канала связи полинома V (x) , т. е. начиная с (n+1)-го такта, |
тельно производится его домножение на x. После каждой операции домножения, что эквивалентно циклическому сдвигу вектора V', соответственно и вектора ошибки на один разряд, производится определение синдрома S(x). Оно осуществляется путем вычисления остатка от деления полинома xj–1 V ′(x) на порождающий полином g(x), где j – номер этапа домножения
(j = 1,2,…). После вычисления значение S(x) сравнивается с настройкой декомбинатора синдрома rn–1(x). Совпадение полиномов S(x) и rn–1(x) означает, что ошибочный разряд находится в старшем разряде. Значит, на следующем такте он должен быть исправлен. Номер этапа, на котором произойдет исправление ошибки, определяется следующим образом: 2n–i, где
i– номер ошибочного разряда.
Вслучае двукратной ошибки полином e(x) содержит два ненулевых
компонента: e(x) = xi xj. В результате циклического сдвига через какое-то количество тактов полином ошибки будет выглядеть следующим образом: e(x) = xl xn–1, т. е. одна из ошибок располагается в старшем разряде, а вторая – где-то в остальной части полинома. Очевидно, что количество вариантов расположения второй ошибки равно (n – 1). После исправления ошибки в старшем разряде полином ошибки становится равным e(x) = xl, и далее происходит исправление однократной ошибки. Количество вариантов значений синдрома, как уже рассматривалось ранее, равно 1. Следовательно, для исправления двукратной ошибки количество элементов в селекторе должно быть N = n – 1 + 1 = n.
Для общего случая сложность (количество k-входовых конъюнкторов) селектора можно оценить следующим образом:
S |
n −1 |
(1.6) |
|
N = ∑ |
. |
||
i=1 |
i −1 |
|
|
В качестве примера сравним сложность селектора в составе декодера Меггита (NM) и со сложностью декомбинатора синдрома (NДС) в составе декодера, реализующего общий (традиционный) подход к синдромному декодированию (табл. 1.2).
|
|
|
Таблица 1.2 |
|
|
|
|
|
|
NМ |
|
S |
Код |
NСД |
|
|
|
1 |
(15,11,3) |
15 |
|
1 |
|
2 |
(15,7,5) |
120 |
|
15 |
|
3 |
(15,3,7) |
575 |
|
106 |
|
… |
… |
… |
|
… |
|
На основании анализа таблицы можно сделать вывод, что алгоритм Меггита дает значительное упрощение декомбинатора синдрома, и с увеличением длины кода n выигрыш увеличивается. Это является существенным достоинством алгоритма Меггита, что повлекло за собой его широкое практическое применение.
Исправление ошибки происходит с (n+1)-го по (2n)-й такты работы декодирующего устройства. Поэтому недостатком алгоритма Меггита является то, что появляется задержка на n тактов, необходимая для сдвига вектора ошибки в сторону старшего разряда. В то же время следует отметить, что сложность декодера Меггита, определяемая сложностью селектора ошибок, все еще велика (хотя и существенно ниже декодера, реализующего традиционный подход к синдромному декодированию). Это обусловило поиск иных алгоритмов декодирования циклических кодов. В частности, получили развитие алгебраические алгоритмы декодирования БЧХ-кодов (алгоритм Берлекэмна с процедурой Чена, алгоритм Питерсона и др.).
Пример 1. Рассчитать значения настройки селектора и синдрома для циклического кода (7,4,3) и порождающего полинома g(x) = 1 x2 x3.
Настройка селектора производится на полином ошибки e(x) = x6
(ошибка в старшем разряде a6): r6(x) ≡ x6 mod (1 x2 x3) = x x2. Рассчитаем синдром для полинома V(x) = 1 x2 x3 (информацион-
ный полином u(x) = 1) и полинома ошибки e(x) = x4. В результате воздействияполиномаошибкипринятполиномV'(x) = V(x) e(x) = 1 x2 x3 x4. Рассчитаем синдромы S(x).
1.Для S(x) ≡ x0 V'(x) mod (1 x2 x3) = x. С настройкой селектора не
совпадает, поэтому можно сделать вывод о том, что в старшем разряде a6 ошибки нет.
2.Для S(x) ≡ x1 V'(x) mod (1 x2 x3) = 1 x. С настройкой селектора не совпадает, поэтому можно сделать вывод о том, что в старшем разряде a5 ошибки нет.
3.Для S(x) ≡ x2 V'(x) mod (1 x2 x3) = x x2. С настройкой
селектора совпадает, поэтому можно сделать вывод о том, что ошибка
в разрядеa4.
Номер этапа, на котором ошибочный разряд попадает в старший разряд, определяется как: n – 1 – j = 7 – 1 – 3 = 3.
Номер этапа, на котором исправляется ошибка, определяется как n – 1 – (j – 1) = 7 – 1 – 3 + 1 = 4. Напоминаем, что речь идет об этапах циклического сдвига полинома V'(x), при этом 1-й этап соответствует n-му такту работы декодера. Для ошибок большей кратности расчеты и моделирование осуществляются аналогично.
Рассмотренный принцип декодирования Меггита обладает также следующим недостатком. Он заключается в однозначной зависимости настройки селектора от длины кода n. Это означает, что для укороченных циклических кодов необходимо производить перерасчет настройки селектора для разных значений n. Для нивелирования указанного недостатка применяется метод, в котором при расчете синдрома полином V'(x) предварительно умножается на величину xk. При этом настройка селектора, определяемая из соображений, что ошибочный разряд в результате циклического сдвига находится в старшем разряде, осуществляется следующим образом:
rn–1(x) ≡ xi xn–1–i xk = xi–n–1–i+k = xn xk–1 = xk–1 mod g(x). |
(1.7) |
Очевидно, что такая настройка селектора не зависит от длины вектора n, а определяется только длиной избыточной части k, которая для укороченных кодов не изменяется, т. е. является универсальной для всех укороченных кодов. Такой способ декодирования получил название «декодирование с предварительным умножением на xk». Поскольку степень порождающего полинома g(x) равна k, то настройка селектора просто равна xk–1.
В общем случае (для укороченных и неукороченных кодов) для построения декодера Меггита с универсальной настройкой селектора необходимо внести дополнения в структуру генератора синдрома. Указанные изменения вносятся с учетом вида дополнительного полинома d(x), который определяется следующим образом:
d(x) = xi+k mod g(x), |
(1.8) |
где i – количество символов, на которые был укорочен код. Как вид дополнительного полинома d(x) влияет на структуру декодера, укажем при рассмотрении вопросов построения декодирующих устройств. Как будет показано ниже, для неукороченных кодов дополнительный полином d(x) не влияет на структуру декодера.
1.3. Проектирование декодеров Меггита
Структурная схема декодера Меггита в режиме исправления ошибок приведена на рис. 1.1. Селектор настраивается на полином ошибки. Рассмотрим варианты построения селектора для исправления однократной ошибки. Для исправления однократной ошибки селектор состоит из одного k-входового конъюнктора, который настраивается на выделение ошибки в старшем разряде, т. е. на следующий вектор ошибки (табл. 1.3):

V'(x) |
|
|
|
|
|
|
|
V(x) |
|
a'0 |
a'1 |
… |
a'n–1 |
|
|
||
|
|
|||||||
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ГС |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
S0 |
… |
Sk–1 |
|
|
|||
|
|
|
|
n+1,..,2 n |
||||
|
|
|
СЕЛЕКТОР |
|
|
К |
||
|
|
|
|
|
|
|
|
|
Корректор
Рис. 1.1. Структурная схема декодирующего устройства Меггита
Таблица 1.3
V′ |
a'0 |
a'1 |
… |
a'n-1 |
e |
0 |
0 |
… |
1 |
Первые n тактов происходит заполнение буферного регистра полиномом V'(x). Одновременно осуществляется вычисление синдрома S(x). Если после n-го такта элементы памяти генератора синдрома обнулились, значит, ошибок в принятом векторе нет, или кратность ошибки превышает корректирующую способность кода. Если в элементах памяти генератора синдрома находится ненулевой остаток, то деление продолжается дальше. При этом открывается ключ, давая возможность селектору исправить ошибку. На том такте, когда ошибочный разряд попадает в старший (n – 1) разряд буферного регистра, комбинация вектора синдрома S0,…, Sk–1 совпадает с настройкой селектора. Это означает, что выход селектора устанавливается равным 1. Тогда на следующем такте ошибочный разряд, выдвигаясь из старшего разряда БР, складывается по модулю 2 с выходом селектора, что эквивалентно инверсии ошибочного символа (исправлению ошибки). После этого элементы памяти генератора синдрома обнуляются сигналом Reset.
Номер такта, на котором сработает селектор, определяется следующим образом:
2n – i –1, |
(1.9) |
где i – номер ошибочного разряда.
Соответственно, номер такта, на котором произойдет исправление ошибки,
2n – i. |
(1.10) |