Помехоустойчивое кодирование

Пример 1

При использовании линейного помехоустойчивого кода Хэмминга H(7,4) над двоичным алфавитом с проверочной матрицей \[H = \begin{pmatrix} 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 & 0 & 1 & 1 \\ 1 & 0 & 1 & 0 & 1 & 0 & 1 \\ \end{pmatrix},\] получено кодовое слово r=0101101.

Была ли ошибка при передаче?

Каково наиболее вероятное отправленное кодовое слово?

Каково исходное сообщение?

Вычислим синдром \(s = Hr \mod 2\) \[s = \begin{pmatrix} 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 & 0 & 1 & 1 \\ 1 & 0 & 1 & 0 & 1 & 0 & 1 \\ \end{pmatrix} \begin{pmatrix} 0 \\ 1 \\ 0 \\ 1 \\ 1 \\ 0 \\ 1 \end{pmatrix}\] \[s = \begin{pmatrix}1 \\ 0 \\ 0\end{pmatrix}.\]

Поскольку для разрешённых кодовых слов \(s=Hx = 0\), а вычисленный вектор синдрома не равен нулю, произошла ошибка передачи.

Код (7,4) имеет 4 информационных и 3 проверочных бита. Всего он таким образом имеет \(2^4 = 16\) разрешённых кодовых слов и \(2^3=8\) возможных значений синдрома. Учитывая, что одно (нулевое) значение синдрома означает отсутствие ошибок, для индикации ошибки имеется 7 различных вариантов. Этого достаточно для того, чтобы обнаружить ошибку в одном бите.

Поскольку \(Hr = Hx + He = He\), вектор синдрома зависит только от вектора ошибки. Построим таблицу синдромов для всех возможных векторов одной ошибки:

e s
1000000 001
0100000 010
0010000 011
0001000 100
0000100 101
0000010 110
0000001 111

Вычисленный синдром 100 соответствует ошибке в 4-м бите. Соответственно, наиболее вероятное отправленное кодовое слово \(x = 0100101\). Убедимся, что его синдром равен 0: \[s = 010 + 101 + 111 = 000 \mod 2\]

Поскольку код является кодом Хэмминга, матрицу H можно единственным образом привести к стандартному виду перестановкой столбцов, и тогда сообщение записано в битах, соответствующих неединичным столбцам проверочной матрицы, т.е. в битах 3, 5, 6, 7. m = 0101.

Пример 2

При использовании линейного помехоустойчивого кода H(7,3) над двоичным алфавитом с проверочной матрицей \[H = \begin{pmatrix} 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 & 1 & 1 & 0 \\ 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ \end{pmatrix},\] получено кодовое слово r=1100111.

Считать, что порождающая матрица в стандартном виде.

Была ли ошибка при передаче?

Каково наиболее вероятное отправленное кодовое слово?

Каково исходное сообщение?

Вычислим вектор синдрома: \[s = (0001)^\mathrm T\]

Вектор синдрома не равен 0.

Код имеет 3 информационных и 4 проверочных бита, соответственно имеет 8 разрешённых кодовых слов и 16 различных синдромов, то есть может различать 16 различных векторов ошибки.

Вектор синдрома соответствует единичной ошибке в последнем бите.

Наиболее вероятное кодовое слово 1100110.

Поскольку мы считаем, что порождающая матрица в стандартном виде, мы автоматически знаем, что первые 3 (старших) бита должны быть информационными, и тогда сообщение \(m=110\).

Тем не менее, проверим, что соответствующая данной проверочной матрице порождающая матрица, имеющая стандартны вид, существует.

Разрешённые кодовые слова (из решения Hx = 0):

  • 0000000
  • 1001100
  • 0101010
  • 1100110
  • 0011001
  • 1010101
  • 0110011
  • 1111111

Следует отметить, что кодовое расстояние = 3, и код способен гарантированно исправить не более 1 ошибки.

Порождающая матрица может быть образована, вообще говоря, любой комбинацией из 3 разрешённых кодовых слов, кроме 0000000 и 1111111, но мы ищем стандартный вариант – когда в левой части находится единичная матрица. Тогда единственная возможная порождающая матрица

