Опубликован: 19.11.2012 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский университет "Высшая Школа Экономики"
Лекция 7:

Передача информации

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

Декодирование линейного кода по синдрому

Путь Н- матрица размера  (п-к) \times п и ранга (п-к) над полем GF(2). Эта матрица задает линейное отображение B^n \stackel{H} B^{n-k} пространства В^n в пространство В^{n-k} по формуле у=Нх. Ядро этого линейного отображения или множество решений уравнения Hх=0, образующее подпространство пространства В^n, является линейным кодом. Можно рассмотреть разбиение пространства B^n на классы равнообразности. В один класс входят все элементы B^n, которые при отображении В^n \stackel{H} B^{n-k} переходят в один и тот же элемент пространства B^{n-k}. Элемент пространства B^{n-k}, в который переходят все элементы одного класса, называется синдромом. Pис.7.8 иллюстрирует разбиение пространства B^n на классы равнообразности.

Отображение В^n\stackel{H} B^{n-k} является отображением на все пространство B^{n-k}. Для систематической матрицы H это практически очевидно. Действительно, для любого yB^{n-k} можно найти (построить) xB^n, такой, что y=Hx.

Разбиение пространства Bn на классы равнообразности

Рис. 7.8. Разбиение пространства Bn на классы равнообразности

Произведение Hx, x \in B^n называется синдромом [29], [33]. Фактически, синдромом вектора x\in B^n является образ этого вектора при отображении -В^n \stackrel{H} B^{n-k}. Все векторы x \in B^n, имеющие один синдром, образуют класс. Так как синдром s = Hx \in B^{n-k} имеет размерность n-k, всего существует 2^{n-k} классов (если проверочная матрица имеет ранг n-k, в частности, если матрица H имеет систематический вид). Из определения линейного кода следует, что класс, которому соответствует нулевой синдром, является кодом C. Каждый класс C_i, отличный от кода, порождается "сдвигом" C_i =C+a_i кода C на один из векторов a_i класса C_i. Действительно, если y \in C_i ., то есть Hy = s_i, Ha_i =s_i, тогда H(y-a_i)=0 и, следовательно, y-a_i =c \in C и y=a_i+c, где c \in C - кодовое слово. Таким образом, любой некодовый вектор, имеющий синдром s \ne 0, можно представить в виде суммы кодового вектора и вектора, имеющего синдром s. Представление такого вида не является единственным. Некодовый вектор a_i в этой сумме можно рассматривать как вектор ошибок, произошедших в тех разрядах кодового слова c, в которых соответствующие компоненты вектора a_i равны 1. Из всех векторов ошибок, имеющих один синдром, наиболее вероятным является вектор l_s (векторы) с минимальным весом (числом единичных компонент). Такой вектор (векторы) называется лидером класса.

Алгоритм декодирования заключается в следующем. Если получен вектор у и Ну = s \ne 0, считаем, что ошибкам соответствует наиболее вероятный вектор из класса C_s, то есть лидер l_s класса C_s. Тогда декодирование осуществляется в вектор z=у-l_s=У+l_s, получающийся из принятого вектора удалением лидера.

Рассмотрим пример построения кода по заданной проверочной матрице и декодирования полученного сообщения по синдрому. Пусть дана проверочная матрица H=\begin{pmatrix}1&1&1&0\\ 1&0&0&1\end{pmatrix}. Запишем уравнение для определения кодовых векторов (слов) для данной матрицы:

\begin{cases}x_1+x_2+x_3=0\\x_1+x_4=0\end{cases}\Rightarrow \begin{matrix}x_3=x_1+x_2\\x_4=x_1\end{matrix}

x_1 и x_2 которые можно рассматривать как информационные разряды, задаются произвольно (всего 4 варианта 00, 01, 10, 11), а проверочные разряды x_3 и x_4 определяются через x_1 и x_2. В итоге все кодовые слова определяются из выражения

