Гл.1. Основные принципы кодирования и декодирования при передаче сообщений

advertisement
Гл.1. Основные принципы кодирования и декодирования при передаче
сообщений
§1.1. Блоковое и неблоковое кодирование
Мы начнем с некоторых простых определений и со свойств расстояния
Хемминга.
Пусть X – некоторое множество, состоящее из q элементов. Будем
называть это множество кодовым алфавитом. Всякую последовательность
x  ( x1 ,..., xn ) , образованную символами (буквами) алфавита Х мы будем
называть словом над алфавитом Х, при этом число n называется длиной слова.
Через X n мы будем обозначать множество всех слов с длиной n. Очевидно, что
число таких слов | X n | (мощность множества X n ) равна q n .
Пусть х и у – два слова из X n . Расстоянием Хемминга d(x,y) между х и
у называется число позиций, в которых эти два слова различаются. Напр имер,
для Х={0,1,2}, х= (1 0 2 1) и у=(0 2 1 1) имеем d(x,y)=3. Очевидным свойством
расстояния Хемминга является свойство аддитивности, согласно которому
расстояние между парой последовательностей можно вычислить как сумму
расстояний между их подпоследоват ельностями. Например, если x  (x1 , x 2 ) и
y  ( y1 , y 2 ) , то d (x, y)  d (x1 , y1 )  d (x 2 , y 2 ) при условии, что подпоследователь ности ( x i , y i ) имеют одинаковые длины.
Расстояние Хэмминга, как и любая другая функция, которая оп ределяется как расстояние, обладает следующими характеристическими свойствами:
1) d(x,y)  0; d(x,y) = 0 тогда и только тогда, когда x = y (свойство
неотрицательности) ;
2) d(x,y) = d(y,x) (свойство симметричности) ;
3) для любых x,y,z  X n выполняется следующее неравенство: d(x,y) 
d(x,z) + d(y,z) (неравенство треугольника);
Первые два свойства очевидны. Докажем последнее свойство.
Доказательство: Пусть , x  ( x1 ,..., xn ) , y  ( y1 ,..., yn ) , z  ( z1 ,..., z n ) – некоторые
три последовательности из X n . Воспользуемся свойством аддитивности:
n
1, при xi  yi ,
d(x,y)=  d ( xi , y i ) , где d ( xi , yi )  
i 1
0, при xi  yi .
Легко заметить, что d ( xi , yi )  d ( xi , zi )  d ( zi , yi ) , т.к. при d ( xi , yi ) =1 неравенство
справедливо, поскольку хотя бы одно слагаемое в правой части равно 1, а при
d ( xi , yi ) =0 неравенство следует из неотрицательности расстояния. Теперь, суммируя
обе части этого неравенства по всем значени ям i от 1 до n, получим требуемый
результат.
Величина w(x), равная количеству ненулевых символов в х, называется
весом Хемминга последовательности х. Очевидно, что w(x) = d(x,0), где 0 это
нулевое слово (слово из всех нулей), длина которого равна длине слова х.
Очевидно, что вес Хемминга также обладает свойством аддитивности:
1
d (x,0)  d (x1 ,0)  d (x 2 ,0) . Из неравенства треугольника очевидным образом
вытекают следующие неравенства:
| w( x )  w( y ) | d ( x, y )  w( x )  w( y )
(1.1.1)
Множество последовательностей над произвольным алфавитом Х, на
котором определено расстояние Хемминга d(x,y), называется пространством
Хемминга. При этом функция w(x) называется метрикой Хемминга на X n .
1.1.1. Блоковое кодирование
Пусть U={u 1 ,..,u М }- произвольное конечное множество, состоящее из М
элементов. Будем называть U множеством сообщений. Предположим, что для
представления и передачи сообщений используется кодовый алфавит Х,
состоящий из q букв. Пусть С= {с1,…,сМ}, где ci = ( ci ,1 , ci , 2 , ..., ci ,n ) , - это некоторым
образом выбранное подмножество М слов над алфавитом X. Всякое такое
подмножество называется кодом над алфавитом Х. Код называется двоичным,
если кодовый алфавит содержит только два символа, которые об ычно
обозначаются как 0 и 1.
Если между множеством сообщений U и списком слов С установлено
взаимно-однозначное соответствие, то С называется q-ичным кодом длины n
для кодирования сообщений множества U. При этом последовательности
с1,…,сМ
называются кодовыми словами, а правило, устанавливающее
соответствие между U и С, называется правилом кодирования. При блоковом
кодировании считается, что все кодовые слова имеют одинаковую длину n,
поэтому говорят, что код имеет длину n. Количество кодовых слов в C равно
числу кодируемых сообщений М и называется мощностью кода.
Введем понятие скорости кода (или скорости кодирования). Скорость
блокового кода вычисляется по формуле:
 1
R  log 2 M , (бит / символ ).
n
Скорость равна количеству двоичных единиц информации (ко личеству бит),
которые могут быть переданы с помощью одного символа кодового слова.
Максимальное значение скорости кода равно log 2 q . Если основание
логарифмов взято равным q, то скорость измеряется в q-ичных единицах
информации на символ. В двоичном случае максимальное значение скорости
R = 1. При такой скорости кодовыми словами являются все возможные
двоичные слова и каждый кодовый символ переносит ровно 1 двоичную
единицу (1 бит) информации. Такой код является безызбыточным. Он не
позволяет ни обнаруживать, ни исправлять ошибки. Уменьшение числа
используемых кодовых слов при сохранении их длины n приводит к
уменьшению скорости, к появлению избыточности и, возможно, к появлению
обнаруживающей и корректирующей способности кода. Избыточность кода
определяется как разность между максимальным значением скорости и ее
2
действительным значением. В двоичном случае избыточность равна разности
log 2 q  R .
Если число сообщений в множестве U равно q k , то каждому сообщению
соответствует блок из k q-ичных символов (q-ичный номер сообщения). В
результате блокового кодирования каждый такой блок, содержащий k
информационных символов, отображается в блок из n кодовых символов. При
k  q  ичн. ед. инф 
этом скорость кодирования равна R  
 . Существует много
n 
симв

различных способов блокового кодирования, поскольку существует много
способов выбора кодовых слов и много способов сопоставления сообщений и
кодовых слов. Ниже в качестве примера приведен один из возможных
способов блокового двоичного кодирования для множества U={u 1 ,..,u 4 },
состоящего из 4-х сообщений.
Пример 1.1.1. Предположим, что правило кодирования (правило отобра жения U в С) задается следующей таблицей
Двоичный
номер
0 0
0 1
1 0
1 1
U
u1
u2
u3
u4
Кодовое
слово
0 0 0
0 1 1
1 0 1
1 1 0
 бит 
Для этого кода q = k = 2, n=3. Скорость кода равна 2/3 
 . Другими
 симв 
словами, каждые 3 кодовых символа переносят 2 бита информации. Избыточ ность кодирования равна 1/3. Схема кодера, кодирующ его сообщения
{u 1 ,u 2 ,u 3 ,u 4 }, приведена на рис.1.1. Кодер преобразует двоичный номер
сообщения в соответствующее этому сообщению кодовое слово. На вход
кодера (входы 1,2) поступают два информационных символа, представляющие
номер сообщения. На выходе кодера (выходы 1,2,3) появляются три кодовых
символа. Для этого кода первые два кодовых символа просто совпадают с
двумя информационными. Третий, избыточный, символ является суммой по
модулю два двух информационных.
1
вход
1
выход
2
2
+
3
mod2
Рис.1.1.1 Блоковый кодер для двоичного кода со скоростью 2/3
3
1.1.2. Неблоковое кодирование
При неблоковом кодировании считается, что источник порождает
последовательность
сообщений
неопределенной
длины
(возможно,
бесконечной). При кодировании этой последовательности ей ста вится в
соответствие другая последовательность, образованная кодовыми символа ми, также имеющая неопределенную (возможно, бесконечную) длину.
Скорость кодирования определяется как R= k 0 /n 0 , если при подаче каждых
k 0 информационных символов на выходе кодера появляется n 0 кодовых
символов.
Примером неблокового q-ичного кодирования является так называемое
древовидное кодирование. Правило, устанавливающее такое кодирование,
проще всего описать с помощью некоторого графа в виде дерева.
Предполагается, что в дереве из каждого узла исходят q k0 ветвей. Каждая
такая ветвь соответствует информационному подблоку, состоящему из k 0
символов. Кроме того, каждой ветви, соединяющей пару узлов дерева,
сопоставлена q – ичная последовательность, состояща я из n 0 кодовых
символов (кодовый подблок).
Пример такого дерева для q=2, k 0 =1 и n 0 =2 показан на рис.1.1. Кодовое
слово формируется следующим образом. Информационная последователь ность разбивается на информационные подблоки по k 0 символов. Каждый
информационный подблок указывает какая ветвь дерева и, следовательно,
какой набор кодовых символов будет использован на очередном шаге
кодирования. При этом первый информационный k 0 -подблок обозначает
номер исходящей ветви для первого узла, второй информаци онный k 0 подблок – номер для второго узла и т.д. Каждой ветви дерева соответствует
(приписана) двоичная кодовая последовательность длины n 0 , называемая
кодовым подблоком.
Последовательность информационных подблоков устанавливает тот
или другой порядок обхода ветвей дерева, зависящий от информационной
последовательности. Кодовое слово древовидного кода представляет собой
последовательность двоичных кодовых символов, соответствующих данной
последовательности ветвей.
Для примера на рис.1.2. информацион ной последовательности 10011…
соответствует выделенная жирными линиями последовательность ветвей (1
– движение вниз, 0 – движение вверх). При таком обходе дерева
порождается
кодовая последовательность 1101111110… . Скорость
кодирования равна ½, так как каждый информационный символ порождает
пару кодовых символов.
4
00
00
11
00
11
01
10
11
11
01
00
00
10
0
10
01
00
1
11
11
10
11
00
01
01
10
11
10
10
01
00
10
01
Рис.1.1.2. Двоичное кодовое дерево,
(инф. послед. 10011…, кодов. послед. 1101111110 ...)
Другим примером неблокового кодирования является сверточное кодирование.
Схема кодера двоичного сверточного кода показана на рис.1.1.3. Кодер состоит из  разрядного регистра сдвига и n0 сумматоров по модулю 2. В примере сверточного
кодера, показанного на рис 1.2,  =2, n 0 =2. Начальное состояние регистра – нулевое.
Информационная последовательность поступает на вход регистра. Содержимое
регистра обрабатывается сумматорами, на выходах которых образуется кодовая
последовательность, которая символ-за-символом поступает на выход.
+
Вход
1
2
+
Выход
Скорость кодир.  1/2
Рис.1.1.3 Кодер двоичного сверточного кода со скоростью 1/2
Если входная последовательность продвигается через регистр блоками по k 0 символов,
то скорость кодирования будет равна k 0 / n0 .
Выходы сумматоров поочередно
подключаются на вход канала.
5
Можно проверить, что древовидный код (см. рис.1.1.2) и сверточный код,
порождаемый кодером (см. рис.1.1.3) эквивалентны, т.е. они порождают одинаковые
кодовые cлова при одинаковых информационных последовательностях. Можно показать,
что всякий сверточный код является древовидным, но не всякий древовидный код
является сверточным.
В этом пособии мы рассматриваем только алгебраическую теорию блоковых
кодов. Сверточные коды, их характеристики и методы декодирования рассматриваются в
другом курсе.
§1.2. Модели каналов связи
Очень часто нас интересует вопрос о вероятности ошибки, которую
обеспечивает тот или другой код в заданном канале. Для того чтобы о этом
говорить, необходимо задать математическое описание канала связи, по
которому происходит передача сообщений. В этом разделе мы рассмотрим
несколько простейших математических моделей каналов и дадим основные
определения, касающиеся каналов связи и их основных хара ктеристик.
Пусть X ={0,…,q-1} есть кодовый алфавит (или алфавит сообщений на
входе канала связи). Множество всех слов длины n над алфавитом X мы будем
обозначать через X n . Очевидно, что число слов в X n равно q n . Множество
допустимых при передаче по каналу последовательностей или множество С
кодовых слов представляет собой некоторое подмножество множества X n ,
С  X n . На выходе канала в общем случае могут появляться сообщения из
другого множества. Обозначим через Y выходной алфавит канала и через Y n
множество всех возможных слов над Y . Для задания канала связи со входным
алфавитом X и выходным алфавитом Y должны быть заданы переходные
вероятности p ( y | x ) для всех пар последовательностей x  ( x1 ,..., x n )  X n и
y  ( y1 ,...,y n )  Y n , определяемые как вероятности появления на выходе канала
слова y при условии, что на вход канала подано слово x.
Можно также рассматривать переходные вероятности для символов (для
слов длины 1), относящиеся к моменту времени i. Пусть pi ( y | x ) - вероятность
появления на выходе канала символа y при передаче символа x в момент
времени i. Другими словами, y - это i-й символ последовательности y, а x-это
n
i-й символ последовательности x. Если
p( y | x )   pi ( yi | xi ) для всех слов
i 1
x  X , y  Y , то канал называют дискретным каналом без памяти. В этом
канале выходной символ yi зависит только от соответствующего входного
символа xi и не зависит ни от каких символов на входе и выходе канала в другие
n
n
моменты времени. Таким образом, к моменту передачи и получения пары xi , yi
канал “не помнит” о прошлых и будущих передачах.
n
Для стационарного канала без памяти p( y | x )   p( yi | xi ) , т.е. в таком
i 1
канале переходные вероятности pi ( y | x ) не зависят от номера передаваемого
6
символа (от времени), а для всех моментов времени задаются одной и той же
функцией p ( y | x ) .
Приведем пример двоичного симметричного стационарного канала без
памяти. Пусть входной и выходной алфавиты канала совпадают, т.е .
X=Y={0,1}. Вероятность того, что при передаче нуля на выходе канала
оказался нуль, а при передаче единицы - единица, обозначим как 1-p 0 .
Вероятность того, что при передаче произошла ошибка, обозначим как p 0 .
Предположим, что переходная вероятность для к аждого момента времени
задается следующим образом:
p0 , если y  x,

p( y | x )  
1  p0 в противном случае.
Модель канала можно представить с помощью графа, приведенного на
рис.1.2.1 и показывающего возможные переходы в канале и их вероятности.
X
0
Y
0
p( 0 | 0)
p ( 1 | 0 )  p (0 | 1 )  p 0 ,
p ( 0 | 0 )  p (1 | 1 )  1  p 0 .
p ( 1 | 0)
p ( 0 | 1)
1
1
p (1 | 1)
Рис.1.2.1 ДСК
Такой канал называют двоичным симметричным каналом (ДСК) без памяти.
Для этой модели канала вероятность ошибки на символ p 0 есть единственная
характеристика канала.
p ( y | x ) = p( y1 | x1 ) p( y2 | x2 )...p( yn | xn ) .
Из стационарности вытекает, что
Если обозначить через t – количество позиций, в которых вход и выход канала
различаются, то формула для переходной вероятности будет иметь следующий
вид :
t
p ( y | x ) = po (1  po )
t
n t
 p 
 (1  p0 )  0  , t= d(x,y).
 1  p0 
n
(1.2.1)
Для того, чтобы исследовать поведение вероятности p ( y | x ) как функции от t
t
 p 
заметим, что f(t)=  0  ведет себя по-разному в зависимости от того как
 1  p0 
соотносится p 0 с 1/2. Если p0  1 / 2, то f(t) убывает с ростом t, если p0  1 / 2, то
f(t) возрастает с ростом t, при p0  1 / 2, f(t)=1 для всех t. Графики функции f(t)
7
при различных значениях вероятности p 0 приведены в логарифмическом
масштабе на рис.1.2.2.
10
10
4
3
p0> 1/2
10
10
10
10
2
1
p0= 1/2
0
-1
p < 1/2
0
10
10
10
-2
-3
-4
0
5
10
15
20
25
t
Рис.1.2.2. Поведение функции f(t), p ( y | x ) = f(t) (1  p0 ) n
Как видно из формулы (1.2.1) и графика на Рис.1.2.2, при вероятности
ошибки символа меньшей, чем 1/2, вероятность получения последовательности
y, отличающейся от посланной последовательности x в t позициях, будет
экспоненциально уменьшаться с ростом числа ошибок t. Это означает, что
при необходимости найти кодовое слово x, которое максимизировало бы
вероятность p ( y | x ) при данном слове y на выходе канала, мы должны искать
кодовое слово, отличающееся от y в наименьшем числе позиций. В случае,
когда вероятность ошибки на символ больше 1/2 , мы должны действовать
ровно наоборот, т.е. искать кодовое слово, отличающееся от принятого в
наибольшем числе позиций. При p0  1 / 2 вероятность p ( y | x ) не зависит от
выбора x.
Количество ошибок на n позициях является случайной величиной и
подчиняется биноминальному распределению вероятностей
n t
n!
t
P(t )    p0 (1  p0 ) n t 
p0 (1  p0 ) n t ,
t! (n  t )!
t
(1.2.2)
где
n
n!
  
 t  t! ( n  t )!
(1.2.3)
- число сочетаний из n по t. Заметим, что число сочетаний из n по t иногда обозначается
как C nt .
8
Приведем пример двоичного стирающего стационарного канала без
памяти. Пусть X={0,1}-кодовый алфавит на входе канала связи, Y={0,1,2}алфавит на выходе канала связи. Здесь 2 – символ, который не совпадает ни с
одним из передаваемых символов, т.е. который не может быть передан. Мы
будем называть появление этого выходного символа стиранием. Вероятность
ошибки в символе обозначим через p 0 , вероятность того, что на входе канала
появится стирание, обозначим через p ст , вероятность того, что на выходе
канала появится тот же символ, что и на входе, обозначим как (1 - p 0 - p ст ).
Таким образом, переходные вероятности для символов можно записать так:
1  po  pст , если x  y,

p( y | x )   po , если x  y, y  2,

pст , если y  2.

Такой канал называется двоичным стирающим каналом (ДСтК). Граф,
демонстрирующий возможные переходы, приведен на рис.2.3.
рис.2.3. ДСтК
Предположим, что при передаче n символов количество ошибок равно t,
количество стираний равно s и количество правильных передач равно ( n-t-s).
Тогда, в силу стационарности получим:
n
p ( y | x ) =  p( yi | xi )  po pст (1  po  pcm ) n t  s . .
t
s
i 1
В таком канале число ошибок и стираний являются парой зависимых
случайных величин, подчиняющейся мультиномиальному совместному распре делению вероятностей
 n  n  s  t
s
P(t , s )   
 p0 pcm (1  p0  pcm ) n t  s , t  s  n.
 s  t 
(1.2.4)
или
P (t , s ) 
n!
t
s
p0 pcm (1  p0  pcm ) n t  s , t  s  n.
s! t! ( n  s  t )!
9
Нетрудно заметить, что поведение вероятности p ( y | x ) в зависимости от
числа ошибок t при фиксированном числе стираний s зависит от соотношения
между вероятностями ошибок и стираний. Если p0  (1  pcm ) / 2 , то p ( y | x )
монотонно убывает с ростом t, если p0  (1  pcm ) / 2 , то p ( y | x ) монотонно
возрастает с ростом t. При p0  (1  pcm ) / 2 вероятность p ( y | x ) не зависит от t.
Это означает, что при необходимости найти кодовое слово x, которое
максимизировало бы вероятность p ( y | x ) при данном слове y на выходе
канала, мы должны искать кодовое слово, отличающееся от y в наименьшем
числе нестертых позиций.
Приведем теперь пример двоичного канала с памятью. Пусть X –
входной и Y – выходной алфавиты канала. В рассматриваемом примере эти
алфавиты совпадают и состоят из двух символов, т.е. X=Y={0,1}. Допустим,
что при подаче на вход канала слова x = (x1,…, xn) на выходе канала появляется
слово y = (y1,…, yn), x  X n , y  Y n . Введем в рассмотрение еще одно слово e =
(e1,…, en)  {0, 1}n . Символ ei в последовательности e будет принимать значение 1
в том случае, если на позиции, соответствующей данному символу,
произошла ошибка, т.е. если yi  xi . В противном случае этот символ равен 0:
1, при xi  yi ,
ei  
0, при xi  yi .
Другими словами, е является последовательностью ошибок. Иногда эту
последовательность называют вектором шума. Свойства канала полностью
определяются источником шума, который генерирует последовательность
ошибок.
Процесс передачи по такому каналу можно представи ть в виде схемы на
рис.1.2.4.
Генератор шума
e  ( e ,..., e )
1
n
x  ( x ,...,x )
1
n
+
mod 2
y  ( y ,...,y ) , y  x  e mod 2
1
n
Рис.1.2.4. Канал с аддитивным по mod2 шумом
Поток ошибок поступает от генератора случайных последовательностей
(генератора шума). Если случайные последовательности на выходе генератора
подчиняются распределению вероятно стей Pош (е) и не зависят от того, какая
10
последовательность поступает на вход канала, то переходные вероятности
канала определяются соотношением:
p( y | x)  Рr(e  y  x | x)  Pош ( у  х) ,
где вычитание понимается как операция обратная сложению по модул ю 2.
Такой канал называется двоичным каналом с аддитивным шумом . Очевидно,
что ДСК это канал с аддитивным шумом. Для этого канала ошибки,
порождаемые генератором шума, представляют собой независимые двоичные
величины.
Если генератор шума порождает зависимые случайные величины,
например, если шум - это марковский случайный процесс, то ошибки ei , e j ,
соответствующие различным моментам времени i,j будут статистически
зависимыми. В этом случае события xi , yi будут зависить также от пары
событий x j , y j . Поэтому переходные вероятности p ( y | x ) нельзя записать в
виде произведения одномерных переходных вероятностей p( yi | xi ) , i=1,2,…,n,
и, следовательно, данный канал будет облад ать памятью.
§1.3. Основные принципы декодирования
Пусть U  {u1 , u2 ,..., u M } – множество сообщений и С  {c1 , c 2 ,..., c M } - код над
алфавитом X, предназначенный для передачи сообщений из U. Сообщения из
множества U и кодовые слова из C однозначно определяют друг друга.
Другими словами, для каждого сообщения однозначно определено кодовое
слово, используемое для передачи этого сообщения, и, наоборот, каждое
кодовое слово соответствует только одному сообщению, которое передается
этим словом. Однако в некоторых случаях вместе с множеством U рассматривается некоторое дополнительное сообщением u 0 , которое никогда не
передается, но может появиться при декодировании (как, например, стирание
в случае двоичного стирающего канала ).
Чтобы прояснить ситуации, возникающие при декодировании, обозначим
через Y n -множество всех слов длины n над выходным алфавитом канала Y. По
выходной последовательности канала y  { y1 , y2 ,..., yn }  Y n декодер должен
вынести решение о том, какое из кодовых слов c  C или какое из сообщений
u  U было передано. В качестве решения может быть взято либо одно из
сообщений {u1 , u2 ,..., u M } , либо сообщение u 0 , которое можно толковать как отказ
от принятия окончательного решения (стирание). Общая схема кодирования декодирования приведена на рис.1.3.1.
11
Yn
Xn
U
c1
u1
Y1
u1
Y2
c2
u2
U
u2
u0
uM
cM
Кодирование
YM
Передача
uM
Y0
Декодирование
Рис.1.3.1. Кодирование, передача по каналу связи, декодирование
Для задания декодирования достаточно задать систему непересекающихся
M
подмножеств Y 0 , Y 1 ,…, Y M , где Y n  i 0 Yi . Будем называть эти подмножества
областями декодирования (или решающими областями). Декодер принимает
решение в пользу кодового слова с i (в пользу сообщения ui ) , если выходная
последовательность канала находится в i-ой области декодирования, т.е.,
y  Yi , i  0 . Если же эта последовательность не принадлежит ни одной из
решающих областей Y 1 ,…,Y M , т.е. принадлежит области Y 0 , то принимается
решение об отказе от окончательного декодирования и обнаружении ошибки
которую декодер не в состоянии исправить. При декодировании происходит
ошибка и получателю выдается неверное решение, если передава емое
сообщение имеет номер j, но y  Yi , i  0 и j  i .
Таким образом, всякое разбиение множества Y n на непересекающиеся
подмножества Y 0 , Y 1 ,…, Y M задает некоторое декодированием для кода С.
Также наоборот, всякое декодирование для кода С задает некоторое разбиение
Y n на непересекающиеся области декодирования.
Пример 1.3.1. Пусть X=Y={0,1}, n=3. Выпишем всевозможные двоичные
последовательности длины 3 над алфавитом X: X n = Y n ={000, 001, 010, 111,
100, 101, 110, 111}. Рассмотрим 3 различные кода С 1 , С 2 , С 3 над алфавитом
Х. Пусть в качестве кода С 1 выбрано все множество X 3 , тогда скорость
кодирования R=(log 2 8)/3=1. Множество передаваемых сообщений U также
состоит из 8 сообщений. Решающие области будут иметь следующий вид:
Y 1 = {000}; Y 2 = {001}; Y 3 = {010}; Y 4 = {011};
Y 5 = {100}; Y 6 = {101}; Y 7 = {110}; Y 8 = {111};
В отсутствие ошибок слово на выходе канала принадлежит той решающей
области, которая соответствует переданному кодовому слову. Облас ть отказа
пуста. Очевидно, что всякая ошибка переводит переданное слово в решающую
область, соответствующую другому кодовому слову, т.е. приводит к ошибке
декодирования. Данный код не обнаруживает, ни исправляет ошибки.
12
Теперь приведем пример кода, способного обнаруживать некоторые
ошибки. Пусть код С 2 выбран следующим образом: С 2 ={000, 011, 101, 110}. В
этом коде четыре кодовых слова, его скорость равна
R=(log 2 4)/3=2/3 и
избыточность равна 1/3. Множество U также состоит из 4 сообщений. Если
выбрать решающие области как
Y 1 = {000}; Y 2 = {011}; Y 3 = {101}; Y 4 = {110}; Y o = {001, 010, 100, 111};
то при отсутствии ошибок декодер правильно определяет переданное слово.
Однако, при любых ошибках нечетной кратности (т.е. при любых однократных
ошибках или ошибке в трех символах) принятое слово оказывается в области
отказа. Иначе говоря, однократные и трехкратные ошибки обнаруживаются.
Рассмотрим код, способный исправлять однократные ошибки. Пусть
С 3 ={000, 111}. Скорость такого кода R=(log 2 2)/3=1/3. Избыточность равна 2/3.
Множество U в этом случае сокращается до 2-х сообщений. Для начала
отметим, что обнаруживающая способность этого кода выше обнаруживающей
способности кода С 2 . Если выбрать решающие области как указано ниже
Y 1 = {000}; Y 2 = {111}; Y o = {001, 010, 100, 011, 101, 110},
то в отсутствие ошибок декодер правильно определяет переданное слово. При
любых однократных и двукратных ошибках принятое слово попадет в область
отказа. Следовательно, при декодировании кода С 3 с такими решающими
областями любые ошибки кратности 1 или 2 обнаруживаются.
Для иллюстрации корректирующей способности кода выберем решающие
области следующим образом:
Yo =
, Y 1 = {000, 100, 010, 001}; Y 2 = {111, 011, 101, 110},
т.е. область отказа пуста. Всякая однократная ошибка не выводит переданное
кодовое слово с 1 =(000) или с 2 = (111) из своей решающей области. Поэтому
при любых однократных ошибках декодер правильно определит переданное
слово. Иначе говоря, при таком декодировании кода С 3 любые однократные
ошибки исправляются.
1.3.1. Декодирование по максимуму правдоподобия (МП)
Переходные вероятности p(y|x), x  X n , y  Yn , можно рассматривать как
значения функции двух переменных с областью определения X n  Y n . Если
зафиксировать одну из переменных, например y, то p(y|x) будет функцией
одной переменной х. При этом p(y|x) называется функцией правдоподобия.
Пусть С= {с1,…,сМ} - некоторый код. Декодирование по м етоду максимального
правдоподобия (МП) состоит в отображении y в такое кодовое слово c, для
которого функцию правдоподобия принимает максимальное значение. При
декодировании по максимуму правдоподобия решающая область Y i будет
состоять из всех таких y , для которых условные вероятности p(y|сi)
принимают максимальные значения:
13
Yi  {y : p( y | c i )  p( y | c j ) для всех j  i } .
Если для слов c i , c j имеет место равенство p( y | c i )  p( y | c j ) , то у произвольным
образом относится либо в область Yi , либо в область Y j .
Пример 1.3.2. Пусть X = Y= {0,1} и канал связи задан как двоичный
симметричный канал (ДСК) без памяти с вероятностью ошибки p0  1 / 2 .
Рассмотрим декодирование по максимуму правдоподобия в ДСК. Пусть код
состоит из двух слов С= {с1, с2}, где c 1 =(000), c 2 =(111). Имеются 8 выходных
последовательностей Y n ={000, 001, 010, 011, 100, 101, 110, 111} и две области
декодирования Y 1 и Y 2 . Для описания декодирования мы должны определить в
какую из двух решающих областей следует отнести каждую в ыходную
последовательность.
Сначала найдем, в какую область следует отнести последовательность
y 1 =(000). Имеем
p(y 1 |c 1 )=p(000|000)=p(0|0)p(0|0)p(0|0)= ( 1  p0 ) 3 ;
p(y 1 |c 2 )=p(000|111)=p(0|1)p(0|1)p(0|1)= p0 3 ;
Поскольку p0 <1/2, то p(y 1 |c 1 )= ( 1  p0 ) 3 > p0 3 =p(y 1 |c 2 ). Значит y 1 =(000) следует
отнести в область Y 1 , которая соответствует слову c 1 . Аналогично получим
2
для y 2 = (001), что p(y 2 |c 1 )= p0 (1  p0 ) 2 и p(y 2 |c 2 )= p0 (1  p0 ) . Так как снова p(y 1 |c 1 )>
p(y 1 |c 2 ), то y 2 также следует отнести в область Y 1 . Подсчитав все значения
переходных вероятностей, получим
Y 1 = {000,001,010,100}; Y 2 = {111,110,101,011}.
Как было показано выше, код С с такими областями декодирования (т.е. при
декодировании по максимуму правдоподобия) может исправлять однократные
ошибки.
t
 p 
В двоичном симметричном канале p(y|с)= (1  p0 )  0  , где t  d (c, y )  1  p0 
это расстояние Хемминга между с и у. Как упоминалось выше, эта вероятность зависит от
t монотонно, причем она убывает с ростом t при p0  1 / 2 . Поэтому неравенство
p ( y | c i )  p( y | c j ) эквивалентно неравенству d (c1 , y)  d (c 2 , y) . Другими словами,
n
область максимального правдоподобия Yi в ДСК при p0  1 / 2 , состоит из всех
таких последовательностей у, которые ближе по Хеммингу к c i , чем к любому
другому кодовому слову.
14
1.3.2. Декодирование по максимуму апостериорной вер оятности (МАВ)
Пусть С= {с1,…,сМ} - некоторый код и предположим, что для множества
кодовых слов известно априорное распределение вероятностей p(c i ), с i  C с
которыми эти слова появляются на входе канала. Рассмотрим вероятность
p(c i |y) того, что слово с i было передано, при условии, что на выходе канала
наблюдается последовательность y  Y n . Эта вероятность называется апосте риорной вероятностью слова с i . Метод декодирования по максимуму
апостериорной вероятности (МАВ) состоит в отображении y в такое слово
с  C , для которого апостериорная вероятность p(c|y) принимает максимальное
значение.
Вероятности p(c i |y) для c i  C можно найти по формуле Байеса:
p(c i |y)=
p ( y | c i ) p (c i )
,
p( y )
где p(y) есть безусловная вероятность y, которая определяется по формуле:
p(y) =  p(y|c i ) p(c i ).
сiC
Согласно определению МАВ решающая область Y i состоит из таких последовательностей y, которые максимизируют апостериорную вероятность p(c i |y):
Y i = {y : p(c i | y )  p(c j | y ), j  i } .
Если для слов c i , c j имеет место равенство p(c i | y )  p(c j | y ) , то у произвольным
образом относится либо в область Yi , либо в область Y j .
Очевидно, что при априори равновероятных сообщениях на входе канала,
т.е. при p(c i )=1/М для всех i, декодирование по максимуму апостериорной
вероятности совпадает с декодированием по максимуму правдоподобия.
Можно показать, что декодирование по МАВ минимизирует среднюю
вероятность неверного декодирования Perr   p(c i ) Pr( err | c i ) , где Pr( err | c i ) i
вероятность неверного декодирования при передаче слова c i .
Действительно, по формуле полной вероятности мы можем записать для
вероятности правильного декодирования
1  Perr 
M
 p( y ) Pr( ~c ( y )  c | y )    p( y ) Pr( ~c ( y )  c | y ) ,
yY n
(1.3.1)
i 1 yYi
c ( y )  c | y ) - вероятность
где с – переданное слово, ~c ( y ) - результат декодирования у и Pr( ~
правильного декодирования при получении слова у. Поскольку декодирование по МАВ
заключается в отображении слова у в кодовое слово ~c ( y ) = c i , для которого
15
вероятность p(c i |y) принимает максимальное значение, то при каждом у
слагаемые во внутренней сумме в (1.3.1) максимизируются. Следовательно,
максимизируется и вся сумма (1.3.1). Поэтому средняя вероятность неверного
декодирования Perr принимает минимально возможное значение.
1.3.3. Декодирование по минимуму расстояния Хэмминга (МРХ)
Напомним, что расстояние Хемминга d (c, y ) между последовательностями
с и y это количество позиций, в которых с и y различаются. Пусть С= {с1,…,сМ}
- это некоторый код. Метод декодирования кода С по минимуму расстояния
Хэмминга (МРХ) состоит в отображении y в такое слово c i  C , для которого
расстояние Хэмминга d (c i , y ) имеет минимальное значение. Каждая выходная
последовательность y при этом будет отображаться в ближайшее по Хэммингу
кодовое слово из С. Решающие области будут строиться следующим образом:
Y i = {y : d (c i , y )  d (c j , y ), j  i } .
Если для слов c i , c j имеет место равенство d (c i , y )  d (c j , y ) , то у произвольным
образом относится либо в область Yi , либо в область Y j .
Как указывалось выше, в ДСК с вероятностью ошибки на символ p0  1 / 2
вероятность p( y | c ) монотонно убывает с ростом расстояния Хемминга d (c, y ) .
Поэтому в таком канале минимизация расстояния Хемминга максимизирует функцию
правдоподобия и, следовательно, два метода декодирования МП и МРХ совпадают. В
ДСтК с вероятностью ошибки p0  (1  pcm ) / 2 вероятность p( y | c ) также монотонно
убывает с ростом расстояния Хемминга d s (c, y ) , вычисленного по нестертым
символам. Поэтому и в этом случае два метода декодирования МП и МРХ совпадают.
1.3.4. Декодирование с помощью шаров Хемминга
Предположим, что на множестве Х n всех последовательностей длины n
над алфавитом Х определено расстояние Хемминга. Шаром Хэмминга в Х n
называется подмножество всех слов множества Х n , которые находятся на
расстоянии Хемминга t или меньше от некоторого фиксирован ного слова х 0 ,
называемого центром шара. Математически шар Хемминга c центром х 0 и
радиусом t задается следующим образом:
B t (х 0 ) = {х: d(х, х 0 )  t}.
В качестве примера возьмем n=3 и Х={0, 1}, тогда X n ={000, 001, 010,
011, 100, 101, 110, 111}.
1) Пусть х 0 =(000), t=0, тогда B 0 (x 0 )={000}, т.е. шар радиуса 0 содержит
единственное слово, центр шара;
2) Пусть t=1, тогда B 1 (x 0 )={000,001,010,100}, т.е. шар радиуса 1 в Х 3 содержит
4 слова – центр и 3 слова, находящиеся на расстоянии 1 от центра;
3) Пусть t=2, тогда B 2 (x 0 )={000,001,010,100,110,011,101}, т.е. в шар радиуса 2
в Х 3 входят все точки шара B 1 (x 0 ) и еще три слова, находящиеся на
16
расстоянии 2 от центра.
4) Пусть t=3,тогда шар Хэмминга B 3 (x 0 ) в Х 3 совпадает со всем пространством
Х3.
Предположим, что на множестве выходных слов канала Y n возможно
построить М шаров Хемминга с центрами в кодовых словах и радиусом t:
B t (с i ) = {y: d(y, c i )  t}, i= 1,2,…,M.
1.3.2)
Если шары не пересекаются, то их можно использовать в качестве областей
декодирования: Y i = B t (с i ), i=1,2,…,M. В этом случае область отказа состоит
M
из точек, не попавших ни в один шар: Y 0 = Y n \ i Bt (c i ) . Декодирование с
таким набором решающих областей называется декодированием с помощью
шаров радиуса t. Заметим, что это декодирование в общем случае отличается
от декодирования по минимуму расстояния Хемминга, описанного в п.1.3.3.
§1.4. Объем шара Хэмминга
Объемом шара Хэмминга называется число слов в этом шаре. Будем
обозначать объем шара Хэмминга радиуса t с центром х 0 через |B t (х 0 )|. Объем
шара Хэмминга не зависит от выбора его центра и определяется формулой:
t
n
|B t (х 0 )|=   ( q  1) i ,
(1.4.1)
i 0  i 
n
n!
где q – число букв в алфавите Х. Здесь   
- число способов, которыми
 i  i! ( n  i )!
можно выбрать двоичные последовательности длины n , которые содержат i единиц и n-i
нулей (которые имеют вес i ). В недвоичном случае на каждой ненулевой позиции можно
расположить (q-1) ненулевых символов. Поэтому величина под знаком суммы в (1.4.1)
равна количеству q-ичных последовательностей с весом Хемминга i или количеству
последовательностей, лежащих на поверхности шара Хемминга с радиусом i. Это
рассуждение обосновывает справедливость формулы (1.4.1).
1.4.1.Асимптотика числа точек в шаре Хэмминга
Число точек в шаре Хемминга радиуса t, построенного в n-мерном
пространстве, определяется формулой (1.4.1) и зависит от q, n и t. В этом
разделе мы рассмотрим поведение |B t (х 0 )| в зависимости от выбора q и t при
n   . Очевидно, что с ростом размерности пространства n число точек в
шаре ненулевого радиуса увеличивается к бесконечности. Поэтому мы будем
рассматривать не само значение объема шара |B t (х 0 )|, а скорость роста объема,
1
а именно величину log 2 | Bt ( x 0 ) | , при условии, что радиус шара также растет
n
пропорционально n: t    n . Будем предполагать, что относительный радиус
  t / n не зависит от n и удовлетворяет неравенствам 0    ( q  1) / q .
Имеет место следующее утверждение об объеме шара Хемминга при
больших n.
17
Теорема 1.4.1. При достаточно большом n число точек в шаре B t (х 0 ),
t    n , удовлетворяет следующему соотношению:
1
 log 2 ( n ) 
log 2 | Bt ( x 0 ) |   log 2 ( q  1)  h( )  O 
,
n
 n 
