-
Обнаружение и исправление ошибок
-
Общие понятия
-
Для
защиты полезной информации от помех
необходимо в том или ином виде вводить
избыточность: увеличивать число символов
и время их передачи, повторять целые
сообщения, повышать мощность сигнала
— все это ведет к усложнению и удорожанию
аппаратуры. В качестве исследуемой
модели достаточно рассмотреть канал
связи с помехами, потому что к этому
случаю легко сводятся остальные.
Например, запись на диск можно рассматривать
как передачу данных в канал, а чтение с
диска – как прием данных из канала.
Коды
без избыточности обнаружить, а тем более
исправлять
ошибки не могут.
Количество символов, в которых любые
две комбинации кода отличаются друг от
друга, называется кодовым
расстоянием.
Минимальное
количество символов, в которых все
комбинации кода отличаются друг от
друга, называется минимальным
кодовым расстоянием.
Минимальное кодовое расстояние —
параметр, определяющий помехоустойчивость
кода и заложенную в коде избыточность,
т.е. корректирующие свойства кода.
В
общем случае для обнаружения t
ошибок минимальное кодовое расстояние
d0
= t
+ 1.
Минимальное
кодовое расстояние, необходимое для
одновременного обнаружения t
и исправления
ошибок,
d0
= t
+
+ 1.,
Для
кодов, только исправляющих
ошибок,
d0
= 2
+ 1.
Для
того чтобы определить кодовое расстояние
между двумя комбинациями двоичного
кода, достаточно просуммировать эти
комбинации по модулю 2 и подсчитать
число единиц полученной комбинации.
Для
обнаружения и исправления одиночной
ошибки соотношение между числом
информационных разрядив k
и числом корректирующих разрядов
должно удовлетворять следующим условиям:
,
,
при
этом подразумевается, что общая длина
кодовой комбинации
n
= k + ρ
Для
практических расчетов при определении
числа контрольных разрядов кодов с
минимальным кодовым расстоянием d0
= 3 удобно
пользоваться выражениями
ρ1(2)
= [ log2
( n + 1
) ],
если
известна длина полной кодовой комбинации
n,
и
ρ
1(2) =
[log2 {
( k
+ 1 ) + [ log2
(
k + 1) ] } ],
если
при расчетах удобнее исходить из
заданного числа информационных символов
k
.
Для
кодов, обнаруживающих все трехкратные
ошибки (d0
= 4),
ρ
1(3)
1
+ log2
(
n + 1
),
или
ρ
1(3)
1 + log2
[ (
k + 1
) + log2
(
k + 1
) ].
Для
кодов длиной в n
символов, исправляющих одну или две
ошибки (d0
= 5),
ρ
2
log2
(Cn2
+ Cn1
+ 1).
Для практических
расчетов можно пользоваться выражением:
.
Для
кодов, исправляющих 3 ошибки (d0
= 7),
.
-
Линейные групповые коды
Линейными
называются коды, в которых проверочные
символы представляют собой линейные
комбинации информационных символов.
Для
двоичных кодов в качестве линейной
операции используется сложение по
модулю 2.
Последовательность
нулей и единиц, принадлежащих данному
коду, будем называть кодовым
вектором.
Свойство
линейных кодов:
сумма
(разность) кодовых векторов линейного
кода дает вектор, принадлежащий данному
коду.
Линейные
коды образуют алгебраическую группу
по отношению к операции сложения по
модулю 2. В этом смысле они являются
групповыми
кодами.
Свойство
группового кода:
минимальное кодовое
расстояние между кодовыми векторами
группового кода равно минимальному
весу ненулевых кодовых векторов.
Вес
кодового вектора
(кодовой комбинации) равен числу его
ненулевых компонент.
Расстояние
между двумя кодовыми векторами
равно весу вектора, полученного в
результате сложения исходных векторов
по модулю 2. Таким образом, для данного
группового кода
Wmin
=d0.
Групповые
коды удобно задавать матрицами,
размерность которых определяется
параметрами кода k
и .
Число строк матрицы равно k,
число столбцов равно
n
= k +
:

Коды,
порождаемые этими матрицами, известны
как (n,k)-коды,
соответствующие им матрицы называют
порождающими
(производящими, образующими).
Порождающая
матрица P
может быть представлена двумя матрицами
Uk
и H
(информационной и проверочной). Число
столбцов матрицы H
равно ,
число столбцов матрицы Uk
равно k

Теорией
и практикой установлено, что в качестве
матрицы Uk
удобно брать единичную матрицу в
канонической форме
![]()

Для
кодов с d0
= 2
производящая матрица P
имеет вид

Во всех комбинациях
кода построенного при помощи такой
матрицы, четное число единиц.
Для
кодов с d0
3 порождающая
матрица не может быть представлена в
форме, общей для всех кодов с данным
d0.
Вид матрицы
зависит от конкретных требований к
порождающему коду. Этими требованиями
могут быть либо минимум корректирующих
разрядов, либо максимальная простота
аппаратуры.
Корректирующие
коды с минимальным количеством избыточных
разрядов называют плотно
упакованными
или
совершенными
кодами.
Для
кодов d0
= 3
соотношения n
и k
следующие: (3; 1), (7; 4),
(15; 11), (31; 26), (63; 57)
и так далее.
Строчки
образующей матрицы P
представляют собой k
комбинаций искомого кода. Остальные
комбинации кода строятся при помощи
образующей матрицы по следующему
правилу: корректирующие символы,
предназначенные для обнаружения и
исправления ошибки в информационной
части кода, находятся путем суммирования
по модулю 2 тех строк матрицы H,
номера которых совпадают с номерами
разрядов, содержащих единицы в кодовом
векторе, представляющем информационную
часть кода. Полученную комбинацию
приписывают справа к информационной
части кода и получают полный вектор
корректирующего кода. Аналогичную
процедуру проделывают со второй, третьей
и последующими информационными кодовыми
комбинациями, пока не будет построен
корректирующий код для передачи всех
символов первичного алфавита.
Алгоритм
образования проверочных символов по
известной информационной части кода
может быть записан следующим образом