\[G = \begin{pmatrix} 1&0&0&1&1&0&0 \\ 0&1&0&1&0&1&0 \\ 0&0&1&1&0&0&1 \\ \end{pmatrix},\]

то есть сообщение повторяется в первых (старших) трёх и последних (младших) трёх битах, а “средний” бит является битом чётности.

Отметим, что эквивалентная систематическая проверочная матрица для данной порождающей имеет вид

\[H = \begin{pmatrix} 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 1 \\ \end{pmatrix}\]

Она может быть получена из исходной линейными операциями над строками.

Пример 3

При использовании линейного помехоустойчивого кода H(6,3) над двоичным алфавитом с проверочной матрицей \[H = \begin{pmatrix} 1 & 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 1 & 0 & 1 \\ \end{pmatrix},\] получено кодовое слово r=111000.

Считать, что порождающая матрица в стандартном виде.

Была ли ошибка при передаче?

Каково наиболее вероятное отправленное кодовое слово?

Каково исходное сообщение?

Синдром 010 соответствует единичной ошибке в предпоследнем бите. Наиболее вероятное кодовое слово x = 111010.

Поскольку порождающая матрица в стандартном виде, m = 111.

Код имеет 3 информационных и 3 проверочных символа. Всего он может теоретически различать 8 ошибок. Разрешённые кодовые слова (8):

  • 000000
  • 011100
  • 111010
  • 100110
  • 110001
  • 101101
  • 001011
  • 010111

Кодовое расстояние 3, соответственно код гарантированно способен обнаружить ошибку кратности 1.

Систематическая порождающая матрица

\[G = \begin{pmatrix} 1 & 0 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 1 & 1 \\ 0 & 0 & 1 & 0 & 1 & 1 \\ \end{pmatrix}\]

Соответствующая систематическая проверочная матрица