(1.4.2)
где
(1.4.3)
h( )    log 2   (1   )  log 2 (1   )
- функция, называемая энтропией двоичного ансамбля, и O ( ) - величина порядка  .
Доказательство: Оценим величину |B t (х 0 )| сверху и снизу следующим
образом:
n
n
(1.4.4)
max i 0,..., t  ( q-1) i  | Bt (x 0 ) |  max i 0,..., t  ( q-1) i (t  1) .
i
i
Обе оценки вытекают из (1.4.1). Левая оценка следует из того, что сумма
неотрицательных слагаемых не меньше, чем максимальное слагаемое. Правая
оценка следует из того, что эта сумма не превосходит максимальное
слагаемое, умноженное на число слагаемых. Хотя обе оценки кажутся весьма
грубыми, их точность оказывается вполне достаточной, для того, чтобы
получить хорошую асимптотическую оценку для числа точек в шаре
Хемминга.
Вначале покажем, что при   ( q  1) / q максимальным является
последнее слагаемое, соответствующее i=t. Рассмотрим отношение двух
соседних слагаемых в (1.4.1)
n
 ( q  1) i
n!
(i  1)! ( n  i  1)!
n  i 1
i
 ( q  1)

 ( q  1)
.
i! ( n  i )!
n!
i
 n 
i 1

( q  1)
 i  1
Следующее слагаемое не меньше предыдущего, если это отношение не
n  i 1
 1 или
меньше единицы, т.е., если ( q  1)
i
q 1
.
(1.4.5)
i  (n  1)
q
q 1
q 1
, то неравенство (1.4.5) имеет место для всех
 (n  1)
q
q
слагаемых в (1.4.1), следовательно, т.е. каждое следующее слагаемое не меньше
предыдущего и поэтому максимальным является последнее слагаемое.
Таким образом, неравенства (1.4.4) мы можем переписать следующим образом:
n
n
(1.4.6)
 ( q-1) t  | Bt (x 0 ) |   ( q-1) t (t  1).
t
t
 
 
Для завершения доказательства воспользуемся формулами Стирлинга для
факториалов:
Поскольку t  n  n
18
 1 
n
n  1 
2n  n n  e n 
  n!  2n  n  e 

12n  1 
12n 
и вытекающей отсюда асимптотической формулой для числа сочетаний
n
 log n 
log 2    n log 2 n  t log 2 t  (n  t ) log 2 (n  t )  O (log 2 n )  n  {h( )  O  2 } .
 n 
t
Отсюда и из (1.4.6) следует утверждение теоремы.
Из доказанной теоремы вытекает, что при достаточно большом n число точек в
q 1
шаре Хемминга с радиусом t  n,  
, весьма точно определяется соотношением
q
|B t (х 0 )|~ exp 2 {t  log 2 (q  1)  nh( )} .
(1.4.7)
§1.5. Способность кода обнаруживать и исправлять ошибки
В данном параграфе мы обсудим связь между минимальным расстоянием
некоторого блокового кода и его способностью обнаруживать и исправлять
ошибки.
Пусть С= {с1,…,сМ} - код длины n над алфавитом X. Минимальным
расстоянием кода C называется наименьшее из попарных расстояний
Хемминга между различными кодовыми словами из C. Минимальное
расстояние кода обозначается как d(С) или как d, если известно о каком коде
идет речь:
Δ
d  min
x i , x jC, i  j
d (x i , x j ) .
Мы говорим, что код обнаруживает ошибки кратности f, если найдется
алгоритм, позволяющий определить наличие искажений в любом принят ом
слове при условии, что число ошибочных символов в слове не превосходит f.
Мы говорим, что код исправляет ошибки кратности t, если найдется алгоритм,
позволяющий указать положение ошибок и их величины при условии, что
число ошибочных символов в слове не превосходит t.
Теорема 1.5.1. Код с минимальным расстоянием d обнаруживает любые
ошибки кратности f  d-1.
Доказательство. Для доказательства достаточно указать метод декоди рования, который обеспечивает указанную обнаружение. Для этого выберем
систему решающих областей следующим образом: все области Y 1 ,…, Y M будут
одноточечными, Y i ={ сi }, а область отказа Y 0 будет содержать все остальные
слова из Y n . Докажем теперь теорему от противного. Предположим, что при
передаче слова с произошла f-кратная ошибка, причем такая, которая не
обнаруживается. Это означает, что эта ошибка переводит посланное слово в
область, соответствующую некоторому другому кодовому слову с. Однако, с
можно перевести в с только, если изменить d (c, c' ) символов, но f  d  d (c, c' ) .
Следовательно, такая ошибка не может перевести с ни в какое другое слово и по
этой причине обнаруживается.
19
Теорема 1.5.2. Код с минимальным расстоянием d исправляет любые
ошибки кратности t  (d-1)/2.
Доказательство. Для доказательства рассмотрим декодирование с
 d  1
решающими областями в виде шаров Хемминга рад иуса t0  
, где [a] –
 2 
целая часть а. Такое декодирование определяется как декодирование,
решающие области для которого представляют собой непересекающиеся шары
радиуса t 0 с центрами в кодовых словах. Тот факт, что области не
пересекаются и, следовательно, могут быть взяты для декодирован ия,
вытекает из неравенства треугольника. Действительно, если мы предположим
противное, а именно, что два шара Хемминга с радиусом t 0 и центрами сi,сj
имеют общую точку b, т.е. d (c i , b)  t0 , d (c j , b)  t0 , то
d (c i , c j )  d (c i , b)  d ( b, c j )  2t0  d ,
что противоречит тому, что минимальное расстояние кода С равно d.
Из построения решающих областей следует, что любая ошибка кратности t  t0
оставляет переданное кодовое слово в своей решающей области и, тем самым,
исправляется.
Мы говорим, что код исправляет ошибки кратности t и обнаруживает
ошибки кратности f > t, если существует алгоритм, который позволяет указать
положение ошибок и их величины при условии, что число ошибочных
символов не превосходит t, и позволяет определить наличие искажений при
условии, что число ошибочных символов больше t, но не превосходит f.
Теорема 1.5.3. Код с минимальным расстоянием d исправляет любые
ошибки кратности t  t 0 и обнаруживает любые ошибки кратности f > t 0 при
условии, что t 0 +f  d-1.
Доказательство: Рассмотрим декодирование с помощью шаров Хем минга радиуса t 0 . Поскольку 2t 0  t 0 +f  d-1, то шары радиуса t 0 не имеют общих
точек, как это было доказано выше, и следовательно, могут быть
использованы в качестве решающих областей. Пусть y – слово на выходе
канала. Оно декодируется в c i , если d (c i , y )  t0 . При этом ошибки кратности
t  t 0 исправляются. В случае ошибок кратности f имеем: t 0 < f  d-1- t 0 . Снова
применяя неравенство треугольника, получим d  d (c i , c j )  d (c i , y )  d (c j , y ) =f +
d (c j , y ) . Таким образом, для любого слова c j выполняется неравенство d(y, c j )
 d- f >t 0 . Следовательно, ни при какой ошибке кратности f полученное слово
у не попадает ни в одну из решающих областей и по этой причине ошибки
кратности f , t 0 < f  d-1- t 0 , oбнаруживаются.
Теорема 1.5.4. Код с минимальным расстоянием d исправляет любые
ошибки кратности t и любые стирания кратности s, если 2t+s  d-1.
20
Доказательство: Предположим, что в принятом слове y имеется s  d-1
стертых символов. Рассмотрим код С, который отличается от исходного кода
С, имеющего длину n и минимальное расстояние d, тем, что слова кода С
получаются из слов исходного кода укорочением за счет исключения позиций,
на которых y содержит стирания. Длина n  и минимальное расстояние d 
укороченного кода удовлетворяют условиям n  =n-s, d   d-s. Очевидно, что
найдется такое расположение позиций стираний, при котором d  =d-s. При
декодировании этого кода посредством шаров Хемминга с радиусом
 d  s  1
t0  
 все ошибки кратности t  t 0 в укороченном слове y и, тем самым,
2

в исходном слове y будут исправлены. После исправления ошибок мы получим
скорректированное выходное слово y длины n, в котором останутся s  d-1
стертых символов. Имеется единственное слово в коде С, которое совпадает с
y в нестертых позициях. Действительно, если бы существовало два
различных слова с таким свойством, скажем c i , c j , то d (c i , c j )  s  d , что
невозможно. Поэтому s стираний исправляются при декодировании y в
кодовое слово из С, совпадающее с ним на нестертых позициях.
Следствие. Код с минимальным расстоянием d исправляет любые
стирания кратности s  d-1.
Последняя теорема показывает,что способность кода исправлять ошибки
зависит от числа стертых символов, а способность кода исправлять стирания
зависит от числа ошибочных символов. Если в принятом слове нет стираний,
то можно исправить вплоть до [(d-1)/2] ошибок. Если в принятом слове нет
ошибок, то можно исправить вплоть до d-1 стираний.
§1.6. Границы для минимального расстояния
Число M кодовых слов, которые можно построить при заданных q и n,
зависит от величины минимального расстояния d. Чем больше минимальное
расстояние (чем большую обнаруживающую и корректирую щую способность
мы хотим иметь) и тем меньше кодовых слов можно построить. Код называтся
оптимальным, если при заданных q, n, и d он содержит максимально
возможное число слов. Желательно иметь границы для максимально
возможного значения M. Такие границы будут получены в настоящем разделе.
1.6.1. Граница Хемминга (граница плотной упаковки)
Теорема 1.6.1. Для любого q-ичного кода длины n с минимальным
расстоянием d=2t+1 число кодовых слов M удовлетворяет условию:
M 
qn
.
t
n
 ( q  1) i

i 0  i 
(1.6.1)
21
Доказательство: Пусть С -код над алфавитом Х, | X | q , с минимальным
расстоянием 2t+1 и M словами. В множестве X n всех q-ичных последовательностей, содержащем q n элементов, построим M шаров радиуса t с центрами в
кодовых словах. Такие шары не имеют общих точек. Действительно, если бы
шары пересекались, то из неравенства треугольника следовало бы, что
минимальное расстояние было бы меньше, чем 2 t+1. Неравенство (1.6.1)
вытекает из того, что суммарный объем всех шаров, равный M  | Bt (c) | , где
t
n
  i (q  1)
- объем шара Хемминга с радиусом t, в силу отсутствия
 
пересечений не превышает числа всех последовательностей, т.е. M  | Bt (c) |  q n .
|B t (c)|=
i
i 0
Полученная оценка называется границей Хемминга (границей плотной
упаковки). Она показывает, что максимальный объем кода не превышает
правой части соотношения (1.6.1). Если число слов некоторого кода равно
правой части этого неравенства, то этот код является оптимальным в том
смысле, что при данных q, n и t он имеет максимально возможный объем.
Такой код также называют плотно упакованным, поскольку его решающие
области в виде шаров Хемминга радиуса t заполняют пространство всех
последовательностей максимально плотно.
1.6.2. Асимптотическая форма границы плотной упаковки
Асимптотическая граница плотной упаковки (асимптотическая форма
границы Хэмминга) является следствием теоремы 1.6.1 и теоремы об
асимптотике объема шара Хемминга, доказанной в разделе 1.4.2. Напомним,
что скоростью кода называется величина R  log 2 M / n . Мы будем называть
величину δ= d / n относительным кодовым расстоянием. Как будет показано ниже, при
фиксированном относительном расстоянии δ и при достаточно большом n максимально
возможная скорость кода определяется только значением δ.
Теорема 1.6.2. Пусть d=δn, δ>0 и n достаточно велико. Скорость любого
q-ичного кода с минимальным расстоянием d удовлетворяет условию:
  
R  log 2 q  h   log 2 ( q  1) ,
(1.6.2)
2 2
где hx    x log 2 x  (1  x) log 2 (1  x) .
Доказательство: Согласно теореме 1.4.1, при достаточно большом n
объем шара Хемминга с радиусом t  n / 2 имеет следующую асимптотическую
оценку:
   

| Bt ( x ) | exp2 n h   log2 ( q  1)  .
 2 2

n
Воспользуемся тождеством q  exp 2 n{log 2 q} , и подставим эту оценку в неравенство (1.6.1). В результате получим, что для любого кода с минимальным
расстоянием d=δn при достаточно большом n имеет место неравенство (1.6.2).
22
В случае двоичных кодов, q=2, неравенство (1.6.2) упрощается и
принимает следующий вид:
R  1- h(δ/2).
(1.6.3)
1
0.9
0.8
0.7
Rate
0.6
0.5
0.4
0.3
RH
0.2
0.1
0
0
RBE
RVG
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
delta
Рис.1.6.1 Асимптотические границы для скорости кодирования
Верхняя граница скорости кодирования в зависимости от относительного
расстояния δ (правая часть неравенства (1.6.3)) приведена на рис.1.6.1 в виде
кривой R H (δ). Каждая точка выше этого графика соответствует недостижимому
значению скорости при данном значении относительного расстояния δ. Кодов
с парой параметров (R H (δ)+  ,δ) при достаточно большом n и  >0 не
существует.
1.6.3. Граница Варшамова-Гилберта
Граница Хемминга имеет негативный характер и справедлива для всех
кодов. Она устанавливает пределы возможного, указывая на то, что не
существует слишком хороших кодов, т.е. таких, в которых и минимальное
расстояние, и число кодовых слов были бы слишком большими. Теперь мы
рассмотрим границу для числа кодовых слов, имеющую позитивный х арактер,
а именно такую, которая гарантирует существование кодов с некоторыми
достаточно большими значениями минимального расстояния и числа кодовых
слов.
Теорема 1.6.3. Cуществует q-ичный код длины n с минимальным расстоянием d, число слов которого удовлетворяет условию:
qn
M  d 1
(1.6.4)
i
i
 Cn (q  1)
i 0
Доказательство: Доказательство этой теоремы будет носить конструк тивный характер и основываться на некотором методе построения кода. Пусть
X n – множество всех q-ичных последовательностей н ад алфавитом X, | X | q .
Выберем первое кодовое слово c 1 из X n произвольным образом и построим
шар B d-1 (c 1 ) с центром в этом слове и радиусом d-1. Если вне этого шара
имеется еще хотя бы одно слово, то произвольным образом выбираем второе
слово c 2 из множества X n \B d -1 (c 1 ), т.е. из множества последовательностей из X n
23
за исключением тех, которые уже принадлежат шару B d -1 (c 1 ). Построим шар
B d -1 (c 2 ) и исключим из рассмотрения все точки, которые лежат в объединении
2
построенных
шаров.
Если
множест во
X \  B d-1 (c i )
n
не
пусто,
выберем
i 1
произвольным образом очередное слово из этого множества. Продолжим такой
выбор, сужая на каждом шаге область выбора. Обозначим через M номер шага,
M
на котором область выбора X n \  B d -1 (c i ) впервые оказалась пустой. К этому
i 1
моменту уже выбраны M слов c 1 , c 2 ,..., c M . Согласно правилу выбора каждое
слово оказывается на расстоянии не меньшем, чем d, от всех других уже
выбранных слов. Слова c 1 , c 2 ,..., c M образуют q-ичный код длины n с
минимальным расстоянием d, состоящий из М слов. Поскольку шары B d -1 (c i ),
i=1,2,…,M, покрывают множество X n , т.е. каждое слово из X n входит хотя бы в
один шар, то число слов в объединении всех шаров не меньше общего числа
последовательностей в X n , т.е.
qn 
M
B
d 1
(c )  M  | Bd 1 (c) | .
(1.6.5)
i 1
Последнее неравенство следует из тго, что объем объединения множеств не
превосходит суммы объемов объединяемых множеств. Утверждение теоремы
теперь вытекает из неравенства (1.6.5).
1.6.4.Асимтотическая форма границы Варшамова -Гилберта
Асимптотическая форма границы Варшамова -Гилберта следует из
теоремы 1.6.3 и теоремы об асимптотике объема шара Хемминга, доказанной в
разделе 1.4.2.
Теорема 1.6.4. Пусть d-минимальное кодовое расстояние, d= δn, где
0  δ  1/2 , и n достаточно велико. Существует q-ичный код с минимальным
расстоянием d, скорость которого удовлетворяет условию:
R  log 2 q  h( )   log 2 (q  1) .
(1.6.6)
Утверждение вытекает из определения скорости кода, из неравенства
(1.6.4) и асимптотической формулы для объема шара Хемминга с радиусом δ .
В случае двоичных кодов, q=2, неравенство (1.6.6) упрощается и приобретает
следующий вид
R  1  h( ) .
(1.6.7)
Отметим, что в теореме утверждается существование кодов, которые при данном δ
будут иметь скорость не меньшую, чем граница в правой части неравенства
(1.6.6). Однако, не устанавливается на сколько скорость будет превышать эту
границу и, вообще, будет ли такое превышение иметь место. С другой
стороны, если существует некоторый код со скоростью R , то легко строится
24
код со скоростью R<R той же длины и с тем же минимальным расстоянием с
помощью выбрасывания некоторого числа кодовых слов.
Это замечание показывает, что теорему 1.6.4 нужно интерпретировать
следующим образом. Для любой пары ( R( ),  ) , для которой 0  δ  1/2 и
R( )  log2 q  h( )   log2 (q  1) , можно построить код со скоростью R( ) и относительным минимальным расстоянием  . Множество таких достижимых пар параметров
для q=2 показано на рис.1.6.1 как множество точек под и на кривой RVG ( ) .
Оказывается, что из двух приведенных границ первая, т.е. верхняя граница
Хемминга, является асимптотически неточной. Она допускает существенное улучшение.
Построение точной верхней границы для скорости кода является весьма трудной задачей.
На рис.1.6.1 также показана одна их известных верхних границ – граница БассалыгоЭлайеса (см. кривую RBE ( ) ). Улучшение нижней границы (границы ВаршамоваГилберта) не известно для относительно малых значений q.
1.6.5. Вывод границы Бассалыго-Элайеса для двоичных кодов
В этом разделе мы покажем вывод верхней границы для скорости кодов, которая
существенно улучшает границу плотной упаковки, так как показывает, что не существует
кодов со значительно более широким набором параметров, чем это следует из границы
Хемминга. Эта граница получается с привлечением более тонких рассуждений. Для
упрощения изложения мы рассмотрим только двоичный случай.
В пространстве двоичных последовательностей каждый шар Хемминга
t
n
Bt ( x j ) с центром в x j  X n и радиусом t содержит | Bt ( x j ) |=    слов. Рассмотi 0  i 
рим некоторый двоичный код С объема M  2 nR и обозначим через M j число
его слов, лежащих в шаре Bt ( x j ) . Ясно, что каждое из M слов кода C попадет
в | Bt ( x j ) | таких шаров. Поэтому
M
j
 M  | Bt (x j ) | и среднее число кодовых
x j X n
слов, попадающих в шар радиуса t, равно
1
M t n
1
Tcp  n  M j  n      (1 R ) n
2 x jX n
2 i 0  i  2
t
n
  i  .
(1.6.8)
 
Найдется шар Bt (x ) с центром в некоторой точке x  X n , который содержит
T  Tcp кодовых слов a1 , a2 , ... , aT . Теперь оценим среднее расстояние d cp между этими T
i 0
словами. Для этого выпишем разности c1  a1  x, c 2  a2  x, ..., cT  aT  x в виде
таблицы с T строками и n столбцами
 c11 c12 ... c1n 
c
c22 ... c2 n 
 21
.
.
.
. 
 .


cT 1 cT 2 ... cTn 
Обозначим через vk вес k-го столбца этой таблицы. Поскольку c1 , c 2 , ... , cT лежат в шаре
радиуса t с центром в нулевом слове, то
25
n
v
k 1
k
 t T .
(1.6.9)
Сумма всех попарных расстояний между словами a1 , a2 , ... , aT равна сумме попарных
расстояний между символами столбцов таблицы, причем вклад k-го столбца равен
vk  (T  vk ) , так как каждый из vk ненулевых символов столбца должен сочетаться с
каждым из T  vk нулевых. Поскольку общее число пар кодовых слов равно
 T  T (T  1)
, то среднее расстояние между словами равно
  
2
2
n
d cp 
2 vk  (T  vk )
k 1
.
(1.6.10)
T  (T  1)
Минимальное кодовое расстояние не может превысить среднее расстояние,
следовательно, оценивая d cp , мы фактически находим верхнюю оценку минимального
расстояния кода С: d  d cp .
Теперь мы найдем верхнюю границу для d cp , выполняя условную максимизацию
правой части (1.6.10) по всем значениям vk , подчиняющимся условию (1.6.9). Поскольку
замена ограничения в виде неравенства на ограничение в виде равенства
n
v
k 1
k
 t  T не
уменьшает правой части (1.6.10), то можно решить задачу максимизации методом
неопределенных множителей Лагранжа. Задача решается составлением функционала
n
2 vk  (T  vk )
 n

     vk  t  T  ,
T  (T  1)
 k 1

где  - неопределенный множитель Лагранжа, и отысканием его безусловного максимума
по переменным v1 , v2 ,..., vn ,  . Для этого частные производные (v1 , v2 ,..., vn ,  ) по
каждой из переменных приравниваются к нулю. В результате решения этой задачи
получим, что vk  t  T / n для всех k и
 ( v1 , v2 ,..., vn ,  ) 
k 1
t T

d  d cp  2t  1   
.
n  T 1

Поскольку T – наименьшее целое, для которого T 
(1.6.11)
1
(1 R ) n
t
n
  i  ,
2
i 0  
больших значений n это условие можно записать следующим образом
T  2 nh ( )1 R ,
то для
(1.6.12)
где   t / n . Поэтому верен следующий вывод. Если для данной скорости кода R и сколь
t
угодно малого положительного  выбрать радиус t из условия 1  h   R   , то
n
n
T  2 и с ростом n число T будет экспоненциально расти. Следовательно, отношение
T/(T-1) будет сколь угодно близким к единице. При этом относительное кодовое
расстояние  =d/n будет удовлетворять неравенству
26
t 
t
(1.6.13)
n 
n
Окончательно, верна следующая теорема, в которой скорость кода оценивается
при данном расстоянии.
Теорема 1.9.1 (Граница Бассалыго-Элайеса для двоичных кодов). Для всякого
достаточно длинного двоичного кода с минимальным расстоянием d  n скорость кода
R удовлетворяет неравенству
 1  1  2 
 .
(1.6.14)
R  1  h
2


Доказательство: При заданном 0    1 / 2 величина   t / n , которая доставляет
равенство в (1.6.13) является решением квадратного уравнения  2     / 2  0 . Это
решение приведено в виде аргумента функции h () в правой части (1.6.14).
  2  1   .
Действительное значение  согласно (1.6.13) будет не меньше, чем (1  1  2 ) / 2 , и
скорость не больше, чем в неравенстве (1.6.14).
27
Гл.2 Линейные коды
Линейные q-ичные коды характеризуются тем, что множество кодовых
слов образует линейное пространство над конечным полем с q элементами.
Хотя требование линейности сильно ограничивает выбор кодовых слов, тем
не менее, среди линейных кодов имеются хорошие коды, например,
лежащие на границе Варшамова – Гилберта. В силу линейности для
запоминания или перечисления всех кодовых слов достаточно хранить в
памяти кодера или декодера существенно меньшую их часть, а именно
только те слова, которые образуют базис соответствующего линейного
пространства.
Это
существенно
упрощает
реализацию
устройств
кодирования и декодирования и делает линейные коды весьма
привлекательными с точки зрения практических приложений.
§2.2. Линейные коды
2.2.1. Определение и свойства линейных кодов
Определение 1. Линейным q-ичным кодом длины n с k информационными
символами, или (n,k) -кодом над полем GF(q), называется k-мерное подпространство
линейного n-мерного пространства всех векторов над полем GF(q).
Таким образом, линейный код это любое подпространство в пространстве Хn , где
кодовый алфавит Х –это конечное поле GF(q). Все, что было сказано о линейных
пространствах, переносится на линейные коды. Как и любое пространство, линейный
(n,k) -код задается базисными векторами g1  ( g11 ,..., g1n ) , g 2  ( g 21 ,...,g 2 n ) ,...,
g k  ( g k 1 ,..., g kn ) , g ij  GF (q), или порождающей матрицей
 g11
g
G=  21
 .

 g k1
g12
g 22
.
gk 2
. g1n 
. g 2n 
,
. . 

. g kn 
причем каждое кодовое слово c  (c1 ,..., cn ) является линейной комбинацией
базисных векторов:
c  m1g1  ...  mk g k  mG , где m  (m1 ,..., mk ), m1 ,..., mk  GF ( q).
(2.2.1)
Это соотношение представляет собой правило кодирования, или
правило, по которому информационное слово m= (m1 ,..., mk ) отображается в
кодовое слово c  (c1 ,..., cn ) . Если порождающая матрица имеет каноническую
форму, то кодирование называется систематическим. Для матрицы G в
левой канонической форме имеем
c  mG  v  m[I k | G 2 ]  (m, mG 2 ) ,
28
т.е. кодовое слово содержит информационное слово m= (m1 ,..., mk )
подслово. В этом случае первые k символов вектора с
информацион-ными, а остальные r=n-k являются проверочными.
правой канонической формы порождающей матрицы m= (m1 ,..., mk )
правым подсловом с. В этом случае последние k символов вектора
информационными, а первые r=n-k являются проверочными.
как левое
являются
В случае
является
с являются
Пример 2.2.1. Рассмотрим двоичный линейный (6,3)-код с порождающей
матрицей
1 0 0 1 1 1
G  0 1 0 1 0 1 .


0 0 1 0 1 1
Имеется 23=8 кодовых слов. Кодирование задается соотношением (2.2.1). Например,
информационное слово m=(1 0 1) отображается в кодовое слово c=(1 0 1 1 0 0) – это
сумма первого и третьего базисных векторов. Заметим, что G имеет левую
каноническую форму и m является левым подсловом с. На первых 3-х позициях
вектора с расположены 3 информационных символа.
Пусть H – проверочная матица линейного (n, k)-кода
 h11 h12 . h1n 
h
h22 . h2 n 
21

 , r=n-k.
H
. . . 
 .


 hr1 hr 2 . hrn 
По определению проверочной матрицы для любого кодового слова c  (c1 ,..., cn )
имеют место равенства
n
c h
j 1
j ij
 0, i  1,..., r,
или, в матричной записи,
c  HT  0 .
(2.2.2)
Пример 2.2.1. Для двоичного кода из примера 2.2.1 проверочная матрица в
канонической форме имеет следующий вид
1 1 0 1 0 0
H  1 0 1 0 1 0 .


1 1 1 0 0 1
В соответствии с (2.2.2) для каждого слова выполняются следующие 3 соотношения
c1  c2  c4  0


,
c1  c3  c5  0


c1  c2  c3  c5  0

которые можно использовать как при кодировании, так и при декодировании.
Рассмотрим теперь свойства линейных кодов и основное свойство проверочной
матрицы, лежащее в основе построения кодов с заданным минимальным расстоянием.
29
Напомним, что весом вектора с называется количество w(c) его ненулевых компонент.
Вес вектора по определению равен расстоянию Хемминга между ним и нулевым
вектором. Например, w(1 0 2 0 1 1)=4. Всякий линейный код обладает следующим
свойством.
Теорема 2.2.1. Минимальное расстояние d линейного кода С
минимальному из весов ненулевых кодовых слов:
d  min w(c) .
cC,c 0
равно
(2.2.3)
Доказательство: Утверждение теоремы вытекает из того, что для любых двух
векторов x и y имеет место равенство d (x, y)  min w(x  y) и того, что разность
x ,yC,x  y
любых двух слов линейного кода также является кодовым словом. Следовательно,
min w(x  y )  min w(c) .
x ,yC,x  y
cC,c 0
Таким образом, линейность кода является удобным свойством,
позволяющим контролировать минимальное расстояние, рассматривая
только веса кодовых слов, а не их всевозможные попарные расстояния. В
следующей теореме это свойство используется для того, чтобы
сформулировать
требования
к
проверочной
матрице
кода,
обеспечивающие заданное минимальное расстояние.
Теорема 2.2.2. Если любые l  d  1 столбцов проверочной матрицы H
линейного (n,k)-кода линейно независимы, то минимальное расстояние кода будет по
меньшей мере d. Если при этом найдутся d линейно зависимых столбцов, то
минимальное расстояние кода равно d.
Доказательство: Будем доказывать теорему от противного. Обозначим через Si iй столбец матрицы H . Пусть условие теоремы выполнено, т.е. любые l  d  1
столбцов линейно независимы, но минимальное расстояние меньше, чем d.
Предположим, что оно равно s < d. Из теоремы 2.2.1 тогда следует, что найдется
c  (0,...,0, ci1 ,0,..., ci 2 ,0,..., cis ,0,...,0) . Пусть
кодовое слово, вес которого равен s:
ненулевые символы ci1 , ci 2 ,..., cis этого слова расположены на позициях i1 , i2 ,..., is . Так
как с – кодовое слово, то сHT =0, и, следовательно, ci1Si1  ci 2Si 2  ...  cisSis  0 . Это
противоречит допущению о линейной независимости любых l  d  1 столбцов.
Поэтому минимальное расстояние больше или равно d. Если при этом найдутся d
линейно
зависимых
столбцов,
линейная
комбинация
которых
ci1Si1  ci 2Si 2  ...  cid Sid  0 при ненулевых коэффициентах ci1 , ci 2 ,..., cid то вектор
c  (0,...,0, ci1 ,0,..., ci 2 ,0,..., cid ,0,...,0) , вес которого равен d, а ненулевые символы
расположены на позициях i1 , i2 ,..., id , будет кодовым словом, т.к. сHT = сi1Si1 + сi2Si2
+….+ сidSid = 0. Вес этого слова равен d. По теореме 2.2.1 минимальное расстояние кода
равно d.
30
Аналогичным образом доказывается следующая обратная теорема.
Теорема 2.2.3. Если минимальное расстояние линейного (n,k)-кода равно d, то
любые l  d  1 столбцов проверочной матрицы H линейно независимы и найдутся d
линейно зависимых стобцов.
Мы закончим этот параграф доказательством того, что в классе линейных кодов
существуют коды, лежащие на границе Варшамова-Гилберта.
Теорема 2.2.4. Существует линейный (n,k)-код над полем GF(q) с минимальным
расстоянием d, число кодовых слов M которого удовлетворяет неравенству
M  qk 
qn
.
d 2 n
 
i
 ( q  1)

i 0  i 
(2.2.4)
Доказательство: Докажем, что существует r  n, r  n  k , матрица H, любые
l  d  1 столбцов которой линейно независимы при условии, что k удовлетворяет
условию (2.2.4). Эта матрица является проверочной для кода, существование которого
утверждается в теореме. Рассмотрим следующий способ построения матрицы H. В
качестве первого столбца этой матрицы выберем произвольный ненулевой вектор из
Хr, где X=GF(q) и r  n  k . Затем выберем второй столбец так, чтобы он не получался
из первого умножением на скаляр. Третий столбец выберем так, чтобы он не являлся
линейной комбинацией первых двух. Вообще, в качестве i-го столбца возьмем вектор
из Хr , не являющийся линейной комбинацией никаких d-2 столбцов из числа
выбранных ранее. При таком способе выбора можно быть уверенным в том, что
никакая комбинация из d-1 или менее выбранных столбцов не обращается в 0.
Очередной столбец может быть присоединен к матрице, если совокупность всех
линейных комбинаций из d-2 или меньшего числа столбцов не исчерпывает все
множество Хr . Предположим, что для некоторого j выполняется неравенство
 j  1
 j  1
 j 1
1  
( q  1)  
( q  1) 2  ...  
( q  1) d 2  q r .
1
2
d

2






(2.2.5)
Левая часть этого неравенства равна общему числу линейных комбинаций из j-1 по s
столбцов, где s принимает значения 0, 1,…, d-2. Если (2.2.5) выполнено, то общее
количество таких линейных комбинаций, даже считая, что они все различны, не
превосходит общего числа векторов в Хr . В этом случае к проверочной матрице с j-1
столбцами можно присоединить еще один столбец и получить код с длиной j,
минимальным расстоянием d и r проверочными символами. Пусть теперь n –
наибольшее значение j, для которого удовлетворяется неравенство (2.2.5). Тогда можно
построить проверочную матрицу с n столбцами, любые d-1 из которых являются
линейно независимыми. Таким образом, существует линейный (n,k) - код над полем
GF(q), k = n-r, с минимальным расстоянием не меньшим, чем d, для которого
n
n
 n 
qn
1   ( q  1)   ( q  1) 2  ...  
( q  1) d 2  q r 
,
M
1
 2
 d  2
31
что эквивалентно утверждению теоремы.
Неравенство (2.2.4) называется границей Варшамова. Оно является более сильным,
чем неравенство (1.6.4) при некоторых значениях n и d. Например, при q=2, n=31 и d=5
граница Варшамова-Гилберта (1.6.4) дает k  13.4 , а граница Варшамова k  18 .
Заметим, что можно построить (это будет сделано в следующей главе) линейный (и даже
линейный циклический) код с k=21. Нетрудно увидеть, что асимптотически при
достаточно большом n обе эти границы совпадают.
2.2.2 Построение линейных кодов с заданным минимальным расстоянием
Свойства проверочной матрицы, сформулированные в теоремах 2.2.1 – 2.2.3,
могут быть положены в основу построения проверочных матриц для линейных (n,k)кодов с заданным минимальным расстоянием. Заметим, что, если при заданных n и d
можно построить две проверочные матрицы с различным количеством строк, то
следует отдать предпочтение матрице с меньшим числом строк, т.к. при этом число
информационных символов (и скорость кодирования, R=k/n) будут больше.
2.2.2.1 Линейные коды с минимальным расстоянием d = 2
Для d = 2 требование, вытекающее из теоремы 2.2.1, состоит в том, что все
столбцы проверочной матрицы должны быть ненулевыми. Предпочтительным
выбором является выбор матрицы с одной ненулевой строкой, например,
H  [1 1 ... 1] .
(2.2.6)
В этом случае символы кодового слова удовлетворяют одному проверочному
уравнению
c  H T  c1  c2  ...  cn  0 .
Отсюда следует, что в двоичном случае количество единиц в каждом слове должно
быть четным. Такие коды называются кодами с проверкой на четность. Длина кода n –
произвольное целое, размерность (или число информационных символов) k = n-1.
Кодирование заключается в формировании единственного проверочного символа по
формуле
cn  (c1  c2  ...  cn1 ) .
2.2.2.2 Линейные коды с минимальным расстоянием d = 3
По теореме 2.2.1. при d=3 любая два столбца проверочной матрицы H должны
быть линейно независимыми, т.е. с1Si + c2Sj ≠ 0 при одновременно не равных нулю
коэффициентах с1,c2. Отсюда вытекает, что в H не должно быть нулевых столбцов и
что никакой столбец не должен быть скалярным кратным другого, т.е.
S i  c  S j , i, j  1,2,..., n, i  j .
(2.2.7)
32
В двоичном случае (2.2.7) сводится к требованию того, чтобы в H не было одинаковых
столбцов. Для линейного кода с r проверочными символами это условие можно выполнить только, когда длина кода удовлетворяет условию n  2 r  1 . Для этого достаточно
выбрать матрицу H так, чтобы ее столбцами были различные ненулевые r-разрядные
двоичные наборы.
Двоичные коды с n  2 r  1 и d = 3 были впервые описаны Р. Хеммингом в 1950 г.
Они называются примитивными двоичными кодами Хемминга. Проверочная матрица
этих кодов состоит из всех различных ненулевых столбцов длины r. При этом число
информационных символов равно n – r. В Табл. 2.2.1 приведены параметры некоторых
двоичных примитивных кодов Хемминга.
Табл.2.2.1
Пример 2.2.2. Для двоичного (7,4)-кода число проверочных символов равно
r  n  k  3 . Поэтому проверочную матрицу этого кода можно получить, выписывая в
произвольном порядке все 2 r  1  7 ненулевых столбцов из Х3:
1 0 1 0 1 0 1
H  0 1 1 0 0 1 1 .


0 0 0 1 1 1 1
(2.2.8)
Для того, чтобы построить двоичный линейный код с минимальным расстоянием
d= 3 и длиной n, отличной от 2 r  1 , следует выбрать r из условия
2 r 1  n  2 r  1
и построить проверочную матрицу для исходного примитивного кода длины 2 r  1 .
Затем нужно вычеркнуть из проверочной матрицы необходимое число столбцов для
получения нужной длины. Такое построение называется укорочением исходного кода.
Например, проверочная матрица для (6,3)-кода может быть получена из (2.2.8)
вычеркиванием последнего столбца:
1 0 1 0 1 0
H  0 1 1 0 0 1 .


0 0 0 1 1 1
Для q-ичных кодов Хемминга с расстоянием 3 условие (2.2.7) выполняется, когда
из всех столбцов множества Хr оставляются только те ненулевые столбцы, которые не
получаются друг из друга умножением на скаляр. Поскольку имеется q-1 ненулевых
скаляров и q r  1 ненулевых векторов, то применяя это правило выбора, мы получим
qr  1
таких столбцов. Следовательно, примитивные q-ичные коды Хемминга с d = 3
q 1
qr  1
будут иметь длину n 
и размерность k=n-r.
q 1
Пример проверочной матрицы для троичного кода Хемминга с двумя проверочными символами приведен ниже:
33
1 0 1 1
H
.
0 1 1 2
Примечательным свойством примитивных кодов Хемминга является не только
простота их построения, но и то, что такие коды дают редкие примеры плотно
упакованных кодов. Напомним, что плотно упакованными кодами называются такие,
для которых достигается равенство в границе Хемминга (в границе плотной упаковки,
см. теорему 1.6.1)
Теорема 2.2.5. Примитивные коды Хемминга являются плотно упакованными.
Доказательство: Из границы плотной упаковки следует, что в любом коде с
qn
минимальным расстоянием d = 3 число слов удовлетворяет неравенству M 
,
| B1 (x ) |
n
где | B1 (x ) | 1   ( q  1)  1  n( q  1) . Поскольку длина примитивного кода равна
1
qr  1
, то | B1 (x) | = q r и поэтому граница плотной упаковки имеет следующий вид:
q 1
M  q n r . С другой стороны, число слов в коде Хемминга равно q k , где k  n  r . Это
доказывает, что в границе плотной упаковки достигается равенство и, следовательно,
примитивные коды Хемминга – плотно упакованные.
n
2.2.2.3 Двоичные линейные коды с минимальным расстоянием d = 4
В проверочной матрице кода с d = 4 любые l  3 столбцов должны быть линейно
независимыми. Отсюда следует, что при q=2 в матрице Н не должно быть нулевых и
одинаковых столбцов и, кроме того, любые два столбца в сумме не должны давать
третий. Приведенная ниже структура матрицы удовлетворяет этим условиям.
Обозначим через H3 проверочную матрицу кода с минимальным расстоянием d =
3, а через H4 проверочную матрицу для кода с d = 4. Легко доказать, что матрица,
образованная следующим образом:

 H
3
H4  


1 1 
0


0

