
- •Белорусский государственный университет информатики
- •Теоретическая часть Линейные коды.
- •Метрики Хэмминга и Ли.
- •Описание линейных кодов при помощи матриц.
- •Эквивалентность линейных кодов.
- •Декодирование линейных кодов.
- •Синдромное декодирование.
- •Коды Хэмминга.
- •Коды Рида-Маллера.
- •Коды, получаемые с помощью матриц Адамара.
- •Треугольный код
- •Практическая часть
- •Заключение
- •Приложение Листинг программы
Коды Рида-Маллера.
Достоинства: можно получить большое Хэммингово расстояние и легко поддаются декодированию.
Для любых m и r<m существует код Рида-Маллера, для которого:
n=2m – разрядность кодового вектора,
k=1+C(1)(m)+…+C(r)(m) – число информационных бит,
n-k=1+C(1)(m)+…+C(m-r-1)(m) – число проверочных бит,
d=2(m-r) – минимальный вес кодового слова.
Рассмотрим следующую совокупность векторов над полем из двух элементов (0 и 1).
Пусть V0 – вектор длины 2m, все компоненты которого равны 1, V1,V2,…, Vm – строки матрицы, столбцами которой являются все возможные двоичные наборы длины m. Определим следующим образом векторное произведение двух векторов:
u=(a1,a2,…,an), v(b1,b2,…,bn)
uv=(a1b1,a2b2,…,anbn).
Рассмотрим совокупность векторов, образованную произведениями векторов vi, взятых по два, три, четыре и т.д. вплоть до m.
v0 = ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
v4 = ( 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 )
v3 = ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 )
v2 = ( 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 )
v1 = ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
v4v3 = ( 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 )
v4v2 = ( 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 )
v4v1 = ( 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 )
v3v2 = ( 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 )
v3v1 = ( 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 )
v2v1 = ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
v4v3v2= …
v4v3v1= …
v4v2v1= …
v3v2v1= …
v4v3v2v1= …
Код Рида-Маллера порядка r определяется как код, базисом которого являются вектор v0,v1,…,vm и все векторные произведения из r или меньшего числа этих векторов. Очевидно, что скалярное произведение двух векторов равно 0, если число единиц в векторном произведении четно и равно 1, если оно нечетно.
Для любого вектора v v2=v. Единственным произведением, содержащим нечетное число единиц, является произведение всех векторов v1,…,vm. Векторное произведение любого вектора из базиса кода порядка r на любой вектор из базиса кода порядка m-r-1 является вектором из базиса кода порядка m-1 и в нем содержится четное число единиц. Таким образом, любой вектор, принадлежащий коду порядка r, ортогонален любому базисному вектору, являющемуся произведением m-r-1 или меньшего числа векторов v1,…,vm. Из этого также следует, что код Рида-Маллера порядка r является нулевым пространством матрицы, образованной векторами v0,v1,…,vm и всеми векторными произведениями этих векторов в количестве не более чем m-r-1, взятыми в качестве ее строк.
Важнейшая особенность кодов Рида-Маллера состоит в том, что декодирование для них может быть проведено достаточно простым способом.
Задача состоит в том, чтобы определить значения a по полученному вектору, несмотря на возможные ошибки. Очевидно, что сумма первых четырех компонент как элементов поля из двух элементов (0 и 1) равна нулю для всех базисных векторов, за исключением v2v1. Таким образом, если ошибок не было, то:
b1 +b2 +b3 +b4 = a21
b5 +b6 +b7 +b8 = a21
b9 +b10 +b11 +b12 = a21
b13+b14 +b15 +b16 = a21
В общем случае можно записать 2(m-r) независимых соотношений. Ошибки могут сделать некоторые из этих соотношений несправедливыми, но каждая ошибка влияет только на одно из соотношений. Следовательно, если выбрать a21 равным величине, появляющейся наиболее часто в выражениях, то при любой комбинации из 2(m-r-1)-1 или меньшего числа ошибок значение a21 будет декодировано правильно. Аналогичным образом определяются a31, a32, a41, a43. После того как они определены, выражение
a43v4v3+a42v4v2+a41v4v1+a32v3v2+a31v3v1+a21v2v1
может быть вычтено из полученного вектора. Тогда, если ошибок не было, останется вектор
r’=a0v0+a4v4+a3v3+a2v2+a1v1=(b1’,b2’,…,bn’),
так, что следующая совокупность коэффициентов может быть определена аналогичным путём:
a1=b1’+b2’ a1=b5’+b6’
a1=b3’+b4’ a1=b7’+b8’
a1=b9’+b10’ a1=b11’+b12’
a1=b13’+b14’ a1=b15’+b10’
Идентичные уравнения можно записать для a2, a3, a4. Если предположить, что ошибок не было, то
r’-a4v4-a3v3-a2v2-a1v1=a0v0.
Этот вектор должен быть нулевым, если a0=0 и единичным, если a0=1, поэтому a0 нужно выбирать равным тому из этих элементов, который появляется в векторе чаще.
Поскольку при такой системе декодирования могут быть исправлены все комбинации из 2(m-r-1)-1 или меньшего числа ошибок, то минимальное расстояние должно быть равно самое меньшее 2(2(m-r-1)+1)=2(m-r)-1, а так как все кодовые векторы имеют четный вес, то оно должно быть равно самое меньшее 2(m-r).
Схему для определения того, суммы каких именно символов полученного вектора должны быть равны заданному информационному символу, можно описать следующим образом. Расположим символы в каждом из первоначальных векторов v1,…,vm так как показано на рисунке, и назовем компоненту, соответствующую j-ому нулю в векторе vi, и компоненту, соответствующую j-ой единице в векторе vi, парными компонентами вектора vi. Тогда 2(m-1) сумм парных компонент vi используются для определения ai. Далее, каждая из 2(m-2) сумм четырех компонент, используемых для определения aij, образуется некоторыми двумя парными компонентами вектора vi и парными для этих уже выбранных компонент компонентами вектора vj. Аналогично каждое соотношение, определяющее aijk, представляет собой сумму некоторых парных компонент вектора vi плюс сумму компонент вектора vj, парных к этим компонентам, и сумму компонент вектора vk, парных к уже выбранным компонентам, так, что в каждой сумме получается всего 8 слагаемых. Этот процесс можно продолжить аналогичным образом.