Синдромное декодирование линейных блочных кодов
Покажем, как можно использовать синдром принятого вектора не только для обнаружения, но и для исправления ошибок.
Пусть U = ( U0 , U1 , …, Un-1 ), e = ( е0 , е1, …, еn-1
) и r = ( r0 , r1, r2 , …, rn-1) являются передаваемым кодовым словом, вектором-ошибкой и принятым вектором соответственно. Тогда
r = U + e (1.25)
и синдром
S = r×HT = (U + e )× HT = U× HT + e× HT = 0 + e× HT = e× HT , (1.26)
поскольку для любого кодового слова U × HT = 0.
Таким образом, синдром принятой последовательности r зависит только от ошибки, имеющей место в этой последовательности, и совершенно не зависит от переданного кодового слова. Задача декодера, используя эту зависимость, определить элементы (координаты) вектора ошибок. Найдя вектор ошибки можно восстановить кодовое слово как
U* = r + e . (1.27)
На примере одиночных ошибок при кодировании с использованием линейного блочного (7,4)-кода покажем, как вектор ошибки связан с синдромом, и как, имея синдром, локализовать и устранить ошибки, возникшие при передаче.
Найдем значения синдрома для всех возможных одиночных ошибок в последовательности из семи символов:
e_ = ( 0000000
),
| 1011100 | T | |||
e_ × HT = ( 0000000 ) × | 1110010 | = (000); | |||
0111001 |
e0 = ( 1000000 ),
1011100 | T | ||||
e0× HT = ( 1000000 ) × | 1110010 | = (110); | |||
0111001 |
e1 = ( 0100000 ),
1011100 | T | ||||
e1× HT = ( 0100000 ) × | 1110010 | = (011); | |||
0111001 |
e2 = ( 0010000 ),
1011100 | T | ||||
e2× HT = ( 0010000 ) × | 1110010 | = (111); | |||
0111001 |
e3 = ( 0001000
),
|
1011100 |
T |
e3× HT = ( 0001000 ) × |
1110010 |
= (101); |
|
0111001 |
|
),
|
1011100 |
T |
e4× HT = ( 0000100 ) × |
1110010 |
= (100); |
|
0111001 |
|
|
1011100 |
T |
e5× HT = ( 0000010 ) × |
1110010 |
= (010); |
|
0111001 |
|
),
|
1011100 |
T |
e6× HT = ( 0000001 ) × |
1110010 |
= (001). |
|
0111001 |
|
Все возможные для (7,4)-кода одиночные ошибки и соответствующие им векторы синдрома приведены в табл. 1.3.
Таблица 1.3
Вектор ошибки |
Синдром ошибки |
Десятичный код синдрома |
1000000 |
110 |
6 |
0100000 |
011 |
3 |
0010000 |
111 |
7 |
0001000 |
101 |
5 |
0000100 |
100 |
4 |
0000010 |
010 |
2 |
0000001 |
001 |
1 |
Например, если синдром, вычисленный по принятому вектору, равен ( 111 ), это значит, что произошла одиночная ошибка в третьем символе, если S
= ( 001 ) – то в последнем, и т.д.
Если место ошибки определено, то устранить ее уже не представляет никакого труда.
Полная декодирующая схема для (7,4)-кода Хемминга, использующая синдром вектора r не только для обнаружения, но и для исправления ошибок, приведена на рис. 1.6.
Рис. 1.6
А теперь посмотрим, что произойдет, если в принятой последовательности будет не одна, а, например, две ошибки. Пусть ошибки возникли во второй и шестой позициях e = ( 0100010 ). Соответствующий синдром определится как
S = ( 0100010 ) = (001).
Однако синдром S = ( 001 ) соответствует также и одиночной ошибке в седьмой позиции ( e6 ).Следовательно, наш декодер не только не исправит ошибок в позициях, в которых они произошли, но и внесет ошибку в ту позицию, где ее не было. Таким образом, видно, что (7,4)-код не обеспечивает исправления двойных ошибок, а также ошибок большей кратности.
Это, однако, обусловлено не тем, каким образом производится декодирование, а свойствами самого кода. Несколько позднее будет показано, от чего зависит исправляющая способность кода, то есть сколько ошибок он может исправить.