1
r +1
(2.2.9)
n= 2 r
удовлетворяет требованиям к проверочной матрицей двоичного кода с длиной n= 2 r и
минимальным расстоянием 4. Такие коды называются расширенными кодами
Хемминга.
34
Для доказательства заметим, что в матрице H 4 нет нулевых столбцов и все столбцы
разные, поскольку в матрице H3 нет нулевых столбцов и все столбцы разные. Кроме
того, сумма по модулю два двух любых столбцов не равна никакому третьему столбцу,
т.к. в сумме столбцов в последнем разряде будет 0, тогда как все столбцы в последнем
разряде имеют 1. Если выбрать в качестве H3 проверочную матрицу двоичного
примитивного кода Хемминга, то длина расширенного кода и число проверочных
символов (ne и re) будут на единицу больше, т.е. ne= 2 r и re =r+1. Размерность (число
информационных символов) не изменится, ke= 2 r -r-1.
Параметры некоторых двоичных расширенных кодов Хемминга приведены в
следующей таблице.
Табл.2.2.2
Пример 2.2.3. Проверочная матрица двоичного (8,4)-кода с расстоянием 4
(расширенного кода Хемминга) получается из (2.2.8) приписыванием одного столбца и
одной строки:
1
0
H
0

1
0 1 0 1 0 1 0
1 1 0 0 1 1 0
.
0 0 1 1 1 1 0

1 1 1 1 1 1 1
2.2.3. Коды, двойственные кодам Хемминга
Проверочная матрица некоторого (n,k)-кода может рассматриваться как
порождаю-щая матрица некоторого другого (n,n-k)-кода, слова которого ортогональны
всем словам исходного кода. Такие два кода называются двойственными или
Число
проверочных
символов r
Длина
кода
n  2r  1
Число
информационных
символов k=n-r
Минимальное
расстояние d
Число
слов в
коде
2
3
1
3
2
3
7
4
3
16
4
15
11
3
211
5
31
26
3
226
дуальными.
В этом разделе мы рассмотрим двоичные коды, двойственные
примитивным кодам Хемминга. Оказывается, что в некотором смысле хорошими могут
быть не только коды Хемминга, но и двойственные к ним.
Теорема 2.2.6. Пусть Н –проверочная матрица двоичного (2 r  1, 2 r  r  1) кода Хемминга с минимальным расстоянием 3. Минимальное расстояние двоичного
35
линейного (2 r  1, r ) -кода с порождающей матрицей Н равно 2 r 1 . Более того, этот код
– равновесный, т.е. все ненулевые кодовые слова имеют вес 2 r 1 .
Доказательство: Вначале заметим, что все строки матрицы Н имеют вес 2 r 1 .
Действительно, столбцы матрицы Н - это все двоичные ненулевые векторы длины r.
Количество таких векторов, которые имеют единицу в некотором разряде, равно числу
двоичных комбинаций длины r-1, т.е. равно 2 r 1 . Следовательно, в каждой строке
матрицы Н единица встречается 2 r 1 раз. Другими словами, каждая строка матрицы Н
имеет вес 2 r 1 . Для того, чтобы доказать, что любая ненулевая линейная комбинация
строк матрицы Н имеет такой же вес, мы заметим, что матрица FH, где F –любая
невырожденная матрица размера r  r , также имеет в качестве столбцов все ненулевые
векторы длины r. Это легко доказывается от противного: если бы в FH были нулевые
или одинаковые столбцы, то FSi =0 для некоторого ненулевого вектора S i  X r , что
противоречило бы предположению о невырожденности F. Следовательно, любая
строка матрицы FH также имеет вес 2 r 1 . Теперь достаточно заметить, что строки
матрицы FH это линейные комбинации строк матрицы Н. Мы можем образовать
любую ненулевую комбинацию строк, выбирая подходящую невырожденную матрицу
F.
Рассмотрим теперь код, двойственный к двоичному расширенному коду
Хемминга с минимальным расстоянием 4. Его порождающая матрица имеет вид
(2.2.9) и, следовательно, длина и размерность равны соответственно
n  2 r и k  2 r  r  1 . Из предыдущей теоремы и из вида порождающей матрицы
очевидным образом вытекает следующее утверждение.
Следствие 1. Код, двойственный к расширенному (2 r , 2 r  r  1) -коду Хемминга,
имеет минимальное расстояние 2 r 1 . Все ненулевые слова этого кода имеют вес 2 r 1 за
исключением одного слова, содержащего все единицы.
Код, указанный в следствии 1 имеет несколько названий, кроме того, что это код,
двойственный к расширенному коду Хемминга. Его иногда называют
биортогональным, потому, что любые два слова ортогональны. Кроме того, это один
из кодов Рида-Маллера (РМ-код первого порядка).
2.2.4. Итеративные коды (коды-произведения)
Самый простой способ построения новых кодов из уже имеющихся заключается
в применении процедуры итерации, которую мы продемонстрируем на примере
итерации двух кодов. Итеративные коды также называются кодами-произведениями.
Пусть С1, С2–пара линейных кодов, имеющих длины n1 , n2 , минимальные
расстоя-ния d1 , d2 и содержащие M 1  2 k1 , M 2  2 k2 кодовых слов соответственно.
Каждое слово кода-произведения по определению представляет собой таблицу
следующего вида (см. рис.2.2.1):
36
n1
k1
c1
k2
n2
c2
Рис.2.2.1 Слово кода-произведения
Таблица имеет n1 столбцов и n2 строк. Каждая строка является словом кода С1, каждый
столбец является словом кода С2 . Символы таблицы считываются в некотором
порядке подаются в виде линейного массива длины n1  n2 на вход канала связи.
Можно считать, что таблица формируется следующим образом. Имеются k1  k 2
информационных символов, которые записываются в левую верхнюю часть таблицы, в
которой длина строки равна k1 , а длина столбца равна k2 . Каждая из k2 строк
кодируется кодом С1. В результате формируются k2 кодовых слов длины n1 , которые
располагаются в первых k2 строках исходной таблицы. Затем каждый из n 2 столбцов
кодируется кодом С2. В результирующей таблице все n2 строк являются словами кода
С1. Для верхних k2 строк это так по построению, а для нижних n2 - k2 строк это так,
поскольку каждая строка является линейной комбинацией некоторых верхних строк.
При декодировании принятые символы располагают в виде аналогичной
таблицы. Символы декодируются с учетом того, что строки и столбцы суть кодовые
слова из С1 и С2. При этом часто используют итеративную (или многопроходную)
процедуру декодирования, при которой сначала декодируются символы строк, затем
декодируются символы столбцов, затем снова декодируются символы строк, затем
символы столбцов и т.д. выполняется некоторое заданное число зависимых проходов
декодирования.
Свойства кода-произведения сформулированы в следующей теореме. Если С
есть код-произведение, полученный из линейных кодов С1, С2 , где С1 – это (n1 , k1 , d1 ) код
и
С2–
это
то
мы
записываем
это
как
(n2 , k2 , d 2 ) -код,
C  C1 (n1 , k1 , d1 )  C2 (n2 , k2 , d 2 ) .
Теорема 2.2.7. Пусть C  C1 (n1 , k1 , d1 )  C2 (n2 , k 2 , d 2 )  ...  Cs (ns , k s , d s ) . Тогда С
является линейным ( N , K , d ) -кодом, где
 N  n1  n2  ...  ns ,

 K  k1  k 2  ...  k s ,
 d  d  d  ...  d .
1
2
s

(2.2.10)
37
Доказательство: Докажем теорему для s=2. Для других значений s доказательство проводится по индукции, отправляясь от s=2. Линейность кода-произведения
следует из того, что для любых двух кодовых слов их линейная комбинация Т =с1Т1
+с2Т2 также является словом кода-произведения, так как любая строка в Т –слово кода
С1 и любой столбец в Т –слово кода С2. Первые два соотношения в (2.2.10) не требуют
доказательства, они вытекают из построения. Для доказательства третьего
соотношения, воспользуемся тем, что для любого ненулевого слова Т найдется строка,
вес которой не меньше, чем d1 . Это означает, что найдутся не менее d1 ненулевых
столбцов, вес каждого из которых не меньше, чем d2. Поэтому любое ненулевое слово в
С имеет вес не меньший, чем d1  d 2 . Чтобы завершить доказательство и обосновать
равенство, заметим, что в линейном коде всегда существует слово минимального веса.
Для кода строк это слово веса d1, для кода столбцов это слово веса d2 . Обозначим через
i номер первой ненулевой позиции в слове веса d1 и через j номер первой ненулевой
позиции в слове веса d2 . Очевидно, что конфигурация ненулевых символов, показанная
на рис. 2.2.2 в виде жирных точек, образует кодовое слово веса d1  d 2 . Поэтому в силу
линейности минимальное расстояние кода-произведения равно d1  d 2 .
d1
i
j
d2
d2
Рис.2.2.2. Конфигурация минимального веса кода-произведения
§ 2.3 Синдромное декодирование линейных кодов
2.3.1. Алгоритм синдромного декодирования
В случае линейных кодов применимы методы декодирования, рассмот ренные ранее для кодов общего вида и основанные на отыскании решающей
области, которая содержит принятую последовательность. Вместе с тем,
учет алгебраических свойств линейных кодов позволяет найти алгоритмы
декодирования, допускающие более экономную реализацию. Все такие
алгоритмы основаны на понятии синдрома.
Пусть H проверочная матрица линейного (n,k)-кода С. Синдромом
слова у  X n , X=GF(q), называется вектор, определяемый соотношением
S(у)=уH T . S(с)=0 для любого кодового слова с  C . Поэтому ненулевой
синдром S(у) указывает на наличие ошибок в принятом слове у.
Предположим, что передавалось кодовое слово с, а на декодер из канала
связи поступает искаженное слово у=с+e, где e – вектор ошибок. Хотя
вектор у зависит как от переданного слова, так и от случившихся ошибок,
синдром S(у) зависит только от вектора ошибок:
38
T
T
T
S ( y )  yH T  (c  e)HT  cH
  eH  eH  S (e) .
0
Прежде чем приступать к описанию алгоритма декодирования приведем
достаточно важную теорему, которая лежит в его основе и устанавливает
связь между декодированием с помощью шаров Хемминга и синдромным
декодированием.
Теорема 2.3.1. Пусть d – минимальное расстояние линейного ( n,k)-кода
d 1
с проверочной матрицей H и t0 
. Если e 1 ,e 2  X n - два различных
2
вектора ошибок, таких, что w(e1 )  t0 , w(e 2 )  t0 , тогда S (e1 )  S (e 2 ) . Другими
словами, синдромы различных ошибок, вес которых не превышает
t0 ,
различны. Если вектор ошибки e 1 имеет вес t0  w(e1 )  d  t0 , то синдром
S (e1 )  0 и S (e1 )  S (e 2 ) ни для какого вектора e 2 при w(e 2 )  t0 . Другими
словами, синд-ром ошибки e 1 такой, что t0  w(e1 )  d  t0 , отличен от нуля и
не совпадает ни с одним из синдромов для ошибок, вес которых не
превышает t 0 .
Доказательство: Действительно, если предположить, что S (e1 )  S (e 2 ) ,
то из определения синдрома вытекает, что (e1  e 2 )HT  0 , т.е. вектор e1  e 2
является кодовым словом. С другой стороны, оценивая вес этого вектора по
неравенству треугольника, получим w(e1  e 2 )  d (e1 , e 2 )  w(e1 )  w(e 2 )  d  1 ,
что невозможно, так как e1  e 2 - кодовое слово и, следовательно, должно
быть w(e1  e 2 )  d . Поэтому наше предположение не верно и синдромы
дейст-вительно
различны.
Это
рассуждение
справедливо,
когда
w(e1 )  t0 , w(e 2 )  t0 и когда t0  w(e1 )  d  t0 , w(e 2 )  t0 .
Следующий алгоритм обнаружения и исправления ошибок называется
алгоритмом синдромного декодирования. Он позволяет исправлять все
d 1
ошибки кратности t  t0 
и обнаруживать все ошибки кратности f,
2
t0  f  d  t0 . Пусть H  [hi , j ], i  1,..., r, j  1,..., n , - проверочная матрица кода и
y  ( y1 ,..., yn ) - принятая последовательность.
1. На первом шаге по последовательности у, поступившей на вход
декодера,
вычисляется синдром S ( y)  ( 1 ,...,  r ) . Компоненты
синдрома  1 ,...,  r , r =
n-k, представляют собой величины поля
GF(q), которые можно записать и вычислить следующим образ ом:
 i  hi 1 y1  hi 2 y 2  ...  hi n y n , i  1,..., r.
39
2. На втором шаге по вычисленному синдрому S(у) отыскивается вектор
ошибок e, вес которого не превосходит t 0 и синдром совпадает с S(у).
Если действительное число ошибок при передаче, не превосходит t 0 , то
такой вектор найдется и по теореме 2.3.1, будет единственным. Если
число ошибок превосходит t 0 , но меньше, чем d  t0 , то S ( y )  0 и вектор
ошибок с весом, не превышающим t 0 и синдромом S(у), не существует.
По этому признаку ошибки кратности f, t0  f  d  t0 , будут обнаружены.
3. На третьем шаге для найденного
переданное кодовое слово с=у-e.
вектора
ошибки
определяется
Нужно заметить, что обнаружение ошибок п роисходит всегда, когда вектор
ошибок выводит переданное слово из своего шара радиуса t 0 , но не переводит его в другой шар того же радиуса. Это может случиться иногда даже
при числе ошибок большем или равном d-1.
Пример 2.3.1. Рассмотрим двоичный (7,4)-код Хемминга с проверочной
матрицей H (см. (2.2.8)):
1 0 1 0 1 0 1
H  0 1 1 0 0 1 1 .


0 0 0 1 1 1 1
Данный код, имеет минимальное расстояние 3 и способен исправлять все
однократные ошибки. В следующей таблице приведены все такие векторы
ошибок и их синдромы.
Векторы ошибок
e  (e1 , e2 , е3 , е4 , е5 , е6 , е7 )
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
Синдромы
( 123 ) eHT
000
100
010
110
001
101
011
111
Предположим, что передавалось кодовое слово с=(1 1 1 0 0 0 0) и на пятой
позиции произошла ошибка, т.е. на выходе канала появилась последователь ность у=(1 1 1 0 1 0 0). Имеем
40
1
0

1

T
S ( y )  yH  (1 1 1 0 1 0 0)  0
1

0
1
0
1
1
0
0
1
1
0
0

0

1  (1 0 1) .
1

1
1
Таким образом, синдром принятой последовательности у равен S(у) =(1 0 1).
Для того, чтобы найти вектор ошибок, имеющий этот синдром, найдем в
таблице строку, содержащую данный синдром, и соответствующий ему
вектор ошибок: е=(0 0 0 0 1 0 0). Если теперь вычесть из у найденный вектор
ошибок е (в двоичном случае сложить по модулю 2 у и е), то получим кодовое
слово, которое передавалось: у+e=(1 1 1 0 1 0 0).
Отметим, что синдромное декодирование для (7,4) -кода в шаре радиуса
1 приводит к неправильному декодированию при числе ошибок, больш ем
единицы. Например, если при передаче произошли ошибки в 1 и 5 позициях,
то будет принято слово у=(0 1 1 0 1 0 0), синдром этого слова S(у)=(0 0 1) и
вектор ошибок, найденный согласно синдромному алгоритму декодирования
e=(0 0 0 1 0 0 0). Результатом дек одирования будет у+e=(0 1 1 1 1 0 0). Эта
последовательность хотя и является кодовым словом, но не совпадает с тем
словом, которое в действительности передавалось.
Теперь мы покажем, что синдромное декодирование иногда
позволяет обнаруживать ошибки, которые не могут быть исправлены.
Пример 2.3.2. Рассмотрим расширенный двоичный (8,4) -код Хемминга
с расстоянием 4 и проверочной матрицей
1
0
H
0

1
0 1 0 1 0 1 0
1 1 0 0 1 1 0
.
0 0 1 1 1 1 0

1 1 1 1 1 1 1
Этот код позволяет исправлять однократные ошибки и обнаруживать двукратные.
Векторы исправляемых ошибок и их синдромы представлены в следующей
таблице
Табл.2.3.1
Вектор ошибок
e  (e1 , e2 , е3 , е4 , е5 , е6 , е7 , e8 )
00000000
10000000
01000000
Синдром
(  1 2 3 4 )
0000
1001
0101
41
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
1
0
1
0
1
0
1
0
0
1
1
0
0
1
1
1
1
0
1
1
1
1
1
1
Имеется 16 различных синдромов, но только 9 из них представлены в этой
таблице. Указанные синдромы могут появиться только при ошибк ах
кратности t  t0  1 . Все ошибки кратности 2 и также некоторые другие
ошибки приводят к остальным, не указанным в таблице, синдромам.
Например, если передавалось слово с=(1 1 1 0 0 0 0 1) и произошли 2
ошибки на позициях 1 и 5, т.е. получен о слово у=(0 1 1 0 1 0 0 1), то,
вычисляя синдром, получим S(у) =(0 0 1 0). Попытка найти вектор ошибки,
имеющий такой же синдром приводит к неуспеху, поскольку такого
синдрома в таблице нет. В этом случае декодер должен сигнализировать о
том, что имеет место ошибка, которую невозможно исправить.
2.3.2. Структурная схема синдромного декодера
Структурная схема синдромного декодера для линейного ( n,k)-кода
показана на рис.2.3.1.
Входное
y
Обнаружени е
слово
ошибок
Выходной буфер
Входной буфер
y1
c'1 c'2
yn
y2
c' Выходное
слово
+
+
c'n
Исправлени е
ошибок
+
e0
Вычислител ь синдрома
 1  2 ...  r
-e1 -e2
-en
П ЗУ
Рис.2.3.1 Структурная схема синдромного декодера
Принятое из канала связи слово y  ( y1 , y2 ,..., yn ) записывается во входной
буфер, откуда оно попадает в вычислитель синдрома. Синдром представляет
собой q-ичный r-разрядный вектор, который вычисляется по формуле:
S ( y )  y  HT  ( 1 ,  2 ,...,  r ), r  n  k , или
 i  hi 1b1  hi 2 b2  ...  hi n bn , i  1,..., r.
42
Синдром используется в качестве адреса при обращении к постоянному
запоминающему устройству (ПЗУ), хранящему исправляемые комбинации
ошибок. ПЗУ имеет r-разрядное адресное пространство и q r n+1-разрядных
q-ичных ячеек памяти. Множество {S(е): w(e)  t0 } есть множество адресов
исправляемых комбинаций ошибок.
В ячейке памяти с адресом S(е) в разряде 0 хранится 0, т.е. е 0 =0, в
остальных разрядах хранится вектор  e  ( e1 ,e2 ,...,en ) . В остальных
ячейках памяти, не соответствующих исправляемым комбинациям ошибок, в
разряде 0 хранится 1, т.е. е 0 =1. Содержимое остальных разрядов по этим
адресам произвольно. Если при передаче появилась исправляемая
комбинация ошибок, то синдром укажет на ячейку памяти, содержащую эту
комбинацию. Она считывается из ПЗУ и используется для исправления
ошибок с помощью сумматоров величин поля GF(q). На шине обнаружения
ошибок при этом устанавливается 0, который свидетельствует об
исправлении ошибок. При появлении неисправляемой, но обнаруж иваемой
комбинации ошибок вычисленный синдром будет адресом ячейки, для
которой е 0 =1. В этом случае на шине обнаружения установится 1, что
свидетельствует об обнаружении неисправимой комбинации ошибок и о том,
что выходное слово будет в общем случае неверн ым. Ошибка декодирования
случается тогда, когда е 0 =0, но с  c .
Табл.2.3.1 дает пример распределения памяти ПЗУ для синдромного
декодера двоичного (8,4)-кода с минимальным расстоянием 4. Для этого
примера ПЗУ содержит 2 4  16 9-разрядных ячеек памяти. По 9 адресам,
указанным в правом столбце таблицы в разряде 0 записан символ е 0 =0, а в
остальных разрядах записаны двоичные комбинации, указанные в левом
столбце этой таблицы. По остальным адресам в нулевом разряде зап исана 1.
По остальным 7 адресам, не встречающимся в правом столбце таблицы в
нулевом разряде записана 1.
Если код является систематическим и нас интересуют только информа ционные символы, то в ПЗУ достаточно сохранять только те компоненты
векторов ошибок, которые соответствуют информационным символам. При
этом разрядность ячеек памяти уменьшится до k+1, а число сумматоров и
длина выходного буфера уменьшится до k. Если нас интересует только
исправление ошибок, а обнаружение ошибок не требуется, то разр ядность
ячеек памяти ПЗУ можно сократить до k.
Время
декодирования
синдромного
декодера,
в
основном,
определяется временем вычисления синдрома и временем обращения к ПЗУ.
Сложность декодирования, в основном, определяется сложностью ПЗУ. Для
(n,k)-кода адресная шина должна быть r=n-k-разрядной, а шина данных – n
(или n+1) -разрядной. Для мощных кодов с большими значениями n и r
использование таких ПЗУ может оказаться невозможным.
§ 2.4 Вероятностные характеристики декодирования в
каналах с независимыми ошибками
кода,
При декодировании могут произойти следующие события, зависящие от свойств
ошибок в канале связи и алгоритма декодирования: (а) правильное
43
декодирование, при котором декодер формирует переданное слово; (б) ошибочное
декодирование, при котором декодер формирует ошибочное кодовое слово; (с) отказ от
декодирования (или обнаружение ошибок), при котором декодер формирует
специальное сообщение, означающее невозможность определения выходного слова.
Поскольку сумма вероятностей событий (а),(б) и (с) равна единице, то достаточно
найти только две из них. В этом разделе мы рассмотрим передачу сообщений с
помощью линейного q-ичного ( n, k )  кода с минимальным расстоянием d по каналу
связи без памяти (см. § 1.2) , в котором ошибки искажают передаваемые символы
независимо с вероятностью p0 . Каждое из q  1 ошибочных значений символа
p0
появляется с вероятностью
, поэтому вероятность появления
q 1
определенной конфигурации из l ошибок равна
l
 p0 

 (1  p0 ) n l
 q  1
Мы будем рассматривать декодер, который принимает решения только, когда
он может найти кодовое слово, находящееся от принятого слова у на расстоянии
 d  1
меньшем или равном радиусу декодирования t , где t  t0  
. Если же такое
 2 
слово не находит, то он формирует отказ от декодирования.
t
t
t
t
t
t
t
t
t
Рис.2.4.1 Области декодирования
Возможные события при декодировании иллюстрируются на рис 2.4.1. Кодовые
слова представлены на рисунке в виде точек в центрах малых шаров, которые
являются областями декодирования в виде шаров Хемминга радиуса t. Они
находятся на различных расстояниях друг от друга, но нименьшее расстояние равно
минимальному расстоянию кода d. Допустим, что центр заштрихованного шара –
это переданное кодовое слово. Правильное декодирование происходит, когда
принятое слово попадает внутрь заштрихованного шара. Поскольку это имеет место
при условии, что число ошибок при передаче не превышает радиуса декодирования,
то вероятность правильного декодирования Pc равна
t
n l
Pc     p0 (1  p0 ) n l .
l 0  l 
(2.4.1)
44
2.4.1. Вероятность ошибки декодирования
Ошибочное декодирование происходит, когда принятое слово попадает
в один из незаштрихованных шаров. Понятно, что это событие пр оисходит
при достаточно большом числе ошибок. Для того, чтобы рас cчитать его
вероятность, предположим, что передается нулевое кодовое слово c 0 и
известен спектр расстояний, т.е. количество кодовых слов, которые
находятся на расстоянии w от переданного слова. В случае линейных кодов
спектр расстояний не зависит от выбора слова c 0 и совпадает со спектром
весов Aw , т.е. с количеством слов веса w.
Пусть Sl (c 0 )  сфера Хемминга с радиусом l и центром в слове c 0 , т.е.
Sl (c 0 )  {y : d (c 0 , y )  l} . На рис.2.4.1 Sl (c 0 )  это множество слов, лежащих на
поверхности шара, показанного пунктиром. Пусть Bt (c i | w)  шар Хемминга с
радиусом t и центром в слове c i , вес которого равен w. Обозначим через
N i ( w, l , t ) число точек в пересечении множеств Sl (c 0 ) и Bt (c i | w) :
N i ( w, l , t ) | S l (c 0 )  Bt (c i | w) | .
Другими словами, N i ( w, l , t ) равно числу конфигураций l-кратных ошибок,
которые переводят слово c 0 в решающую область (в шар радиуса t), соответствующую слову c i , i  0 , при условии, что w(c i )  w . Вначале мы
рассмотрим общий случай q-ичных кодов. Затем полученный результат
будет интерпретирован для более простого случая двоичных кодов.
Теорема 2.4.1. Число конфигураций l-кратных ошибок, приводящих к
ошибочному декодированию слова c 0 в слово c i , зависит от w, l и t, но не
зависит от i, и определяется соотношением:
N ( w, l , t ) 
 w  w  s  n  w 

( q  2) r ( q  1) u ,
r  u 
s ,r ,u  
  s 
(2.4.2)
где суммирование производится по всем неотрицательным значениям
переменных s, u, r , удовлетворяющим условиям:
s  u  r  l , w  s  u  t, w  2s  l  t  r  l  s .
(2.4.3)
Доказательство: Доказательство: Вычисления, ведущие к формуле
(2.4.2), поясняются на рис.2.4.2. Ненулевое слово c  (c w , c n w ) веса w
представлено в виде двух частей: ненулевой части c w длины w и нулевой части
c n w , состоящей из n  w нулей. Вектор ошибок веса l представлен в виде трех
ненулевых частей e  (e s , e r , e u ) , где e s  вектор длины s, все символы которого
совпадают с соответствующими символами вектора c w , e r  вектор длины r,
расположенный на тех позициях, на которых слово с имеет ненулевые символы, но ни в
одном символе не совпадающий с соответствующими символами вектора c w . Наконец,
e u  вектор длины u, расположенный на позициях, где слово с имеет нулевые символы.
На рисунке одинаково заштрихованные части векторов совпадают.
45
ненулевое кодовое слово c  (c w , c n  w ) : w(c )  w, c n w  0
c nw
cw
es
er
eu
вектор ошибок e  (e s , e r , e u ) : w( e )  l , d (e, c )  w  s  u  t
Рис.2.4.2. К подсчету числа конфигураций ошибок
Нетрудно увидеть, что условия (2.4.3) выполняются и что число конфигура ций ошибок e  (e s , e r , e u ) действительно дается формулой (2.4.2).
Суммирование в (2.4.2) выполняется по 3-м переменным s, r, u, причем
s  u  r  l . Кроме того, s  r  w , следовательно, s  w  u  t  w  l  s  r  t  l  t и
s  l  r  u  l . Поэтому в действительности для вычисления N ( w, l , t ) требуется
находить двойную сумму
N ( w, l , t ) 
 w  s  n  w 

( q  2) r ( q  1)l  sr ,

r  l  s  r 
s l t  r  w 2 s l t 
l
 w
l s
  s  
(2.4.4)
a
где число сочетаний   полагается равным нулю, если b  0 или b  a .
 b
В двоичном случае формула для расчета N ( w, l , t ) существенно более
проста. В этом случае r  0 , q=2 и
N ( w, l , t ) 
 w  n  w
l
  s   l  s  .
s l t
 
(2.4.5)

Теорема 2.4.2. Пусть линейный код с длиной n, минимальным расстоянием d и
распределением весов Aw , w  0,1,..., n , используется для передачи сообщений по
q-ичному каналу без памяти с веро ятностью ошибки символов p ( y | x ) =
= P /( q  1) при y  x . Пусть декодирование выполняется с помощью
решающих областей в виде шаров Хемминга радиуса t, t  ( d  1) / 2 с
центрами в кодовых словах c i , i  0,1, ..., M  1, , причем декодер отображает
принятую последовательность y  ( y1 , y2 ,..., yn ) в слово c i , если d (c i , y )  t ,
либо формирует отказ от декодирования, если у не принадлежит ни одному
из таких шаров. Тогда вероятность ошибки при декодировании равна
l
n
 P 
n l
Pe   
 1  P   Aw N ( w, l , t ) .
l 1  q  1 
w1
n
(2.4.6)
Доказательство: Количество конфигураций ошибок веса l, которые
n
приводят к ошибочному декодированию, равно
 A N ( w, l, t ) .
w
Поскольку
w 1
46
различные шары не пересекаются, то никакая конфигурация ошибок не учитывается
l
n l
дважды. Вероятность каждой такой конфигурации равна P /( q  1)  1  P  .
Суммируя по всем возможным весам ненулевых конфигураций ошибок, получим
(2.4.6).
2.4.2. Распределение весов линейных кодов
Выше было показано, что распределение попарных расстояний между
словами кода или распределение весов в случае линейных кодов позволяет
найти вероятности правильного декодирования, ошибочного декодирования
и отказа от декодирования. Если код содер жит относительно немного слов,
то распределение весов можно найти машинным перебором. Для кодов
большой мощности (как, например, для кодов Рида -Соломона, см. ниже) это
сделать невозможно и нужны аналитические методы.
В некоторых случаях информация о распре делении весов может быть
получена с помощью т.н. тождеств Мак -Вильямс. Напомним, что два
линейных q-ичных кода C A , CB одинаковой длины n называются дуальными,
если каждое слово одного кода ортогонально каждому слову другого кода и
размерности этих кодов в сумме равны кодовой длине. Между распределе иями весов в прямом и дуальном коде имеется зависимость, задаваемая
системой линейных уравнений.
Обозначим через k размерность кода C A , а через { Ai } и {B j }
распределения весов в кодах C A , CB соответственно. Имеют место следующие
соотношения, которые называются тождествами Мак -Вильямс:
n
n
n  j
 n i 
n k m
(2.4.7)

B j  q

Ai , m  0,1,..., n .


j 0  m 
i 0  n  m 
Имеется несколько различных форм записи тождеств Мак-Вильямс. Иногда более
удобной является следующая форма. Пусть A  ( A0 , A1 , ... , An ), B  ( B0 , B1 , ..., Bn ) векторы, представляющие распределения весов в кодах C A , CB . Тогда
B  q k  R  A ,
(2.4.8)
где R  [rl ,d ], l , d  {0, 1, ..., n}, квадратная ( n  1)  ( n  1)  матрица и
n
u  d  n  d 
rl ,d    1  
( q  1) l u .
u 0
 u  l  u 
(2.4.9)
Заметим, что матрица R не зависит от размерности кода и, следовательно, уравнение
(2.4.8) остается справедливым для дуальных кодов различных размерностей. Можно
показать (см. теорему 2.4.3 ниже), что величины rl ,d удовлетворяют следующему
рекуррентному уравнению:
rl 1,d 1  rl 1,d  rl ,d 1  rl ,d  ( q  1)
(2.4.10)
при начальных условиях
47
r0,d  1, d  0,1,..., n,
n
(2.4.11)
rl ,0   ( q  1) l , l  0,1,..., n.
l
Пример 2.4.1. Для двоичных линейных кодов, q=2, с длиной n=7 матрица R имеет
следующий вид:
1
7

 21

35
R
35

 21
7

 1
1
5
9
1
1
1
1
1
3
1 1  3  5
1 3 3
1
9
5 5 3
5 5
3
3
5 5
3 5 5
9
5
1
3  3 1
9
3 1 1
3 5
1
1 1
1 1
1
1
7

21 

 35
35 

21 
7

 1 
Двоичный (7,4)-код Хемминга имеет одно слово веса 0, одно слово веса 7 и по 7 слов
веса 3 и 4, т.е. A  (1, 0, 0, 7, 7, 0, 0, 1)T . Распределение весов для кода, двойственного
коду Хемминга, определяется вектором B  2 4  P  A  (1, 0, 0, 0, 7, 0, 0, 0) , т.е. в
двойственном коде все ненулевые слова имеют одинаковый вес 4 (см. также разд.2.2.3).
Пример 2.4.2. Существует линейный (8,4)-код над полем GF (8) с минимальным
расстоянием 5 (это т.н. МДР-код, см. ниже), распределение весов которого дается
вектором A  (1, 0, 0, 0, 0, 392, 588, 1736, 1379)T . Матрица R для этого случая задается в
виде следующей таблицы:
1
1
1
1
1
1
1
1
1
56
48
40
32
24
16
8
0
-8
1372
980
652
388
188
52
-20
-28
28
19208
10976
5432
2064
360
-192
-104
112
-56
168070
72030
23030
3150
-1434
-450
470
-210
70
941192
268912
35672
-9408
-2520
2064
-776
224
-56
3294172
470596
-48020 -17836
9212
-2716
652
-140
28
6588344
0
38416
-8232
1568
-280
48
-8
117649 -16807
2401
343
49
-7
1
5764801 -823543
-134456
Дуальный код имеет в точности такое же распределение весов, как и распределение
весов в прямом коде, так как B  84  P  A  = (1, 0, 0, 0, 0, 392, 588, 1736, 1379)T . В этом
примере оба кода, прямой и дуальный, являются кодами с максимальным достижимым
расстоянием.
48
Доказательство (2.4.10) опирается на следующие леммы, которые носят
чисто технический характер и легко доказываются элементарными
методами.
Лемма 2.4.1.
n
Rd ( x )   rl ,d x l  (1  x ) d (1  x  ( q  1)) n d ,
l 0
n
n
R ( x )   rl ,0 x l  (1  x  ( q  1)) n , R0( d ) ( y )   r0,d y d 
(l )
0
l 0
d 0
y n 1  1
.
y 1
.
Лемма 2.4.2.
R00 ( x, y ) 
n
 rl ,d x l y d 
r ,d  0
y n 1 (1  x ) n 1  (1  x  ( q  1)) n 1
.
y (1  x )  (1  x  ( q  1))
Лемма 2.4.3.
R01 ( x, y ) 
n
r
l ,d  0
n
l ,d 1


x l y d  y 1  R00 ( x, y )  (1  x  ( q  1)) n ,
y n 1  1 
l d
1 1 
n
r
x
y

x
y

R
(
x
,
y
)

(
1

x

(
q

1
))

 1,
 l 1,d 1
 00
y 1
l ,d  0


n 1
n


y

1
R10 ( x, y )   rl 1,d x l y d  x 1   R00 ( x, y ) 
.
y  1 
l ,d  0