или
.
В процессе
декодирования осуществляются проверки,
идея которых в общем виде может быть
представлена следующим образом
![]()
Для
каждой конкретной матрицы существует
своя, одна-единственная система проверок.
Проверки производятся по следующему
правилу : в первую проверку вместе с
проверочным рядом b1
входят информационные разряды, которые
соответствуют единицам первого столбца
проверочной матрицы H;
во вторую проверку входит второй
проверочный разряд b2
и информационные
разряды, и т. д. Число проверок равно
числу проверочных разрядов корректирующего
кода .
В
результате осуществления проверок
образуется проверочный
вектор
S1,
S2,
…, S,
который называется синдромом.
Если вес синдрома равен нулю, то принятая
комбинация считается безошибочной.
Если хотя бы один разряд проверочного
вектора содержит единицу, то принятая
комбинация содержит ошибку. Исправление
ошибки производится по виду синдрома,
так как каждому ошибочному разряду
соответствует один единственный
проверочный вектор.
Вид
синдрома для каждой конкретной матрицы
может быть определен при помощи
проверочной матрицы Н’,
которая представляет собой транспонированную
матрицу H,
дополненной единичной матрицей I,
число столбцов которой равно число
проверочных разрядов кода
Н’
= HТI.
Столбцы
такой матрицы представляют собой
значение синдрома для разряда,
соответствующего номеру столбца матрицы
Н’.
Процедура исправления
ошибок в процессе декодирования групповых
кодов сводится к следующему.
Строится
кодовая таблица. В первой строке таблицы
располагаются все кодовые векторы Ai.
В первом столбце второй строки размещается
вектор a1,
вес которого равен 1.
Остальные
позиции второй строки заполняются
векторами, полученными в результате
суммирования по модулю 2 вектора a1
с Аi,
расположенным в соответствующем столбце
первой строки. В первом столбце третьей
строки записывается вектор a2,
вес которого также равен 1, однако , если
вектор a1
содержит единицу в первом разряде, то
a2
— во втором. В остальные позиции третьей
строки записывают суммы Аi
и a2
.
Аналогично
поступают до тех пор, пока не будут
просуммированы с векторами Аi
все векторы
aj
весом 1, с единицей в каждом из n
разрядов. Затем суммируются по модулю
2 векторы aj,
весом 2, с последовательным перекрытием
всех возможных разрядов. Вес вектора
aj
определяет число исправляемых ошибок.
Число векторов aj
определяется возможным числом
неповторяющихся синдромов и равно 2-1
(нулевая комбинация говорит об отсутствии
ошибки). Условие неповторяемости синдрома
позволяет по его виду определять
один-единственный соответствующий ему
вектор aj.
Векторы aj
есть векторы
ошибок, которые могут быть исправлены
данным групповым кодом.
По
виду синдрома принятая комбинация может
быть отнесена к тому или иному смежному
классу, образованному сложением по
модулю 2 кодовой комбинации Аi
с вектором ошибки aj,
т. е. к определенной строке кодовой
таблицы 3.2.1.
Таблица 3.2.1-
Кодовая таблица групповых кодов
|
a |
A1 |
A2 |
… |
A(2k-1) |
|
a1 |
a1A1 |
a2A2 |
… |
a1A(2k-1) |
|
a2 |
a2A1 |
a2A2 |
… |
a2A(2k-1) |
|
… |
… |
… |
… |
… |
|
a(2-1) |
a(2 |
a(2-1)A2 |
… |
a(2-1)A(2k-1) |
Принятая
кодовая комбинация Axn
сравнивается
с векторами, записанными в строке,
соответствующей полученному в результате
проверок синдрому. Истинный код будет
расположен в строке той же колонки
таблицы. Процесс исправления ошибки
заключается в замене на обратное значение
разрядов.
Векторы
a1,
a2,
…,a(2-1)
не должны
быть равными ни одному из векторов А1,
А2,
…, А(2-1),
в противном случае в таблице появились
бы нулевые векторы.
Пример.
Построить
кодовую таблицу, при помощи которой
обнаруживаются и исправляются все
одиночные ошибки и некоторые ошибки
кратностью r
+ 1,
в информационной
части кода (11,7), построенного по матрице

Решение.
Используя
таблицу 3.2.1, строим кодовую таблицу
3.2.2 для кодов, построенных по данной
матрице P,
кодовые комбинации строятся путем
добавления к четырехразрядным комбинациям
натурального двоичного кода корректирующих
разрядов по правилу, описанному выше.
Определяем
систему проверок исходя из матрицы H

Находим
вид синдрома для каждой строки таблицы.
Для этого достаточно произвести проверки
для кодовых комбинаций любого столбца
кодовой таблицы.
Для
нашего примера возьмем столбец A3
.
Таблица 3.2.1 – Пример таблицы
для столбца А3
|
№ |
e |
A1 1000111 |
A2 0100011 |
A3 1100100 |
A4 0010110 |
A5 1010001 |
A6 0110101 |
A7 1110010 |
|
1 2 3 4 5 6 7 |
1000000 0100000 0010000 0001000 1100000 1001000 1010000 |
0000111 1100111 1010111 1001111 0100111 0001111 0010111 |
1100011 0000011 0110011 0101011 1000011 1101011 1110011 |
0100100 1000100 1110100 1101100 0000100 0101100 0110100 |
1010110 0110110 0000110 0011110 1110110 1011110 1000110 |
0010001 1110001 1000001 1011001 0110001 0011001 0000001 |
1110101 0010101 0100101 0111101 1010101 1111101 1100101 |
0110010 1010010 1100010 1111010 0010010 0111010 0100010 |
|
№ |
A8 0001101 |
A9 1001010 |
A10 0101110 |
A11 1101001 |
A12 0011011 |
A13 1011100 |
A14 0111000 |
A15 1111111 |
|
1 2 3 4 5 6 7 |
1001101 0101101 0011101 0000101 1101101 1000101 1011101 |
0001010 1101010 1011010 1000010 0101010 0000010 0011010 |
1101110 0001110 0111110 0100110 1001110 1100110 1111110 |
0101001 1001001 1111001 1100001 0001001 0100001 0111001 |
1011011 0111011 0001011 0010011 1111011 1010011 1001011 |
0011100 1111100 1001100 1010100 0111100 0010100 0001100 |
1111000 0011000 0101000 0110000 1011000 1110000 1101000 |
0111111 1011111 1101111 1110111 0011111 0110111 0101111 |
-
0
1 0 0 1 0 0 -
1
0 0 0 1 0 0 -
1
1 1 0 1 0 0 -
1
1 0 1 1 0 0 -
0
0 0 0 1 0 0 -
0
1 0 1 1 0 0 -
0
1 1 0 1 0 0







Таким
образом вектору ошибки a1
соответствует синдром 1 1 1
“ a2 “ 0
1 1
“ a3 “ 1
1 0
“ a4 “ 1
0 1
“ a5 “ 1
0 0
“ a6 “ 0
1 0
“ a7 “ 0
0 1
Предположим,
приняты комбинации 1011001, 1000101, 0001100,
0000001 и 1010001. Производим проверки





Синдром
первой принятой комбинации — 101, значит
вектор ошибки а4
= 0001000, исправление ошибки производится
заменой символа в четвертом разряде
принятой комбинации на обратный. Истинная
комбинация — А5,
так как принятая комбинация находится
в шестом столбце таблицы в строке,
соответствующей синдрому 101.
Синдром
второй принятой комбинации — 010, находим
ее в шестой строке (010 соответствует а6)
и в девятом столбце. Истинная комбинация
А8
= 0001101, т.е. исправлена двойная ошибка.
Синдром
третьей принятой комбинации — 001
соответствует а7,
истинная комбинация А13.
Синдром
четвертой из принятых комбинаций — 001
также соответствует а7,
но принятую комбинацию мы находим в
шестом столбце таблицы , следовательно,
истинная комбинация — А5.
Синдром шестой
принятой комбинации — 000. Ошибки нет.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
From Wikipedia, the free encyclopedia
In coding theory, a linear code is an error-correcting code for which any linear combination of codewords is also a codeword. Linear codes are traditionally partitioned into block codes and convolutional codes, although turbo codes can be seen as a hybrid of these two types.[1] Linear codes allow for more efficient encoding and decoding algorithms than other codes (cf. syndrome decoding).[citation needed]
Linear codes are used in forward error correction and are applied in methods for transmitting symbols (e.g., bits) on a communications channel so that, if errors occur in the communication, some errors can be corrected or detected by the recipient of a message block. The codewords in a linear block code are blocks of symbols that are encoded using more symbols than the original value to be sent.[2] A linear code of length n transmits blocks containing n symbols. For example, the [7,4,3] Hamming code is a linear binary code which represents 4-bit messages using 7-bit codewords. Two distinct codewords differ in at least three bits. As a consequence, up to two errors per codeword can be detected while a single error can be corrected.[3] This code contains 24=16 codewords.
Definition and parameters[edit]
A linear code of length n and dimension k is a linear subspace C with dimension k of the vector space where
is the finite field with q elements. Such a code is called a q-ary code. If q = 2 or q = 3, the code is described as a binary code, or a ternary code respectively. The vectors in C are called codewords. The size of a code is the number of codewords and equals qk.
The weight of a codeword is the number of its elements that are nonzero and the distance between two codewords is the Hamming distance between them, that is, the number of elements in which they differ. The distance d of the linear code is the minimum weight of its nonzero codewords, or equivalently, the minimum distance between distinct codewords. A linear code of length n, dimension k, and distance d is called an [n,k,d] code (or, more precisely, code).
We want to give the standard basis because each coordinate represents a «bit» that is transmitted across a «noisy channel» with some small probability of transmission error (a binary symmetric channel). If some other basis is used then this model cannot be used and the Hamming metric does not measure the number of errors in transmission, as we want it to.
Generator and check matrices[edit]
As a linear subspace of , the entire code C (which may be very large) may be represented as the span of a set of
codewords (known as a basis in linear algebra). These basis codewords are often collated in the rows of a matrix G known as a generating matrix for the code C. When G has the block matrix form
, where
denotes the
identity matrix and P is some
matrix, then we say G is in standard form.
A matrix H representing a linear function whose kernel is C is called a check matrix of C (or sometimes a parity check matrix). Equivalently, H is a matrix whose null space is C. If C is a code with a generating matrix G in standard form,
, then
is a check matrix for C. The code generated by H is called the dual code of C. It can be verified that G is a
matrix, while H is a
matrix.
Linearity guarantees that the minimum Hamming distance d between a codeword c0 and any of the other codewords c ≠ c0 is independent of c0. This follows from the property that the difference c − c0 of two codewords in C is also a codeword (i.e., an element of the subspace C), and the property that d(c, c0) = d(c − c0, 0). These properties imply that
In other words, in order to find out the minimum distance between the codewords of a linear code, one would only need to look at the non-zero codewords. The non-zero codeword with the smallest weight has then the minimum distance to the zero codeword, and hence determines the minimum distance of the code.
The distance d of a linear code C also equals the minimum number of linearly dependent columns of the check matrix H.
Proof: Because , which is equivalent to
, where
is the
column of
. Remove those items with
, those
with
are linearly dependent. Therefore,
is at least the minimum number of linearly dependent columns. On another hand, consider the minimum set of linearly dependent columns
where
is the column index set.
. Now consider the vector
such that
if
. Note
because
. Therefore, we have
, which is the minimum number of linearly dependent columns in
. The claimed property is therefore proven.
Example: Hamming codes[edit]
As the first class of linear codes developed for error correction purpose, Hamming codes have been widely used in digital communication systems. For any positive integer , there exists a
Hamming code. Since
, this Hamming code can correct a 1-bit error.
Example : The linear block code with the following generator matrix and parity check matrix is a Hamming code.
Example: Hadamard codes[edit]
Hadamard code is a linear code and is capable of correcting many errors. Hadamard code could be constructed column by column : the
column is the bits of the binary representation of integer
, as shown in the following example. Hadamard code has minimum distance
and therefore can correct
errors.
Example: The linear block code with the following generator matrix is a Hadamard code:
.
Hadamard code is a special case of Reed–Muller code. If we take the first column (the all-zero column) out from , we get
simplex code, which is the dual code of Hamming code.
Nearest neighbor algorithm[edit]
The parameter d is closely related to the error correcting ability of the code. The following construction/algorithm illustrates this (called the nearest neighbor decoding algorithm):
Input: A received vector v in .
Output: A codeword in
closest to
, if any.
We say that a linear is
-error correcting if there is at most one codeword in
, for each
in
.
Popular notation[edit]
Codes in general are often denoted by the letter C, and a code of length n and of rank k (i.e., having k code words in its basis and k rows in its generating matrix) is generally referred to as an (n, k) code. Linear block codes are frequently denoted as [n, k, d] codes, where d refers to the code’s minimum Hamming distance between any two code words.
(The [n, k, d] notation should not be confused with the (n, M, d) notation used to denote a non-linear code of length n, size M (i.e., having M code words), and minimum Hamming distance d.)
Singleton bound[edit]
Lemma (Singleton bound): Every linear [n,k,d] code C satisfies .
A code C whose parameters satisfy k+d=n+1 is called maximum distance separable or MDS. Such codes, when they exist, are in some sense best possible.
If C1 and C2 are two codes of length n and if there is a permutation p in the symmetric group Sn for which (c1,…,cn) in C1 if and only if (cp(1),…,cp(n)) in C2, then we say C1 and C2 are permutation equivalent. In more generality, if there is an monomial matrix
which sends C1 isomorphically to C2 then we say C1 and C2 are equivalent.
Lemma: Any linear code is permutation equivalent to a code which is in standard form.
Bonisoli’s theorem[edit]
A code is defined to be equidistant if and only if there exists some constant d such that the distance between any two of the code’s distinct codewords is equal to d.[4] In 1984 Arrigo Bonisoli determined the structure of linear one-weight codes over finite fields and proved that every equidistant linear code is a sequence of dual Hamming codes.[5]
Examples[edit]
Some examples of linear codes include:
- Repetition codes
- Parity codes
- Cyclic codes
- Hamming codes
- Golay code, both the binary and ternary versions
- Polynomial codes, of which BCH codes are an example
- Reed–Solomon codes
- Reed–Muller codes
- Goppa codes
- Low-density parity-check codes
- Expander codes
- Multidimensional parity-check codes
- Toric codes
- Turbo codes
Generalization[edit]
Hamming spaces over non-field alphabets have also been considered, especially over finite rings, most notably Galois rings over Z4. This gives rise to modules instead of vector spaces and ring-linear codes (identified with submodules) instead of linear codes. The typical metric used in this case the Lee distance. There exist a Gray isometry between (i.e. GF(22m)) with the Hamming distance and
(also denoted as GR(4,m)) with the Lee distance; its main attraction is that it establishes a correspondence between some «good» codes that are not linear over
as images of ring-linear codes from
.[6][7][8]
More recently,[when?] some authors have referred to such codes over rings simply as linear codes as well.[9]
See also[edit]
- Decoding methods
References[edit]
- ^ William E. Ryan and Shu Lin (2009). Channel Codes: Classical and Modern. Cambridge University Press. p. 4. ISBN 978-0-521-84868-8.
- ^ MacKay, David, J.C. (2003). Information Theory, Inference, and Learning Algorithms (PDF). Cambridge University Press. p. 9. Bibcode:2003itil.book…..M. ISBN 9780521642989.
In a linear block code, the extra
bits are linear functions of the original
bits; these extra bits are called parity-check bits
- ^ Thomas M. Cover and Joy A. Thomas (1991). Elements of Information Theory. John Wiley & Sons, Inc. pp. 210–211. ISBN 978-0-471-06259-2.
- ^ Etzion, Tuvi; Raviv, Netanel (2013). «Equidistant codes in the Grassmannian». arXiv:1308.6231 [math.CO].
- ^ Bonisoli, A. (1984). «Every equidistant linear code is a sequence of dual Hamming codes». Ars Combinatoria. 18: 181–186.
- ^ Marcus Greferath (2009). «An Introduction to Ring-Linear Coding Theory». In Massimiliano Sala; Teo Mora; Ludovic Perret; Shojiro Sakata; Carlo Traverso (eds.). Gröbner Bases, Coding, and Cryptography. Springer Science & Business Media. ISBN 978-3-540-93806-4.
- ^ «Encyclopedia of Mathematics». www.encyclopediaofmath.org.
- ^ J.H. van Lint (1999). Introduction to Coding Theory (3rd ed.). Springer. Chapter 8: Codes over ℤ4. ISBN 978-3-540-64133-9.
- ^ S.T. Dougherty; J.-L. Kim; P. Sole (2015). «Open Problems in Coding Theory». In Steven Dougherty; Alberto Facchini; Andre Gerard Leroy; Edmund Puczylowski; Patrick Sole (eds.). Noncommutative Rings and Their Applications. American Mathematical Soc. p. 80. ISBN 978-1-4704-1032-2.
Bibliography[edit]
- J. F. Humphreys; M. Y. Prest (2004). Numbers, Groups and Codes (2nd ed.). Cambridge University Press. ISBN 978-0-511-19420-7. Chapter 5 contains a more gentle introduction (than this article) to the subject of linear codes.
External links[edit]
- q-ary code generator program
- Code Tables: Bounds on the parameters of various types of codes, IAKS, Fakultät für Informatik, Universität Karlsruhe (TH)]. Online, up to date table of the optimal binary codes, includes non-binary codes.
- The database of Z4 codes Online, up to date database of optimal Z4 codes.
From Wikipedia, the free encyclopedia
In coding theory, a linear code is an error-correcting code for which any linear combination of codewords is also a codeword. Linear codes are traditionally partitioned into block codes and convolutional codes, although turbo codes can be seen as a hybrid of these two types.[1] Linear codes allow for more efficient encoding and decoding algorithms than other codes (cf. syndrome decoding).[citation needed]
Linear codes are used in forward error correction and are applied in methods for transmitting symbols (e.g., bits) on a communications channel so that, if errors occur in the communication, some errors can be corrected or detected by the recipient of a message block. The codewords in a linear block code are blocks of symbols that are encoded using more symbols than the original value to be sent.[2] A linear code of length n transmits blocks containing n symbols. For example, the [7,4,3] Hamming code is a linear binary code which represents 4-bit messages using 7-bit codewords. Two distinct codewords differ in at least three bits. As a consequence, up to two errors per codeword can be detected while a single error can be corrected.[3] This code contains 24=16 codewords.
Definition and parameters[edit]
A linear code of length n and dimension k is a linear subspace C with dimension k of the vector space where
is the finite field with q elements. Such a code is called a q-ary code. If q = 2 or q = 3, the code is described as a binary code, or a ternary code respectively. The vectors in C are called codewords. The size of a code is the number of codewords and equals qk.
The weight of a codeword is the number of its elements that are nonzero and the distance between two codewords is the Hamming distance between them, that is, the number of elements in which they differ. The distance d of the linear code is the minimum weight of its nonzero codewords, or equivalently, the minimum distance between distinct codewords. A linear code of length n, dimension k, and distance d is called an [n,k,d] code (or, more precisely, code).
We want to give the standard basis because each coordinate represents a «bit» that is transmitted across a «noisy channel» with some small probability of transmission error (a binary symmetric channel). If some other basis is used then this model cannot be used and the Hamming metric does not measure the number of errors in transmission, as we want it to.
Generator and check matrices[edit]
As a linear subspace of , the entire code C (which may be very large) may be represented as the span of a set of
codewords (known as a basis in linear algebra). These basis codewords are often collated in the rows of a matrix G known as a generating matrix for the code C. When G has the block matrix form
, where
denotes the
identity matrix and P is some
matrix, then we say G is in standard form.
A matrix H representing a linear function whose kernel is C is called a check matrix of C (or sometimes a parity check matrix). Equivalently, H is a matrix whose null space is C. If C is a code with a generating matrix G in standard form,
, then
is a check matrix for C. The code generated by H is called the dual code of C. It can be verified that G is a
matrix, while H is a
matrix.
Linearity guarantees that the minimum Hamming distance d between a codeword c0 and any of the other codewords c ≠ c0 is independent of c0. This follows from the property that the difference c − c0 of two codewords in C is also a codeword (i.e., an element of the subspace C), and the property that d(c, c0) = d(c − c0, 0). These properties imply that
In other words, in order to find out the minimum distance between the codewords of a linear code, one would only need to look at the non-zero codewords. The non-zero codeword with the smallest weight has then the minimum distance to the zero codeword, and hence determines the minimum distance of the code.
The distance d of a linear code C also equals the minimum number of linearly dependent columns of the check matrix H.
Proof: Because , which is equivalent to
, where
is the
column of
. Remove those items with
, those
with
are linearly dependent. Therefore,
is at least the minimum number of linearly dependent columns. On another hand, consider the minimum set of linearly dependent columns
where
is the column index set.
. Now consider the vector
such that
if
. Note
because
. Therefore, we have
, which is the minimum number of linearly dependent columns in
. The claimed property is therefore proven.
Example: Hamming codes[edit]
As the first class of linear codes developed for error correction purpose, Hamming codes have been widely used in digital communication systems. For any positive integer , there exists a
Hamming code. Since
, this Hamming code can correct a 1-bit error.
Example : The linear block code with the following generator matrix and parity check matrix is a Hamming code.
Example: Hadamard codes[edit]
Hadamard code is a linear code and is capable of correcting many errors. Hadamard code could be constructed column by column : the
column is the bits of the binary representation of integer
, as shown in the following example. Hadamard code has minimum distance
and therefore can correct
errors.
Example: The linear block code with the following generator matrix is a Hadamard code:
.
Hadamard code is a special case of Reed–Muller code. If we take the first column (the all-zero column) out from , we get
simplex code, which is the dual code of Hamming code.
Nearest neighbor algorithm[edit]
The parameter d is closely related to the error correcting ability of the code. The following construction/algorithm illustrates this (called the nearest neighbor decoding algorithm):
Input: A received vector v in .
Output: A codeword in
closest to
, if any.
We say that a linear is
-error correcting if there is at most one codeword in
, for each
in
.
Popular notation[edit]
Codes in general are often denoted by the letter C, and a code of length n and of rank k (i.e., having k code words in its basis and k rows in its generating matrix) is generally referred to as an (n, k) code. Linear block codes are frequently denoted as [n, k, d] codes, where d refers to the code’s minimum Hamming distance between any two code words.
(The [n, k, d] notation should not be confused with the (n, M, d) notation used to denote a non-linear code of length n, size M (i.e., having M code words), and minimum Hamming distance d.)
Singleton bound[edit]
Lemma (Singleton bound): Every linear [n,k,d] code C satisfies .
A code C whose parameters satisfy k+d=n+1 is called maximum distance separable or MDS. Such codes, when they exist, are in some sense best possible.
If C1 and C2 are two codes of length n and if there is a permutation p in the symmetric group Sn for which (c1,…,cn) in C1 if and only if (cp(1),…,cp(n)) in C2, then we say C1 and C2 are permutation equivalent. In more generality, if there is an monomial matrix
which sends C1 isomorphically to C2 then we say C1 and C2 are equivalent.
Lemma: Any linear code is permutation equivalent to a code which is in standard form.
Bonisoli’s theorem[edit]
A code is defined to be equidistant if and only if there exists some constant d such that the distance between any two of the code’s distinct codewords is equal to d.[4] In 1984 Arrigo Bonisoli determined the structure of linear one-weight codes over finite fields and proved that every equidistant linear code is a sequence of dual Hamming codes.[5]
Examples[edit]
Some examples of linear codes include:
- Repetition codes
- Parity codes
- Cyclic codes
- Hamming codes
- Golay code, both the binary and ternary versions
- Polynomial codes, of which BCH codes are an example
- Reed–Solomon codes
- Reed–Muller codes
- Goppa codes
- Low-density parity-check codes
- Expander codes
- Multidimensional parity-check codes
- Toric codes
- Turbo codes
Generalization[edit]
Hamming spaces over non-field alphabets have also been considered, especially over finite rings, most notably Galois rings over Z4. This gives rise to modules instead of vector spaces and ring-linear codes (identified with submodules) instead of linear codes. The typical metric used in this case the Lee distance. There exist a Gray isometry between (i.e. GF(22m)) with the Hamming distance and
(also denoted as GR(4,m)) with the Lee distance; its main attraction is that it establishes a correspondence between some «good» codes that are not linear over
as images of ring-linear codes from
.[6][7][8]
More recently,[when?] some authors have referred to such codes over rings simply as linear codes as well.[9]
See also[edit]
- Decoding methods
References[edit]
- ^ William E. Ryan and Shu Lin (2009). Channel Codes: Classical and Modern. Cambridge University Press. p. 4. ISBN 978-0-521-84868-8.
- ^ MacKay, David, J.C. (2003). Information Theory, Inference, and Learning Algorithms (PDF). Cambridge University Press. p. 9. Bibcode:2003itil.book…..M. ISBN 9780521642989.
In a linear block code, the extra
bits are linear functions of the original
bits; these extra bits are called parity-check bits
- ^ Thomas M. Cover and Joy A. Thomas (1991). Elements of Information Theory. John Wiley & Sons, Inc. pp. 210–211. ISBN 978-0-471-06259-2.
- ^ Etzion, Tuvi; Raviv, Netanel (2013). «Equidistant codes in the Grassmannian». arXiv:1308.6231 [math.CO].
- ^ Bonisoli, A. (1984). «Every equidistant linear code is a sequence of dual Hamming codes». Ars Combinatoria. 18: 181–186.
- ^ Marcus Greferath (2009). «An Introduction to Ring-Linear Coding Theory». In Massimiliano Sala; Teo Mora; Ludovic Perret; Shojiro Sakata; Carlo Traverso (eds.). Gröbner Bases, Coding, and Cryptography. Springer Science & Business Media. ISBN 978-3-540-93806-4.
- ^ «Encyclopedia of Mathematics». www.encyclopediaofmath.org.
- ^ J.H. van Lint (1999). Introduction to Coding Theory (3rd ed.). Springer. Chapter 8: Codes over ℤ4. ISBN 978-3-540-64133-9.
- ^ S.T. Dougherty; J.-L. Kim; P. Sole (2015). «Open Problems in Coding Theory». In Steven Dougherty; Alberto Facchini; Andre Gerard Leroy; Edmund Puczylowski; Patrick Sole (eds.). Noncommutative Rings and Their Applications. American Mathematical Soc. p. 80. ISBN 978-1-4704-1032-2.
Bibliography[edit]
- J. F. Humphreys; M. Y. Prest (2004). Numbers, Groups and Codes (2nd ed.). Cambridge University Press. ISBN 978-0-511-19420-7. Chapter 5 contains a more gentle introduction (than this article) to the subject of linear codes.
External links[edit]
- q-ary code generator program
- Code Tables: Bounds on the parameters of various types of codes, IAKS, Fakultät für Informatik, Universität Karlsruhe (TH)]. Online, up to date table of the optimal binary codes, includes non-binary codes.
- The database of Z4 codes Online, up to date database of optimal Z4 codes.
В области математики и теории информации линейный код — это важный тип блокового кода, использующийся в схемах определения и коррекции ошибок. Линейные коды, по сравнению с другими кодами, позволяют реализовывать более эффективные алгоритмы кодирования и декодирования информации.
Основы
В процессе хранения данных и передачи информации по сетям связи неизбежно возникают ошибки. Контроль целостности данных и исправление ошибок — важные задачи на многих уровнях работы с информацией (в частности, физическом, канальном, транспортном уровнях модели OSI).
В системах связи возможны несколько стратегий борьбы с ошибками:
- обнаружение ошибок в блоках данных и автоматический запрос повторной передачи поврежденных блоков — этот подход применяется в основном на канальном и транспортном уровнях;
- обнаружение ошибок в блоках данных и отбрасывание поврежденных блоков — такой подход иногда применяется в системах потокового мультимедиа, где важна задержка передачи и нет времени на повторную передачу;
- исправление ошибок (англ. forward error correction) применяется на физическом уровне.
Коды обнаружения и исправления ошибок
Корректирующие коды — коды, служащие для обнаружения или исправления ошибок, возникающих при передаче информации под влиянием помех, а также при её хранении.
Для этого при записи (передаче) в полезные данные добавляют специальным образом структурированную избыточную информацию, а при чтении (приеме) её используют для того, чтобы обнаружить или исправить ошибки. Естественно, что число ошибок, которое можно исправить, ограничено и зависит от конкретного применяемого кода.
С кодами, исправляющими ошибки, тесно связаны коды обнаружения ошибок. В отличие от первых, последние могут только установить факт наличия ошибки в переданных данных, но не исправить её.
В действительности, используемые коды обнаружения ошибок принадлежат к тем же классам кодов, что и коды, исправляющие ошибки. Фактически, любой код, исправляющий ошибки, может быть также использован для обнаружения ошибок (при этом он будет способен обнаружить большее число ошибок, чем был способен исправить).
По способу работы с данными коды, исправляющие ошибки делятся на блоковые, делящие информацию на фрагменты постоянной длины и обрабатывающие каждый из них в отдельности, и сверточные, работающие с данными как с непрерывным потоком.
Блоковые коды
Пусть кодируемая информация делится на фрагменты длиной бит, которые преобразуются в кодовые слова длиной
бит. Тогда соответствующий блоковый код обычно обозначают
. При этом число
называется скоростью кода.
Если исходные бит код оставляет неизменными, и добавляет
проверочных, такой код называется систематическим, иначе несистематическим.
Задать блоковый код можно по-разному, в том числе таблицей, где каждой совокупности из информационных бит сопоставляется
бит кодового слова. Однако, хороший код должен удовлетворять, как минимум, следующим критериям:
- способность исправлять как можно большее число ошибок,
- как можно меньшая избыточность,
- простота кодирования и декодирования.
Нетрудно видеть, что приведенные требования противоречат друг другу. Именно поэтому существует большое количество кодов, каждый из которых пригоден для своего круга задач.
Практически все используемые коды являются линейными. Это связано с тем, что нелинейные коды значительно сложнее исследовать, и для них трудно обеспечить приемлемую легкость кодирования и декодирования.
Линейные пространства
Порождающая матрица
Пусть векторы являются базисом линейного пространства
. По определению базиса, любой вектор
можно представить в виде линейной комбинации базисных векторов:
,
либо в матричной форме, как:
,
где
называется порождающей матрицей линейного пространства.
Это соотношение устанавливает связь между векторами коэффициентов
и векторами . Перечисляя все векторы коэффициентов
можно получить все векторы
. Иными словами, матрица
порождает линейное пространство.
Проверочная матрица
Другим способом задания линейных пространств является описание через проверочную матрицу.
Пусть — линейное k-мерное пространство над полем
и
— ортогональное дополнение
. Тогда по одной из теорем линейной алгебры, размерность
равна
. Поэтому в
существует r базисных векторов. Пусть
базис в
.
Тогда любой вектор удовлетворяет следующей системе линейных уравнений:
Или в матричной форме:
,
где
— проверочная матрица.
Приведенную систему линейных уравнений следует рассматривать, как систему проверок для всех векторов линейного пространства, поэтому матрица называется проверочной матрицей.
Формальное определение
Линейный код длины n и ранга k является линейным подпространством C размерности k векторного пространства , где
— конечномерное поле из q элементов. Такой код с параметром q называется q-арным кодом (напр. если q = 5 — то это 5-арный код). Если q = 2 или q = 3, то код представляет собой двоичный код, или тернарный соответственно.
Линейный (блоковый) код — такой код, что множество его кодовых слов образует -мерное линейное подпространство (назовем его
) в
-мерном линейном пространстве, изоморфное пространству
-битных векторов.
Это значит, что операция кодирования соответствует умножению исходного -битного вектора на невырожденную матрицу
, называемую порождающей матрицей.
Пусть — ортогональное подпространство по отношению к
, а
— матрица, задающая базис этого подпространства. Тогда для любого вектора
справедливо:
.
Свойства и важные теоремы
Минимальное расстояние и корректирующая способность
Расстоянием Хемминга (метрикой Хемминга) между двумя кодовыми словами и
называется количество отличных бит на соответствующих позициях, то есть число «единиц» в векторе
.
Минимальное расстояние линейного кода является минимальным из всех расстояний Хемминга всех пар кодовых слов.
Вес вектора — расстояние Хемминга между этим вектором и нулевым вектором, иными словами — число ненулевых компонент вектора.
Теорема 1:
Минимальное расстояние линейного кода равно минимальному из весов Хемминга ненулевых кодовых слов:
Доказательство:
Расстояние между двумя векторами удовлетворяет равенству
, где
— вес Хемминга вектора
. Из того, что разность любых двух кодовых слов линейного кода также является кодовым словом линейного кода, вытекает утверждение теоремы:
Минимальное расстояние Хемминга является важной характеристикой линейного блокового кода. Она определяет другую, не менее важную характеристику — корректирующую способность:
, здесь угловые скобки обозначают округление «вниз».
Корректирующая способность определяет, какое максимальное число ошибок в одном кодовом слове код может гарантированно исправить.
Поясним на примере. Предположим, что есть два кодовых слова A и B, расстояние Хемминга между ними равно 3. Если было передано слово A, и канал внес ошибку в одном бите, она может быть исправлена, так как даже в этом случае принятое слово ближе к кодовому слову A, чем B. Но если каналом были внесены ошибки в двух битах, декодер может посчитать, что было передано слово B.
Число обнаруживаемых ошибок — число ошибок, при котором код может судить об ошибочной ситуации. Это число равно
.
Теорема 2 (без доказательства):
Если любые столбцов проверочной матрицы H линейного (n, k)-кода линейно независимы, то минимальное расстояние кода равно по меньшей мере d. Если при этом найдутся d линейно зависимых столбцов, то минимальное расстояние кода равно d в точности.
Теорема 3 (без доказательства):
Если минимальное расстояние линейного (n, k)-кода равно d, то любые столбцов проверочной матрицы H линейно независимы и найдутся d линейно зависимых столбцов.
Коды Хемминга
Коды Хемминга — простейшие линейные коды с минимальным расстоянием 3, то есть способные исправить одну ошибку. Код Хемминга может быть представлен в таком виде, что синдром
, где
— принятый вектор,
будет равен номеру позиции, в которой произошла ошибка. Это свойство позволяет сделать декодирование очень простым.
Код Рида-Малера
Код Рида-Малера [en:Reed-Muller code] — линейный код.
Общий метод кодирования линейных кодов
Линейный код длины n с k информационными символами является k-мерным линейным подпространством, поэтому каждое кодовое слово является линейной комбинацией базисных векторов подпространства:
.
Либо с помощью порождающей матрицы:
,
где
Это соотношение есть правило кодирование, по которому информационное слово отображается в кодовое
Общий метод обнаружения ошибок в линейном коде
Любой код (в том числе нелинейный) можно декодировать с помощью обычной таблицы, где каждому значению принятого слова соответствует наиболее вероятное переданное слово
. Однако, данный метод требует применения огромных таблиц уже для кодовых слов сравнительно небольшой длины.
Для линейных кодов этот метод можно существенно упростить. При этом для каждого принятого вектора вычисляется синдром
. Поскольку
, где
— кодовое слово, а
— вектор ошибки, то
. Затем с помощью таблицы по синдрому определяется вектор ошибки, с помощью которого определяется переданное кодовое слово. При этом таблица получается гораздо меньше, чем при использовании предыдущего метода.
Линейные циклические коды
Несмотря на то, что исправление ошибок в линейных кодах уже значительно проще исправления в большинстве нелинейных, для большинства кодов этот процесс все ещё достаточно сложен. Циклические коды, кроме более простого декодирования, обладают и другими важными свойствами.
Циклическим кодом является линейный код, обладающий следующим свойством: если является кодовым словом, то его циклическая перестановка также является кодовым словом.
Слова циклического кода удобно представлять в виде многочленов. Например, кодовое слово представляется в виде полинома
. При этом циклический сдвиг кодового слова эквивалентен умножению многочлена на
по модулю
.
В дальнейшем, если не указано иное, мы будем считать, что циклический код является двоичным, то есть … могут принимать значения 0 или 1.
Порождающий полином
Можно показать, что все кодовые слова конкретного циклического кода кратны определенному порождающему полиному . Порождающий полином является делителем
.
С помощью порождающего полинома осуществляется кодирование циклическим кодом. В частности:
Коды CRC
Коды CRC (cyclic redundancy check — циклическая избыточная проверка) являются систематическими кодами, предназначенными не для исправления ошибок, а для их обнаружения. Они используют способ систематического кодирования, изложенный выше: «контрольная сумма» вычисляется путем деления на
. Ввиду того, что исправление ошибок не требуется, проверка правильности передачи может производиться точно так же.
Таким образом, вид полинома g(x) задает конкретный код CRC. Примеры наиболее популярных полиномов:
| название кода | степень | полином |
|---|---|---|
| CRC-12 | 12 | |
| CRC-16 | 16 | |
| CRC-CCITT | 16 | |
| CRC-32 | 32 |
Коды БЧХ
Коды Боуза-Чоудхури-Хоквингема (БЧХ) являются подклассом двоичных циклических кодов. Их отличительное свойство — возможность построения кода БЧХ с минимальным расстоянием не меньше заданного. Это важно, потому что, вообще говоря, определение минимального расстояния кода есть очень сложная задача.
Математически построение кодов БЧХ и их декодирование используют разложение порождающего полинома на множители в поле Галуа.
Коды Рида-Соломона
Коды Рида-Соломона (РС-коды) фактически являются недвоичными кодами БЧХ, то есть элементы кодового вектора являются не битами, а группами битов. Очень распространены коды Рида-Соломона, работающие с байтами (октетами).
Преимущества и недостатки линейных кодов
Хотя линейные коды, как правило, хорошо справляются с редкими, но большими пачками ошибок, их эффективность при частых, но небольших ошибках (например, в канале с АБГШ), менее высока.
Благодаря линейности для запоминания или перечисления всех кодовых слов достаточно хранить в памяти кодера или декодера существенно меньшую их часть, а именно только те слова, которые образуют базис соответствующего линейного пространства. Это существенно упрощает реализацию устройств кодирования и декодирования и делает линейные коды весьма привлекательными с точки зрения практических приложений.
Оценка эффективности
Эффективность кодов определяется количеством ошибок, которые тот может исправить, количеством избыточной информации, добавление которой требуется, а также сложностью реализации кодирования и декодирования (как аппаратной, так и в виде программы для ЭВМ).
Граница Хемминга и совершенные коды
Пусть имеется двоичный блоковый код с корректирующей способностью
. Тогда справедливо неравенство (называемое границей Хемминга):
.
Коды, удовлетворяющие этой границе с равенством, называются совершенными. К совершенным кодам относятся, например, коды Хемминга. Часто применяемые на практике коды с большой корректирующей способностью (такие, как коды Рида-Соломона) не являются совершенными.
Энергетический выигрыш
При передаче информации по каналу связи вероятность ошибки зависит от отношения сигнал/шум на входе демодулятора, таким образом при постоянном уровне шума решающее значение имеет мощность передатчика. В системах спутниковой и мобильной, а также других типов связи остро стоит вопрос экономии энергии. Кроме того, в определенных системах связи (например, телефонной) неограниченно повышать мощность сигнала не дают технические ограничения.
Поскольку помехоустойчивое кодирование позволяет исправлять ошибки, при его применении мощность передатчика можно снизить, оставляя скорость передачи информации неизменной. Энергетический выигрыш определяется как разница отношений с/ш при наличии и отсутствии кодирования.
Применение
Линейные коды применяются:
- в системах цифровой связи, в том числе: спутниковой, радиорелейной, сотовой, передаче данных по телефонным каналам.
- в системах хранения информации, в том числе магнитных и оптических.
Линейные коды применяются в сетевых протоколах различных уровней.
См. также
- Циклический код
Эта страница использует содержимое раздела Википедии на русском языке. Оригинальная статья находится по адресу: Линейный код. Список первоначальных авторов статьи можно посмотреть в истории правок. Эта статья так же, как и статья, размещённая в Википедии, доступна на условиях CC-BY-SA .