\begin{pmatrix}x_1\\x_2\\x_3\\x_4\end{pmatrix}=\begin{pmatrix}1&0\\0&1\\1&1\\1&0\end{pmatrix}*{x_1 \choose x_2},

где x_1 и х_2 - информационные разряды, а \begin{pmatrix}1&0\\0&1\\1&1\\1&0\end{pmatrix} - порождающая матрица, столбцами которой являются кодовые векторы.

Кодовые слова, рассматриваемые как векторы-столбцы, образуют матрицу кода

C=\begin{pmatrix}0&0&1&1\\
0&1&0&1\\
0&1&1&0\\
0&0&1&1\end{pmatrix}

Расстояние кода \rho_C равно минимальному весу ненулевого слова \rho_C =2.

Найдем смежные классы, которые состоят из векторов пространства В^4, имеющих одинаковый синдром, и выберем в каждом классе лидера (вектор из класса с минимальным весом).

Синдромом является любое возможное значение произведения Н*х.

В данном случае имеется 4 синдрома: {0 \choose 0}, {0 \choose 1}, {1 \choose 0}, {1 \choose 1}.Каждому синдрому соответствует смежный класс, синдром {0 \choose 0} соответствует коду. Смежные классы (столбцы матриц) для каждого синдрома и выбранные лидеры приведены в таблице.

Синдром {o \choose 0} {0 \choose 1} {1 \choose 0} {1 \choose 1}
Класс смежности \begin{pmatrix}0&0&1&1\\0&1&0&1\\0&1&1&0\\0&0&1&1\end{pmatrix} \begin{pmatrix}0&0&1&1\\0&1&0&1\\0&1&1&0\\1&1&0&0\end{pmatrix} \begin{pmatrix}0&0&1&1\\1&0&1&0\\0&1&1&0\\0&0&1&1\end{pmatrix} \begin{pmatrix}1&1&0&0\\0&1&0&1\\0&1&1&0\\0&0&1&1\end{pmatrix}
Лидер \begin{pmatrix}0\\0\\0\\0\end{pmatrix} \begin{pmatrix}0\\0\\0\\1\end{pmatrix} \begin{pmatrix}0\\1\\0\\0\end{pmatrix} \begin{pmatrix}1\\0\\0\\0\end{pmatrix}

В третьем смежном классе - два потенциальных лидера с весом (нормой), равным 1. Один из них выбирается в качестве лидера произвольно.

Рассмотрим на этом примере процесс декодирования полученного вектора (слова) с использованием синдромов. Пусть передавался кодовый вектор \begin{pmatrix}0\\1\\1\\0\end{pmatrix} и в процессе переачи произошла ошибка в первом разряде. Это означает, что на приемном конце был получен вектор у=\begin{pmatrix}1\\1\\1\\0\end{pmatrix}=\begin{pmatrix}0\\1\\1\\0\end{pmatrix}+\begin{pmatrix}1\\0\\0\\1\end{pmatrix}, полученный из переданного вектора \begin{pmatrix}0\\1\\1\\0\end{pmatrix} в результате добавления вектора ошибки \begin{pmatrix}1\\0\\0\\0\end{pmatrix} (ошибка в первом разряде). Определим синдром, вычислив произведение Н*y. В данном случае получим H*y={1 \choose 1}. Это означает, что полученный вектор у водит в четвертый смежный класс (см. таблицу). Лидером этого смежного класса является вектор l=\begin{pmatrix}1\\0\\0\\0\end{pmatrix}, соответствующий данному синдрому. Вычитая (добавляя) лидер к принятому вектору, производим декодирование y-l=y+l=\begin{pmatrix}0\\1\\1\\0\end{pmatrix} В данном случае декодирование выполнено правильно.

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Фахруддин хемракулыев
Фахруддин хемракулыев
Шерхон Давлатов
Шерхон Давлатов

Почему тесты (1,2,3..) не работают. Хочу пройти тест но не получается

Сергей Мазаватов
Сергей Мазаватов
Россия
Лали Лесных
Лали Лесных
Россия, г. Санкт-Петербург