Следующую теорему мы приводим без доказательства.
Теорема 2.4.3. Имеет место следующее равенство:
R( x, y )  ( q  1)  R01 ( x, y )  R11 ( x, y )  R10 ( x, y )  y n T ( x ) ,
(2.4.10)
где T ( x ) - полином одной переменной х.
Из этой теоремы немедленно следует (2.4.8). Левая часть (2.4.10) - это полином от
двух переменных х и у. Согласно приведенному равенству все коэффициенты этого
полинома при степенях переменной у, меньших, чем n, равны нулю, что и дает
равенство (2.4.8).
R11 ( x, y ) 
49
Гл. 3 Циклические коды
В этом разделе будет рассмотрен один из наиболее интересных классов кодов класс линейных циклических кодов. Эти коды обладают тем свойством, что вместе с
каждым словом с = (с0, с1,…., сn-1) в циклический код входят слова, полученные из с
циклическим сдвигом на любое количество разрядов вправо или влево, т.е. с1 = (с1,…,
сn-1, с0), с2 = (с2,…, сn-1, с0, с1) и т. д. Свойство цикличности накладывает еще более
сильное ограничение на множество кодовых слов, чем требование линейности, и, как
можно было бы ожидать, сильно обедняет множество кодов. Однако, многие
известные хорошие коды являются циклическими или получаются из них. Кроме того,
для циклических кодов (а также для укороченных циклических кодов, среди которых
есть асимптотически хорошие), имеются достаточно простые схемы кодирования –
декодирования, что является их привлекательным свойством с точки зрения
приложений. Для описания и анализа циклических кодов используют специальную
алгебраическую технику – технику полиномов (многочленов) над конечными полями.
§3.1. Определение и свойства циклических кодов
3.1.1. Алгебраическое описание линейных циклических кодов
Линейный (n, k)-код С над полем GF(q) называется циклическим, если каждое
слово c  C , будучи циклически сдвинуто, также является словом этого кода. Пусть
y  ( y 0 , y1 , ...y n 1 )  Y n - слово над алфавитом Y и
y ( x )  y 0  y1 x  ...  y n 1 x n 1 соответствующий этому слову полином от формальной переменной x. Такое
сопоставление является взаимно однозначным: каждому слову соответствует
полином и каждому полиному соответствует слово, определяемое коэффициентами
этого
полинома.
Линейной
комбинации
пары
слов
y  m1y1  m2 y 2
n
y 1  ( y1,0 , y1,1 , ...y1,n 1 ) ,
соответствует линейная
y 2  ( y2,0 , y2,1 , ...y2,n1 )  Y
комбинация полиномов
n 1
y ( x )   ( m1 y1,i  m2 y 2,i )  x i = m1 y1 ( x)  m2 y2 ( x) .
i 0
Это позволяет рассматривать множество полиномов степени n-1 над GF(q) как
линейное пространство эквивалентное соответствующему линейному пространству
векторов.
Если с=( с0,…, сn-2, сn-1) – кодовое слово из С, то соответствующий полином c(x)
также будем называться словом кода С. Ниже будут рассматриваться только
линейные циклические коды, которые для краткости мы будем называть
циклическими. Таким образом, циклический (n, k)-код это совокупность полиномов,
образующих k-мерное линейное подпространство пространства всех полиномов
степени n-1, замкнутое по отношению операции циклического сдвига.
Рассмотрим слово с1 = (сn-1, с0,…, сn-2), получающееся из с циклическим
сдвигом на один разряд вправо. Полином c1 ( x )  cn 1  c0 x  ...  cn 2 x n 1 ,
соответствующий слову с1 , можно представить следующим образом:
c1 ( x )  x  ( c0  ...  cn 2 x n 2  cn 1 x n 1 )  cn 1 ( x n  1)  x  c( x ) mod( x n  1) .
Циклический сдвиг слова c(x) вправо на i разрядов в полиномиальной записи имеет
следующий вид: x i  c( x ) mod( x n  1) . Поскольку циклический сдвиг влево на j
50
разрядов приводит к тому же слову, что и циклический сдвиг вправо на n - j
разрядов, то циклический сдвиг слова c(x) влево на j разрядов можно представить в
виде x n  j  c( x ) mod( x n  1) . Заметим, что x n  1 mod( x n  1) , поэтому последнее
выражение можно записать как x  j  c( x ) mod( x n  1) .
Выражение a ( x )  b( x ) mod f ( x ) означает, что полиномы a (x ) и b(x ) сравнимы
по модулю f ( x ) , т.е. имеют одинаковые остатки от деления на полином f ( x ) . Если
степень a (x ) строго меньше степени f ( x ) и a ( x )  b( x ) , то полином a (x ) называют
вычетом полинома b(x ) по модулю f ( x ) . В этом случае b( x )  f ( x )t ( x )  a ( x ) для
некоторого полинома t ( x ) . Полином t ( x ) называется частным, а a (x ) остатком от
деления b(x ) на f ( x ) . Запись b( x ) mod f ( x ) означает, что мы рассматриваем
остаток от деления b(x ) на f ( x ) .
Теорема 3.1.1. Пусть m( x )  m0  m1 x  ...  ms x s - произвольный многочлен над
GF(q) и c( x ) - слово циклического (n,k)-кода С. Тогда m( x )c( x ) mod( x n  1) также
является словом этого кода.
Доказательство: Из определения циклического кода следует, что для любого
целого s xc( x ), x 2 c( x ), ... , x s c( x ) mod(x n  1) являются словами кода С. Поскольку С
является линейным кодом, то любая линейная комбинация его слов также является
словом из С. Отсюда m0 c( x )  m1 xc( x )  ...  ms x s c( x )  c( x )m( x ) mod( x n  1) , где
s
m( x )   mi x i и m0 ,..., ms – элементы поля GF(q), также является словом из С.
i 0
Следствие 1. Если степень произведения c( x )m( x ) меньше
n, deg( c( x )m( x ))  n  1, то с(x)m(x) является кодовым словом для любого с(x)  C и
любого m(x).
Это утверждение следует из того, что при deg( c( x )m( x ))  n  1 вычет по
модулю x n  1 совпадает с самим произведением c( x )m( x ) .
Определение.
Порождающим
полиномом
циклического
(n,k)-кода
С
r
называется
такой
ненулевой
полином
g ( x )   g i x i из
С,
который
имеет
i 0
минимальную степень и является нормированным, т.е. таким, что g r  1 . Заметим,
что определение является корректным, поскольку в каждом линейном коде,
состоящем не только из одного нулевого слова, имеется слово, которое в любой
выбранной позиции имеет единицу.
Теорема 3.1.2. Пусть С –циклический (n,k)-код и g ( x ) - его порождающий
полином. Тогда степень g ( x ) равна n  k и каждое слово из С может быть
единственным образом представлено в виде
c ( x )  m( x ) g ( x ) ,
(3.1.1)
где m(x ) имеет степень меньшую или равную k-1.
Доказательство: Предположим, что (3.1.1) не верно и в коде С нашлось слово
c( x ) , которое не делится нацело на g ( x ) :
c ( x )  m( x ) g ( x )  R ( x ) ,
51
причем R ( x )  0 и deg R( x )  deg g ( x ) . Так как степень c( x ) не превосходит n  1 , то
и степень произведения m( x ) g ( x ) не превосходит n  1 . По следствию 1 m( x ) g ( x ) слово кода С. Теперь заметим, что R( x )  c( x )  m( x ) g ( x ) , поэтому в силу
линейности R ( x ) - также кодовое слово. Однако, как указывалось выше
deg R( x )  deg g ( x ) . Но это противоречит тому, что порождающий полином есть
ненулевое кодовое слово с минимальной степенью. Поэтому наше предположение о
том, что R ( x )  0 неверно и любое слово из С делится нацело на g ( x ) , т.е. (3.1.1)
имеет место.
Теперь покажем, что представление (3.1.1) однозначно, т.е. каждому c( x )  C
m(x ) . Действительно, если бы
соответствует единственный полином
c( x)  m1 ( x) g( x) = m2 ( x) g( x) при m1 ( x)  m2 ( x) , то (m1 ( x)  m2 ( x)) g( x)  0 .
Поскольку все операции с полиномами сводятся к операциям в конечном поле, то
равенство нулю произведения двух элементов возможно только в случае, когда один
или оба сомножителя нулевые. Поэтому либо m1 ( x)  m2 ( x)  0 , либо g ( x )  0 , что
невозможно, и все произведения m( x ) g ( x ) суть различные кодовые слова.
Доказательство будет закончено, если мы установим, что степень порождающего
полинома равна n  k . Это основано на следующем рассуждении. Количество
различных кодовых слов в С, с одной стороны, равно qk , а с другой равно
количеству произведений c( x )  m( x ) g ( x ) при условии deg c( x )  n  1 . Если
обозначить deg g ( x )  r , то deg m( x )  n  r  1 и количество произведений m( x ) g ( x )
равно количеству полиномов m(x ) степени n  r  1 и меньшей. Так как имеется
q n r таких полиномов, то приравнивая q n r и qk, получим r  n  k .
Теорема 3.1.3. Порождающий полином g ( x ) циклического ( n, k ) -кода является
делителем двучлена x n  1 .
Доказательство: Обозначим степень порождающего полинома g ( x ) через r,
тогда x nr g (x ) имеет степень n и коэффициент 1 при x n . Поэтому, рассматривая
вычет R( x )  x nr g ( x ) mod( x n  1) , получим
x n  r g ( x )  x n  1  R( x ) ,
(3.1.2)
причем deg R( x )  n  1 . Полином R ( x ) является циклическим сдвигом полинома
g ( x ) и поэтому является кодовым словом. По теореме 3.1.1 R ( x ) нацело делится на
g(x). Так как левая часть (3.1.2) и R ( x ) делятся на g ( x ) , то и x n  1 делится на g ( x ) .
Теоремы 3.1.2 и 3.1.3 позволяют дать более точную характеристику
циклического ( n, k ) -кода над полем GF(q) как множества всех полиномов вида
c( x )  m( x ) g ( x ) , степень которых не превосходит n-1, где m(x ) и g ( x ) - полиномы
над GF(q). Длина кода, его размерность и минимальное кодовое расстояние
52
определяются конкретным выбором порождающего полинома g ( x ) , где g ( x ) –
некоторый делитель двучлена x n  1 . Длина кода равна n , число информационных
символов равно k= n  r , где r - степень g ( x ) .
3.1.2. Порождающая и проверочная матрицы циклического кода
Из свойств цикличности и линейности кода следует, что многочлены g(x),
xg(x),…, xk–1g(x) линейно независимы. Действительно, в противном случае
m0 g ( x )  m1 xg( x ) _  ...  mk 1 x k 1 g ( x )  m( x ) g ( x )  0 ,
что невозможно при m( x )  0 . Следовательно, g(x), xg(x),…, xk–1g(x) могут быть
выбраны в качестве базиса (n,k)-кода . Порождающую матрицу этого кода можно
записать в следующей многочленной форме:
 g ( x) 
 xg( x ) 
.
G
(3.1.3)
 ... 
 k 1

 x g ( x )
Кодовые слова можно представлять в виде произведений mG как и в случае
обычных линейных кодов:
 g ( x) 
 xg( x ) 
k 1
  m( x ) g ( x ), m( x )   mi x i .
mG  ( m0 m1 ... mk 1 ) 
 ... 
i 0
 k 1

 x g ( x )
Учитывая, что g ( x )  g 0  g1 x  ...  g r x r , r  n  k , порождающую матрицу
циклического кода можно записать в обычной символьной форме:
0 ... 0 
 g 0 g1 ... g r 1 g r
 0 g ... g
g r 1 g r ... 0 
0
r 2

.
(3.1.4)
G
. ...
.
.
. ... . 
.


g 0 g1 ... g r 
 0 0 ... 0
Проверочную матрицу циклического кода можно получить на основе
следующих соображений. Для всякого слова c( x ) циклического кода с
порождающим полиномом g ( x ) справедливо соотношение c( x )  0 mod g ( x ) .
Поэтому следующая многочленная матрица
H  [1 x x 2 ... x n2 x n1 ] mod g ( x )
(3.1.5)
i
является проверочной. Здесь i-й столбец представляет собой вычет x mod g ( x ),
i  0, 1,..., n  1 . Действительно, для всякого кодового слова c  (c0 , c1 ,..., cn 1 )
имеем
cH T   ci x i  0 mod g ( x ) .
i
Пример 3.1.1. Пусть С=Хn, где Х=GF(q), т.е. в качестве кода в этом примере
мы рассматриваем все q-ичные последовательности длины n. Очевидно, это
циклический ( n, k ) -код, у которого n  k . Среди всех ненулевых кодовых слов
имеется слово c( x )  1 , поэтому порождающий полином кода g ( x )  1 .
53
Пример 3.1.2. Рассмотрим двоичный код
{000, 110, 011, 101}. Это
циклический код над полем GF ( 2) с n  3, k  2, d  2 и порождающим полиномом
g ( x )  1 +х. Легко проверить, что x 3  1 делится нацело на g ( x ) . Порождающая и
проверочная матрицы в полиномиальной форме равны
 1 x 
G
, H  1 x x 2 mod (1  x ) .
2
x  x 
Те же матрицы в двоичной форме 1 1 0
G
, H  1 1 1.
0 1 1 


3.1.3. Примеры нетривиальных циклических кодов
Мы доказали, что порождающий полином циклического кода длины n должен
быть делителем двучлена xn–1. Поэтому чтобы перечислить все циклические коды,
достаточно рассмотреть все делители двучлена xn–1. Если этот двучлен
раскладывается в произведение M неприводимых над GF(q) сомножителей xn–1 =
f1(x)…. fM(x), то в качестве порождающего полинома циклического q-ичного кода
длины n может быть взят любой делитель xn–1, т.е. полином вида:
g(x) = fi1(x)…. fis(x), ij  {1,2,..., M } ,
который не является делителем xn–1 при n < n. Каждый такой полином g(x) будет
порождать циклический код над GF(q) с длиной n, со своей размерностью k= n  r ,
где r - степень g ( x ) , и со своим минимальным расстоянием d.
В таблице 3.1.1 приведены параметры некоторых двоичных циклических
кодов. Порождающий полином записан в показательной форме, в которой указаны
показатели степени переменной х, соответствующие ненулевым коэффициентам.
Например, полином g ( x )  x 3  x  1 представлен как (3 1 0), а полином
g ( x)  ( x  1)( x 3  x  1) - как (1 0)(3 1 0).
Табл. 3.1.1
Некоторые двоичные циклические коды
Длина
кода n
3
7
15
Порождающий полином
g(x)
(1 0)
(2 1 0)
(1 0)
(3 1 0)
(1 0)(3 1 0)
(1 0)
(4 1 0)
(1 0)(4 1 0)
(4 1 0)(4 3 2 1 0)
(1 0)(4 1 0)(4 3 2 1 0)
(2 1 0)(4 1 0)(4 3 2 1 0)
(1 0)(2 1 0)(4 1 0)(4 3 2 1 0)
Размерность
k
2
1
6
4
3
14
11
10
7
6
5
4
Минимальное
расстояние d
2
3
2
3
4
2
3
4
5
6
7
8
Примечание
ПЧ
Х
ПЧ
Х
ПЧ
Х
БЧХ
БЧХ
БЧХ
54
17
(8 5 4 3 0)
9
5
(1 0)(8 5 4 3 0)
8
6
23
(11 9 7 6 5 1 0)
12
7
Г
(10)(11 9 7 6 5 1 0)
11
8
В этой таблице ПЧ – код с проверкой на четность, Х – код Хемминга, Г – плотно
упакованный двоичный код Голея, БЧХ – код Боуза-Чоудхури-Хоквингхема.
Можно сделать некоторые замечания по поводу кодов из приведенной таблицы.
1). Коды с порождающим полиномом x+1 имеют минимальное расстояние 2,
поскольку сам порождающий полином, будучи одним из кодовых слов, имеет вес 2.
Слов с весом 1 не существует, так как равенство xi =0mod(x+1) не имеет место ни при
каком i.
2). Коды, порождаемые неприводимыми делителями x n  1 , имеют минимальное
расстояние, не меньшее, чем 3. Минимальное расстояние равно 3, если
порождающий полином g(x) является примитивным неприводимым делителем
x n  1, n  2 m  1 .
Это доказывается следующим образом. Очевидно, в коде нет слов веса 1. Если
бы нашлось слово веса 2, то
при некоторых
x i  x j  0 mod g ( x )
i, j  {0,..., n  1} , i  j . Но тогда x i ( x j i  1)  0 mod g ( x ) , т.е. g(x) был бы делителем
двучлена x j i  1 , что невоз-можно, так как i  j и n – это наименьшее ненулевое
целое, для которого x n  1  0 mod g ( x ) . Если g(x) – примитивный полином, то его
корень  является примитивным элементом поля GF (2 m ) . Поэтому для любых
i, j  {0,..., n  1} , i  j , найдется k, такое, что x i  x j  x k mod g ( x ) при i  j . Это
следует из того, что  i   j   k , где  - корень g(x). Следовательно, коды,
порождаемые
неприводимыми
примитивными
делителями
двучленов
n
m
x  1, n  2  1 , являются двоичными циклическими кодами Хемминга.
3). Если g(x) порождает двоичный циклический код с расстоянием d и не делится на
x+1, то полином (x+1) g(x) порождает код той же длины, минимальное расстояние
которого равно d+1.
Это вытекает из следующих рассуждений. Исходный код имеет нечетное
расстояние, в противном случае все кодовые слова имели бы 1 своим корнем и,
поэтому, делились бы на (х+1). Словами кода, порождаемого произведением (x+1)
g(x), являются все слова исходного кода, которые имеют четный вес. Поэтому
минимальный вес кодовых слов равен d+1.
3.1.4. Циклические коды, исправляющие пакеты ошибок
Пакет ошибок длины b определяется как последовательность из таких b
ошибочных символов, что первый и последний из них отличны от нуля. В случае
циклических кодов допускаются также циклические пакеты, в которых первый y 0 и
последний yn 1 символы слова y  ( y0 , y1 , ...yn1 ) рассматриваются как соседние.
Например, следующие две комбинации (0 1 0 1 0 0 0), (1 0 0 0 0 1 0) представляют
собой пакет ошибок длины 3 на длине 7. В общем случае пакет ошибок длины b
можно записать в виде полинома e( x )  x i ( y 0  y1 x  ...  y b1 x b1 ) mod ( x n  1) , где
y 0 , y b1 отличны от нуля, а остальные символы произвольны. При этом число i,
0  i  n  1, указывает на положение пакета.
55
Теорема 3.1.4. Для всякого линейного ( n, k ) кода, исправляющего пакеты
ошибок длины меньшей или равной b, имеет место следующее неравенство:
n  k  2b  0 .
(3.1.6)
Доказательство: Пусть линейный код исправляет некоторое множество
ошибок E  {e} , тогда для любых двух ошибок e1 , e 2  E их разность e1  e 2 не
является кодовым словом, иначе для этих ошибок имело бы место равенство
(e1  e 2 )HT  0 , т.е. они имели бы одинаковые синдромы: e1HT  e 2 HT и,
следовательно, не различались бы декодером. Поэтому для любых двух ненулевых
исправляемых пакетов ошибок длины меньшей или равной b, например
e1  (0,...,0, yi , yi 1 ,..., yi b1 ,0,...,0),
e 2  (0,...0, yi b , yi b1 ,..., yi 2 b1 ,0,...,0),
выполняется неравенство:
(e1  e 2 )HT  (0,..., zi , zi 1 ,..., z 2b1 ,0,...,0)HT  0.
Другими словами, всякая подматрица размерности ( n  k )  2b проверочной
матрицы Н должна быть невырожденной, т.е. должна состоять из линейно
независимых столбцов. Если допустить, что n  k  2b , то легко увидеть, что это
требование нарушается, так как любые 2b столбцов, каждый из которых имеет длину
меньшую, чем 2b, обязательно линейно зависимы.
Таким
образом,
минимальная
избыточность
циклического
кода,
обеспечивающая исправление пакетов ошибок длины b, равна 2b. Следовательно,
разность n  k  2b представляет собой меру эффективности кода, исправляющего
пакеты.
В следующей таблице приведены параметры некоторых двоичных циклических
и укороченных циклических кодов, исправляющих пакеты ошибок.
Табл.3.1.2
g ( x)
b
n, k
n  k  2b
(7,3)
2
0
(3 1 0)(1 0)
(15,9)
3
0
(4 1 0)(2 1 0)
(63,55)
3
2
(6 5 0)(2 1 0)
(85,75)
4
2
(5 4 3 1 0) (2 1 0) 2 (1 0)
(27,17)
5
0
(9 8 7 6 3 1 0)(2 1 0)
(131,119)
5
2
(7 6 5 4 2 1 0)(2 1 0) (1 0) 3
(34,22)
6
0
(12 11 9 8 7 6 3 1 0)
(50,34)
8
0
(8 6 5 4 2 1 0)(7 6 0)(1 0)
(67,54)
6
1
(11 7 6 1 0) (1 0) 2
(10 8 3 2 0)(2 1 0) (1 0) 3
56
(103,88)
7
1
Простой метод построения кодов, исправляющих длинные пакеты ошибок,
заключается в перемежении символов нескольких слов кода, исправляющего
короткие пакеты ошибок. Метод перемежения заключается в следующем. Пусть
g ( x ) порождает ( n, k )  код, исправляющий пакеты ошибок с длиной меньшей или
равной b. Образуем двумерную t  n таблицу, в которой каждая строка является
словом этого кода. Будем рассматривать такую таблицу как слово ( nt , kt)  кода,
символы которого передаются по-столбцам, вначале передаются t символов первого
столбца, затем – второго и т.д., t символов последнего, n-го столбца. При этом пакет
ошибок длины bt может исказить не более b рядом стоящих cимволов в каждой
строке. Следовательно, построенный с помощью перемежения ( nt , kt)  код способен
исправлять пакеты ошибок длины bt.
Можно показать, что перемежение циклических (или укороченных
циклических) кодов при определенной записи строк указанной выше таблицы дает
циклический (или укороченный циклический) ( nt , kt)  код с порождающим
полиномом g ( x t ) .
Перемежение слов оптимального кода, для которого разность n  k  2b равна
нулю, очевидно, дает оптимальный код, для которого разность nt  kt  2bt также
равна нулю. Следовательно, если найдены оптимальные короткие коды, то с
помощью переме-жения можно построить оптимальные коды практически любой
длины, исправляющие длинные пакеты ошибок.
§3.2. Многотактные линейные фильтры. Вычислители остатков
Как будет показано ниже, основной операцией при кодировании и
декодировании циклических кодов является операция вычисления остатков от
деления одного полинома на другой. Эта операция выполняется последовательно
шаг за шагом с помощью устройств, называемых многотактными линейными
фильтрами (МЛФ). Эти устройства соcтоят из элементов следующих трех типов:
b
ci
ci-1
a
1
+
c
a+b
2
a
ac
3
Рис.3.2.1
Здесь 1 – элемент задержки символа поля GF(q) на 1 такт, 2 – сумматор двух
элементов поля GF(q), 3 – умножитель элемента а из GF(q) на константу с из того же
поля.
Элемент задержки это ячейка регистра сдвига (или запоминающий элемент).
Она задерживает поступающий на вход символ на отрезок времени, называемый
тактом. В двоичном случае сумматор это сумматор по модулю два. Умножитель
работает так, что на один его вход может быть подан любой элемент поля, а на
57
другой – произвольный, но фиксированный элемент. В двоичном случае
умножитель образует либо постоян-ное соединение входа и выхода (при с=1), либо
отсутствие соединения (при с=0). МЛФ работает дискретно во времени, на каждом
такте состояния ячеек памяти изменяется в зависимости от предыдущих состояний и
очередного входного сигнала.
3.2.1. Алгебраическое описание многотактных линейных фильтров
Рассмотрим МЛФ, состоящий из r элементов памяти. Каждый такой элемент
может находиться в одном из q состояний, соответствующих величинам поля GF(q).
Пусть s i - состояние i-й ячейки памяти. Обозначим через s  ( sr 1 ,..., s0 ), si  GF (q) ,
вектор, представляющий состояние фильтра. Пусть s  ( sr1 ,..., s0 ) и s  (sr1 ,..., s0 ) –
пара смежных во времени состояний, s - состояние в текущий момент и s' состояние в следующий за текущим момент времени. Фильтр называется линейным,
поскольку в общем случае его состояния описываются системой линейных
уравнений над полем GF(q):
 s' r 1  cr 1,r 1 sr 1  ...  cr 1,0 s0  αbr 1 ,
s'  c
 r 2
r  2 ,r 1 s r 1  ...  c r  2 , 0 s0  αbr  2 ,

. . . .

 s' 0  c0,r 1 sr 1  ...  cr 1,0 s0  αb0 ,
(3.2.1)
где через  обозначено значение символа на входе фильтра в текущий момент
времени. В матричной записи эти уравнения имеют следующий вид:
s'  sC  αb,
(3.2.2)
где
 сr 1,r 1 cr 1,r 2 ... cr 1,0 
с
cr 2,r 2 ... cr 2,0 
r  2 ,r 1
, b  (b , b ,..., b ) .
(3.2.3)
С
r 1
r 2
0
.
.
. 
 .


c0,r 2 ... c0,0 
 c0,r 1
Матрица С называется переходной матрицей фильтра, причем ci , j есть
коэффициент, с которым текущее состояние i-й ячейки входит в сумму,
определяющую следующее состояние j-й ячейки, а вектор b  (br 1 , br 2 ,..., b0 )
описывает входные цепи фильтра.
Пример 3.2.1. Рассмотрим двоичный МЛФ с тремя ячейками пямяти, r=3,
изображенный на рис.3.2.2. Он описывается следующей системой уравнений,
которые связывают следующее состояние s'  ( s2' , s'1 , s' 0 ) с предыдущим состоянием
s  ( s2 , s1 , s0 ) и со входом фильтра (все переменные принимают два значения 0,1 и
операции над ними выполняются по модулю 2):
58
s2  s1 ,

s1  s0  s2  α,
s   s  α.
2
 0
(3.2.4)
или в матричной записи:
0 1 1
s'  sC  αb, где С  1 0 0, b  (0 1 1) .


0 1 0
α
s2
s1
s0
Рис.3.2.2 Пример многотактного линейного фильтра
В автономном режиме (т. е., в отсутствие входных сигналов) фильтр остается в
нулевом состоянии, если начальное состояние нулевое, и пробегает некоторую
периодическую последовательность состояний, если начальное состояние ненулевое.
Например, если начальное состояние было (0 0 1), то фильтр будет последовательно
принимать следу-ющие состояния: (0 0 1), (0 1 0), (1 0 0), (0 1 1), (1 1 0), (1 1 1), (1 0
1), (0 0 1)… и т. д., состояния будут повторяться с периодом 7.
Для алгебраического анализа МЛФ удобно перейти от символьной формы С к
полиномиальной форме C( x ) переходной матрицы. Это может быть сделано
следующим образом:
 x r 1   c r 1 ( x ) 
 r  2  c ( x )
x   r 2  ,
C( x )  C  

 ...    

 

 1   c0 ( x ) 
где ci (x ) - полином, соответствующий i-й строке матрицы С. Введем в рассмотрение
полином состояний s ( x ) и полином b(x ) входных цепей:
r 1
r 1
r 1
i 0
i 0
i 0
s( x )   si x i , s' ( x )   s' i x i и b( x )   bi x i .
(3.2.5)
В результате имеем
 x r 1 
 r 2 
x 
(3.2.6)
s ' ( x )  (s  C   α  b)  
 s  C( x )  αb( x ) .
 ... 


 1 
Тем самым, мы получили соотношение, устанавливающее связь между парой
смежных во времени состояний s и s' , одно из которых записано в векторной, а
другое – в полиномиальной форме. Мы можем, с одной стороны, упростить это
соотношение, а, с другой стороны, приблизиться к ответу на вопрос, как вычислять
остатки от деления, если поставим дополнительные требования к переходной
матрице С многотактного линейного фильтра.
59
Предположим, что полиномы {c j ( x )} удовлетворяют следующим условиям (мы
будем называть их условиями согласованности):
c j ( x)  p( x) x j mod g ( x), j  0,1,..., r  1.
(3.2.7)
Здесь p(x), g(x) – два произвольных полинома, причем степень g(x) равна r. Тогда,
подставляя (3.2.7) в (3.2.6), получим
s' ( x )  p( x ) s( x )  αb( x ) mod g ( x ) .
(3.2.8)
Для доказательства справедливости (3.2.8) достаточно заметить, что
 x r 1 p( x )

 r 1
s  C( x )  ( sr 1 ,..., s0 )  . . .    s j x j p( x )  s( x ) p( x ) mod g ( x ) .
 p ( x )  j 0


Полученный результат мы сформулируем в виде следующей теоремы.
Теорема 3.2.1. Пусть полиномиальная форма C( x ) переходной матрицы
фильтра
удовлетворяет
условиям
(3.2.7)
и
задается
полиномами
j
j  0,1,..., r  1 , причем p(x), g(x) – два произвольных
c j ( x)  p( x) x mod g ( x) ,
полинома над полем GF(q) и deg(g(x))=r. Предположим также, что входные цепи
фильтра описываются полиномом b(x). Тогда при подаче на вход α смежные во
времени состояния фильтра s(x) и s′(x) будут связаны соотношением
s' ( x )  p( x ) s( x )  αb( x ) mod g ( x ) .
Следствие 1: Если положить p(x) = x и подать на вход MЛФ последовательность
(am1 , am2 ,..., a0 ) , то на m-ом такте состояние фильтра будет равно b(x)a(x)mod g(x),
где a ( x)  am1 x m1  ...  a0 . Если при этом выбрать входные цепи так, чтобы b(x)=1,
то на m-ом такте фильтр вычислит остаток от деления a(x) на g(x).
Доказательство: Мы считаем, что начальное состояние фильтра нулевое.
Поэтому после первого такта состояние фильтра будет равно am1b( x) , после второго
такта – am1b( x) x  am2b( x) mod g ( x) и т. д., состояние фильтра будет меняться. После
m-ого
такта
состояние
будет
a m1b( x ) x m1  a m2 b( x ) x m2  ....  a0 b( x )  b( x )a ( x ) mod g ( x ) .
Пример 3.2.2. Продолжим рассмотрение примера 3.2.1. Нетрудно увидеть, что
фильтр на рис.3.2.2 построен по полиному g ( x )  x 3  x  1 над полем GF(2), r=3.
Условие согласованности выполнено: с0 ( x )  x, c1 ( x )  x 2 , c2 ( x )  x 3 mod g ( x ) при
p ( x )  1 . Фильтр имеет следующую матрицу переходов:
0 1 1
 x  1


С  1 0 0 , C( x )   x 2  mod( x 3  x  1) .




0 1 0
 x 
Его входные цепи построены по полиному b( x )  1  x , при появлении на входе
символа  к состоянию фильтра s(x) прибавляется полином b(x ) . В отсутствие
входных сигналов состояние s(x) в соответствии с (3.2.8) переходит в xs(x) mod g(x).
Если на вход подается последовательность a=(1 0 1 0 0 1), соответствующая
60
полиному a( x )  x 5  x 3  1 , и начальное состояние фильтра - нулевое, то он будет
последователь-но принимать следующие состояния:
0
0
0
0
1
1
1
1
0
1
0
0
0
1
1
1
1
0
1
0
0
Последнее состояние (1 0 0) соответствует остатку x 2  b( x )a( x ) mod g ( x ) , что
согла-суется с утверждением следствия 1.
Следствие 2. Если положить p( x )  x t и подать на вход MЛФ
последовательность (am1 , am2 ,..., a0 ) , то на m-ом такте состояние фильтра будет
равно b(x)a(xt)mod g(x).
Доказательство: Заметим, что теперь после первого такта состояние будет
равно a m1b( x ) , после второго такта – a m1b( x ) x t  a m2 b( x ) mod g ( x ) и т. д. После mого
такта
оно
будет
равно
a m1b( x ) x t ( m1)  a m2 b( x ) x t ( m2 )  ....  a0 b( x )  b( x )a ( x t ) mod g ( x ) .
Пример
3.2.3.
Построим
МЛФ,
вычисляющий
a( x 3 ) mod g ( x ) ,
g ( x )  x 3  x  1 . Для этого положим p( x )  x 3 и выпишем переходную матрицу C в
полиномиальной форме:
 x r 1 x 3   x 5   x 2  x  1

   

C( x )   . . .    x 4    x 2  x  mod g ( x ) .
 x3  x3   x  1 

   

В двоичной форме переходная матрица этого фильтра имеет следующий вид:
1 1 1
C  1 1 0 .