\[H' = \begin{pmatrix} 1 & 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 1 & 0 & 1 & 0 \\ 0 & 1 & 1 & 0 & 0 & 1 \\ \end{pmatrix}\]

Она может быть получена из исходной линейными операциями над строками.

Пример 4

При использовании циклического кода (7, 4) с порождающим многочленом \(g(x) = x^3+x+1\) и правилом построения кодов \(c(x) = m(x)\cdot g(x)\) получено кодовое слово r = 0010000

Была ли ошибка при передаче?

Каково наиболее вероятное отправленное кодовое слово?

Каково исходное сообщение?

Многочлен, соответствующий сообщению \(r(x) = x^4\).

Синдром \(s(x) = \mathrm{rem}(r(x), g(x))\) (остаток от деления r(x) на g(x))

Разделим \(x^4\) на \(x^3+x+1\). Результат \(x\). Остаток тогда \(x^4 - x(x^3+x+1) = x^2+x\) (все операции в поле \(GF(2)\), поэтому \(-1 = 1\))

Произошла ошибка передачи. Поскольку синдром зависит только от ошибки, данный синдром соответствует ошибке в единичном бите. То есть, исходное кодовое слово \(x = 0000000\), и исходное сообщение \(m = 0000\).

Пример 5

При использовании циклического кода (6, 3) с порождающим многочленом \(g(x) = x^3+1\) и правилом построения кодов \(c(x) = m(x)\cdot g(x)\) получено кодовое слово r = 001001

Была ли ошибка при передаче?

Каково наиболее вероятное отправленное кодовое слово?

Каково исходное сообщение?

Многочлен, соответствующий сообщению \(r(x) = x^3 + 1\).

Синдром \(s(x) = \mathrm{rem}(r(x), g(x)) = 0\)

Ошибки передачи вероятно не было, наиболее вероятное сообщение r = 001001

Исходное сообщение есть результат деления \(r(x)\) на \(g(x)\), т.е. \(m(x) = r(x)/g(x) = 1\). Исходное сообщение таким образом \(m = 001\).

Пример 6

При использовании циклического кода (6, 3) с порождающим многочленом \(g(x) = x^3+x+1\) и правилом построения кодов \(c(x) = m(x)\cdot g(x)\) получено кодовое слово r = 001001

Была ли ошибка при передаче?

Каково наиболее вероятное отправленное кодовое слово?

Каково исходное сообщение?

Многочлен, соответствующий сообщению \(r(x) = x^3 + 1\).

Синдром \(s(x) = \mathrm{rem}(r(x), g(x)) = x\), s = 010

Произошла ошибка передачи. Предположим, что это единичная ошибка. Тогда, \[s(x) = \mathrm{rem}(e(x), g(x)) = \mathrm{rem}(x^i, g(x)),\] где \(i\) – номер ошибочного бита (от 0 – младший до 5 – старший). Понятно, что \(i=1\), т.е. синдром соответствует ошибке в предпоследнем бите.

Наиболее вероятное кодовое слово c = 001011, \(c(x) = x^3+x+1\).

Исходное сообщение есть результат деления \(c(x)\) на \(g(x)\), т.е. \(m(x) = c(x)/g(x) = 1\). Исходное сообщение таким образом m = 001.

Пример 7

При использовании циклического кода (6, 3) с порождающим многочленом \(g(x) = x^3+x+1\) и систематическим правилом построения кодов, получено кодовое слово r = 000111

Была ли ошибка при передаче?

Каково наиболее вероятное отправленное кодовое слово?

Каково исходное сообщение?

Многочлен, соответствующий сообщению \(r(x) = x^2 + x + 1\).

Синдром \(s(x) = \mathrm{rem}(r(x), g(x)) = x^2 + x + 1\), s = 111

Произошла ошибка передачи. Предположим, что это единичная ошибка. Тогда, \[s(x) = \mathrm{rem}(e(x), g(x)) = \mathrm{rem}(x^i, g(x)),\] где \(i\) – номер ошибочного бита (от 0 – младший до 5 – старший). Понятно, что \(i>3\) (для \(i<3\), \(s(x)=x^i\), для \(i=3\), \(s(x) = x+1\)). \[\mathrm{rem}(x^4, g(x)) = x^2+x,\] \[\mathrm{rem}(x^5, g(x)) = x^2+x+1,\] \(i=5\), значит ошибка произошла в старшем бите.

Наиболее вероятное кодовое слово c = 100111, \(c(x) = x^3+x+1\).

Поскольку код построен систематически, первые (левые) \(k=n-r = 3\) бит являются исходным сообщением. \(m=100\)

Пример 8

При использовании циклического кода (6, 3) с порождающим многочленом \(g(x) = x^3+x^2+1\) и правилом построения кодов \(c(x)=m(x)g(x)\), получено кодовое слово r = 011000

Была ли ошибка при передаче?

Каково наиболее вероятное отправленное кодовое слово?

Каково исходное сообщение?

Многочлен, соответствующий сообщению \(r(x) = x^4 + x^3\).

Синдром \(s(x) = \mathrm{rem}(r(x), g(x)) = x\), s = 010

Произошла ошибка передачи. Синдром соответствует ошибке во втором справа бите.

Наиболее вероятное кодовое слово c = 011010, \(c(x) = x^4 + x^3 + x\).

Исходное сообщение есть результат деления \(c(x)\) на \(g(x)\), т.е. \(m(x) = c(x)/g(x) = x\). Исходное сообщение таким образом m = 010.

Пример 9

При использовании циклического кода (6, 3) с порождающим многочленом \(g(x) = x^3+x^2+1\) и систематическим правилом построения кодов, получено кодовое слово r = 011000

Была ли ошибка при передаче?

Каково наиболее вероятное отправленное кодовое слово?

Каково исходное сообщение?

Многочлен, соответствующий сообщению \(r(x) = x^4 + x^3\).

Синдром \(s(x) = \mathrm{rem}(r(x), g(x)) = x\), s = 010

Произошла ошибка передачи. Синдром соответствует ошибке в предпоследнем бите.

Наиболее вероятное кодовое слово c = 011010, \(c(x) = x^4 + x^3 + x\).

Поскольку код построен систематически, первые (левые) \(k=n-r = 3\) бит являются исходным сообщением. \(m=011\)