0 1 1
Теперь, учитывая, что b( x )  1 , мы можем указать все связи между ячейками
фильтра (cм. рис.3.2.3) :
a(x))
s2
s1
s0
Рис.3.2.3 Многотактный линейный фильтр, вычисляющий a( x 3 ) mod( x 3  x  1)
Заметим, что в отсутствие входных сигналов этот фильтр на каждом такте
x 3 mod g ( x ) .
производит
умножение
состояния
на
Он
переводит
61
s( x )  s( x ) x 3 mod g ( x ) , например, 1  x 3  x  1 mod g ( x ) , или (0 0 1) переходит в
(0 1 1).
3.2.2. Замечание о связи между вычислениями остатков и вычислениями в
конечных полях
Выше были построены вычислители остатков по модулю некоторого
полинома. Здесь мы хотим интерпретировать работу многотактных линейных
фильтров как некоторые вычисления в конечных полях.
Допустим, что полином f(x) - неприводимый над полем GF(p), имеет степень m
и задает расширенное поле GF(q) , q  p m . Обозначим через α его корень. Если
f(x) – примитивный полином, то α - примитивный элемент поля GF(q). Следующие
m элементов 1, α, α 2 ,..., α m-1 образуют естественный базис GF(q), т.е. любой элемент
этого поля имеет единственное представление в виде линейной комбинации
базисных элементов:   b0  b1α  . . .  bm1α m-1 , bi  GF ( p ) . Напомним, что такое
представление элементов поля называется аддитивным. С другой стороны, каждый
ненулевой элемент поля представим в виде некоторой степени примитивного
элемента,   α t , 0  t  q  1 . Такое представление элементов поля называется
мультипликативным.
Пусть a ( x )  a0  a1 x  ...  a n 1 x n 1 , ai  GF ( p ) , - произвольный полином над
GF(p). Рассмотрим задачу вычисления значения полинома a (x ) в точке   GF (q) ,
предполагая, что значение a (  ) должно быть представлено в аддитивной форме.
Стандартное решение этой задачи, называемое схемой Горнера, опирается на
следую-щее представление полинома a(x)
a( x )  a0  x  (a1  x  (a2  ...  x  (an2  x  an1 )...) .
Очевидно, что для вычисления a (  ) по схеме Горнера требуется выполнить n
сложений и n-1 умножений в поле GF(q). Другое решение этой задачи может быть
получено с помощью МЛФ. При этом все вычисления будут выполнены в поле
GF ( p ) .
Рассмотрим несколько более общую задачу вычисления произведения
t
a ( )u( s ) , где оба полинома a ( x ), u( x ) имеют коэффициенты в GF ( p ) , причем
a (x ) - произволь-ный полином, а
u(x ) - произвольный, но фиксированный
полином. Для решения этой задачи запишем сравнение s( x )  a( x t )u( x s ) mod f ( x ) в
виде следующего равенства: s( x )  a( x t )u( x s )  t ( x ) f ( x ) , которое имеет место при
некотором выборе полинома t(x). Тогда, s( )  a( t )u( s )  t ( ) f ( )  a( t )u( s ) ,
т.к. f ( )  0 , фактически требуется найти коэффициенты s0 , s1 ,. . . , sm1
представления s(α )  s0  s1α  . . .  sm1α m1 . Таким образом, если требуется
найти a ( t )u( s ) в поле GF(q), то аддитивное представление этого произведения
можно получить с помощью МЛФ с m ячейками памяти, вычисляющего
s( x )  a( x t )u( x s ) mod f ( x ) , последовательно подавая на вход этого фильтра
коэффициенты полинома а(x), начиная с коэффициентов при старшей степени х.
62
После подачи последнего коэффициента а0 состоянием фильтра будет
( sm1 , sm2 ,. . ., s0 ) , которое является аддитивным представлением a (α t )u(α s ) . Из
пре-дыдущего алгебраического анализа ясно, что такой МЛФ должен задаваться
полиномами g ( x )  f ( x ), b( x )  u( x s ) mod f ( x ), p( x )  x t mod f ( x) . На каждом шаге
в фильтре происходит умножение на x t mod f ( x ) .
Если требуется найти аддитивное представление для a (  ) ,   α t , то следует
построить фильтр, вычисляющий s( x )  a( x t ) mod f ( x ) при b(x)=1 и подать на его
вход коэффициенты полинома а(x), начиная с коэффициентов при старшей степени
х. После подачи последнего коэффициента а0 фильтр придет в состояние
( sm1 , sm2 ,. . ., s0 ) , которое является аддитивным представлением элемента a (α t ) .
Такая схема вычисления значения полинома в точке применяется в случае, когда
коэффициенты полинома поступают на вход вычислителя последовательно друг за
другом.
В качестве примера может служить фильтр, показанный на рис.3.2.3. В этом
случае поле GF (23 ) задается примитивным полиномом g ( x )  x 3  x  1 . Фильтр
вычисляет a ( 3 ) , где  - корень g(x).
Рассмотрим теперь задачу обращения элементов поля GF(q), т.е. задачу
отыскания
для
данного
элемента
поля
m 1
  s0  s1α  . . .  sm1α  GF ( q), si  GF ( p ),   0 ,
такого
  t0  t1α  . . .  tm1α m1  GF ( q), ti  GF ( p ) , что     1 . Эта задача может
быть решена с помощью пары МЛФ, каждый из которых выполняет умножение на
x mod f ( x ) , где f ( x ) - полином задающий поле GF (q ) . Как указывалось ранее,
такие фильтры строятся по полиномам g ( x )  f ( x ), p( x )  x . При этом полином
входных цепей b(x ) - произволен. Предположим, что в один из фильтров
записывается в качестве начального состояния ( sm1 ,..., s0 ) , а в другой – аддитивное
представление единичного элемента, т.е. (0 0 . . . 0 1). Затем оба фильтра, работают
параллельно, переходя из состояния в состояние до тех пор, пока в первом фильтре не
установится состояние (0 0 . . . 0 1). При этом второй фильтр будет иметь
состояние (tm1 ,..., t0 ) , соответствующее искомому элементу  . Это состояние
является аддитивным представлением элемента поля GF(q), обратного к  .
Для доказательства достаточно отметить, что на i-м такте первый фильтр
вычислит α i , а второй α i . Поэтому на том такте, на котором первый фильтр придет
в состояние 1, т.е. α i  1 , второй фильтр будет в состоянии   α i . Описанная
схема вычислений позволяет также решать уравнение вида     β для заданной
пары элементов β,  . При этом вычисления останавливаются, если в первом
фильтре появляется состояние β .
§3.3. Реализация операции кодирования для циклических кодов
Слова циклического (n, k)- кода с порождающим полиномом g(x) обладают тем
свойством, что каждое из них нацело делится на g(x) и однозначно определяется
информационным полиномом m(x). Кодирование заключается в отображении
63
полинома m(x) в кодовое слово с(x), которое сопоставляется этому
информационному полиному.
Кодирование бывает двух видов: систематическое и несистематическое. При
несистематическом кодировании кодовое слово формируется в виде произведения
с(x)=m(x)g(x) с помощью устройства перемножения, где коэффициенты полинома
m(x) - информационные символы, а коэффициенты полинома с(x) суть кодовые
символы.
При систематическом кодировании
кодовое слово образуется из двух
s ( x ) . Например,
подблоков: информационного, m(x), и проверочного,
c( x )  [ s( x ) | m( x )] . В противоположность несистематическому кодированию, при
систематическом кодирова-нии информационные символы занимают определенные
позиции в каждом кодовом слове, тогда как при несистематическом кодировании
информационные символы присутствуют в каждом слове неявно и могут быть
найдены только в результате деления с(x) на g(x).
Если допустить, что информационный подблок находится в области старших
степеней x кодового слова, то кодовое слово c( x )  m( x ) x r  s( x ) , где r=n-k. Условие
c( x )  0 mod g ( x )
s( x )
позволяет найти проверочный полином
через
r
информационный: s( x )   x m( x ) mod g ( x ) .
Рассмотрим вначале реализацию несистематического кодирования. Поскольку
рассматриваемые коды являются линейными, то для них верно все, что было сказано
ранее о кодировании для линейных кодов. Однако, при кодирования циклических
кодов нет необходимости хранить в памяти кодера порождающую матрицу.
Достаточно хранить в памяти
только ее первую строку – коэффициенты
порождающего полинома. Кодирование сводится к перемножению двух полиномов –
m( x )  mk 1 x k 1  .....  m0
информационного
и
порождающего
g ( x )  g r x r  g r 1 x r 1  .....  g 0 . Для умножения на фиксированный полином g ( x )
используется r-разрядный регистра сдвига, сумматоры и умножители на константы
поля GF(q). Структурная схема такого кодера показана на рис. 3.3.1.
m(x)
g1
g0
s1
g2
s2
gr-1
gr
sr
a(x)
Рис.3.3.1 Несистематический кодер циклического кода
Пусть g  ( g 0 , g1 ,..., g r )  коэффициенты порождающего полинома. На вход
кодера последовательно поступают информационные символы mk 1 , mk 2 ,..., m0 ,
начиная с коэффициентов при старших степенях полинома m(x ) . При поступлении
первого символа mk-1 в регистр заносится вектор mk-1g – результат умножения этого
символа на первую строку порождающей матрицы. Затем выполняется сдвиг, и
первый символ сn-1 = mk-1gr кодового слова c( x ) считывается с выхода кодера. При
поступлении второго информационного символа mk-2 к содержимому регистра
прибавляется вектор mk-2g – результат умножения этого символа на сдвинутую
вправо вторую строку порождающей матрицы. Затем содержимое регистра
сдвигается и второй символ сn-2 = mk-1gr-1 + mk-2gr кодового слова оказывается на
64
выходе кодера. Затем формируется третий символ сn-3 = mk-1gr-2 + mk-2gr-1 + mk-3gr .
Этот процесс повторяется в течение n тактов, причем считается, что вслед за
последним информационным символом m0 на вход кодера поступает r нулей.
Для восстановления переданного сообщения по кодовому слову с(x) требуется
выполнить обратное преобразование, т. е. вычислить частное от деления с(x) на
порождающий полином g(x). Деление можно выполнить с помощью фильтра,
1
обратного к кодирующему. Передаточная функция обратного фильтра равна
.
g ( x)
Деления можно избежать, если использовать систематическое кодирование,
при котором в каждом кодовом слове на первых k позициях, соответствующим
старшим степеням переменной x, будут расположены информационные символы
mk 1 , mk 2 ,..., m0 . Для кодирования достаточно найти остаток s( x )   x r m( x ) mod g ( x )
от деления полинома m(x), умноженного на xr, на порождающий полином кода g(x).
Затем этот остаток (с обратным знаком) должен быть приписан вслед за последним
информационным символом m0 . Для вычисления остатка s( x )   x r m( x ) mod g ( x )
могут быть использованы описанные выше многотактные линейные фильтры.
Пример 3.3.1. Построим систематический кодер для двоичного циклического
(7,4)-кода, с порождающим полиномом g ( x)  x 3  x  1 . Фильтр, вычисляющий
остаток от деления на g(x) изображен на рис.3.2.2. Так как нам требуется получить
остаток для многочлена – x r m(x) , то входные цепи фильтра и соответствующий
полином b(x) должны быть выбраны из условия b( x)   x r mod g ( x) .Учитывая,
что 1  1 в поле GF(2), получим b(x) = x + 1, т.е. фильтр на рис.3.2.2 соответствует
кодеру указанного кода. Например, при подаче на вход фильтра информационного
полинома m( x)  x 3  x 2  1 фильтр вычислит s(x) = 1. В этом случае
c( x )  x r m( x )  s( x )  x 6  x 5  x 3  1 будет результатом кодирования. Нетрудно
убедиться, что это – кодовое слово, так как с(х) нацело делится на g(x) .
Систематический кодер реализуется на основе МЛФ. К фильтру добавляется
только коммутация с помощью специальных ключей, которые организуют процесс
кодирования. В течение первых k тактов ключи K1 и К2 находятся в положении 1.
При этом k информационных символов попадают на вычислитель остатка и на
выход кодера. Затем ключи переводятся в положение 2, в результате чего обратная
связь в фильтре разрывается и фильтр переводится в режим простого регистра
сдвига. Из него считывается вычисленный остаток s(x), коэффициенты которого
попадают на выход кодера сразу вслед за информационными символами. Схема
кодера приведена на рис.3.3.2.
m(x)
K1
1
2
1
s2
2
K2
s1
s0
c(x)
Рис.3.3.2 Систематический кодер для двоичного циклического (7,4)- кода
§ 3.4. Синдромное декодирование циклических кодов
65
Рассматриваемые циклические коды являются линейными, поэтому
все, что было сказано о синдромном декодировании линейных код ов,
может быть перенесено на циклические коды. Однако, в случае
циклических кодов можно упростить как вычисление синдрома, так и
логическое устройство выбора вектора ошибок, если допустить
последовательный ввод данных в декодер и последовательный вывод
декодированных данных из декодера. Именно при последовательной
работе декодера преимущества циклических кодов проявляются особенно
заметно.
3.4.1 Алгоритм синдромного декодирования
Пусть c(x) –переданное слово циклического (n,k)-кода над полем
GF(q) с порождающим полиномом g(x) и пусть y ( x )  y n 1 x n 1  ...  y0 –
принятое слово. Пусть e( x)  en1 x n1  ...  e0 полином ошибок, который
определяется равенством y(x) = c(x)+e(x). Мы будем называть полином
S(x), определяемый соотношением
S ( x )  x r y ( x ) mod g ( x ), r  n  k .
(3.4.1)
синдромом слова y(x). Как и в случае линейных кодов, синдром равен
нулю, если y(x) - кодовое слово. Синдром S ( x ) не зависит от переданного
слова, а определяется только полиномом ошибок:
S ( x)  x r y( x)  x r c( x)  x r e( x )  x r e( x) mod g ( x), .
(3.4.2)
Поскольку синдром принятого слова y(x) равен остатку от деления
x y(x ) на порождающий полином g(x), то он может быть вычислен с
помощью многотактного линейного фильтра. Так, например, вычислитель
синдрома для двоичного циклического (7,4)-кода - это фильтр,
приведенным на рис.3.2.2. Он работает n тактов, в течение которых на
вход фильтра подается последовательность yn1 , yn2 ,..., y0 . После подачи на
вход последнего символа y 0 состояние фильтра будет равно синдрому.
r
Пример 3.4.1. Предположим, что на вход фильтра (см. рис.3.2.2)
подается слово y(x)= x 6  x 5  x 4  x 3  1 . Это слово получено в примере
3.3.1 в случае одиночной ошибки на 4 -ой позиции. Фильтр работает n=7
тактов и последовательно принимает следующие состояния (начальное
состояние - нулевое):
Входн.
Состояния
символы
фильтра
1
011
1
101
1
010
1
111
0
101
0
001
1
001
66
Последнее состояние фильтра – вычисленный синдром S(x) = 1.
Правильность вычислений можно проверить, выполняя деление с
остатком.
Если синдром отличен от нуля, то при передаче произошли ошибки.
На этом основано обнаружение ошибок. Хотя синдром в случае
циклических кодов определяется иначе, чем в случае линейных кодов,
теорема 1.9.1, как нетрудно убедиться, остается справедливой. Схема
доказательства остается такой же, как и в случае линейных кодов.
Поэтому эта теорема будет только переформулирована. Напомним только,
что вес полинома это количество его ненулевых коэффициентов.
Теорема 3.4.1. Пусть d – минимальное расстояние линейного
d 1
цикличес-кого (n,k)-кода с порождающим полиномом g(x) и t0 
.
2
Если e1 ( x), e2 ( x) два различных полинома ошибок, таких, что их вес
w1  t0 , w2  t0 , и S1 ( x), S2 ( x) их синдромы, тогда S1 ( x)  S2 ( x) . Другими
словами, синдромы различных ошибок, вес которых не превышает t 0 ,
различны. Если полином ошибки e1 ( x) имеет вес t0  w1  d  t0 , то
синдром S1 ( x)  0 и S1 ( x)  S2 ( x) ни для какого полинома e2 ( x ) при w2  t0 .
Другими словами, синдром ошибки e1 ( x) такой, что t0  w1  d  t0 , отличен
от нуля и не совпадает ни с одним из синдромо в для ошибок, вес которых
не превышает t 0 .
Из этой теоремы следует, что зная синдром, можно однозначно
восстановить полином ошибок и определить переданное сообщение при
условии, что число ошибок не превосходит t0  d–1/2. Если число ошибок
больше, чем t 0 , но меньше, чем d  t0 , то такие ошибки можно
обнаружить.
В случае линейных кодов для отыскания вектора ошибок по синдрому
необходимо хранить в памяти таблицу векторов ошиб ок. Для этого можно
использовать постоянное запоминающее устройство (ПЗУ), как это
показано на рис.1.9.1. В простых случаях, например, для кодов,
исправляющих одиночные ошибки, эта таблица содержит относительно
немного векторов и наряду с ПЗУ возможно испо льзовать такое
логическое устройство, как дешифратор с n выходами. Однако в более
сложных случаях таблица может оказаться весьма громоздкой, что сильно
усложнит декодер.
В случае циклических кодов запоминаемую таблицу можно сократить
примерно в n/t раз, сохраняя в ней не все исправляемые комбинации
ошибок, а только некоторые. Например, в случае циклических кодов,
исправляющих одиночные ошибки, возможно работать только с одним
вектором ошибок, а не с n векторами, как в случае обычных линейных
кодов. Ниже мы покажем, как такой декодер строится.
Обозначим через E  {e( x )} множество всех исправляемых ошибок.
При исправлении независимых ошибок с помощью кода с расстоянием d
множество Е состоит из всех ошибок кратности t 0 или меньшей, т.е. из
67
всех
полиномов
очевидно,
равно
 d  1
t  t0  
. Количество таких полиномов,
 2 
числу точек в шаре Хемминга радиуса
t0 ,
веса
t n
N n ,t0  t00  ( q  1) t . В случае исправления пакетов длины b или меньшей
t
множество Е состоит из N n,b  n(q  1)qb1 полиномов, представляющих
всевозможные пакетные ошибки. Как было показано выше, различные
полиномы ошибок e( x )  E имеют различные синдромы.
Покажем вначале, как декодируется старший символ yn 1 принятого
слова y(x). Обозначим через E подмножество Е, состоящее из всех
полиномов
en 1 x n 1  ...  e1 x  e0 ,
для
которых
en1   ,   GF ( q) ,   0 .
Очевидно, что подмножества E , соответствующие различным значениям
 , не пересекаются. Каждому подмножеству E соответствует свое
подмножество синдромов S  ,   GF (q) . В двоичном случае  принимает
только одно значение 1. Поэтому имеется только одно подмножество
ошибок E1 , для которых en1  1 и одно подмножество синдромов S1 ,
t 1 n  1
причем | S1 | i00 
 в случае независимых ошибок кратности t  t0 и
 i 
| S1 | 2 b1 в случае пакетных ошибок длины b или меньшей.
Для декодирования yn 1 анализируется синдром S ( x )  x r y ( x ) mod g ( x )
принятого слова y(x). Если S(x) принадлежит множеству S  , то символ
yn 1 ошибочен и величина ошибки равна  . Декодированное значение
этого символа полагается равным y n 1   . В двоичном случае проверяется
принадлежность S ( x ) множеству S1 и декодированное значение этого
символа полагается равным yn1  1 mod 2 . Если S(x) не принадлежит S  ни
при каком  , (или в двоичном случае не принадлежит м ножеству S1 ), то
символ yn 1 считается безошибочным.
После декодирования символа yn 1 слово y(x) сдвигается на одну
позицию в сторону старших степеней и выполняется следующий шаг
декодирования. Чтобы описать декодирование остальных символов
заметим следующее. Пусть y(x) имеет синдром S(x) и пусть y′(x) –
многочлен, соответствующий циклическому сдвигу слова y(x) на одну
позицию в сторону старших разрядов, y ' ( x )  x  y ( x ) mod ( x n  1) . Согласно
определению (3.4.1) синдром S′(x) слова y′(x) может быть вычислен по
формуле: S′(x)=xS(x)mod g(x). Другими словами, для получения синдрома
циклически сдвинутого слова достаточно умножить синдром исходного
слова на хmod g(x). Это замечание можно положить в осн ову следующего
алгоритма синдромного декодирования циклических кодов.
На шаге i декодируется символ y n i . Для этого по синдрому S(x),
найденному
на
предыдущем
шаге,
вычисляется
синдром
68
S ' ( x )  xS( x ) mod g ( x ) , циклически сдвинутой последовательности у. Для
последовательности у коэффициент при старшей степени х равен y n i .
Далее анализируется вычисленный синдром S ' ( x ) и проверяется
принадлежит ли он множеству S  . Если S ' ( x )  S , то символ y n i
ошибочен и величина ошибки равна  . Декодированное значение этого
символа полагается равным yni   . В двоич-ном случае проверяется
принадлежность S ' ( x ) множеству S1 и декодированное значение этого
символа полагается равным yn1  1 mod 2 . Если S(x) не принадлежит S  ни
при каком  , (или в двоичном случае не принадлежит множеству S1 ), то
символ y n i считается безошибочным. Далее выполняется сдвиг и переход
к следующему шагу декодирования. Декодирование завершается после
выполнения n шагов.
3.4.2. Синдромный декодер двоичного циклического кода ,
исправляющего однократные ошибки и пакеты ошибок
Вначале мы продемонстрируем работу описанного выше алгоритма
на примере того же двоичного циклического (7,4) -кода с d=3 и
порождающим многочленом g ( x)  x 3  x  1, который рассматривался в
предыдущих примерах. Этот код исправляет однократные ошибки, для
него множество E1 состоит всего из одного полинома ошибок e( x )  x 6 и
множество
состоит
из
одного
синдромного
полинома
S1
S1 ( x )  x r x n1  x r 1 mod g ( x ) .Так как для этого кода r=3, то S1 ( x )  x 2 .
Декодирование заключается в вычислении текущего синдрома и
сопоставлении его с полиномом x 2 , или, что то же самое, в сопоставлении
текущего состояния фильтра с состоянием (1 0 0). Если имеет место совпадение,
то символ, находящийся в крайней правой ячейке регистра сдвига
ошибочен и должен быть исправлен. В противном случае данный символ
является безошибочным.
Декодер,реализующий синдромное декодирование, показан на
рис.3.4.1. Он содержит 7-разрядный буферный регистр сдвига (РС) для
запоминания принятой последовательности, вычислитель синдрома и
логическую схему (ЛС) для идентификации ошибки в символе,
расположенном в крайней правой ячейке сдвигающего регистра. Для
коррекции ошибок используется сумматор по модулю 2, соединенный с
ЛС.
69
y(x)
c(x)
PC
Вычислител ь синдрома
S2
1
S1
0
S0
0
ЛС
Рис.3.4.1 Синдромный декодер для двоичного циклического (7,4) -кода
Декодер работает следующим образом. В течение первых n тактов
принимаемое слово накапливается в регистре сдвига, при этом в фильтре
происходит вычисление синдрома S(x). По окончании приема слова y(x)
символ yn 1 находится в крайней правой ячейке РС и состояние фильтра
равно синдрому. В течение последующих n тактов на вход декодера
подаются нули и происходит собственно декодирование (исправление
ошибок). Для этого выполняются сдвиги как в регистре РС, так и в
кодовом фильтре. Если синдром S(x) отличен от нуля, то состояние
фильтра будет последовательно модифицироваться и пр инимать значения
Так
как
состояние
x i  S ( x ) mod g ( x ), i  0,1,2,...6 .
x i  S ( x ) mod g ( x )
соответствует
синдрому циклически
сдвинутой
на
i
разрядов
последовательности у, то при одном из сдвигов ошибочный символ
займет крайнюю правую ячейку регистра. При этом мод ифицированный
синдром станет равным (100). На эту комбинацию (на это состояние
фильтра) настроена логическая схема (ЛС). Как только состояние фильтра
совпадет с комбинацией (100), появится сигнал коррекции и ошибочный
символ будет исправлен на выходе из ре гистра. Если ошибок при
передаче не было, то S(x)=0 и состояние фильтра будет нулевым.
Предположим, что на вход декодера подано слово x 6  x 5  x 4  x 3  1
(см. предыдущий пример). Как было показано, синдром, вычисленный по
окончании первых 7 тактов, будет равен (001). На последующих 7 тактах
происходит декодирование. Начиная с вычисленного синдрома (001)
фильтр последовательно принимает состояния (010), (100). Так как
состояния (001) и (010) не вызывают срабатывания ЛС, то символы y 6 = 1
и y 5 = 1 попадут на выход декодера без изменений. Символ y 4 = 1,
который в действительности ошибочен, будет скорректирован, поскольку
появление в фильтре комбина-ции (100) приведет к срабатыванию
логической схемы. Следующие состояния (011), (110), (111), (101) не
вызовут коррекции. Таким образом, декодер исправит ошибку в символе
y 4 и оставит без изменения остальные принятые символы.
Теперь построим декодер для двоичного циклического (7,3) -кода с d=
4 и порождающим полиномом g ( x )  ( x  1)  ( x 3  x  1) = x 4  x 3  x 2  1 .
Такой код позволяет исправлять однократные ошибки и обнаруживать
двукратные.
Предположим,
что
передается
кодовое
слово
4
3
2
4
2
a( x)  x  x  x  1 и принимается слово y( x )  x  x  x  1 с двумя ошибками.
70
МЛФ,
построенный
по
полиномам
g(x),
p(x)=x
и
b(x)=
r
3
2
x  x  x  1 mod g ( x ) , (см. рис.3.4.2) будет последователь-но принимать
состояния (0000), (0000), (1101), (0111), (0011), (1011), (0110).
y(x)
c(x)
PC
OС
Вычислитель синдрома
S1
S2
S3
S0
ЛС
1
0
0
0
Ненулевое состоян. в конце декодирования
Обнаружение
ошибки
Рис.3.4.2 Синдромный декодер для двоичного циклического (7,3) -кода,
исправляющего одиночные и обнаруживающего двойные ошибки
Последнее состояние (0110) - это вычисленный синдром. Далее
декодер работает в автономном режиме в отсутствие входных сигналов,
последовательно выполняя сдвиги и модифицируя синдромы. Фильтр
будет принимать следующие состояния: (1100), (0101), (1010), (1001),
(1111), (0011), (0110). Так как ни одно из этих состояний не совпадает
комбинацией, на которую настроена логическая схема ЛС и
окончательное состояние фильтра отлично от нулевого, то декодер
выдает сигнал о том, что обнаружена ошибка, которая не может быть
исправлена.
Если произошла однократная ошибка, то на одном из шагов в
фильтре появится селектируемая комбинация (1000), полином x r 1  x 3 .
При появлении этой комбинации срабатывает логическая схема (ЛС) и ошибка
исправляется. Благодаря дополнительной цепи обратной связи (ОС), сигнал
коррекции также модифицирует синдром. В случае однократных ошибок
состояние фильтра обнуляется. В случае многократных исправляемых
ошибок фильтр переходит к синдрому вектора с уменьшенным числом
ошибок. В случае, когда ошибок нет, то состояния фильтра будут всегда
нулевыми и y(x) поступает на выход без коррекции.
В разделе 3.1.4 (см. Табл. 3.1.2) указывалось, что полином g (x ) 
3
= ( x  x  1)  (1  x ) = x 4  x 3  x 2  1 порождает двоичный циклический код,
исправля-ющий пакеты ошибок длины b=2. В заключение этого пункта мы покажем,
как строится синдромный декодер для исправления пакетов ошибок. Забегая вперед,
отметим, что основная часть декодера, а именно логическая схема (ЛС), оказывается
существенно более простой по сравнению с логической схемой в случае
исправления независимых ошибок.
Заметим, что при исправлении пакетов ошибок структура синдромного
декодера не меняется. Изменения касаются только логической схемы. В п.3.4.1 мы
71
говорили о том, что при исправлении некоторого множества ошибок Е требуется
S ,
сформировать подмножество синдромов
соответствующее
всем
комбинациям ошибок, у которых последний символ равен   0 . В
двоичном случае   1 и соответствующее подмножество S1 состоит из 2 b1
полиномов
следующего
вида:
где
S ( x )  x r y ( x ) mod g ( x ) ,
n b
n b 1
n 1
y ( x )  y n b x  y n b1 x
 ...  y n 1 x , причем yn 1 =1, а y n b ,..., y n 2 принимают
всевозможные значения. В случае b=2 множество S1 состоит из двух полиномов
S1  {x r 1 , x r 1  x r 2 } .
Поэтому логическая схема должна срабатывать всякий раз, когда содержимое
фильтра будет вектором вида (1 Х 0 0 … 0), где Х означает произвольное значение 0
или 1.
y(x)
c(x)
PC
OС
Вычислитель синдрома
S1
S2
S3
S0
ЛС
1
X
0
0
Ненулевое состоян. в конце декодирования
Обнаружение
ошибки
Рис.3.4.3 Синдромный декодер для двоичного циклического (7,3) -кода,
исправляющего пакетные ошибки длины 1 или 2
Синдромный декодер, исправляющий пакеты ошибок длины 1 или 2 на длине
7, показан на рис.3.4.3. Он работает так же, как декодер, показанный на рис.3.4.2 и
исправляет все одиночные ошибки, все двойные ошибки, которые получаются как
циклические сдвиги комбинации (1 1 0 0 0 0 0). Поскольку имеется 7 одиночных и 7
двойных ошибок указанного вида, то будут использованы 1+7+7=15 синдромов,
включая нулевой синдром для нулевой комбинации ошибок. Один вектор синдрома,
а именно (1 0 1 1), может быть и использован для обнаружения тройных ошибок.
Такими обнаруживаемыми ошибками являются циклические сдвиги комбинации (1
1 0 1 0 0 0).
В случае исправления пакетов длины b логическая схема должна срабатывать
при появлении в фильтре состояний следующего вида:
(1 X ... X 0 ... 0) ,
b-1
где Х – неопределенные двоичные символы.
3.4.3. Синдромный декодер укороченного циклического кода
72
Как видно из таблицы 3.1.1, циклические коды существуют не для
всех значений длин. Длины, для которых можно построить p-ичный
циклический код, это либо p m  1 , либо делители таких чисел. Для некоторых
значений длин, циклические коды либо не существуют, либо могут быть
недостаточно эффективными. За счет укорочения, которое будет рассмотрено в этом
разделе, иногда можно получить весьма хорошие коды, имеющие столь же простые
схемы кодирования и декодиро-вания, как и циклические коды, из которых они
получаются. Более того, можно показать, что среди укороченных циклических кодов
имеются асимптотически хорошие, например, лежащие на границе ВаршамоваГилберта.
Пусть С – линейный (n, k) - код с минимальным расстоянием d и Сl - его
подкод, состоящий из всех слов, содержащих нули на выбранных l позициях.
Укороченным кодом называется (n', k') - код, n'= n-l ,k'=k-l, который получается из Сl
исключением выбранных l позиций из всех кодовых слов. Очевидно, что укорочение
линейного кода дает линейный код.
Укороченным циклическим кодом называется код, получающийся укорочением
исходного циклического кода за счет исключения l последовательных позиций.
Всегда можно считать, что циклический код укорачивается за счет отбрасывания l
позиций, соответствующих старшим степеням х. При этом информационный
m(x ) =
полином
= m0  m1 x  m2 x 2  ...  mk 1 x k 1
укорачивается:
m( x )  m0  m1 x  m2 x 2  ...  mk 1 x k 1 . Укороченный код не является циклическим,
однако, все его кодовые слова имеют вид m ( x ) g ( x ) , т.е. делятся на порождающий
полином g ( x ) исходного кода. Поэтому кодирование для укороченных циклических
кодов выполняется теми же самыми устройствами кодирования, что и для исходных
кодов. Отличие заключается только в том, что вместо n тактов они теперь работают
n-l тактов.
При укорочении минимальное расстояние, не уменьшается, хотя в некоторых
случаях оно может возрасти за счет устранения некоторых линейных зависимостей
между столбцами проверочной матрицы. Однако, процедура декодирования
остается аналогичной процедуре декодирования для исходного циклического кода.
Отличий вовсе не будет, если при декодировании удлинить код до исходной длины
n. В этом случае достаточно просто удлинить буферный регистр сдвига до длины n,
заполнить l его старших разрядов нулями и проводить декодирование за n тактов.
При небольшом изменении вычислителя синдрома можно иметь буферный
регистр с n-l ячейками и проводить декодирование за n-l шагов. Для этого вместо
синдрома принятого слова y ( x ) следует вычислить синдром слова x l y (x ) , подобрав
входные цепи фильтра из условия b( x )  x rl mod g ( x ) . Нетрудно проверить, что в
двоичном случае для одиночной ошибки, расположенной в крайнем правом разряде
буферного регистра, селектируемый синдром будет по-прежнему равен
x r l  x nl 1  x r 1 mod g ( x ) .
Пример 3.4.2. Рассмотрим двоичный (6,3)-код, получающийся укорочением
на один символ циклического (7,4)-кода с порождающим полиномом
g ( x )  x 3  x  1 . Для этого кода l =1 и b( x )  x r 1  x 2  x mod g ( x ) . Декодер
укороченного кода показан на рис.3.4.3. Предположим, что передается слово
c( x )  x 5  x 4  1  ( x 2  x  1) g ( x ) и на позиции, соответствующей x 4 произошла
73
ошибка, при этом y ( x )  x 5  1 . Имеем S ( x )  x  x r  y ( x)  x mod g ( x) . Фильтр,
показанный на рисунке, будет последовательно принимать следующие состояния:
(110), (111), (101), (001), (010), (010). Последнее состояние - это вычисленный
синдром.
y(x)
c(x)
PC
OС
Вычислитель синдрома
S0
S1
S2
ЛС
1
0
0
Ненулевое сост. в конце декодирования
Обнаружение
ошибки
Рис.3.4.4. Декодер укороченного циклического кода, исправляющего
одиночную ошибку
Затем выполняются 6 сдвигов, на каждом из них модифицируется синдром,
определяется величина ошибки в символе, расположенном в крайней правой ячейке
регистра сдвига, и происходит ее исправление. При некотором сдвиге ошибочный
символ попадет в крайнюю правую ячейку регистра, а вычислитель синдрома
перейдет в состояние (1 0 0), которое селектируется логической схемой (ЛС), она
срабатывает и исправляет ошибочный символ. Благодаря обратной связи (ОС),
фильтр перейдет в нулевое состояние после исправления ошибки.
Заметим, что укорочение придает коду новые обнаруживающие или
корректирую-щие свойства. Так, например, (6,3)-код из примера исправляет все
однократные ошибки и может обнаружить некоторые двукратные, а именно все
ошибки, синдром которых равен
x  1 . Чтобы проиллюстрировать это,
предположим, что произошли 2 ошибки на позициях 0 и 2, т.е. e( x )  x 2  1 .
Синдром при этом равен x 4 e( x )  x  1 mod g ( x ) . Он будет вычислен фильтром
после приема слова y ( x )  c( x )  e( x ) . На втором этапе декодирования при
выполнении сдвигов вычислитель синдрома будет принимать следующие состояния:
(0 1 1), (1 1 0), (1 1 1), (1 0 1), (0 0 1), (0 1 0). Ни одно из этих состояний, включая
последнее (0 1 0), не вызывает срабатывания ЛС и фильтр остается в ненулевом
состоянии, что обеспечивает обнаружение этой двукратной ошибки.
3.4.4. Вычислительные затраты при синдромном декодировании циклических
кодов
Вычислительные затраты при декодировании характеризуются двумя
параметрами – количеством выполняемых операций (временем вычислений) и
объемом требуемой памяти. Синдромное декодирование циклических кодов можно
74
разбить на следующие 3 этапа: 1) вычисление синдрома, 2) модификация синдрома
и проверка выполнения логических условий, 3) коррекция ошибок.
Предположим, что циклический код является двоичным, имеет длину n,
избыточ-ность r и исправляет ошибки кратности 1,2,…, t0. Первый этап –
вычисление синдрома - выполняется с помощью МЛФ, содержащего r ячеек памяти
и не более r двухвходовых сумматоров по модулю 2. Синдром вычисляется за n
тактов по мере поступления символов на вход фильтра. На втором этапе
выполняются n сдвигов в буферном регистре и n раз модифицируется синдром.
Коррекция ошибок также производится за n тактов по мере вывода символов из
регистра сдвига и для этого используется один сумматор по модулю 2.
Наиболее сложная операция – это проверка выполнения логических условий. В
случае однократных ошибок, t0=1, логическое условие единственно. Логическая
схема представляет собой схему совпадения, которая срабатывает при появлении в
МЛФ единственной комбинации (1 0 0 … 0). При исправлении большего числа
ошибок количество селектируемых комбинаций возрастает. Так, при t0=2 должны
селектироваться такие комбинации в МЛФ, которые соответствуют сидромам
двойных ошибок, одна из которых находится в крайней правой ячейке регистра
сдвига. Нетрудно понять, что количество таких комбинаций равно n-1. Это
синдромы следующих векторов ошибок:
1 0 0 . . . 0 0 1
0 1 0 . . . 0 0 1


n-1
0 0 1 . . . 0 0 1


 ..... 
0 0 0 . . . 0 11
n
При t0=3 нужно селектировать синдромы всех тройных ошибок, одна из
которых находится в крайней правой ячейке регистра сдвига. Количество таких
комбинаций равно числу сочетаний из n-1 по 2: одна ошибка находится на
фиксированном месте, а две другие могут располагаться на любых двух из n-1 мест.
В общем случае, количество r-разрядных двоичный комбинаций, которые
t 1 n  1
N n 1,t0 1 = i00 
должны селектироваться ЛС, равно
 . Это число
 i 
экспоненциально быстро растет с ростом длины кода и числа исправляемых
ошибок. Этот рост приводит к экспоненциальному росту времени декодирования
или объема памяти, необходимой для реализации логического устройства в
декодере. Поэтому задача построения декодера циклического кода, имеющего
умеренную сложность при достаточно больших значениях n и t0 остается весьма
актуальной. Решению ее будет посвящена следующая глава настоящего
руководства.
75
Гл.4. Коды Боуза-Чоудхури-Хоквингхема (БЧХ-Коды)
§4.1. Алгебраическое декодирование циклических кодов
В этом параграфе мы начнем рассмотрение алгебраического
декодирования циклических кодов, которое сводит задачу
определения положений и величин ошибок к решению некоторой
системы уравнений, в общем случае нелинейных. Несмотря на
кажущуюся
сложность
алгебраического
подхода,
часто
оказывается,
что
он
существенно
упрощает
задачу
декодирования. Более того, на основе этог о подхода оказывается
возможным сформулировать алгебраические требования к
порождающему полиному, при выполнении которых код будет
иметь заданное минимальное расстояние.
4.1.1. Алгебраическое декодирование циклических кодов с
минимальным расстоянием 3
Начнем с задачи декодирования двоичных циклических
кодов Хемминга с минимальным расстоянием 3. Порождающий
полином g(x) такого кода является неприводимым примитивным
делителем двучлена x n  1, n  2 m  1 . Обозначим через  корень
этого полинома и воспользуемся тем, что каждое кодовое слово с(x)
делится нацело на g(x), и, следовательно, c( )  0 для любого
c  (c0 , c1 ,..., cn 1 ) . Это свойство позволяет представить проверочную
матрицу кода Хемминга следующим образом:
H  [1   2
...  n2
 n1 ] .
(4.1.1)
Действительно,
 1 

c  H  (co , c1 ,..., cn 1 ) ....   c0  c1  ...  cn 1 n 1  c( )  0 .
 n 1 
T
В случае однократной ошибки на позиции i принятое слово
r ( x )  c( x )  e( x ) , где e( x )  x i . Синдром этого слова будет равен
S  r  HT  r( )  e( )   i .
Для того, чтобы найти позицию ошибки по вычисленному синдрому, мы
должны решить следующее уравнение
i  S ,
(4.1.2)
отыскивая то значение i, которое доставляет равенство в (4.1.2). Напомним,
что соответствующее i называется логарифмом S и записывается как
76
i  log  S . Поэтому декодирование циклического кода Хемминга состоит
из следующих шагов: (1) найти синдром S  r ( ) ; (2) найти позицию
ошибки i  log  S ; (3) инвертировать символ на позиции i.
4.1.2. Алгебраическое декодирование циклических кодов с
минимальным расстоянием 5
Пусть f 1 (x)- примитивный полином, порождающий поле
GF ( q), q  2 m , и его корень  это примитивный элемент этого поля.
Рассмотрим декодирование двоичного циклического кода С с
длиной n  2 m  1 и минимальным расстоя-нием 5. Как мы
убедимся позже, проверочная матрица для такого кода может
быть взята в виде:
1   2 . . .  n1 
H
.
3
32
. . .  3( n1) 
1  
(4.1.3)
Из условия c  H T =0 вытекает, что для любого кодового слова c(x )  C
c( )  0,
c( 3 )  0.
Другими словами, величины  и  3 являются корнями каждого
кодового слова и, следовательно, корнями порождающего полинома.
Обозначим через f 3 (x) полином, корнем которого является  3 .
Поэтому порождающий полином кода С равен
g(x) = f1 ( x) f 3 ( x) .
Теперь опишем алгебраический метод определения позиций
ошибок. Удобно ввести в рассмотрение локаторы позиций,
сопоставляя каждой из n позиций кодового слова различные
ненулевые величины поля GF (2 m ) , например i   i . Если при
передаче произошли две ошибки на позициях с номерами i и j, то
этим двум ошибкам соответствуют два локатора X 1   i , X 2   j .
Эти локаторы однозначно определяют положение ошибок, i  log X 1
и j  log X 2 . Поэтому задачу декодирования двоичного кода можно
трактовать, как задачу отыскания локаторов оши бок.
В случае двойной ошибки слово на входе декодера можно
записать как r( x )  c( x )  x i  x j . Декодеру при этом известно, что
с(  ) = 0, с(  3 ) = 0. Введем в рассмотрение компоненты синдрома
77
S1  r ( )   i   j , S 3  r ( 3 )   3i   3 j . Их можно вычислить, имея
полином r ( x ) , поэтому они считаются известными к началу
декодирования. Нетрудно видеть, что локаторы ошибок и компоненты
синдрома связаны между собой следующими уравнениями:
S1  X 1  X 2 ,
S 3  X 13  X 23 .
.
(4.1.4)
Введем
в
рассмотрение
многочлен
локаторов
ошибок
2
 ( x )  x   1 x   2 , обладающий по определению тем свойством,
что локаторы X 1 , X 2 являются корнями  ( x ) . По теореме Безу
многочлен локаторов ошибок можно представить следующим
образом:
 ( x )  ( x  X 1 )( x  X 2 )  x 2  ( X 1  X 2 ) x  X 1 X 2 .
Согласно (4.1.4) S1  X 1  X 2 и поскольку поле GF (q )
характеристику 2 то
(4.1.5)
имеет
S1  ( X 1  X 2 ) 3  X 1  X 1 X 2  X 1 X 2  X 2 .
3
3
2
3
3
Отсюда имеем  2  X 1 X 2  ( S1  S3 ) / S1 и  1  S1 . Учитывая эти
соотношения, получим
3
S  S3
 ( x )  x  S1 x  1
.
S1
3
2
(4.1.6)
Таким образом, зная компоненты синдрома S1 , S3 , мы можем
вычислить
коэффициенты
полинома
локаторов
ошибок.
Декодирование происходит следующим образом. Мы рассмотрим
3 случая.
А) Предположим, что S1  0, S3  0 . В этом случае предполагается,
что ошибок не было и результатом декодирования служит
принятое слово r ( x ) .
В) Предположим, что S1  0, S3  S1 . Такое происходит при одиночных
3
3
ошибках. Если ошибка находится на i -м месте, то S1   i и S3   3i  S1 .
Тогда из (4.1.6)
следует, что  ( x)  x 2  S1 x  x( x  S1 ). Локатор
ошибки это корень полинома  ( x ) . В данном случае ненулевой корень
равен S1 и он единственный, поэтому позиция ошибки i  log S1 . Выходом
~
декодера является слово r ( x ) , в котором символ на позиции i
инвертирован.
78
С) Предположим, что S1  0, S3  S1 . Мы можем вычислить
коэффициенты полинома  (x ) как это указано в (4.1.6). Для
отыскания позиций ошибок нужно найти корни этого полинома.
Корни можно найти, например, перебирая все ненулевые элементы
3
X  GF (2m ) и
находя те Х, для которых  ( X ) =0. При двух
ошибках будут найдены два локатора ошибок X 1 , X 2 . Позиции
ошибок будут найдены как i1  log X 1 , i2  log X 2 . Выходом декодера
является слово y ( x ) , в котором символы на позициях i1 ,i2
инвертированы.
§4.2. Матрица Вандермонда
В основе теории циклических кодов с произвольным
минимальным расстоянием лежат свойства одной замечательной
матрицы, известной под названием матрицы Вандермонда.
Матрицей
Вандермонда
называется
квадра тная
матрица
следующего вида:
1 X 1

1 X2
Vm  
.
.

1 X m
X1
2
X2
2
.
Xm


X2 
,
. 
m 1 
X m 
...
X1
m 1
...
.
2
m 1
...
(4.2.1)
где X 1 , X 2 , ..., X m1 - элементы произвольного поля.
Теорема 4.2.1 Определитель матрицы Вандермонда можно
вычислить следующим образом:
det Vm 
(X
i , j{1,...., m},
j i
j
 Xi ) .
(4.2.2)
Доказательство: Будем доказывать по индукции. Очевидно,
V1  1 . При m=1 множество индексов в (4.2.2) пусто. Произведение
пустого множества сомножителей принимается равным единице. Легко
найти, что det V2  X 2  X 1 , следовательно, (4.2.2) верно в этом случае.
Предположим, что равенство (4.2.2) верно для матрицы порядка
( m  1)  ( m  1) , т.е.
det Vm1 
(X
i , j{1,...., m 1},
j i
j
 Xi ) .
(4.2.3)
Докажем, что при этом равенство будет верным и для матрицы порядка
~
m  m . Для этого рассмотрим матрицу V m ( x ) , которая получается из Vm
заменой X m на переменную х:
79
1 X 1

1 X 2
~
V m ( x)  .
.

1 X m1
1
x

X 12
X 22
.
X m2 1
x2
m1
... X 1 
m1 
... X 2 
.
. .

... X mm11 
... x m1 
~
Определитель этой матрицы det V m ( x ) представляет собой полином
степени m  1 , коэффициенты которого являются произведениями и
суммами величин X 1 , X 2 , ..., X m1 .
Коэффициент при x m 1 равен
cm1  det Vm1 . Очевидно, X 1 , X 2 , ..., X m1 являются корнями полинома
~
~
det V m ( x ) , так как в матрице V m ( x ) строка с номером
~
последней
и, следовательно, det V m ( X j ) =0,
~
полином
det V m ( x )
через
~
det V m ( x )  cm1  ( x  X 1 )  ...  ( x  X m1 ) .
совпадет с
j
j=1,2,…,m-1. Выписывая
его
корни,
Учитывая
(4.2.3)
получим
и
то,
что
~
det Vm  det V m ( X m ) , получим утверждение теоремы.
Следствие. Определитель матрицы Вандермонда (4.2.1) не равен
нулю, если все величины X 1 , X 2 , ..., X m различны, и равен нулю, если хотя
бы две величины из X 1 , X 2 , ..., X m совпадают.
§4.3. Коды Боуза-Чоудхури-Хоквингхема
Коды Боуза-Чоудхури-Хоквингхема (БЧХ-коды) – это
широкий класс циклических кодов, способных исправлять
многократные ошибки и играющих заметную роль в теории и
практике кодирования. Интерес к ним определяется следующими
обстоятельствами: 1) среди БЧХ - кодов присутствуют весьма
хорошие коды; 2) известны относительно простые методы их
кодирования и декодирования; 3) коды Рида -Соломона,
являющиеся широко известным подкласс ом недвоичных БЧХ кодов, обладают определенными оптимальными свойствами; 4)
полное понимание кодов БЧХ, по -видимому, является наилучшей
отправной точкой для изучения многих других классов кодов.
4.3.1 Определение БЧХ-кодов
q-ичные БЧХ-коды задаются следующим образом. Пусть  примитивный элемент поля GF ( q m ) и    s - элемент порядка n, т.е.
80
 n  1 , причем n есть наименьшее ненулевое целое с таким свойством.
Напомним, что {1,  ,  2 ,...,  q  2} - суть все различные ненулевые элементы
поля GF ( q m ) , а  - порождает циклическую подгруппу порядка n,
m
Предположим, что {1 ,  2 , ...,  d 1} - различные
{1,  ,  2 , ...,  n 1} .
ненулевые
элементы
1   ,  2  
поля
GF ( q m ) ,
  l0 d 2 . Рассмотрим матрицу
причем
размера
,...,  d 1
( d  1)  n следующего вида:
l0
l0 1
1 1

1 2
H
.
.

1  d 1
12
 22
.
 d21
... 1n 1 

...  2n 1 
.
.
. 

...  dn11 
(4.3.1)
Будем предполагать, что Н является проверочной матрицей некоторого
линейного кода длины n, т.е. c  H T  0 для любого слова c  (c0 , c1 ,..., cn 1 )
этого кода.
Теорема 4.3.1. Линейный код с проверочной матрицей (4.3.1)
является циклическим. Порождающий полином этого кода имеет d –1
,
последовательных
степеней
а
именно,
l0
l0 1
l0 d 2
, среди своих корней. Минимальное
1   ,  2   ,...,  d 1  
расстояние кода не меньше, чем d.
Доказательство: Покажем, что вес w(c ) любого ненулевого
кодового слова с не меньше, чем d. Для этого предположим
противное,
а
именно,
что
нашлось
ненулевое
слово
m
c  ( c0 , c1 ,..., cn 1 ), ci  GF ( q ), с весом меньшим, чем d, для которого
c  H T  0 . Это означает, что в матрице Н нашлись менее, чем d
столбцов, линейная комбинация которых равна нулю. Другими
словами, в матрице Н можно выделить квадратную ( d  1)  ( d  1)
подматрицу Р с нулевым определителем. Выпишем эту подматрицу,
обозначив через i1 , i2 , ..., id 1 номера столбцов в Н, которые образуют Р:
 1i1
 i1

P 2
 .
 i1
  d 1
1i
 2i
2
2
.

i2
d 1
  l0i1
 ( l0 1)i1
d 1


.
.
.  
 ( l0 d 2 )i1
d d 1 
...  d 1   
1i 

...  2i 
...
li
d 1
02

( l0 1) i2
.

( l0  d  2 ) i2
li


... 


.
.
( l0  d  2 ) d d 1 
... 

...
0 d 1
( l0 1) id 1
Матрицу Р можно представить в виде следующего произведения:
81
 1
  i1
P
 .
 ( d 2 )i1

1

i2
.

   l0i1
...
 id 1   0

.
.
  .
( d  2 ) d d 1  
... 
  0
...
( d  2 ) i2
1
0

l0i2
.
0
0 

...
0 
 P1  P2 .
.
. 

...  l0d d 1 
...
Матрица P1 есть транспонированная матрица Вандермонда, построенная
для X 1   i1 ,..., X d 1   id 1 . Матрица P2 - диагональная матрица,
определитель которой
равен произведению диагональных членов.
Определитель матрицы Р
равен произведению определителей
сомножителей. Поскольку {i1 , i2 , ..., id 1} - различные числа из множества
{0, 1, ..., n  1} , то  i1 ,...,  id 1 - различные ненулевые элементы GF ( q m ) .
Отсюда вытекает, что det P  0 . Это противоречит исходному
предположению о том, что в матрице Н имеются d  1 линейно зависимых
столбцов и, следовательно, тому, что имеется кодовое слово с весом
меньшим, чем d .
Теперь докажем, что код с проверочной матрицей Н является
циклическим и порождающий полином имеет указанный в теореме набор
корней. Пусть c  (c0 , c1 ,..., cn 1 ) - кодовое слово и c( x )   ci x i i
соответствующий этому слову полином. Рассматривая произведение
c  HT  0 , мы можем заметить, что
c  H T  [c( 1 ) c(  2 ) ... c(  d 1 )] ,
c( x )
т.е.
полином
удовлетворяет
следующим
условиям:
c(  i )  0, i  1,..., d  1 . Другими словами, каждое кодовое слово, и также
порождающий полином g ( x ) , должны иметь среди своих корней d  1
последовательных
степеней
 l0 ,  l0 1 ,...,  l0 d 2  GF (q m ) . Другими
корнями полинома g ( x ) являются величины поля GF ( q m ) , сопряженные с
Таким образом, корни порождающего полинома
 l0 ,  l0 1 ,...,  l0 d 2 .
являются степенями элемента  , порядок которого равен n, поэтому они
все они являются корнями двучлена x n  1 . Следовательно, порождающий
полином g ( x ) является делителем x n  1 и код является циклическим.
На основе теоремы 4.3.1 строятся различные циклические коды,
параметры которых зависят от выбора полей и порождающих элементов.
Эти коды были открыты Боузом и Рой-Чоудхури (1960) и независимо от
них Хоквингхемом (1959). Главное требование, обеспечивающее заданное
минимальное расстояние d,
это требование существования
d 1
m
последовательных степеней некоторого элемента  из GF ( q ) среди
82
корней порождающего полинома. Не существенно с какого элемента  l0
начинается ряд последовательных степеней.
Действительное минимальное расстояние для некоторых кодов
может оказаться большим, чем d. Поэтому величина d называется
конструктивным расстоянием кода. Длина кода определяется порядком n
выбранного порождающего элемента, а число проверочных символов (или
степень порождающего полинома) определяется для выбранного поля
GF (q )
количеством
сомножителей
порождающего
полинома,
обеспечивающих заданное число последовательных степеней. Понятно,
что могут существовать много различных кодов с одинаковыми
параметрами. Коды называются примитивными, если n  q m  1.
4.3.2. Двоичные примитивные БЧХ-коды
Мы начнем изучение БЧХ-кодов с построения двоичных
примитивных кодов. Для этого выберем q=2 и n  2 m  1 . Обозначим через
 -примитивный элемент GF (2 m ) и через f1 ( x ) неприводимый над GF ( 2)
полином, корнем которого является  . Этот полином имеет степень m ,
поэтому его корнями служат элементы циклотомического класса
2
m 1
 ,  2 ,  2 ,...,  2 , порожденного  . Длины циклотомических классов,
которые порождаются другими элементами поля, являются делителями
числа m. Выберем полином g ( x ) с коэффициентами из GF ( 2) так, чтобы
 l0 ,  l0 1 ,  l0 2 ,...,  l0 d 2 были его корнями при некотором значении числа l 0 .
Для этого потребуем, чтобы среди элементов циклотомических классов,
соответствующих корням g ( x ) , присутствовали указанные
d-1 величин
поля. Поскольку каждый такой класс соответствует неприводимому над
GF ( 2) полиному, степень которого равна длине циклотомического класса,
и g ( x ) должен быть произведением таких полиномов, то наилучшим будет
такой выбор циклотомических классов, при котором суммарная степень
полиномов – сомножителей минимальна.
В качестве примера выпишем циклотомические классы элементов
поля GF ( 2 4 ) , используя логарифмическую форму представления, т.е.
выписывая только показатели степени примитивного элемента  и
используя тождество  15  1 , а также укажем соответствующие
неприводимые полиномы, корнями которых являются элементы
циклотомических классов:
I 0  {0},
f 0 ( x )  x  1,
I1  {1, 2, 4, 8},
f1 ( x)  x 4  x  1,
I 3  {3, 6, 12, 9},
f 3 ( x )  x 4  x 3  x 2  x  1,
I 5  {5, 10},
f 5 ( x )  x 2  x  1,
I 7  {7, 14, 13, 11}.
f 7 ( x )  x 4  x 3  1.
83
Отметим сразу, что в двоичном случае все циклотомические классы,
исключая класс I 0  {0},
в логарифмической форме порождаются
нечетными числами, поскольку четное число 2l , l  0, принадлежит тому
же классу, что и число l . Поэтому условие того, чтобы в некотором
множестве циклотомических классов нашлась серия {l 0 , l 0  1, ..., l 0  d  2} ,
состоящая из d  1 последовательных натуральных чисел, в двоичном
случае эквивалентно условию того, чтобы нашлась серия, из [d  1 / 2]
идущих подряд нечетных чисел. Отсюда и из того, что длины
циклотомических классов не превышают m , вытекает следующее
утверждение, справедливое для двоичных БЧХ-кодов.
Теорема 4.3.2. Количество избыточных символов r в двоичном БЧХкоде с минимальным расстоянием d  2t  1 и длиной n , где n  2 m  1 или
является делителем этого числа, удовлетворяет неравенству r  mt .
Количество избыточных символов в двоичном коде с минимальным
расстоянием d  2t  2 не превосходит mt  1 .
Пример 4.3.1. Пусть m=4 и n=15. В следующей таблице приведены
параметры всех двоичных БЧХ-кодов длины 15 с различными значениями
конструктивного расстояния d . Для кодов из табл.4.3.1 минимальное и
конструктивное расстояния совпадают.
Табл.4.3.1
d
I 
Корни
Порожд. полиноом g (x )
2
3
4
I0
{0}
x 1
I1
I 0 , I1
{1, 2, 4, 8}
{0}, {1, 2, 4, 8}
x4  x  1
( x  1)  ( x 4  x  1)
5
I1 , I 3
{1, 2, 4, 8},{3, 6,12, 9}
( x 4  x  1)  ( x 4  x 3  x 2  x  1)
6
I 0 , I1 , I 3
{0},{1, 2, 4, 8},{3, 6,12, 9}
(x  1) 
( x 4  x  1)  ( x 4  x 3  x 2  x  1)
7
I1 , I 3 , I 5
{1, 2, 4, 8},{3, 6,12, 9},{5,10}
( x 4  x  1)  ( x 4  x 3  x 2  x  1) 
 ( x 2  x  1)
8
I 0 , I1 , I 3 , I 5
{0},{1, 2, 4, 8},{3, 6,12, 9},
{5,10}
( x  1)  ( x 4  x  1) 
 ( x 4  x 3  x 2  x  1)  ( x 2  x  1)
15
I1 , I 3 , I 5 , I 7
{1, 2, 4, 8},{3, 6,12, 9},{5,10},
{7,14,13,11}
( x 4  x  1)  ( x 4  x 3  x 2  x  1) 
 ( x 2  x  1)  {x 4  x 3  1}
84
В таблице 4.3.2 даны паметры некоторых двоичных примитивных БЧХкодов, n, k и t  ( d  1) / 2 , где d конструктивное расстояние кода.
Использована восьмеричное представление порождающего полинома
(например, 23  (010 011) или x 4  x  1)
Табл.4.3.2
n
k
t
Порождающи й полином в восьмеричной форме
15
11
7
5
1
2
3
23
721
2467
31
26
21
16
11
6
1
2
3
5
7
45
3551
10765 7
54233 25
31336 5047
63
57
51
45
39
36
30
24
18
16
10
7
1
2
3
4
5
6
7
10
11
13
15
103
12471
17013 17
16662 3567
10335 00423
15746 41655 47
17323 26040 4441
13630 26512 35172 5
63311 41367 23545 3
47262 23055 27250 155
52310 45543 50327 1737
120
113
106
99
92
85
78
71
64
57
50
43
36
29
22
15
8
1
2
3
4
5
6
7
9
10
11
13
14
15
21
23
27
31
211
41567
11554 743
34470 23271
62473 00223 27
13070 44763 22273
26230 00216 61301 15
62550 10713 25312 7753
12065 34025 57077 31000 45
33526 52525 05705 05351 7721
54446 51252 33140 12421 50142 1
17721 77221 36512 27521 22057 4343
31460 74666 52207 50447 64574 72173 5
40311 44613 67670 60366 75301 41176 155
12337 60704 04722 52243 54456 26637 64704 3
22057 04244 56045 54770 52301 37622 17604 353
70472 64052 75103 06514 76224 27156 77331 30217
Порождающи й полином в восьмеричной форме
127
85
255
247
239
231
223
215
207
199
191
187
179
171
163
155
147
139
131
123
115
107
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
18
19
21
22
99
23
91
25
87
26
79
27
71
29
63
30
55
31
47
42
45
43
37
45
435
26754 3
15672 0665
75626 64137 5
23157 56472 6421
16176 56056 76362 27
76330 31270 42072 2341
26634 70176 11533 37145 67
52755 31354 00013 22236 351
22624 71071 73404 32416 30045 5
15416 21421 23423 56077 06163 0637
75004 15510 07560 25515 74724 51460 1
37575 13005 40766 50157 22506 46467 7633
16421 30173 53716 55253 04165 30544 10117 11
46140 17320 60175 56157 07227 30247 45356 7445
21571 33314 71510 15126 12502 77442 14202 41654 71
12061 40522 42066 00371 72103 26516 14122 62725 06267
60526 66557 21002 47263 63640 46002 76352 55631 34727 37
22205 77232 20662 56312 41730 02353 47420 17657 47501
54441
10656 66725 34731 74222 74141 62015 74332 25241 10764
32303 431
67502 65030 32744 41727 23631 72473 25110 75550 76272
07243 44561
11013 67634 14743 23643 52316 34307 17204 62067 22545
27331 17213 17
66700 03563 76575 00020 27034 42073 66174 62101 53267
11766 54134 2355
24024 71052 06443 21515 55417 21123 31163 20544 42503
62557 64322 17060 35
10754 47505 51635 44325 31521 73577 07003 66611 17264
55267 61365 67025 43301
73154 25203 50110 01330 15275 30603 20543 25414 32675
50105 57044 42603 54736 17
25335 42017 06264 65630 33041 37740 62331 75123 33414
54460 45005 06602 45525 43173
15202 05605 52341 61131 10134 63764 23701 56367 00244
70762 37303 32021 57025 05154 1
51363 30255 06700 74141 77447 24543 75304 20735 70617
43234 32347 64435 47374 03044 003
В таблице 4.3.2 приведены параметры кодов с нечетными
конструктивными расстояниями
2t  1. Порождающие полиномы
строились по совокупности корней  ,  2 , ...,  2t . Четное расстояние 2t  2
может быть получено присоединением корня 1. Другими словами,
порождающий полином БЧХ-кода с четным расстоянием получается из
порождающего полинома с нечетным расстоянием в результате умножения
этого полинома на x  1 .
86
4.3.3. Двоичные непримитивные циклические коды
Если длина кода n является делителем 2 m  1 , но не совпадает с
этим числом, то код называют непримитивным.
В таблице 4.3.3 приведены параметры некоторых непримитивных
двоичных циклических кодов и приведены их порождающие полиномы в
восьмеричной форме.
Табл.4.3.3
В
m
n
k
t
Порождающи й полином в
восьмеричной форме
8
6
11
10
10
20
23
12
12
9
17
21
23
33
33
41
47
65
65
73
9
12
12
22
12
21
24
63
40
46
2
2
3
2
4
4
5
2
4
4
727
1663
5343
5145
3777
66471 33
42073 357
10761
35430 3067
17177 73537
случае примитивных кодов действительное кодовое расстояние весьма
часто совпадает с конструктивным расстоянием. Однако, в случае
непримитивных кодов такого совпадения чаще всего нет. Дело в том, что
наличие d  1 последовательных степеней среди корней порождающего
полинома является наглядным достаточным условием того, что в коде нет
слов веса l  d  1 . Существуют другие формы условий, вытекающие из
свойств симметрических функций корней, которые можно использовать
для уточнения границ минимального расстояния циклических кодов.
Для иллюстрации метода уточнения минимального расстояния
циклических кодов рассмотрим знаменитый плотно упакованный
двоичный код Голея, открытый в 1949 г. еще до появления теории
кодирования. Это код с длиной n=23, k=12, исправляющий тройные
ошибки. Порождающий полином g ( x )  x11  x 9  x 7  x 6  x 5  x  1 , в
восьмеричной
записи
этот
полином
записывается
как
23
5343  (101 011 100 011) . Он является делителем x  1 , поэтому его
корень  принадлежит показателю 23, т.е.  23  1 . Циклотомический
класс C β , порожденный элементом  , состоит из следующих 11
элементов (приведены их логарифмы): {1, 2, 4, 8, 16, 9, 18, 13, 3, 6, 12}. В
87
ряду корней имеются только 4 последовательные степени  : {1, 2, 3, 4}.
Поэтому конструктивное расстояние этого кода равно 5. Покажем, что
действительное значение минимального расстояния равно 7.
Имеется много доказательств этого факта. Мы приведем одно из них,
основанное на свойствах т.н. симметрических функций корней и на их
связи
с
коэффициентами
полиномов.
Пусть
t
 ( x )  x t   1 x t 1  ...   t 1 x   t   ( x  X i )
-полином,
корнями
i 1
которого служат элементы некоторого поля X 1 , X 2 ,..., X t . Известно, что
коэффициенты
этого
полинома
являются
элементарными
симметрическими функциями корней. Связь между ними устанавливается
с помощью известных в алгебре тождеств Ньютона:
S1   1  0,


S 2  S1 1  2 2  0,

. . . . . . .


S t  S t 1 1  ...  S1 t 1  t   t  0

S k  S k 1 1  S k 2 2  ...  S k t t  0, k  t ,
(4.3.2)
где
S k  X 1k  X 2k  ...  X tk .
Мы будем считать, что X 1 , X 2 ,..., X t
символов
некоторого
кодового
слова
(4.3.3)
- это локаторы ненулевых
c( x )  x i1  x i2  ...  x it
и
t
 ( x )   ( x  X i ) - полином степени t, корни которого – локаторы
i 1
ненулевых символов этого слова. Каждому кодовому слову веса t
соответствует
полином  (x ) . Коэффициенты  1 ,  2 , ... ,  t и корни
X 1 , X 2 ,..., X t связаны уравнениями (4.3.2). Кроме того, для всякого
k
k
k
k
кодового слова имеют место равенства: c(  )  X 1  X 2  ...  X t  S k .
Поэтому, если  k  Cβ , то S k  0 . Таким образом,
S1  S2  S4  S8  S16  S9  S18  S13 = S3  S6  S12  0 .
(4.3.4)
В коде нет слов с весом t, если система уравнений (4.3.2) не имеет
ненулевых решений относительно  1 ,  2 , ... ,  t при выполнении условий
(4.3.4).
Вначале покажем, что в коде Голея (23,12) нет слов веса 5. Это будет
сделано, если мы убедимся в том, что система уравнений (4.3.2) не имеет
ненулевых решений при t  5 . Заметим, что для кода Голея имеется всего
2 циклотомических класса длины 11. Поэтому S k  0 для всех других
индексов k, отличных от указанных в (4.3.4). Иначе конструктивное
расстояние было бы равно n. Из уравнений 1, 3 и 5 в (4.3.2) получим, что
88
 1   3   5  0 . Из последнего уравнения (4.3.2) при k  12 получим, что
S11 1  S10 2  S7 5  0 , откуда  2  0 . Наконец, из последнего уравнения
при k  7 получим S5 2  S7  0 , что противоречит найденному  2  0 .
Таким образом, (4.3.2) не имеет решений при t  5 . Таким же образом
доказывается, что (4.3.2) не имеет ненулевых решений при t  6 .
Действительно, из уравнений 1, 3 и 5 в (4.3.2) снова получим, что
 1   3   5  0 . Из последнего уравнения (4.3.2) при k  12 получим, что
S11 1  S10 2  S7 5  0 , откуда  2  0 . Из последнего уравнения (4.3.2)
при k  7 имеем S5 2  S7  0 , что противоречит найденному  2  0 .
Таким образом, (4.3.2) не имеет решений при t  6 . Значит минимальное
расстояние кода Голея не меньше 7. Оно равно 7, поскольку порождающий
полином является одним из кодовых слов и имеет вес 7.
Аналогичный анализ применим ко многим двоичным циклическим
кодам и дает улучшенную оценку минимального расстояния.
4.3.4. Недвоичные БЧХ- коды, граница Синглтона и коды РидаСоломона
Теорема 4.3.1 верна для любых конечных полей. Она приводит к
кодам с конструктивным расстоянием
d, если среди корней
порождающего полинома найдется серия d-1 подряд идущих степеней
некоторого элемента поля. Однако, теорема 4.3.2 о количестве избыточных
символов в недвоичном случае должна быть переформулирована.
Теорема 4.3.3. Количество избыточных символов r в недвоичном
БЧХ-коде с минимальным расстоянием d  2t  1 и длиной n , где
n  2 m  1 или является делителем этого числа, удовлетворяет неравенству
r  2mt . Количество избыточных символов в двоичном коде с
минимальным расстоянием d  2t  2 не превосходит 2 mt  1 .
Рассмотрим троичный плотно упакованный (11,6)-код с
минимальным расстоянием 5, который также был открыт Голеем в 1949 г.
Этот код порождается неприводимым над полем GF (3) полиномом
g ( x )  x 5  x 4  2 x 3  x 2  2 , который делит x11  1 . Следова-тельно,
корень  этого полинома имеет порядок 11, а циклотомический класс,
порожденный  состоит из следующий элементов (в логарифмическом
представлении) {1, 3, 9, 5, 4}. Порождающий полином имеет среди своих
корней  3 ,  4 ,  5 , поэтому по БЧХ-границе минимальное расстояние кода
больше или равно 4. Покажем, что минимальное расстояние этого кода
равно 5. Для этого воспользуемся тождествами Ньютона и тем, что
S1  S3  S9  S5  S4  0 . Заметим, что элементы порядка 11 образуют еще
один циклотомический класс, состоящий из 5 элементов поля: {2, 6, 7, 10,
8}. Очевидно, что ни одна из величин S2 , S6 , S7 , S10 , S8 не равна нулю. В
89
противном случае все слова по БЧХ границе имели бы вес 11 и
порождающий полином имел бы степень10. Итак, мы хотим показать, что в
коде нет слов веса 4, т.е. система (4.3.2) неразрешима для полинома
локаторов позиций  ( x )  x 4   1 x 3   2 x 2   3 x   4 .
Из первого уравнения (4.3.2) получаем  1  0 . Из последнего
уравнения для k  7 получим S7  S6 1  S5 2  S4 3  S3 4  S7  0 , что
невозможно. Поэтому слов веса 4 нет. Минимальное расстояние равно 5,
поскольку порождающий полином имеет вес 5.
Особое место среди недвоичных БЧХ-кодов занимают коды РидаСоломона (РС-коды), открытые еще до изобретения БЧХ-кодов. Эти коды
обладают уникальными свойствами, которые будут рассматриваться ниже.
Они лежат в основе многих кодовых конструкций (например, в основе
каскадных кодов) и используются во многих прикладных задачах
(например, в контроллерах магнитных дисков, оптических дисков,
накопителей на магнитных лентах, а также во многих системах передачи
данных).
Для примитивных q -ичных РС-кодов длина кода n  q  1 и
кодовый алфавит это поле GF (q ) . Определим порождающий полином
кода следующим образом. Пусть  - примитивный элемент GF (q ) и
g ( x ) = ( x   l0 )( x   l0 1 )    ( x   l0 d 2 ) ,
(4.3.5)
где  l0 ,  l0 1 ,  l0 2 ,...,  l0 d 2 - серия подряд идущих степеней  , задающих
код. Кодовыми словами РС-кода являются все полиномы вида m( x ) g ( x ) ,
где информационный полином m( x )  m0  m1 x  ...  mk 1 x k 1 имеет
коэффициенты mi  GF (q) и степень k 1  n  d . Конструктивное
расстояние кода согласно теореме 4.3.1 равно d.
Покажем, что РС-коды принадлежат классу кодов с максимальным
достижимым расстоянием (классу МДР-кодов). Для этого докажем вначале
неравенство, называемое границей Синглтона.
Теорема 4.3.4 (Граница Синглтона). Для любого q -ичного кода с
длиной n и минимальным расстоянием d количество кодовых слов
удовлетворяет неравенству
M  q nd 1 .
(4.3.6)
Доказательство: Любые два кодовых слова отличаются по меньшей
мере в d позициях. Если мы удалим некоторые d  1 позиций из всех
кодовых слов, то любые два слова, укороченные до длины n  d  1 попрежнему будут различаться. Имеется q n d 1 различных слов длины
n  d  1 , поэтому M  q nd 1 .
90
Коды, у которых число кодовых слов равно правой части неравенства
(4.3.6) называются кодами с максимальным достижимым расстоянием (или
МДР-кодами). При заданных q, n и M на этих кодах достигается
наибольшее возможное минимальное расстояние. Нетрудно увидеть, что
для РС-кодов число кодовых слов M  q k  q n d 1 , т.е. на них достигается
граница Синглтона и, следовательно, они являются МДР-кодами.
Пример 4.3.1. Построим РС-код с расстоянием d  5 над полем
GF (23 ) . Для этого кода q  8, n  q  1  7 . Предположим, что для задания
этого поля выбран примитивный, неприводимый над GF ( 2) полином
f ( x )  x 3  x  1 . Обозначим через  его корень. В последующих
вычислениях мы будем учитывать, что  7  1 и что  3    1  0 . Код с
расстоянием 5 задается полиномом
g ( x )  ( x  1)( x   )( x   2 )( x   3 )  x 4   2 x 3   5 x 2   5 x   6 .
Здесь выбрано l0  0 и следующая совокупность корней  0  1,  ,  2 ,  3 .
Число информа-ционных символов равно k  n  r  3 . Имеется
кодовых слов. Каждое кодовое слово это
q 3  83  29  512
последовательность из 7 восьмеричных символов. Любые два слова
различаются по меньшей мере в 5 позициях, следовательно любые ошибки
кратности 1 и 2, где ошибка - это любое искажение восьмеричного
символа, могут быть исправлены.
§4.4. Декодирование БЧХ-кодов
Теперь мы перейдем к центральному вопросу теории БЧХ-кодов, а
именно, к их алгебраическому декодированию. Этот вопрос оказывается
центральным, так как построение и декодирование многих других кодов
так или иначе к этому сводится. Исторически первый метод декодирования
был найден Питерсоном (1960) (двоичный случай), а также Горенстейном
и Цирлером (1961) (недвоичный случай), практически одновременно с
открытием БЧХ-кодов (1959, 1960). Существенное продвижение в сторону
упрощения алгоритма было найдено Берлекэмпом (1968) и в дальнейшем
усовершенствовано Месси (1969). Концептуально более ясный метод
декодирования, основанный на использовании алгоритма Евклида, был
предложен в работе Сугияма, Касахара, Хирасава и Намекава (1975).
Мы начнем с алгоритма Питерсона-Горенстейна-Цирлера, который
имеет ясную алгебраическую трактовку. Он сводит задачу декодирования
к решению систем линейных уравнений подобно тому, как это делалось в
разд. 4.1.1 и 4.1.2, и позволяет ввести основные объекты, связанные с
декодированием, – синдромный полином, полиномы локаторов и величин
ошибок, и изучить их основные свойства. Затем мы опишем метод
декодирования, основанный на алгоритме Евклида. Этот метод использует
матричное представление алгоритма Евклида и также достаточно прост в
понимании. Он применяется для решения т.н. ключевого уравнения
декодирования и позволяет существенно уменьшить сложность той части
91
алгоритма декодирования, которая связана с решением системы линейных
уравнений.
Замечательно красивой оказывается спектральная трактовка БЧХкодов и их алгоритмов декодирования. С помощью преобразований Фурье
в конечных полях можно представлять операции кодирования и
вычисления синдромных компонент. При этом можно использовать
различные варианты быстрых преобразований (БПФ), упрощающих
вычисления. Если полином локаторов ошибок найден, то исправление
ошибок можно представить как вычисление некоторой рекурсии, которая
непосредственно находит информационный полином. Декодированное
кодовое слово получается в результате обратного преобразования Фурье из
информационного полинома.
В заключение этого раздела мы приведем алгоритм декодирования
Берлекэмпа-Месси, который
является наиболее употребительным в
многочисленных приложениях. К сожалению, этот алгоритм не является
столь же простым в обосновании, поэтому мы дадим только краткое его
обсуждение.
4.4.1. Основное уравнение декодирования БЧХ кодов
d
БЧХ-код над GF (q ) с длиной n и конструктивным расстоянием
задается последовательностью корней  l0 ,  l0 1 ,...,  l0 d 2 , где
  GF (q m ) -элемент порядка n ,  n  1 и l 0 - некоторое целое, которое в
приложениях часто выбирается как 0 или 1. Каждое кодовое слово c( x )
обладает тем свойством, что c(  l0  j 1 )  0 , j  1, 2, ..., d  1 . Пусть
r ( x )  r0  r1 x  ...  rn 1 x n 1  c( x )  e( x )
принятое
слово.
Предположим, что произошло t ошибок на позициях с номерами
i1 , i2 ,..., it и ei1 , ei2 ,..., eit - величины ошибок. Синдром слова r (x ) состоит
из d  1 компонент: S j  r(  l0  j 1 ), j  1,..., d  1 , он не зависит от
переданного слова, а определяется только полиномом ошибок:
S j  r(  l0  j 1 )  c(  l0  j 1 )  e(  l0  j 1 )  е(  l0  j 1 ), j  1,..., d  1,
где e( x)  ei1 x i1  ei2 x i2  .....  eit x it .
Введем в рассмотрение локаторы позиций, пусть
i,
i  0, 1, ..., n  1 , - локатор i-й позиции. Поскольку  i различны для всех i,
то локаторы и позиции однозначно определяют друг друга. Обозначим
через Yk  eik величину и через X k   ik локатор k-й ошибки, k=1,2,…,t.
Тогда компоненты синдрома можно выразить через величины и локаторы
ошибок следующим образом:
92

S1  Y1 X 1l0  ...  Yt X tl0 ,

l 1
l 1
 S 2  Y1 X 10  ...  Yt X t 0 ,

. . . . . . . .

 S d 1  Y1 X 1l0 d 2  ...  Yt X tl0 d 2 .
(4.4.1)
Задача
заключается
в
том,
чтобы,
зная
синдром
S  ( S1 , S 2 , ..., S d 1 ) , опреде-лить число ошибок, их локаторы X 1 , X 2 , ..., X t
и их величины Y1 , Y2 , ..., Yt .
Теперь введем полином локаторов ошибок:
 ( x )  (1  xX 1 ).....(1  xX t )  1   1 x  ...   t x t .
(4.4.2)
Корнями этого полинома являются величины, обратные
локаторам ошибок. Положим J  l0  j  1 . Тогда из (4.4.2)
вытекает следующее равенство, справедливое при всех l и j :
( x)Yl X l
J t
 Yl X l
J t
 1Yl X l
J t
 x  ...   tYl X l
J t
 xt .
Если положить x  X l1 и затем просуммировать левые и правые
части получаю-щихся равенств по l =1,2,…,t, то получим
t
0   (Yl X lJ t   1Yl X lJ t 1  ...   tYl X lJ ) 
t
i 1
t
t
i 1
i 1
  Yl X lJ t   1  Yl X lJ t 1  ...   t  Yl X lJ .
i 1
Учитывая определение синдромных компонент (4.4.1), а также
t
равенство
S j k   Yl X lJ k ,
окончательно
получим
следующие
l 1
уравнения,
связывающих
синдромные
коэффициенты полинома локаторов ошибок:
компоненты
S j t   1 S j t 1  ...   t S j  0, j  {1,..., t}
и
(4.4.3)
Выражение (4.4.3) носит название основного уравнения
декодирования БЧХ кодов. Его можно представить в виде
следующей системы линейных уравнений для коэффициентов
полинома локаторов ошибок:
 S1
S
 2
.

 St
S2
S3
.
S t 1
...
...
S t 1
St
...
.
... S 2t 2
S t    t    S t 1 
S t 1   t 1   S t 2 

.

.   ...   ... 
 

 
S 2 t 1    1    S 2 t 
(4.4.4)
93
Решая эту систему уравнений, мы получим коэффициенты
полинома локаторов ошибок  (x ) . Локаторы ошибок, по которым
можно определить позиции ошибок, находятся как элементы поля
GF ( q m ) , обратным корням полинома  (x ) .После того, как определены
локаторы X 1 , X 2 , ..., X t , величины ошибок Y1 , Y2 , ..., Yt определяются из
системы линейных уравнений (4.4.1).
4.4.2. Алгоритм декодирования Питерсона-Горенстейна -Цирлера
Для решения системы уравнений (4.4.4) предварительно нужно
выяснить сколько ошибок в действительности произошло. В следующей
теореме проясняется важность этого обстоятельства, а также то, как число
ошибок может быть определено.
Теорема 4.4.5. Матрица
 S1
S
Mt   2
.

 St
S2
S3
.
S t 1
...
...
S t 1
St
...
.
... S 2 t 2
St 
S t 1 

. 

S 2 t 1 
(4.4.5)
невырождена ( имеет ненулевой определитель), если величины
Si (см.(4.4.1)) образованы точно из t ненулевых пар ( Yl , X l ). Матрица M t
вырождена, если Si образованы менее, чем из t ненулевых пар ( Yl , X l ).
Другими словами, матрица M t невырождена и имеет макимальный размер
тогда и только тогда, когда число ошибок в точности равно t.
Доказательство: Используя уравнения (4.4.1), можно проверить, что
 1
 X
Mt   1
 .
 t 1
X1
1
X2
.
X 2t 1
1  Y1 X 1

Xt   0

.
.   .
 
... X tt 1   0
...
...
0
Y2 X 2
.
0
0  1 X 1 ... X 1t 1 
 

...
0  1 X 2 ... X 2t 1 
.

.
.  . .
.
. 
 

... Yt X t  1 X t ... X tt 1 
...
Матрица M t невырождена тогда и только тогда, когда каждая из этих трех
матриц не вырождена. Первая и последняя матрицы – это матрицы
Вандермонда, они не вырождены, когда все локаторы различны. Средняя
матрица диагональная, она не вырождена, когда все локаторы и величины
ошибок не равны нулю.
Таким образом, система уравнений (4.4.4) может быть решена только
в том случае, когда порядок системы (размерность матрицы и число
уравнений) равно действительному числу ошибок. Число ошибок в свою
очередь может быть определено с помощью следующей процедуры:
94
Положить t равным максимальному значению t max  [( d  1) / 2] , а
именно целой части ( d  1) / 2 ; вычислить определитель det M t . Если
он отличен от нуля, то принять t  t max . В противном случае
уменьшить t на единицу и повторить проверку. Остановиться на том
значении t, для которого впервые det M t  0 .
Для декодирования по Питерсону-Горенстейну-Цирлеру
выполнить следую-щие действия:
нужно
1. Определить действительное число ошибок t.
2. Решить систему уравнений (4.4.4) и построить полином локаторов
ошибок  (x ) .
3. Найти корни полинома  (x ) , например, перебирая по всем ненулевым
элементам циклической группы {1,  ,  2 , ...,  n 1} и отыскивая такие
значения, что (  k )  0 . Найти локаторы ошибок X 1 , X 2 , ..., X t , беря
значения обратные корням полинома  (x ) . В двоичном случае
исправить ошибки на позициях, соответствующих локаторам ошибок, и
закончить декодирование. В недвоичном случае перейти к п.4.
4. Решить систему уравнений (4.4.1), рассматривая величины ошибок
Y1 , Y2 , ..., Yt как неизвестные. Исправить ошибки, вычитая из принятого
на позиции ik найденную величину ошибки Yk , k  1, 2, ..., t . После
этого закончить декодирование.
Пример 4.4.1. Мы продемонстрируем эту процедуру декодирования
на примере кода Рида-Соломона, построенного в примере 4.3.1. Напомним,
что РС-код этого примера имеет длину 7, минимальное расстояние 5.
Порождающий полином задается корнями 1,  ,  2 ,  3 и равен g (x ) 
x 4   2 x 3   5 x 2   5 x   6 . Здесь  -примитивный элемент поля GF (23 ) и
корень полинома f ( x )  x 3  x  1 ,  7  1 . Поле задается с помощью
следующей таблицы
000
110
3
1
100

010
2
001
4
5
6
011
111
101
Предположим,
что
передаваемое
слово
4
2 3
5 2
5
6
c( x)  x   x   x   x   и ошибки произошли на второй и шестой
позициях, так что принятое слово r( x)  x 6  x 4   2 x 3   3 x 2   5 x   6 .
Декодирование начинается с вычисления четырех синдромных компонент:
95
 S1  r (1)    1   2   3   5   6   4 ,

4
5
5
6
6
5
 S 2  r ( )  1             ,

2
6
6
 S 3  r ( )        1  1    0,
S 4  r ( 3 )   5   5   4   2     6   6 .
1. Определение числа ошибок. Положим t  t max  [d  1 / 2]  2 и найдем
определитель матрицы M 2 :
 4  5 
 S S2 
3
det M 2  det  1

det
 5
    0.

S
S

0
3
 2


Таким образом, число ошибок в y ( x ) равно 2.
2. Вычисление полинома локаторов ошибок. Найдем решение
следующей системы уравнений
 S1
S
 2
S 2   2   S3 


.
S3   1   S 4 
Нетрудно найти, что
1 
S1 S 4  S 2 S 3
S 2 S 4  S 32
,


,
2
S1 S 3  S 22
S1 S 3  S 22
откуда 1  1  2   .
3. Отыскание локаторов ошибок. Полином локаторов ошибок
( x )  1  1 x   2 x 2 = = 1  x  x 2 . Корни этого полинома равны  ,  5 ,
следовательно, локаторы ошибок X 1   1   6 , X 2   5   2 . Ошибки
находятся на позициях 6 и 2.
4. Определение величин ошибок. Величины ошибок Y1 ,Y2 находятся из
уравнений
S1  Y1 X 1l0  Y2 X 2l0 ,
S2  Y1 X 1l0 1  Y2 X 2l0 1 ,
или, учитывая, что l0  0 ,
 X 1l0
 l0 1
 X1
X 2l0  Y1   S1   1 1  Y1   4 
    .
       6
2 
X 2l0 1  Y2   S 2     Y2   5 
Решением этой системы является Y1   , Y2   2 . Следовательно,
полином ошибок e( x )  x 6   2 x 2 . Исправление ошибок достигается
вычитанием
r ( x)  e( x)  (x 6  x 4   2 x3   3 x 2   5 x   6 )  (x 6   2 x 2 ) 
 x 4   2 x3   5 x 2   5 x   6 .
96
4.4.3. Исправление ошибок и стираний
Код с минимальным расстоянием d можно использовать для
исправления t-кратных ошибок и s-кратных стираний, если 2t  s  d  1 .
В этом разделе мы покажем как модифицируется процедура
декодирования для исправления ошибок и стираний в БЧХ-кодах. Мы
будем предполагать, что стертый символ заменяется на известный заранее
символ, например, на нулевой. Поэтому в случае ошибок ни положение, ни
величины ошибок не известны, но в случае стираний положение является
известным, но величины искажений, появившихся при замене стертых
символов на нулевые значения, не известны. Пусть cx   переданное слово
и e( x ) - полином искажений. Мы рассматриваем q –ичные коды, поэтому
коэффициенты полиномов cx  и e( x ) - это элементы поля GF (q ) . В
случае t ошибок и s стираний полином e( x ) имеет следующий вид:
e( x )  Y1 x i1  ...  Yt x it  V1 x j1  ...  Vs x js ,
где i1 , i2 ,..., it - позиции ошибок, j1 , j2 ,..., js - известные позиции стираний,
Y1 , Y2 ,..., Yt - величины ошибок на позициях i1 , i2 ,..., it , V1 ,V2 ,...,Vs величины искажений на стертых позициях j1 , j2 ,..., js . Введем локаторы
ошибок
X 1   i1 , X 2   i2 ,..., X t   it и
локаторы
стираний
U 1   j1 , U 2   j2 ,..., U s   js . Тогда
t
s
l 0
m 1
e(  k )   Yl X lk  VmU mk .
Компоненты
синдрома
определяются
l0  j 1
l0  j 1
S j  r( 
)  e( 
) следовательно,
(4.4.6)
следующим

S1  Y1 X 1l0  ...  Yt X tl0  V1U 1l0  ...  VsU sl0 ,

S 2  Y1 X 1l0 1  ...  Yt X tl0 1  V1U 1l0 1  ...  VsU sl0 1 ,


. . . . . . . .

l

d

2
 S d 1  Y1 X 10
 ...  Yt X tl0  d 2  V1U 1l0  d 2  ...  VsU sl0  d 2 .
образом:
(4.4.7)
Введем в рассмотрение полином локаторов стираний:
s
s
i 1
i 0
p ( x )   ( x  U i )   pi x i .
(4.4.8)
Поскольку локаторы стираний известны до декодирования, то
коэффициенты этого полинома p0 , p1 ,..., ps могут быть вычислены к
началу
декодирования.
Следующие
величины
называются
модифицированными синдромными компонентами:
97
s
s
t
s
i 0
s
l 1
s
T j   pi S i  j   pi  Yl X ll0 i  j 1   pi VmU ml0 i  j 1 
i 0
t
  Yl X
l 1
l0  j 1
l
s
i 0
 pi X  VmU
i 0
i
l
m 1
l0  j 1
m
s
m 1
t
s
l 1
i 0
 piU mi   Yl X ll0  j 1  pi X li ,
i 0
(4.4.9)
где
использовано
то
обстоятельство,
что
s
p (U m )   piU mi  0 .
В
i 0
результате, модифициро-ванные компоненты можно записать следующим
образом:
t
s
l 1
i 0
T j   El X ll0  j 1 , El  Yl  pi X li  Yl p( X l ).
(4.4.10)
Заметим, что величины T j определены для значений j  1, 2, ..., d  s  1 .
Теперь
задача
заключается
в
том,
чтобы,
зная
модифицированный синдром T  (T1 , T2 , ..., Td s 1 ) , определить число
ошибок t, их локаторы X 1 , X 2 , ..., X t и их модифицированные величины
E1 , E2 , ..., Et . Эту задачу можно решить с помощью любого метода
декодирования БЧХ-кода, например, с помощью алгоритма ПитерсонаГоренстейна-Цирлера или алгоритма Берлекэмпа-Месси, который будет
рассмотрен ниже. В результате будут получены локаторы ошибок
X 1 , X 2 , ..., X t . Для того, чтобы найти действительные значения ошибок на
позициях, соответствующих локаторам, мы можем воспользоваться
вторым соотношением в (4.4.10) и получить:
El
Yl 
, l  1, 2, ..., t .
(4.4.11)
p( X l )
Для отыскания величин искажений V1 ,V2 ,...,Vs на стертых позициях, мы
можем воспользоваться теперь уже известными величинами { X l , Yl , U m и
S j } и найти решение системы линейных уравнений (4.4.7):
 U 1l0
U 2l0
 l0 1
U 2l0 1
 U1
 .
.
 l0  s  2
l0  s  2
U2
U 1
U sl0  V1   S1  (Y1 X 1l0  ...  Yt X tl0 ) 
   

U sl0 1  V2   S 2  (Y1 X 1l0 1  ...  Yt X tl0 1 ) 
.



.
.   ...  
...
   

... U sl0  s 2  Vs   S s  (Y1 X 1l0  s 1  ...  Yt X tl0  s 1 )
(4.4.12)
...
...
4.4.4. Метод Форни вычисления величин ошибок и стираний
Как было показано выше, вычисление величин ошибок и стираний
происходит после того, как определен полином локаторов ошибок на
основе знания синдрома или модифицированного синдрома. Если стираний
нет, то модифицированные и исходные синдромные компоненты
совпадают. Мы видели, что как величины ошибок, так и величины
98
искажений на стертых позициях, находятся посредством решения системы
линейных уравнений. В первом случае система состоит из t уравнений, во
втором случае – из s уравнений. Количество операций для решения общей
системы линейных уравнений порядка
t
пропорционально t 3 .
Оказывается, что число операций можно уменьшить примерно до
величины, пропорциональной t 2 , если воспользоваться методом,
предложенным Форни (1965) для алгоритма Питерсона-ГоренстейнаЦирлера.
Предположим, что принятое слово содержит ошибки и стирания и
d  s 1
обозначим через T ( x ) синдромный полином, T ( x )   j 1 T j x j 1 .
Определим также полином ( x)  T ( x)( x ) mod x d s1 , называемый
полиномом величин ошибок. Очевидно, что полином величин ошибок
получается из обычного произведения синдромного полинома и полинома
t
локаторов ошибок ( x)  i 1 (1  xX i ) за счет отбрасывания всех
слагаемых со степенями d  s  1 и выше. Используя определение
модифицированных синдромных компонент (4.4.10),
T j  E1 X 1l0  j 1  ...  Et X tl0  j 1 ,
имеем
( x ) 
d  s 1 t

j 1
t
 El X ll0  j1 x j1  (1  xX i ) 
l 1
i 1
d  s 1
 t
  El X ll0   (xX l ) j 1 (1  xX l )   (1  xX i ).
l 1
 j 1
i 1,i l
t
Сумму в фигурных скобках можно вычислить, используя следующее
равенство для любого поля при   1
1     2  ...   d 2 
1   d 1
,
1
которое проверяется простым перемножением знаменателя в правой части
на сумму в левой. В результате, учитывая, что (x ) представляет остаток
от деления на x d s 1 , получим
t
( x )   El X ll0
l 1
t
t
t
1  ( xX l ) d  s 1
(1  xX l )  (1  xX i )   El X ll0  (1  xX i ) mod x d  s 1 .
1  xX l
i 1,i l
l 1
i 1,i l
Здесь произведено сокращение на 1  xX l поскольку X l  0 и переменная
х будет в дальнейшем принимать значения отличные от X l1 . Кроме этого,
мы воспользовались тем, что 1  ( xX l ) d  s 1  1 mod x d  s 1 . Заметим, что
степень полинома (x ) равна t-1, где t  ( d  s  1) / 2 .
99
Рассмотрим значение полинома (x ) в точке X k1 . Произведение
t
 (1  xX )
обращается в 0 при подстановке X k1 , если только k  l .
i
i 1,i l
Поэтому
( X k1 )  Ek X kl0
t
 (1  X
i 1,i k
1
k
Xi ) .
С другой стороны, вычисляя формальную производную, получим
t
t
d
( x )   X l  (1  xX i ) .
dx
l 1
i 1,i l
Отсюда
' ( X k1 )   X k
t
 (1  X
i 1,i k
1
k
Xi ) .
Окончательно мы можем записать для модифицированных величин
ошибок следующее соотношение:
( X 1 )
(4.4.13)
Ek   l0 1 k 1 .
X k ' ( X k )
Если стираний нет, т.е. s  0 , то модифицированные и обычные
величины ошибок совпадают и на этом декодирование заканчивается. Если
же стирания присутствуют, то вычисления нужно продолжить, с тем чтобы
определить величины стираний V1 ,V2 ,...,Vs . Это делается следующим
образом.
Определим новую тройку полиномов:
R( x ) 
d  s 1
R x
j 1
j 1
j
s
, P( x )   (1  xUi ) , ( x )  R( x ) P( x ) mod x d s 1 ,
i 1
(4.4.14)
где
s
R j   ViU il0  j 1 .
i 1
Хотя величины Vi еще не определены, коэффициенты R j можно найти из
t
равенства R j  S j   Yl X ll0  j 1 , которое следует из формул
(4.4.7):
l 1
t
s
l 1
i 1
S j   Yl X ll0  j 1  ViU il0  j 1 . Далее R ( x ) будет играет роль синдромного
полинома, P ( x ) - полинома локаторов стираний и (x ) - полинома
величин стираний. Они будут скомбинированы так, как это было сделано
выше:
( x ) 
d  s 1

j 1
s
d  s 1 s
R j x j 1  (1  xUi )  
i 1
s
VlU ll0  j1 x j1  (1  xUi ) 
j 1 l 1
i 1
s
d s 1
 s
 VlU ll0   ( xUl ) j 1 (1  xUl )   (1  xUi ) 
l 1
 j 1
i 1,i l
100
s
 VlU ll0
l 1
s
s
s
1  ( xUl ) d  s 1
(1  xUl )  (1  xUi ) VlU ll0  (1  xUi ) mod x d  s 1 .
1  xUl
i 1,i l
l 1
i 1,i l
Теперь заметим, что
s
 (1  xU ) обращается в нуль при подстановке U
i 1,i l
i
вместо х для любого i, кроме i  l , поэтому (U k1 )  VkU kl0
Замечая также, что
s
 (1  U
i 1,i k
1
i
1
k
Ui ) .
s
t
d
P( x )  U l  (1  xUi ) и, следовательно,
dx
l 1
i 1,i l
P' (U k1 )  U k
s
 (1  U
i 1,i k
1
k
Ui ) ,
окончательно получим
Vk  
(U k1 )
.
U kl 0 1P' (U k1 )
(4.4.15)
Пример 4.4.2. Для иллюстрации приведенных выше вычислений
продолжим рассмотрение примера 4.4.1. Напомним, что РС-код этого
примера имеет длину 7, минимальное расстояние 5 и порождающий
полином g (x )  = x 4   2 x 3   5 x 2   5 x   6 , где  - корень полинома
f ( x )  x 3  x  1 и задается корнями 1,  ,  2 ,  3 . Предположим, что
передаваемое слово c( x)  x 4   2 x 3   5 x 2   5 x   6 и произошла одна
ошибка на шестой позиции и два стирания на нулевой и второй позициях.
Стертые символы заменены на нули. Поэтому теперь принятое слово
r( x )  x 6  x 4   2 x 3   5 x . Декодирование начинается с вычисления
синдромных компонент по формуле S j  r(  l0  j 1 ) :
 S1  r (1)    1   2   5  0,

4
5
6
6
 S 2  r ( )  1         ,

2
6
2
 S 3  r ( )        1   ,
S 4  r ( 3 )   5   5   4     2 .
Локаторы стираний U1  1, U 2   2 , поэтому полином локаторов стираний
вычисляется
в
соответствии
с
(4.4.8):
2
6
2
Найдем модифицирован-ные
p( x)  ( x  U1 )( x  U 2 ) = x   x   .
s
компоненты синдрома по формуле T j   pi S i  j :
i 0
T1  p0 S1  p1S2  p2 S3   2  0   6   6   2   3 ,
T2  p0 S2  p1S3  p2 S4   2   6   6   2   2   2 .
Затем нужно решить задачу декодирования БЧХ-кода для заданных
синдромных компонент T1 ,T2 . Для этого выполняются следующие шаги.
101
1. Находится число ошибок;
tmax  1, M 1  [T1 ], det M 1  T1  0 .
Следовательно число ошибок равно 1.
2. Находится коэффициент 1 полинома локаторов ошибок. Для этого
решается уравнение T11  T2 , откуда 1  T2 / T1   6 .
3. Отыскивается корень полинома ( x)  1 x  1. Локатор ошибки это
величина, обратная корню: X 1  1   6 . Таким образом, позиция
ошибки определена – это шестая позиция.
4. Для
вычисления
величины
ошибки
найдем
полином
d  s 1
. Имеем s  2 , d  s  1  5  2  1  2 ,
( x)  T ( x)( x ) mod x
T ( x )   j 1 T j x j 1  T1  T2 x   2 x   3
d  s 1
и
( x )  ( 2 x   3 )( 6 x  1)  x 2  x   3  x   3 mod x 2 .
Модифицированная вели-чина ошибки находится из следующего
X 1l0 E1  T1 :
уравнения (см.(4.4.1)
E1  T1 / X 1l0   3 / 1   3 .
Действительная величина ошибки находится из уравнения (1.7.13):
d
(  1 x  1)   1   6 , то
Y1  ( X 11 ) / ' ( X 11 ) . Поскольку  ' ( x ) 
dx
6
3
6
6
Y1  (   ) /   1 /    . Таким образом, величина ошибки на
шестой позиции равна  .
5. Далее вычисляются искажения на стертых позициях, на нулевой и
на второй. Для этого определяются полиномы, указанные в (4.4.14).
t
Имеем,
R j  S j   Yl X ll0  j 1 ,
следовательно,
l 1
, R2  S 2  Y1 X 1l0 1   6     6   2 и
R1  S1  Y1 X 1l0  0    1  
R( x)  R2 x  R1 =  2 x   . Так как локаторы стираний суть
то
U1  1, U 2   2 ,
2
2 2
6
P( x )  (1  xU1 )(1  xU2 )  (1  x )(1   x )   x   x  1 и
P' ( x )   6 . Теперь, перемножая R ( x ) и P ( x ) , получим
(x ) =
или
( x )  R( x ) P( x )  mod x d s1
= ( 2  1) x     6 x   mod x 2 . Стертые символы определяются с
помощью
соотношения
(4.4.15):
1
1
1
6
6
5
6
6
и
V1  (U1 ) / U1 P' (U1 )  (   ) /    /   
1
1
1
6 2
2 6
2
4
5
V2  (U 2 ) / U 2 P' (U 2 )  (    ) /     /    .
6. Таким образом, мы получили e( x )  x 6   5 x 2   6 . Результат
декодирования совпадает с исходным кодовым словом:
r ( x )  e( x )  x 6  x 4   2 x 3   5 x + x 6   5 x 2   6 =
= x 4   2 x 3   5 x 2   5 x   6  c( x )
102
Гл. 5 Итеративное декодирование БЧХ -кодов
§5.1. Отыскание полинома локаторов ошибок
Декодирование БЧХ-кодов распадается на несколько задач. Это (1)
вычисление синдромных компонент, (2) отыскание полинома локаторов
ошибок, (3) отыскание самих локаторов ошибок как величин, обратных
корням полинома локаторов ошибок, (4) опре деление величин ошибок. Задача
мало меняется, когда требуется исправлять ошибки и стирания. С точки
зрения сложности вычислений указанные 4 задачи различаются. Если
говорить об оценке сложности при больших длинах кода n и большом числе
исправляемых ошибок t, то ее удобно оценивать числом операций в
расширенном поле (поле локаторов). Так, задача (1) решается с помощью c1nt
арифметических операций при использовании схемы Горнера. Если для
решения задачи (2) используется какой -либо из общих методов решения
системы линейных уравнений, например, метод Гаусса, основанный на
приведении
матрицы
к
треугольной
форме,
то
потребуется
c2 t 3
арифметических операций. Задача (3) имеет аналитическое или табличное
решение только при относи тельно небольших значениях t. При использовании
процедуры Ченя, которая заключается в полном переборе по множеству
локаторов, все локаторы можно отыскать за
c3 nt операций. Наконец,
вычисление величин ошибок по методу Форни потребует c4 t 2 операций. Здесь
c1 , c2 , c3 , c4 - некоторые константы, не зависящие от n и t. Если рассматривать
асимптотическую постановку задачи и предполагать, что с ростом длины кода
число ошибок будет также увеличиваться пропорционально д лине, то
становится ясным, что при декодировании БЧХ -кодов этап (2) требует
наибольших вычислительных затрат.
В этом параграфе мы рассмотрим различные методы решения задачи (2).
Уже упоминалось, что основной вклад внес Э.Берлекэмп, который первым
предложил ее итеративное решение со сложностью c' 2 t 2 .
5.1.1. Ключевое уравнение
Мы рассматриваем циклический БЧХ -код над полем GF (q ) с длиной n и
конструктивным расстоянием d. Такой код задается последовательностью
корней 1 ,  2 , ...,  d 1 , где  j   l0  j 1 и   GF ( q m ) - элемент порядка n, т.е.
 n  1 . Пусть r ( x )  c( x )  e( x ) -принятое слово. Предположим, что ошибки
произошли на позициях i1 , i2 ,..., it , t  ( d  1) / 2 , т.е. e( x)  ei1 x i1  ei2 x i2  ...  eit x it .
Обозначим через X l   il локатор и через Yl  eil величину ошибки на позиции
il , l  1, 2, ...,t . Тогда S j  r (  j ) = = e(  j ), j  1, 2, ..., d  1 , набор из d  1 компонент
синдрома, причем
103
t
S j   Yl X ll0  j 1 , j  1, 2, ..., d  1 .
l 1
Рассмотрим синдромный полином
d 1
S x    S j x j 1 ,
(5.1.1)
j 1
коэффициентами которого являются величины S j . Как упоминалось выше, полином
t
 ( x )   (1  xX l )  1   1 x  ...   t x t
(5.1.2)
l 1
называется полиномом локаторов ошибок, а полином
( x )  S ( x )( x ) mod x d 1
(5.1.3)
- полиномом величин ошибок. Корнями полинома  (x ) являются величины,
обратные локаторам ошибок, т.е. если i-позиция ошибки, то (  i )  0 .
Полином локаторов ошибок имеет степень deg  ( x )  t . Покажем, что полином
величин ошибок имеет степень deg ( x )  t  1 .
Чтобы убедиться в этом, сделаем выкладки, аналогичные тем, которые
делались в разделе (4.4.4). Тогда получим
d 1
t
t
( x )   Yl X ll0  j 1 x j 1  (1  xX i ) 
j 1 l 1
d 1
l0
l
j 1
i 1

 t
  Yl X  (xX l ) j 1 (1  xX l )   (1  xX i ).
l 1

i 1,i l
t
После суммирования и вычисления остатка по модулю x d 1 ,
имеем
t
( x )   Yl X ll0
l 1
t
t
t
1  ( xX l ) d 1
(1  xX l )  (1  xX i )   Yl X ll0  (1  xX i ) mod x d 1 .
1  xX l
i 1,i l
l 1
i 1,i l
Отсюда видно, что deg ( x )  t  1 .
Таким образом, синдромный полином S ( x ) известен, а полиномы  (x ) и
(x ) должны быть определены в процессе декодирования. Поэтому всякий
метод решения уравнения (5.1.3), при котором по заданному S (x )
отыскиваются полиномы  ( x ) , ( x ) такие, что deg  ( x )  t , ( x )  t  1, t  (d  1) / 2 ,
дает некоторый метод исправления ошибок кратности t. Уравнение (5.1.3) с
104
указанными ограничениями на степени полиномов называется ключевым
уравнением исправления ошибок .
Теперь рассмотрим ситуацию с ошибками и стираниями. Предположим,
что произошло s  d  1 стираний и t  ( d  s  1) / 2 ошибок, причем стертые
символы заменены нулями. Тогда, обозначая через Z l и Yl локаторы и
величины искажений, l  1, 2, ..., t  s , получим
ts
S j   Yl Z ll0  j 1 , j  1, 2, ..., d  1 ,
(5.1.4)
l 1
Обозначим через  t (x ) полином локаторов ошибок , через
полином локаторов стираний:
t
s
l 1
m 1
 s (x ) -
 t ( x )   (1  xX l ),  s ( x )   (1  xU m ) ,
где X l - локаторы ошибок и U m -локаторы стираний, и через  ( x ) - полином
локаторов искажений (ошибок и стираний):
ts
 ( x )   t ( x )  s ( x )   (1  xZl ) .
(5.1.5)
l 1
Полином (x ) , определяемый и в рассматриваемом случае равенством
(5.1.3), называется полиномом величин искажений. Корнями полинома
 (x ) являются величины, обратные локаторам искажений, т.е. если i-позиция
ошибки или стирания, то (  i )  0 . Полином локаторов ошибок имеет степень
deg  ( x )  t  s . Покажем, что полином величин искажений имеет степень
deg ( x )  t  s  1 .
Чтобы убедиться в этом снова сделаем выкладки, аналогичные тем,
которые делались в разделе (4.4.4). Тогда получим
d 1 t  s
ts
j 1 l 1
d 1
l0
l
j 1
i 1
( x )   Yl Z ll0  j 1 x j 1  (1  xZi ) 

 t
  Yl Z  (xZl ) j 1 (1  xZl )   (1  xZi ).
l 1

i 1,i l
t
После суммирования и вычисления остатка по модулю x d 1 ,
имеем
t
( x )   Yl Z ll0
l 1
ts
t
t s
1  ( xZl ) d 1
(1  xZl )  (1  xZi )   Yl Z ll0  (1  xZi ) mod x d 1 .
1  xZl
i 1,i l
l 1
i 1,i l
105
Отсюда видно, что deg ( x )  t  s  1 .
В случае ошибок и стираний синдромный полином S ( x ) и полином
локаторов стираний  s (x ) известны, а полиномы  t (x ) и (x ) должны быть
определены в процессе декодирования. Поэтому всякий метод решения
уравнения
( x )  S ( x )  t ( x )  s ( x ) mod x d 1 ,
(5.1.6)
при котором по заданным S (x ) и  s (x ) отыскиваются полиномы  t ( x) , ( x)
deg  t ( x)  t , ( x)  t  s  1, t  (d  s  1) / 2 , дает некоторый метод
такие, что
исправления ошибок кратности t и стираний кратности s. Уравнение (5.1.6) с
указанными ограничениями на степени полиномов называется ключевым
уравнением исправления ошибок и стираний .
5.1.2. Решение ключевого уравнения с помощью алгоритма Евклида
Напомним, как решается задача поиска наибольшего общего делителя
полиномов R ( x ) и S ( x ) . Для этого используется алгоритм Евклида,
рассмотренный ранее для целых чисел в разделе П.1.2. Мы коротко повторим
основные шаги алгоритма в приложении к полиномам над произвольным
полем, используя матричное представление алгоритма.
Пусть r ( 0) ( x )  R( x ), s ( 0) ( x )  S ( x ) . Следующая итеративная процедура
вычислений, определенная для i  0, 1, 2, ... , называется алгоритмом Евклида:
 (i )
 r (i ) ( x) 
(i )
(i )
Q ( x )   ( i )   частное от деления r ( x ) на s ( x ) ,
 s ( x) 


1
r ( i 1) ( x ) 0
  r ( i ) ( x )

 ( i 1)  
(i )
   (i )  .
 s ( x ) 1  Q ( x )  s ( x )
(5.1.7)
Обозначим через k - такое значение индекса i, для которого впервые s ( i ) ( x )
равен нулю. Тогда полином r ( k ) ( x )  s ( k 1) ( x ) равен наибольшему общему
делителю R (x ) и S ( x ) .
Согласно (5.1.7)
r ( i 1) ( x )  s ( i ) ( x ),
 s ( i 1) ( x )  r ( i ) ( x )  s ( i ) ( x )Q ( i ) ( x ),

т.е. Q ( i ) ( x ) и s ( i1) ( x ) есть частное и остаток от деления s ( i1) ( x ) на s ( i ) ( x ) :
106
s ( i 1) ( x)  s (i ) ( x )Q (i ) ( x)  s (i 1) ( x) .
Отсюда следует, что степень полинома s ( i ) ( x ) уменьшается с ростом номера
шага, причем
deg s ( i ) ( x)  deg s ( i 1) ( x )  1  ...  deg s ( 0) ( x )  i  deg S ( x )  i .
Степень частного равна разности степеней сосе дних остатков, deg Q ( i ) ( x ) =
= deg s (i 1) ( x )  deg s ( i ) ( x ) , причем
K
 deg Q
(i )
( x )  deg r ( 0 ) ( x )  deg s ( K ) ( x )  deg R( x ) ,
i 0
где K – число шагов алгоритма.
1 0
С другой стороны, полагая A ( 0)  
 и
0 1 
1
0
 (i )
А ( i 1)  
(i )
A ,
1  Q ( x )
вычисления по алгоритму Евклида можно представ ить в следующей
матричной форме:
1
r ( i ) ( x ) 0
 r ( i 1) ( x )
 R( x )
  ( i 1)   A ( i )  
 (i )   
( i 1)

,
1

Q
(
x
)
S
(
x
)
s
(
x
)
s
(
x
)
 



 

(5.1.8)
где
 A( i ) ( x )
A ( i )   11( i )
 A21 ( x )
0
1
A12( i ) ( x )
0


.
 
(l )
(i )
A22 ( x ) l i 1 1  Q ( x )
Поэтому полиномиальные элементы матрицы
убывающие с ростом номера шага, причем
(5.1.9)
A (i ) имеют степени, не
(i )
deg A12(i ) ( x)  deg A22
( x)
для всех i. Из (5.1.8) следует, что
(i )
(i )
s ( i ) ( x )  A21
( x ) R( x )  A22
( x)S ( x)
или
107
(i )
s (i ) ( x)  A22
( x ) S ( x ) mod R( x ), i  0, 1, 2, ...
(5.1.10)
Таким образом, в процессе выполнения алгоритма Евклида получается
(i )
последова-тельность пар s ( i ) ( x ), A22
( x )  , которые являются решениями
s( x), A( x) уравнения
s( x )  A( x ) S ( x ) mod R( x )
(5.1.11)
для заданных полиномов R( x ), S ( x ) . На нулевом шаге решение имеет вид
S (x),1 . С увеличением номера шага степень s( x ) - первого элемента пары строго уменьшается, начиная с deg S ( x ) , а степень второго элемента A( x )
увеличивается, начиная с нуля.
В следующей теореме будет показано, что при выборе R( x )  x d 1 и
использовании модифицированного синдр омного полинома S m ( x )  S ( x ) s ( s) на
одном из шагов алгоритма Евклида будет найдено решение уравнения
s( x )  A( x ) S m ( x ) mod x d 1
(5.1.12)
и выполнены условия deg A( x )  t , deg s( x )  t  s  1, t  (d  s  1) / 2 и, следовательно,
будут найдены полином локаторов ошибок  t (x ) и полином величин
искажений (x ) .
Теорема 5.1.1. Предположим, что алгоритм Евклида применяется к
R( x )  x d 1 и модифицированному синдромному полиному Sm ( x )  S ( x ) s ( x ) .
Предположим также, что на i-м шаге алгоритма вычисляются матрица
 A11( i ) ( x ) A12( i ) ( x )
(i )
(i )
A   (i )
 и очередной остаток s ( x ) . Пусть K –номер шага, на
(i )
 A21 ( x ) A22 ( x )
d  s 1
d  s 1
deg s ( K 1) ( x ) 
deg s ( K ) ( x ) 
котором
и
.
Тогда
2
2
K
K
(K)
 t ( x )  A22
( x ) / A22
(0) и ( x )  s ( K ) ( x ) / A22
(0) .
Доказательство: Из (5.1.10) следует что пары полиномов
s ( x), A22(i ) ( x) , которые получаются на последовательных шагах алгоритма,
суть решения задачи s( x )  A( x ) S m ( x ) mod x d 1 , причем степени s ( x )
последовательно убывают, а степени A( x ) последовательно возрастают.
Очевидно, что всегда найдется шаг i=K, на котором впервые выполнено
d  s 1
d  s 1
неравенство deg s( x ) 
. Покажем, что при этом deg A( x ) 
.
2
2
(i )
108
Рассмотрим обращение матрицы A (i ) . Пусть B (i ) - матрица, обратная к A (i ) ,
1 
0
и C( l )  
. Нетрудно проверить, что определитель матрицы C (l ) равен
(l ) 
1  Q 
–1. Поэтому det A (i )  det l i 1 C( l )  (1)i и
0
B
(i )
 A( i ) ( x )
  11( i )
 A21 ( x )
A12( i ) ( x )

(i )
A22
( x )
1
 A( i ) ( x )  A12( i ) ( x )
 ( 1) i  22( i )
.
(i )
 A21 ( x ) A11 ( x ) 
Теперь из (5.1.11) можно записать
(i )
(i )
 A12( i ) ( x ) r ( i ) ( x )
 R( x ) 
( i )  r ( x )
i  A22 ( x )

B

(

1
)
 (i )
  (i ) 
 (i ) 
 S ( x )
(i )
 m 
 s ( x )
 A21 ( x ) A11 ( x )   s ( x )
или для шага i=K
(K)
R( x )  ( 1) K A22
( x ) s ( K 1) ( x )  A12( K ) ( x ) s ( K ) ( x ) ,
(K )
откуда, с учетом того, что deg A12( K ) ( x )  deg A22
( x ) и deg s ( K ) ( x )  deg s ( K 1) ( x ) ,
получим
(K )
(K )
d  1  deg R( x )  deg A22
( x )  deg s ( K 1) ( x )  deg A22
( x) 
d  s 1
.
2
Из этого неравенства следует, что
(K )
deg A22
( x) 
d  s 1
.
2
(K)
( x )  , которая получается на KТаким образом, пара полиномов s ( K ) ( x), A22
м шаге алгоритма Евклида, является решением ключевого уравнения
(K )
( x ) и ( x )  s ( K ) ( x ) .
(5.1.12), следовательно, ( x )  A22
Заметим,
что
(K )
( x ) не всегда равен 1, но полином локаторов
свободный член поли-нома A22
обязательно имеет единичный свободный член. С другой стороны, Если
(K )
(K )
( s ( K ) ( x ), A22
( x )) - решение ключевого уравнения, то ( s ( K ) ( x ) /  , A22
( x ) /  ) - также
(K)
(K)
(0) и
решение для любого   0 . Поэтому,
полагая ( x )  A22 ( x ) / A22
(K)
( x)  s ( K ) ( x) / A22
(0) , мы получаем требуемое решение.
Пример 5.1.1. Продолжим рассмотрение, начатое в примере 4.4.1. Для этого
примера d=5, ошибки находятся на позициях 6 и 2, компоненты синдрома
S1   4 , S 2   5 , S 3  0, S 4   6 ,
синдромный полином S ( x)   6 x 3   5 x   4 ,
локаторы ошибок X 1   6 , X 2   2 , полином локаторов ошибок ( x)  x 2  x  1 . В
109
этом примере стирания отсутствуют,
s  0 , поэтому
 s ( x )  1, ( x )   t ( x ) .
Полином величин ошибок ( x)  S ( x )( x )  x   mod x .
4
4
Применим алгоритм Евклида для решения ключевого уравнения, полагая
r ( x )  x 4 и s ( 0 ) ( x )  S m ( x )  S ( x )   4   5 x   6 x 3 . Результаты вычислений по
шагам алгоритма представлены в следующей таблице.
( 0)
Табл.5.1.1
i
 r ( i 1) 
Q ( i 1)   ( i 1) 
s 
1  ( i 1)
0
A (i )  
A
( i 1) 
1  Q 
1
x
2
x 6
r (i )
s (i )
0 1 
 1 x 


S ( x)
 6 x2   5x
x
 1

 x   6 x 2  x  1


 6 x2   5x
x 4
Момент остановки K определяется по степени полинома s ( i ) ( x ) . Здесь K=2,
d 1
d 1
deg s (1) ( x )  2 
 2, deg s ( 2 ) ( x )  1 
 2.
т.к.
Поэтому
2
2
( 2)
( x )  A22
( x ) = x 2  x  1 и ( x )  s ( 2 ) ( x )  x   4 .
Пример 5.1.2. Продолжим рассмотрение, начатое в примере 4.4.2. Для этого
примера d=5, одна ошибка находится на шестой позиции и два стирания находятся
на
нулевой
и
второй
позициях,
s=2.
Компоненты
синдрома
6
2
2
2 3
2 2
S1  0, S 2   , S 3   , S 4   ,
синдромный полином S ( x )   x   x   6 x ,
локатор ошибки X 1   6 , полином локаторов ошибок  t ( x )   6 x  1 . Локаторы
стираний
и
полином
локаторов
стираний
U1  1, U 2   2
2
2 2
6
 s ( x )  ( x  1)( x  1)   x   x  1 . Модифицированный синд-ромный полином
S m ( x )  S ( x )  s ( x )   2 x 3   3 x 2   6 x mod x 4 .
Полином
величин
ошибок
( x )  S ( x )( x )   x   x mod x .
2
2
6
4
Применим алгоритм Евклида для решения ключевого уравнения, полагая
r ( x )  x 4 и s ( 0 ) ( x )  S m ( x )   2 x 3   3 x 2   6 x . Результаты вычислений по шагам
алгоритма представлены в следующей таблице.
( 0)
Табл.5.1.2
i
1
Q
( i 1)
 r ( i 1) 
  ( i 1) 
s 
 5x   6
1  ( i 1)
0
A (i )  
A
( i 1) 
1  Q 
1 
0
1  5 x   6 


r (i )
s (i )
S ( x)
x 2   5 x
110
Момент остановки K определяется по степени полинома s ( i ) ( x ) . Здесь K=1,
d  s 1
d  s 1
(1)
(1)
, deg s (1) ( x )  2 
т.к. deg s ( 0 ) ( x ) 
. Поэтому ( x )  A22
( x ) / A22
(0) =
2
2
(1)
= ( 5 x   6 ) /  6   6 x  1 и ( x)  s (1) ( x ) / A22
(0)  (x 2   5 x ) /  6   2 x 2   6 x .
При оценке сложности вычислений, мы должны учитывать сложность
двух основных действий, выполняемых на каждом шаге. Это вычисление
частного Q ( i ) ( x ) от деления двух полиномов r ( i ) ( x ), s ( i ) ( x ) и вычисление
1
0

произведения двух матриц размерности 2  2 , матрицы C( i )  
и A (i ) .
(i )

1  Q ( x )
Сложность вычисления частного на шаге i+1 можно оценить как произведение
deg Q ( i ) ( x )  deg s ( i ) ( x ) . С другой стороны, deg Q (i ) ( x )  deg s ( i 1) ( x )  deg s ( i ) ( x ) и

K 1
i 0
deg Q (i ) ( x)  deg s ( 1) ( x)  deg R( x) = d  1 .
Поэтому
общая
сложность
вычисления частных с учетом всех шагов равна
d2
.
deg Q ( x )  deg s ( x )  deg Q ( x )  (d  i ) 

2
i 0
i 0
K
K
(i )
(i )
(i )
Сложность умножения матриц складывается из сложности вычисления каждого
из 4-х элементов произведения C ( i 1)  A ( i 1) . Два из них совпадают с элементами
A (i 1) , а два других элемента получаются в результате умножения на полином
Сложность
умножения
можно
оценить
как
произведение
Q ( i1) ( x ) .
d 1
( i 1)
( i 1)
( x) 
deg Q ( i 1) ( x )  deg A22
( x ) , причем в соот-ветствии с алгоритмом deg A22
2
для любого i  K . Поэтому общая сложность вычисления всех произведений с
учетом всех шагов не превосходит
K
 deg Q (i1) ( x)  deg A22(i1) ( x)  2
i 0
d2
 d2.
2
В результате, сложность решения ключевого уравнения с помощью алгоритма
Евклида не превышает ct 2 , где t – число исправляемых ошибок и с – некоторая
константа.
5.1.3. Алгоритм Берлекэмпа-Месси
В этом разделе мы рассмотрим итеративный алгоритм отыскания полинома
локаторов искажений, разработанный Э.Берлекэмпом и представленный Дж.Месси в
виде задачи отыскания многотактного линейного фильтра, порождающего заданную
последовательность синдромных компонент.
Основное уравнение декодирования (1.17.3) можно записать следующим
образом
ts
S j     i S j i , j  {t  s  1,..., d  1} ,
(5.1.13)
i 1
111
где s - число стираний, t - число ошибок и t  ( d  s  1) / 2 . Требуется найти
коэффициенты 1 ,  2 , ...,  t s полинома локаторов искажений ( x)  1  i 1  i ,
t s
исходя
из
следующих
двух
условий:
( x )   t ( x ) s ( x ) ,
(1)
 s ( x)  m1 (1  xUm ) - известный полином локаторов стираний
s
где
(в отсутствие
стираний s  0 ,  s ( x ) =1) и  t ( x)  l 1 (1  xX l ) - неизвестный полином локаторов
t
ошибок; и (2)  (x ) - это такой полином, по коэффициентам которого 1 ,  2 , ...,  t s
и по заданным t  s синдромным компонентам S1 , S 2 , ..., St  s с помощью (5.1.13)
можно
вычислить
остальные
синдромные
компоненты
d  t  s 1
 (x )
Коэффициенты
полинома
определяют
т.н.
St  s 1 , St  s 2 , ..., S d 1 .
авторегрессионный фильтр, показанный на рис.5.1.1.
+
 ts
2
 t  s 1
Sj-t-s
1
Sj-2
Sj-t-s-1
(-1)
Sj-1
Sj
Рис.5.1.1 Авторегрессионный фильтр, порождающий компоненты
синдрома. Начальное состояние S1 , S 2 , ..., St  s .
Рассмотрим фильтр, определяемый полиномом ( x)  1  1  ...   L . Мы
будем коротко ссылаться на него, как на фильтр  (x ) , и называть число L длиной
фильтра.
Отметим, что не обязательно  L  0 . При рассмотрении
авторегрессионных фильтров удобно слегка изменить обозначения синдромных
компонент. Пусть
 0  S1 ,  1  S2 , ...,  d 2  Sd 1.
Мы
будем
обозначать
через
 0N
последовательность,
образованную
N+1
синдромными компонентами:  0N  ( 0 ,  1 , ...,  N ) . Предположим, что фильтр  (x )
порождает последовательность  0N 1 , исходя из начального состояния  0 ,  1 , ...,  L1 ,
т.е.
L
 r     i r i , r  I LN 1 ,
(5.1.14)
i 1
где I LN 1  {L, L  1,..., N  1} .
Теорема 5.1.2. Пусть фильтр  (x ) порождает  0N 1 и имеет длину L , а фильтр
 ' ( x ) порождает  0N и имеет длину L' . Тогда
L'  max{ L, N  1  L} .
(5.1.5)
112
Доказательство : Фильтр, порождающий  0N 1 может иногда порождать и  0N ,
поэтому может случиться, что L'  L . Однако, иногда его длина должна быть
увеличена, чтобы он стал порождать более длинную последовательность, поэтому
L'  L . Покажем, что если фильтр  (x ) порождает  0N 1 , но не порождает  0N , то
L'  N  1  L . Для этого предположим противное, а именно, что L'  N  L . По
условию теоремы
L'
 r    ' i  r i , r  I LN'
(5.1.6)
i 1
и, согласно нашему предположению,
L
L
L'
i 1
i 1
k 1
 N     i N  i =   i   ' k  N  k  i .
(5.1.7)
Равенство в (5.1.7) имеет место в силу того, что L'  N  L  N  i  N  1 при каждом
значении i. Следовательно, N  i  I LN' и соотношение (5.1.6) может быть
использовано. Меняя в (5.1.7) порядок суммирования, получим
N 
L'
 'k
k 1
L
L'
i 1
k 1
  i N  k  i    ' k  N  k   N .
При этом мы воспользовались тем, что
N  k  I LN 1 при
L'  N  L , и
воспользовались (5.1.4), а затем (5.1.6). Полученное противоречие  N   N
доказывает справедливость (5.1.5).
В задаче отыскания фильтра ни длина фильтра, ни множители в его отводах не
известны. Существует много фильтров, решающих данную задачу и имеющих
различную длину. Мы заинтересованы в том, чтобы получить фильтр с наименьшей
длиной, определяемой правой частью неравенства (5.1.5). В этом случае его длина
будет равна действительному числу искажений t  s и соответствующий полином
будет действительно полиномом локаторов искажений. Фильтр с наименьшей длиной
строится итеративным способом так, как это описано в следующей теореме при
увеличении длины последо-вательности, которую требуется породить.
Теорема 5.1.3 Пусть для каждого i  1, 2, ..., r  1 фильтр ( i ) ( x ) порождает
последовательность  (0i ) и имеет минимальную длину Li , т.е. Li  max{ Li 1 , i  Li 1} .
Тогда на шаге r фильтр ( r ) ( x ) наименьшей длины определяется из следующих
соотношений:

( r 1) ( x ), если  r  0,


( r ) ( x )   ( r 1)
 ( x )  r x r m ( m 1) ( x ), если  r  0,

m
(5.1.8)
где
Lr 1
 r   ( jr 1) r  j ,
j 0
и m равно номеру последнего шага, предшествующего шагу r, на котором  m  0 .
113
Доказательство:
наименьшей длины
Предположим, что на (r-1)-й итерации построен фильтр
Lr 1 , имеющий коэффициенты (1r 1) , (2r1) , ..., (Lrr11) и
порождающий последовательность  0r 1 = {  0 ,  1 , ...,  r 1 }. На r-й итерации выход
этого фильтра будет равен
n 1
~
 r   ( jr1) r j ,
j 1
где предполагается, что все коэффициенты ( jr 1)  0 при j  Lr 1 . Действительное
значение коэффициента  r может отличаться от вычисленного. Величина
~
n 1
 r   r   r   ( jr 1) r j ,
j 0
называется r -й невязкой. Если  r =0, то фильтр, найденный на ( r -1)-й итерации
может быть использован также и на следующей r -й итерации. Если же  r  0 , то
фильтр должен быть модифицирован так, чтобы он оставался фильтром наименьшей
длины и генерировал последовательность  0r . Модификация фильтра выполняется
следующим образом. Выберем
( r ) ( x )  ( r 1) ( x )  Ax l ( m1) ( x ) ,
(5.1.9)
где m  r , l-некоторое целое и А - коэффициент, который будет определен ниже.
Положим Lr  deg ( r ) ( x ) . Невязка, соответствующая модифицированному фильтру
равна
Lr
Lr 1
j 0
j 0
Lm 1
' r   ( jr ) r  j   ( jr 1) r  j  A   ( mj1) r  j l .
Теперь
m 
Lm 1

j 0
выберем
параметры
j 0
l, m и A .
Возьмем
l  r m,
тогда
 m j и ' r   r  A   m . Предположим, что m выбрано равным номеру
( m 1)
j
последнего шага, предшествующего шагу r, на котором  m  0 , и А выбрано равным
  r /  m . Тогда невязка для модифицированного фильтра будет равна нулю:
' r   r  (  r /  m )   m  0 .
С другой стороны, поскольку m выбрано как номер последнего шага,
предшествую-щего шагу r, на котором фильтр изменялся, то Lm1  Lr 1 и Lm  Lr 1 .
По
условию
теоремы
фильтр
имеет
минимальную
длину
( m ) ( x )
Lm  max{ Lm1 , m  Lm1} . Поскольку на шаге m этот фильтр модифицировался, то
( m ) ( x )  ( m1) ( x ) и, следовательно, Lr 1  Lm  m  Lm1 . В результате, используя
Lr  max{ Lr 1 , l  Lm1} или
(5.1.9),
имеем
Lr  max{ Lr 1 , r  m  Lm1}  max{ Lr 1 , r  Lr 1} ,
( r ) ( x )
т.е.
длина
фильтра
удовлетворяет границе (5.1.5) со знаком равенства.
Модифицированный фильтр порождает последовательность  0r . Это следует из
того, что все невязки на шагах Lr , Lr  1, ..., r равны нулю. Действительно,
114
Lr
 r Lm 1 ( m 1)
   j  k  j r m 
 m j 0
j 0
0, k  Lr , Lr  1, ..., r  1,



 r  r   m  0, k  r.

m
Lr 1
' k   ( jr ) k  j   ( jr 1) k  j 
j 0
 k 
r
  k r m
m
Равенство ' k =0 при k  Lr , Lr  1, ..., r  1 вытекает из того, что при таких значениях
k  k   k r m  0 , поскольку фильтр ( m ) ( x ) порождает последовательность  (0m ) и
k  r  m  r  1  r  m  m  1 , а также поскольку фильтр ( r1) ( x ) порождает
последовательность  (0r 1) . Равенство ' k =0 при
k  r вытекает из построения
фильтра  ( x ) . Таким образом, построенный фильтр при каждом r порождает
последователь-ность  0r и имеет минимальную длину.
(r)
Из теоремы 5.1.3 следует алгоритм вычислений (алгоритм Берлекэмпа-Месси)
для отыскания полинома локаторов ошибок или полинома локаторов ошибок и
стираний (локаторов искажений), схематически показанный на Рис.5.1.2. Алгоритм
инициали-зируется заданием для  (x ) начального значения, равного известному
полиному локаторов стираний  s (x ) , а также заданием для длины фильтра и
начального шага итерации значения, равного известному числу стираний s. На
каждом шаге модификации оба полинома, исходный и модифицирующий делятся на
 s (x ) . Поэтому найденный в результате полином  (x ) также будет дилиться на
 s (x ) . Число шагов алгоритма равно d  s  1 . Заметим, что в отсутствие стираний,
т.е. при s=0,  s (x ) =1. В конце декодирования степень найденного полинома и длина
фильтра равны s  t , если t  ( d  s  1) / 2 . В этом случае процедура успешно
завершается. Однако при большем числе ошибок может случиться, что степень
полинома  (x ) будет отличаться от длины последнего построенного фильтра. Это
свидетельствует о нарушении условия t  ( d  s  1) / 2 и сопровождается аварийным
завершением алгоритма с сообщении о том, что фильтр не найден.
115
Инициализация :
 ( x )   s ( x ), B ( x )  x   s ( x ),
L  s, r  s, m  1
r  номер итерации,
m  номер шага модификации,
L  длина фильтра,
B ( x )  полином модификации,
 s ( x )  полином локаторов
стираний, s  число стираний
Вычисление r - й невязки :
L
 r  i 0  i   r i
Нужна ли
модификация
Да
r  0 ?
Нет
Модификация :
* ( x )   ( x )   r  B ( x )
L*  r  m,
m  r  L,
L  L* ,
B( x )  r1   ( x )
Надо ли удлинять
Да
L  r  m ?
фильтр
Нет
 ( x )  * ( x )
B( x )  x  B( x )
r  d 1 ?
r=r+1
Последняя
итерация
Да
Нет
Нет
deg  ( x )  L ?
Да
Вычисления закончены.
Полином  ( x ) не найден
Вычисление  ( x )
закончено
Рис.5.1.2 Алгоритм Берлекэмпа-Месси для вычисления полинома
локаторов искажений
Этот алгоритм и его обоснование будет более понятным, если проследить его
работу на примере. В таблице 5.1.1 приведены вычисления, соответствующие
различным шагам алгоритма для поля GF ( 2 4 ) , задаваемого полиномом
f ( x )  x 4  x  1. Таблица элементов поля в аддитивном и логарифмическом
(мультипликативном) представлении дана в примере П.6.1.
Пример 5.1.3. Рассмотрим (15,9)-код Рида-Соломона с минимальным
расстоянием d  7 , задаваемый корнями  ,  2 ,  3 ,  4 ,  5 ,  6 . Порождающий полином
этого кода равен
g ( x )  ( x   )( x   2 )( x   3 )( x   4 )( x   5 )( x   6 ) =
= x 6   10 x 5   14 x 4   4 x 3   6 x 2   9 x   6 ,
116
где  - примитивный элемент GF (2 4 ),  15  1 .
Код с минимальным расстоянием d может исправлять ошибки кратности t и
стирания кратности s, если 2t  s  d  1 . Предположим, что передавалось слово
c( x )  g ( x ) и ошибки произошли на позициях 3 и 11, а стирания - на позициях 2 и 6.
В результате замены стертых символов нулями, получим:
y ( x )   7 x11   10 x 5   14 x 4   2 x 3   9 x   6 .
Соответствующий полином искажений e( )  y ( x )  c( x ) равен
e( x )   7 x11  x 6   10 x 3   6 x 2
Полином локаторов стираний равен  s ( x )  (1   6 x )(1   2 x )   8 x 2   3 x  1 . Компоненты синдрома определяются следующими равенствами:
 0  S1  e( )   7 11   6   10 3   6 2   6 ,
 1  S 2  e( 2 )   7 22   12   10 6   6 4   4 ,
 2  S 3  e( 3 )   7 33   18   10 9   6 6   4 ,
 3  S 4  e( 4 )   7 44   24   10 12   6 8   2 ,
 4  S 5  e( 5 )   7 55   30   10 15   6 10  0,
 5  S 6  e( 6 )   7 66   36   10 18   6 12   2 .
( x )   s ( x ) t ( x ) =
Полином
локаторов
искажений
7 4
14 3
14 2
11
 x   x   x   x  1 . Применим алгоритм Берлекэмпа-Месси для отыскания
этого полинома по набору синдромных компонент  0 ,  1 , ...,  5 , положив для
инициализации L  r  2 и ( x )   8 x 2   3 x  1, B( x )   8 x 3   3 x 2  x . Вычисления
представлены в следующей таблице.
Табл.5.1.1
*

(x
)
B( x )
r r
m
L
 ( x)
-1
2
1   3x   8x2
x   3x2   8 x3
2
1
0
3
x   3x2   8 x3
1   14 x   13 x 2 
1   14 x   13 x 2 
  8 x3
  8 x3
3
4
1
 14
5
4
1   3x   8x2
1   3x   6 x2 
  2 x3   7 x4
0
1
3
4
1   3x   8x2
1   3x   6 x2 
  2 x3   7 x4
x2   3x3   8 x4
x   4 x 2   9 x 3
1   11 x   14 x 2 
  14 x 3   7 x 4
1
4
1   11 x   14 x 2 
  14 x 3   7 x 4
x 2   4 x 3   9 x 4
Нетрудно увидеть, что алгоритм нашел правильный полином локаторов искажений.
В зависимости от скорости поступления данных для реализации вычислений
нужно иметь одно или несколько устройств быстрого умножения в поле локаторов.
При программной реализации необходимо иметь набор функций, выполняющих
арифмети- ческие операции в расширенном поле. Отметим, что полином  (x ) может
быть успешно найден только при условии t  ( d  s  1) / 2 . В тех случаях, когда при
большем числе ошибок существует неправильное кодовое слово c' ( x ) , которое
117
отстоит от принятого слова r ( x ) на расстоянии d ( c' ( x ), r ( x ))  ( d  s  1) / 2 ,
 ' ( x ) . При этом найденный полином не
алгоритм также находит полином
соответствует действительным расположениям и величинам ошибок и стираний.
Однако, когда код способен обнаружить ошибки, проверка условия deg  ( x )  L
позволяет часть таких ошибок обнаружить.
§5.2. Описание БЧХ-кодов в спектральной области
5.2.1. Преобразования Фурье в конечных полях
Рассмотрим последовательность v  (v0 , v2 , ..., vn1 ), vi  GF ( q) , и предположим,
что длина слова n является делителем числа q m  1 при некотором целом m . Пусть
 - примитивный элемент поля GF ( q m ) и    ( q 1) / n - элемент порядка n , т.е.
 n  1 . Преобразованием Фурье вектора v в поле GF ( q m ) называется вектор
m
V  (V0 ,V1 ,...,Vn1 ) , задаваемый равенствами
n 1
V j    ij vi , j  0,1, ..., n  1 .
(5.2.1)
i 0
Индекс i называется временем, тогда индекс j естественно называть частотой, а
набор значений V спектром вектора v. Исходный вектор может принимать значения в
любом подполе поля GF ( q m ) , например, в поле GF (q ) . Однако, значения спектра
всегда лежат в расширенном поле GF ( q m ) . Вектор v и его спектр V однозначно
определяют друг друга. Так, прямому преобразованию (5.2.1) соответствует обратное
преобразование
vi 
1 n1 ij
  V j , i  0,1, 2,..., n  1 .
n j 0
(5.2.2)
Чтобы убедится в справедливости равенства (5.2.2), заметим, что  является
корнем полинома x n  1 , а если   1 , то корнем полинома x n 1  x n 2  ...  x  1 , т.е.
n 1

jr
 0, r  0 mod n .
j 0
Отсюда получим
n 1
n 1
 
j 0
i j
k 0
k j
n 1
n 1
k 0
j 0
vk   vk   ( k i ) j  vi  n ,
что эквивалентно (5.2.2). Заметим, что n есть число поля GF ( q m ) , равное вычету
n mod p , где р-характеристика поля. В случае полей характеристики 2 число n можно
заменить на 1, т.к. в этом случае n – всегда нечетное число.
Многие свойства преобразований Фурье переносятся на случай конечных полей.
Например, преобразование Фурье – линейно, т.е. преобразование суммы векторов
равно сумме преобразований. Другим примером является теорема о свертке.
118
Отметим, что всюду ниже индексы в формулах берутся как вычеты по модулю
n. Так, например, j  i это такое целое k из множества {0,1,…,n-1}, что
k  i  j mod n .
Теорема 5.2.1 (теорема о свертке). Пусть U, V - преобразования Фурье векторов
u, v . Пусть x  ( x0 , x1 , ..., xn1 ) - вектор, определяемый равенством xi  ui  vi ,
i  0, 1,..., n  1 , и X  ( X 0 , X 1 , ..., X n 1 ) - его преобразование Фурье . Тогда
Xj 
1 n 1
U j i Vi , j  0, 1, ..., n  1 .
n i 0
(5.2.3)
Если же X j  U j  V j , j  0, 1, ..., n  1 , то
n 1
xi   ui  j v j , i  0, 1, ...n  1 .
(5.2.4)
j 0
Доказательство: Фурье преобразование вектора x определяется следующим
образом:
n 1
X j   uk v k  k  j 
k 0
1 n 1 n 1
1 n 1 n 1
1 n 1
 k i
k j
k ( j i )
u
V




V
u


 k l
 i k
ViU ji .
n k 0 i 0
n i 0 k 0
n i 0
Второе равенство вытекает из следующих соотношений:
xi 
n 1
1 n1
1 n 1 n1
1 n 1 n 1
k i
k j
k i
k ( j i )
U
V


U
v




v
U


v j u j i .
 kk
 k
 j k

j
n k 0
n k 0
n j 0 k 0
j 0
j 0
n 1
Пусть v ( x )   vi x i - полином, коэффициентами которого являются элементы
i 0
вектора v  (v0 , v2 , ..., vn 1 ) . В соответствии с (5.2.1) спектральный коэффициент V j
можно записать в виде V j  v(  j ) .
5.2.2. Спектральное описание БЧХ-кодов
Теперь можно дать описание БЧХ -кодов в спектральной области.
Каждое слово q-ичного циклического ( n, k )  кода может быть записано в
форме c( x )  g ( x )m( x ) , где m(x ) - q-ичный
информационный полином
степени k-1 и g ( x ) - порождающий полином, который имеет среди своих
корней величины  l0 ,  l0 1 , ...,  l0 d 2  GF ( q m ),  n  1 , благодаря которым
обеспечивается конструк-тивное расстояние d . Во временной области
слово c  (c0 , c1 , ..., cn1 ) получается в результате циклической свертки
n 1
ci   gi  j m j , {ci , gi , mi }  GF ( q) ,
j 0
где предполагается, что g r  0 для всех r  0 и r  n  k , а также ms  0 для
всех
s  0 и s  k . Обозначим через C j , G j и M j , j  0, 1,..., n  1 ,
119
c , g  ( g 0 , g1 , ..., g nk , 0, ..., 0)
m  (m0 , m1 ,...,mk 1 , 0,...,0) . Тогда из теоремы о свертке имеем
спектральные
коэффициенты
векторов
C j  G j M j , j  0, 1,..., n  1 .
и
(5.2.5)
Учитывая, что C j  c(  j ), j  0, 1,..., n  1 , G j  g (  j )  0, j  l0 , l0  1, ..., l0  d  2 ,
и M j  m(  j ) , получим, что спектр каждого кодового слова имеет нулевые
значения на интервале l0 , ..., l0  d  2 .
Каждое кодовое слово является обратным преобразованием его
1
спектра, т.е. ci  C (  i ), i  0, 1,..., n  1 . Хотя спектр любого слова имеет
n
нулевые значения C j  c(  j ) для всех j, для которых g (  j )  0, остальные
компоненты спектра должны удовлетворять условиям сопряженности, которые
нужно выполнить, чтобы временные компоненты ci , i  0, 1,..., n  1 , принадлежали
полю GF (q ) . Эти условия сформулированы в следующей теореме.
Теорема 5.2.2. Пусть C  (C0 , C1 , ..., Cn1 ) есть n-мерный вектор с компонентами
из GF ( q m ) , где n делит q m  1 . Обратное преобразование Фурье с вектора С является
вектором над GF (q ) тогда и только тогда, когда C qj  C jq , j  0, 1, ..., n  1 .
Доказательство: Если ci  GF ( q), i  0, 1,..., n  1 , то
q
n 1
 n 1

C    ci  ij    ciq  ijq 
i 0
 i 0

q
j
n 1
c 
i ( jq )
i
 C jq .
i 0
Обратно, если C qj  C jq , j  0, 1, ..., n  1 , то
n 1
c
i 0
q
i
 ijq 
n 1
c 
i ( jq )
i
.
i 0
Так как q и n взаимно просты, то jq mod n пробегает все значения {0, 1, ..., n  1} ,
когда j пробегает эти же значения. Поэтому
n 1
c
i 0
q
i
 ik 
n 1
c 
i 0
i
ik
.
В силу однозначности преобразования Фурье, для всех
равносильно тому, что ci  GF (q) .
i
имеем ciq  ci ,
что
В случае кодов Рида-Соломона условия сопряженности отсутствуют,
так как и символы кодовых слов, и спектральные коэффициенты являются
элементами одного поля.
Кодирование в спектральной области выполняется автоматически за
счет выбора спектрального вектора C  (C0 , C1 , ..., Cn1 ) , удовлетворяющего
условиям сопряженности и требованию C j  0 для всех j, для которых g (  j )  0 .
120
Структура такого вектора может быть
циклотомических классов по модулю n.
пояснена
с
помощью
системы
Предположим, что вычеты по модулю n распадаются на T множеств I1 , I 2 , ..., I T ,
соответстующих логарифмическому представлению циклотомических
классов. Пусть m1 , m2 , ..., mT - длины этих классов.
См., например,
табл.4.3.1, где при q  2 и n  15 имеет место следующее разложение на
T  5 сопряженных классов: I1  {0}, I 2  {1, 2, 4, 8}, I 3  {3, 6, 12, 9}, I 4  {5, 10},
I 5  {7, 14, 13, 11} , и m1  1, m2  m3  m5  4, m4  2 . Каждый циклотомический
класс представляет собой множество корней неприводимого над GF (q )
полинома, степень которого равна длине этого класса. Условия сопряженности
требуют, чтобы спектральные коэффициенты C j определялись для всех
индексов j, которые принадлежат одному множеству
образом. Если C j   , то Cqj   q , Cq2 j   q ,..., Cqmk 1 j   q
2
mk 1
Ik
следующим
. В силу того, что
 q   по пост-роению циклотомического класса, величина  , а следовательно и
mk
C j , принадлежат полю GF ( q mk ) . Поэтому структура спектрального вектора
C  (C0 , C1 , ..., Cn1 ) , обратное Фурье преобразование которого является q -ичным
словом БЧХ-кода, такова. Этот вектор порождается Т величинами 1 , 2 ,..., T ,
причем  k является элементом поля GF ( q mk ) , которое в свою очередь является
подполем поля GF ( q m ) . Все спектральные коэффициенты C j , индексы которых
принадлежат множеству I k , являются степенями порождающего элемента  k .
Некоторые из этих коэффициентов равны нулю. Это те коэффициенты C j , которые
соответствуют корням полинома g ( x ) : g (  j )  0 . Количество спектральных
векторов С с указанными свойствами в точности равно числу кодовых
слов, а именно M   q mk , где произведение берется по тем индексам k, которые
 k 0
соответствуют ненулевым порождающим элементам  k . Очевидно, M  q n deg g ( x ) .
Пример 5.2.1 Пусть    , где  - примитивный элемент поля GF ( 2 4 ) и
корень полинома f ( x )  x 4  x  1. Рассмотрим двоичный циклический (15,7)-код с
минимальным расстоянием 5, задаваемый набором корней {  ,  2 ,  3 ,  4 } и
порождающим полиномом g ( x )  ( x 4  x  1)( x 4  x 3  x 2  x  1) . Любое кодовое
слово C  (C0 , C1 , ..., C15 ) в спектральной области будет иметь C j  0 для всех
индексов j, лежащих в множестве {1, 2, 4, 8}{3, 6, 12, 9} . Поскольку по модулю 15
имеется еще 3 циклотомических класса, то остальные спектральные коэффициенты
порождаются 3 элементами 1  GF (2),  4  GF (2 2 ) и  5  GF ( 2 4 ) . При этом
C0  1 , C5   4 , C10   42 , C7   5 , C14   52 , C13   54 , C11   58 . Очевидно, что имеется
2  22  24  27 способов выбора вектора С.
§5.3. Декодирование в спектральной области
121
Пусть r  ( r0 , r1 , ..., rn 1 ) - слово на выходе канала связи, r  c  e , где
e  (e0 , e1 , ..., en1 ) - вектор искажений, и пусть R  ( R0 , R1 , ..., Rn1 ), E  ( E0 , E1 , ..., En1 )
-
соответствующие
линейности
преобразования
преобразования Фурье
Фурье:
R j  r(  j ), E j  e(  j ) .
R  C  E . Так как
S j  Rj
В
и
силу
Cj  0
при j  l0 , l0  1, ..., l0  d  2 , то мы знаем точное значение d  1 спектральных
компонент вектора искажений:
El0  j 1  S j , j  1, 2, ..., d  1 .
Задача декодирования заключается в том, чтобы при наличии t  ( d  1) / 2 ошибок
или при наличии s стираний и t ошибок, t  ( d  s  1) / 2 , восстановить все значения
вектора искажений по известным d  1 значениям спектральных компонент
вектора Е. В этом разделе мы покажем, как это может быть сделано. Спектральное
представление С кодового слова будет найдено в виде C  R  E , а само q-ичное
кодовое слово будет определено в результате обратного преобразования Фурье
вектора С.
Рассмотрим вначале задачу исправления ошибок. Пусть известен полином
локаторов ошибок
t
 ( x )   (1  xX i )   t x t   t 1 x t 1  ...   1 x  1 .
(5.3.1)
i 1
Его корнями являются величины, обратные локаторам ошибок, т.е. (  i )  0 , если i
– позиция ошибки. Рассмотрим последовательность (1, 1 ,  2 ,...,  t , 0, ..., 0) как
прямое Фурье-преобразование некоторой последовательности λ  (0 , 1 , ..., n1 ) .
1
Тогда согласно (5.2.2) имеем i   (  i ) , т.е. i =0 для тех индексов i, для которых
n
ei  0 . С другой стороны, i  0 для тех индексов i, для которых ei  0 . Это означает,
что
i  ei  0, i  0, 1, ..., n  1 .
Применяя теорему о свертке, получим
n 1

j i
 Ei  0, j  0, 1, ..., n  1 .
i 0
Коэффициенты  i , i  0, 1,..., t , мы считаем известными, поскольку определен
полином локаторов ошибок, причем  0  1 . Поэтому последнее равенство можно
интерпрети-ровать как рекуррентное уравнение
t
E j     i  E j i , j  0, 1, ..., n  1 ,
(5.3.2)
i 1
в котором все индексы берутся как вычеты по модулю n. Это уравнение позволяет
вычислить всю последовательность ( E0 , E1 , ..., En1 ) по ее точно известному отрезку
( El0 , El0 1 , ..., El0 t 1 ) .
122
В следующем примере будет продемонстрирован спектральный подход к
исправлению ошибок.
Пример 5.3.1. Мы снова продолжим рассмотрение декодирования РС-кода
длины n=7, c минимальным расстоянием 5. Предположим, что синдромные
компоненты и коэффициенты полинома локаторов ошибок уже определены и задача
заключается в определении вектора ошибок. В рассматриваемом случае (см. пример
5.1.1) l0  0 , S1   4 , S 2   5 , S 3  0, S 4   6 и
1  1,  2   . Известные
спектральные
компоненты
вектора
шума:
4
5
6
E0  S1   , E1  S 2   , E 2  S 3  0, E3  S 4   . Остальные величины, начиная с
j=4, вычисляются по формуле E j   1 E j 1   2 E j 2 :
E0
E4
E5
E6
  4 , E1   5 , E 2  0, E3   6 ,
  1 E3   2 E 2   6 ,
  1 E 4   2 E3   2 ,
  1 E5   2 E 4   6 .
n 1
Применяя обратное преобразование Фурье, ei  E ( ) , где E ( x )   E j x j , получим
i
j 0
e0  E (1)  0,
e1  E ( 1 )  0,
e2  E ( 2 )   2 ,
e3  E ( 3 )  0,
e4  E ( 4 )  0,
e5  E ( 5 )  0,
e6  E ( 6 )   .
В результате получен полином ошибок e( x )  x 6   2 x 2 , что соответствует
действительному расположению и величинам ошибок.
Теперь рассмотрим исправление s стираний и t ошибок, считая, что
t  ( d  s  1) / 2 . Пусть известен полином локаторов искажений
ts
 ( x )   (1  xX i )   t  s x t  s   t  s 1 x t  s 1  ...   1 x  1 .
(5.3.3)
i 1
Напомним, что этот полином определяется как произведение полинома локаторов
ошибок и полинома локаторов стираний (см. (1.18.5)). Его корнями являются
величины, обратные локаторам искажений, т.е. (  i )  0 , если i – позиция либо
ошибки, либо стирания. Снова будем рассматривать последовательность
(1, 1 ,  2 ,...,  t s , 0, ..., 0)
как
прямое
Фурье-преобразование
некоторой
последовательности λ  (0 , 1 , ..., n1 ) . Те же аргументы, которые использовались
выше, показывают, что
i  ei  0, i  0, 1, ..., n  1 .
и, следовательно,
123
n 1

j i
 Ei  0, j  0, 1, ..., n  1 ,
i 0
что дает рекуррентное уравнение
ts
E j     i  E j i , j  0, 1, ..., n  1 ,
(5.3.4)
i 1
которое позволяет вычислить всю последовательность ( E0 , E1 , ..., En1 ) по ее точно
известному отрезку ( El0 , El0 1 , ..., El0 t  s 1 ) .
В следующем примере будет продемонстрирован спектральный подход к
исправлению ошибок и стираний.
Пример 5.3.2. Продолжим рассмотрение примера 5.1.2. Напомним, что для
этого примера d=5, одна ошибка находится на шестой позиции и два стирания
находятся
на
нулевой
и
второй
позициях.
Компоненты
синдрома
6
2
2
S1  0, S 2   , S 3   , S 4   .
Полином локаторов ошибок  t ( x )   6 x  1 ,
полином локаторов стираний  s ( x )  ( x  1)( 2 x  1)   2 x 2   6 x  1 . Следовательно,
полином
локаторов
искажений
равен
 1  0,  2   ,  3   . Так как
 ( x )   t ( x )  s ( x )  x 3   3 x 2  1 ,
El0  j 1  S j ,
3
j  1, 2, ..., d  1 , и
l0  0 ,
т.е.
то:
E0  S1  0, E1  S 2   , E 2  S 3  
и E3  S 4   - суть 4 точно известных
спектральных компоненты вектора искажений. Уравнение, определяющее остальные
компоненты, имеет следующий вид: E j   1 E j 1   2 E j 2   3 E j 3 . Имеем
6
2
E0
E4
E5
E6
2
 0, E1   6 , E 2   2 , E3   2 ,
  3 E 2  E1   4 ,
  3 E3  E 2   2 ,
  3 E 4  E3   .
Таким образом, E ( x )   6 x   2 x 2   2 x 3   4 x 4   2 x 5  x 6 . Обратное
преобразование дает
e0  E (1)   6 ,
e1  E ( 1 )  0,
e2  E ( 2 )   5 ,
e3  E ( 3 )  0,
e4  E ( 4 )  0,
e5  E ( 5 )  0,
e6  E ( 6 )   .
Найденные компоненты вектора искажений соответствуют исходным данным,
взятым в примере 5.1.2.
124
Гл. 6. Декодирование РС-кодов в канале с мягкими решениями
§6.1. Свойства кодов Рида-Соломона
Коды Рида-Соломона (РС-коды, см. разд. 4.3.4) обладают рядом замечательных
свойств, которые делают их весьма привлекательными для практических приложений.
Одно из этих свойств уже было отмечено: они лежат на границе Синглтона и являются
кодами с максимальным достижимым расстоянием (МДР-кодами). Согласно границе
Синглтона любой линейный ( n, k )  код имеет минимальное расстояние d  n  k  1 . Для
МДР-кодов (и, в частности для РС-кодов) минимальное расстояние достигает своего
максимального значения, равного правой части этого неравенства.
6.1.1. Исправление пакетов ошибок
РС-код над GF (q ) с минимальным расстоянием d исправляет все q-ичные ошибки
 d  1
кратности t  t0  
. Если q  2 m , то в двоичном представлении РС-код имеет длину

2


n2  mn, избыточность r2  m(n  k ) и исправляет t 0 -кратные фазированные пакеты
ошибок длины m. Фазированный пакет длины m это такой, который затрагивает точно
один q-ичный символ. Фазированный пакет длины mt это такой, который затрагивает
точно t q-ичных символов. Тем самым, в двоичном представлении РС-код позволяет
b  mt0 . При этом
исправлять фазированные пакеты длины вплоть до
2b  r2  2b  m(n  k )  0 , т.е. такой код имеет максимальную эффективность по
отношению к фазированным пакетам ошибок. Этот же код позволяет исправлять любые
(т.е. не обязательно фазированные) пакеты ошибок длины вплоть до b  m  (t0  1)  1 , так
как такие пакеты затрагивают не более t 0 q-ичных символов. По отношению к таким
пакетам ошибок 2b  r2  2b  m(n  k )  2m  1 , т.е. при больших кодовых длинах
относительная избыточность РС-кодов близка к минимально возможной и их
эффективность по отношению к произвольным пакетам ошибок также достаточно велика.
6.1.2. Спектр весов РС-кодов
Всякий код с минимальным расстоянием d исправляет стирания кратности s=d-1,
т.е. позволяет восстановить d-1 неизвестных символов по n  d  1 известным. В случае
МДР-кодов k  n  d  1 и кодирование можно рассматривать как исправление стираний,
при котором по известным (информационным) k символам определяются s  n  k
проверочных. Так как стирания могут располагаться на произвольных s позициях, то в
МДР-кодах любые k позиций могут быть информационными.
Хотя данное рассуждение очень просто и достаточно, представляется полезным
привести дополнительное алгебраическое обоснование того, что в РС-кодах любые k
позиций могут быть информационными.
Напомним, что по определению РС-код над полем GF (q ) является q-ичным
циклическим кодом, проверочная матрица которого может быть записана следующим
образом:
125
1 1

1 2
H
.
.

1  d 1
12
 22
.
 d21
... 1n 1 

...  2n 1 
,
.
. 

...  dn11 
где 1   l0 ,  2   l0 1 ,...,  d 1   l0 d 2 и   элемент поля GF (q ) порядка n  q  1 , а
l0  целое число. Всякая подматрица Р матрицы Н, образованная произвольными d  1
столбцами матрицы Н, может быть записана в виде P  P1  P2 , где P1 -матрица Вандермонда, а P2 - диагональная матрица (см. доказательство теоремы 1.16.1). Следовательно, Р
– невырожденная подматрица и поэтому любые k  n  d  1 символов кодового слова
могут быть выбраны в качестве информационных.
Тем самым мы доказали, что в коде Рида-Соломона слова минимального веса могут
занимать произвольные d  n  k  1 позиций. Каждое слово минимального веса задается
одной ненулевой и k  1 нулевыми информационными позициями. Поэтому в коде РидаСоломона имеется
n


(6.1.1)
( q  1)

 n  k  1
кодовых слов минимального веса.
Пусть Aw есть число слов веса w в некотором коде над полем GF (q ) длины n. Набор
чисел { A0 , A1 ,..., An } называется весовым спектром кода. Для МДР-кода с минимальным
расстоянием d и, в частности, РС-кода, весовой спектр известен и дается в следующей
теореме.
Теорема 6.1.1. Имеют место следующие соотношения для спектра МДР кода над
полем GF (q ) : A0  1, A1  ...  Ad 1  0 и
wd
n
 w  1 wd  j
Aw   ( q  1)  ( 1) j 
, w  d ,..., n.
q
j 0
 w
 j 
(6.1.2)
Доказательство: Разобьем совокупность целых чисел I  {1, 2, ..., n} на два
непересекающихся подмножества I 1  {i1 , i2 , ..., il } и I 0  I \ I 1 , где d  l  n . Первое
подмножество состоит из l, а второе – из n  l чисел. Будем рассматривать лишь те
кодовые слова, которые содержат нулевые символы во всех позициях с номерами из I 0 и
ненулевые символы в позициях с номерами из I1 . Обозначим через M l количество таких
кодовых слов веса l. Очевидно, это количество не зависит от выбора под-множеств I 0 , I 1 , а
зависит только от выбранного значения l. Кроме того, различным выборам I 0 , I 1
соответствуют различные кодовые слова веса l, поскольку они будут различаться
расположением нулевых символов. Тогда
n
Al     M l .
l
(6.1.3)
Поскольку n  l символов в рассматриваемых словах нулевые, то приписывая
произвольные значения l  d  1 символам из множества I1 , мы получим ql d 1 -1
ненулевых кодовых слов, вес которых не превышает l. Согласно нашему предположению,
126
число слов веса t, имеющих нулевые символы на позициях из I 0 равно M t . Так как
l 
имеется   способов выбора t позиций из l возможных, то выполняется следующее
t
равенство:
l 
l
  t   M
 q l  d 1  1, l  d , d  1, ..., n ,
(6.1.3)
 
которое неявно задает M l как функцию от l. В частности, полагая l=d, получим
M d  q  1 , что с помощью (6.1.2) дает формулу (6.1.1). Полагая l  d  1, мы получим
соотношение, выражающее M d 1 через M d , и т.д.
t d
t
Для получения явной формулы для M l покажем, что
l d
 l  1 l d  j
M l  ( q  1) ( 1) j 
  q
j 0
 j 
(6.1.4)
является решением (6.1.3), т.е. подстановка (6.1.4) в левую часть дает правую
часть равенства (6.1.3). Для этого введем в рассмотрение полином Tl (x ) ,
l 1
 l  1 l d  j
Tl ( x )   ( 1) j 
  x
j 0
 j 
(6.1.5)
и обозначим через m(x ) операцию отбрасывания отрицательных степеней переменной х
в полиноме m(x ) . Заметим, что

M l  ( x  1)  Tl ( x ) |x  q , l  d , d  1, ..., n .

(6.1.6)
Выражение (6.1.5) можно свернуть, используя формулу бинома Ньютона:
Tl ( x )  x  ( d 1)  ( x  1) l 1 ,
поэтому



M l  ( x  1)  x  ( d 1)  ( x  1)l 1 |x  q , l  d , d  1,..., n .
(6.1.7)
Теперь подставим полученное выражение в левую часть соотношения (6.1.3). В
результате получим:
l
l
  t   M
t d
 
t
l
l

 ( q  1)   q  ( d 1)  ( q  1)t 1 
t d  t 



l


l
 ( q  1) q  ( d 1) ( q  1) 1     ( q  1)t  
t 0  t 








1
 ( q  1) q  d (1  ) 1 q l   ( q  1)  q l  d  i  
q
 i 0



l d
 ( q  1) q l  d  i  q l  d 1  1,
i 0
127
что завершает доказательст во.
В соответствии и теоремой 6.1.1, весовой спектр кодов Рида-Соломона определяет-ся
формулой (1.6.2):
Aw  (q  1)  q
w d
 n  w d   1 
      
 w  j 0  q 
j
 w  1

, w  d ,..., n.
 j 
Однако, для упрощения вычислений со спектром мы можем использовать следующее
равенство
w1
 w  1  1 

  1    1   w,d  ,
(1.6.8)
 j   q
1  w 1 
 , имеет знак, зависящий от
где остаточный член  w,d имеет порядок wd 1 
q
 w  d  1
четности w и убывает по абсолютной величине с ростом q и w. Используя (1.6.8) мы
можем записать
  1
 

j 0  q 
w d
j
( q  1) w  n 
~
Aw 
  , w  d ,..., n.
(6.1.9)
q d 1  w 
Формула (6.1.9) значительно проще, чем (6.1.2), однако она дает очень точные значения
коэффициентов весового спектра Aw особенно при больших значениях q и w.
В следующей таблице в качестве примера применения теоремы 6.1.1 приведено
точное и округленное распределение весов в (31,15) –коде Рида-Соломона над полем
GF (32) с минимальным расстоянием d=17.
Таблица 6.1.1
w
Aw
0
17
18
19
20
21
22
23
1
8.2207e+09
9.5908e+10
2.6292e+12
4.6762e+13
7.6465e+14
1.0765e+16
1.3060e+17
~
Aw
4.9465e+09
1.1926e+11
2.5297e+12
4.7052e+13
7.6403e+14
1.0766e+16
1.3059e+17
 w,d
w
Aw
3.9829e-01
-2.4353e-01
3.7864e-02
-6.2055e-03
8.0717e-04
-9.2200e-05
9.4224e-06
24
25
26
27
28
29
30
31
1.3495e+18
1.1713e+19
8.3797e+19
4.8105e+20
2.1304e+21
6.8319e+21
1.4119e+22
1.4119e+22
~
Aw
1.3495e+18
1.1713e+19
8.3797e+19
4.8105e+20
2.1304e+21
6.8319e+21
1.4119e+22
1.4119e+22
 w,d
-8.7939e-07
7.6030e-08
-6.1569e-09
4.7107e-10
-3.4291e-11
2.3885e-12
-1.5997e-13
1.0546e-14
Наибольшая относительная ошибка  w,d возникает для первого члена весового
спектра, т.е. при w=d. При этом  d ,d  ( d  1) / q . Например, для типичного РС-кода
(255,230,16), применяемого в магнитной записи, max  w ,d  15 / 256  0.0586 , что дает
128
вполне удовлетворительное приближение для многих вероятностных расчетов. Для этого
же кода ошибка приближения второго члена весового спектра равна примерно 0.002.
6.1.3. Доля не обнаруживаемых ошибок
При декодировании линейного кода в пределах минимального расстояния (с
помощью решающих областей в виде шаров Хеммига радиуса ( d  1) / 2) ошибки,
кратность которых не превышает ( d  1) / 2 , исправляются. Некоторые ошибки кратности
l  ( d  1) / 2 не обнаруживаются и декодер выдает получателю ошибочное кодовое слово.
Это происходит, когда ошибки переводят переданное слово в чужую решающую область.
Однако, большое количество ошибок кратности l могут быть обнаружены, поскольку они
не переводят переданное слово ни в одну из решающих областей. В этом разделе мы
хотим оценить долю не обнаруживаемых ошибок кратности l для l = ( d  1) / 2 +1,…, d  1
и показать, что в случае кодов Рида-Соломона достаточно большой длины эта доля
является весьма малой величиной.
В разделе 2.4.1 анализировалось пространство q-ичных последовательностей и была
найдена мощность N ( w, l , t ) пересечения сферы S l (c 0 ) радиуса l
с центром в
произвольном кодовом слове c 0 и шара Bt (ci | w) радиуса t, центр которого, c i , отстоит от
центра сферы на расстояние w (см. (2.4.4)). Там же было показано, что сфера Sl (c 0 )
пересекается со всеми шарами радиуса t c центрами в кодовых словах,
n
отстоящих от c 0 на расстояние w, в
 A N ( w, l, t )
w
w 1
точках, где Aw - число кодовых слов
веса w (весовой cпектр кода). Поэтому доля не обнаруживаемых ошибок кратности l равна
отношению числа не обнаруживаемых ошибок к общему числу ошибок данной кратности:
n
 t (l ) 
 A N ( w, l, t )
w
w 1
n
 ( q  1)l
l
.
(6.1.10)
129
Download