Помехоустойчивое кодирование: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Нет описания правки
Пробую автоматически получить из TeXa викиразметку
Строка 1: Строка 1:

==sdfga dfg <math>a=\{\begin{array} \end{array}</math> ==


==Аннотация==
==Аннотация==


Строка 41: Строка 37:
значений которой - слова фиксированной длины <math>r</math>.
значений которой - слова фиксированной длины <math>r</math>.


Эти r бит добавляются обычно в конец кадра. При приёме
Эти <i>r</i> бит добавляются обычно в конец кадра. При приёме
контрольная сумма вычисляется заново и сравнивается с той, что
контрольная сумма вычисляется заново и сравнивается с той, что
храниться в кадре. Если они различаются, то это признак ошибки
храниться в кадре. Если они различаются, то это признак ошибки
Строка 51: Строка 47:
нет единого таймера, нет гарантии, что эта пауза сохраниться или,
нет единого таймера, нет гарантии, что эта пауза сохраниться или,
наоборот, не появятся новые. Так как временные методы ненадёжны,
наоборот, не появятся новые. Так как временные методы ненадёжны,
то применяются другие. Здесь мы рассмотрим четыре основных:
то применяются другие. Здесь мы рассмотрим три основных:
* счетчик символов;
* счетчик символов;
* вставка специальных стартовых и конечных символов или последовательностей бит;
* вставка специальных стартовых и конечных символов или последовательностей бит;
Строка 67: Строка 63:
Второй метод построен на вставке специальных символов.
Второй метод построен на вставке специальных символов.
Обычно для этого используют управляющие последовательности:
Обычно для этого используют управляющие последовательности:
последовательность <math>DLE\;STX</math> для начала кадра и <math>DLE\;ETX</math>
последовательность <math>DLE STX</math> для начала кадра и <math>DLE ETX</math>
для конца кадра. <math>DLE</math> — Data Link Escape; <math>STX</math> — Start
для конца кадра. <math>DLE</math> — Data Link Escape; <math>STX</math> — Start
TeXt, <math>ETX</math> — End TeXt. При этом методе если даже была
TeXt, <math>ETX</math> — End TeXt. При этом методе если даже была
Строка 117: Строка 113:


===Контроль ошибок===
===Контроль ошибок===

Решив проблему разбиения на кадры, мы приходим к следующей
Решив проблему разбиения на кадры, мы приходим к следующей
проблеме: как обеспечить, чтобы кадры, пройдя по физическому
проблеме: как обеспечить, чтобы кадры, пройдя по физическому
Строка 123: Строка 118:
надлежащей последовательности и в надлежащем виде?
надлежащей последовательности и в надлежащем виде?


Частичное решение этой проблемы осуществляется посредством
Частичное решение этой проблемы осуществляется посредством
введения обратной связи между отправителем и получателем в
введения обратной связи между отправителем и получателем в
виде кадра подтверждения, а также специального кодирования,
виде кадра подтверждения, а также специального кодирования,
Строка 134: Строка 129:
заново.
заново.


Однако, возможны случаи когда из-за ошибок в канале
Однако, возможны случаи когда из-за ошибок в канале
кадр исчезнет целиком. В этом случае получатель не будет
кадр исчезнет целиком. В этом случае получатель не будет
реагировать никак, а отправитель будет сколь угодно долго ждать
реагировать никак, а отправитель будет сколь угодно долго ждать
Строка 145: Строка 140:
считать, что кадр потерян и повторит его еще раз.
считать, что кадр потерян и повторит его еще раз.


Однако, если кадр-подтверждение был утерян, то вполне возможно, что один и
Однако, если кадр-подтверждение был утерян, то вполне возможно, что один и
тот же кадр получатель получит дважды. Как быть? Для решения
тот же кадр получатель получит дважды. Как быть? Для решения
этой проблемы каждому кадру присваивают порядковый номер. С
этой проблемы каждому кадру присваивают порядковый номер. С
Строка 158: Строка 153:


===Управление потоком===
===Управление потоком===

Другая важная проблема, которая решается на канальном уровне
Другая важная проблема, которая решается на канальном уровне
— управление потоком. Вполне может
— управление потоком. Вполне может
Строка 176: Строка 170:


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

===Характеристики ошибок===
===Характеристики ошибок===

Физическая среда, по которой передаются данные не может быть
Физическая среда, по которой передаются данные не может быть
абсолютно надёжной. Более того, уровень шума бывает очень
абсолютно надёжной. Более того, уровень шума бывает очень
Строка 191: Строка 183:


Основной характеристикой ''интенсивности помех'' в канале
Основной характеристикой ''интенсивности помех'' в канале
является параметр шума — <i class="formula">p</i>. Это число от 0 до 1, равное
является параметр шума — <i>p</i>. Это число от 0 до 1, равное
вероятности инвертирования бита, при условии что, он был
вероятности инвертирования бита, при условии что, он был
передан по каналу и получен на другом конце.
передан по каналу и получен на другом конце.
Строка 206: Строка 198:
битами.
битами.


У групповых ошибок есть свои плюсы и минусы. Плюсы
У групповых ошибок есть свои плюсы и минусы. Плюсы
заключаются в следующем. Пусть данные передаются блоками по
заключаются в следующем. Пусть данные передаются блоками по
1000 бит, а уровень ошибки 0,001 на бит. Если ошибки
1000 бит, а уровень ошибки 0,001 на бит. Если ошибки
изолированные и независимые, то 63\% (<math>0.63\approx
изолированные и независимые, то 63% (<math>0.63\approx
1-0.999^{1000}</math>) блоков будут содержать ошибки. Если же они
1-0.999^{1000}</math>) блоков будут содержать ошибки. Если же они
возникают группами по 100 сразу, то ошибки будут содержать
возникают группами по 100 сразу, то ошибки будут содержать
1\% (<math>0.01\approx 1-0.999^{10}</math>) блоков.
1% (<math>0.01\approx 1-0.999^{10}</math>) блоков.


Зато, если ошибки не группируются, то в каждом кадре они невелики,
Зато, если ошибки не группируются, то в каждом кадре они невелики,
и есть возможность их исправить. Групповые ошибки портят
и есть возможность их исправить. Групповые ошибки портят
кадр безвозвратно. Требуется его повторная пересылка, но в
кадр безвозвратно. Требуется его повторная пересылка, но в
Строка 223: Строка 215:
Для надёжной передачи кодов было предложено два основных метода.
Для надёжной передачи кодов было предложено два основных метода.


''Первый'' заключается в добавлении в передаваемый блок
''Первый'' заключается в добавлении в передаваемый блок
данных нескольких &laquo;лишних&raquo; битов так, чтобы, анализируя
данных нескольких &laquo;лишних&raquo; битов так, чтобы, анализируя
полученный блок, можно было бы сказать есть в переданном
полученный блок, можно было бы сказать есть в переданном
Строка 235: Строка 227:


Такое деление условно. Более общий вариант — это коды
Такое деление условно. Более общий вариант — это коды
обнаруживающие <i class="formula">k</i> ошибок и исправляющие <i class="formula">l</i> ошибок, где
обнаруживающие <i>k</i> ошибок и исправляющие <i>l</i> ошибок, где
<math>l<k</math>.
<math>l<k</math>.


===* Элементы теории передачи информации===
===* Элементы теории передачи информации===

''Информационным каналом'' называется пара ''зависимых''
''Информационным каналом'' называется пара ''зависимых''
случайных величин <math>\{\xi_{in},\,\xi_{out}\}</math>, одна из них
случайных величин <math>\{\xi_{in},\,\xi_{out}\}</math>, одна из них
называется входом другая выходом канала. Если случайные величины
называется входом другая выходом канала. Если случайные величины
дискретны и конечны, то есть имеют конечные множества событий:
дискретны и конечны, то есть имеют конечные множества событий:

<i class="formula"></i>\Omega_{in}={x_1,\dots, x_a},\;\Omega_{out}={y_1,\dots, y_b},<i class="formula"></i>
:<math>\Omega_{in}=\{x_1,\dots, x_a\},\;\Omega_{out}=\{y_1,\dots, y_b\},</math>

то канал определяется матрицей условных вероятностей
то канал определяется матрицей условных вероятностей
<math>\|r_{ij}\|</math>, <math>r_{ij}</math> — вероятность того, что на выходе
<math>\|r_{ij}\|</math>, <math>r_{ij}</math> — вероятность того, что на выходе
Строка 254: Строка 247:
выходе вычисляется по формуле
выходе вычисляется по формуле



<i class="formula"></i>q_i=\sum_{j=1}^{a}r_{ij}p_j.<i class="formula"></i>
:<math>q_i=\sum_{j=1}^{a}r_{ij}p_j.</math>

Объединённое распределение на
Объединённое распределение на
<math>\Omega_{in}\times\Omega_{out}</math> равно
<math>\Omega_{in}\times\Omega_{out}</math> равно



<i class="formula"></i>P_{ij}=r_{ij}p_j.<i class="formula"></i>
:<math>P_{ij}=r_{ij}p_j.</math>



Информация <math>I(\{\xi_{in},\,\xi_{out}\})</math>, передаваемая через
Информация <math>I(\{\xi_{in},\,\xi_{out}\})</math>, передаваемая через
Строка 264: Строка 261:


:<math>
:<math>

\label{eq:inf}
I(\{\xi_{in}\,\xi_{out}\})=H(\xi_{in})+H(\xi_{out})-H(\{\xi{in},\xi_{out}\}),
I(\{\xi_{in}\,\xi_{out}\})=H(\xi_{in})+H(\xi_{out})-H(\{\xi{in},\xi_{out}\}),
</math>
</math> <b>(eq:inf)</b>

где <i class="formula"></i>H(\xi_{in})=-\sum_{i=1}^ap_i\log_2 p_i,<i class="formula"></i>
где
<i class="formula"></i>H(\xi_{out})=-\sum_{i=1}^aq_i\log_2 q_i,<i class="formula"></i>
<i class="formula"></i>H({\xi_{in},\,\xi_{out}})=-\sum_{i,j}P_{ij}\log_2 P_{ij}.<i class="formula"></i>
:<math>H(\xi_{in})=-\sum_{i=1}^ap_i\log_2 p_i,</math>


:<math>H(\xi_{out})=-\sum_{i=1}^aq_i\log_2 q_i,</math>


:<math>H(\{\xi_{in},\,\xi_{out}\})=-\sum_{i,j}P_{ij}\log_2 P_{ij}.</math>



Если случайные величины <math>\xi_{in}</math> и <math>\xi_{out}</math> независимы (то
Если случайные величины <math>\xi_{in}</math> и <math>\xi_{out}</math> независимы (то
Строка 275: Строка 279:
<math>\{\xi_{in},\,\xi_{out}\}</math> невозможно передавать информацию и
<math>\{\xi_{in},\,\xi_{out}\}</math> невозможно передавать информацию и
<math>I(\{\xi_{in},\,\xi_{out}\})=0</math>. Понять суть формулы
<math>I(\{\xi_{in},\,\xi_{out}\})=0</math>. Понять суть формулы
(\ref{eq:inf}) можно из следующего соображения: энтропия случайной
(<b>(eq:inf)</b>) можно из следующего соображения: энтропия случайной
величины равна информации, которую мы получаем при одном её
величины равна информации, которую мы получаем при одном её
измерении. <math>H(\xi_{in})</math> и <math>H(\xi_{out})</math> — информация, которая
измерении. <math>H(\xi_{in})</math> и <math>H(\xi_{out})</math> — информация, которая
Строка 283: Строка 287:
меры{{ref|note1}} есть выражение
меры{{ref|note1}} есть выражение
аналогичное (\ref{eq:inf}):
аналогичное (\ref{eq:inf}):

<i class="formula"></i>\mu(A\wedge B)=\mu(A)+\mu(B)-\mu(A\vee B).<i class="formula"></i>
:<math>\mu(A\wedge B)=\mu(A)+\mu(B)-\mu(A\vee B).</math>





Распределение входной случайной величины <math>\xi_{in}</math> мы можем
Распределение входной случайной величины <math>\xi_{in}</math> мы можем
варьировать и получать различные значения <i class="formula">I</i>. Её максимум
варьировать и получать различные значения <i>I</i>. Её максимум
называется пропускной способностью канала
называется пропускной способностью канала


:<math>
:<math>

\label{eq:cdef}
C(\|r_{ij}\|)=\max_{p_i}I(\{\xi_{in}\,\xi_{out}\}).
C(\|r_{ij}\|)=\max_{p_i}I(\{\xi_{in}\,\xi_{out}\}).
</math>
</math> <b>(eq:cdef)</b>

Эта функция есть решение задачи
Эта функция есть решение задачи
\begin{task}
\begin{task}
\label{task:shanon} Каково максимальное количество информации,
<b>(task:shanon)</b> Каково максимальное количество информации,
которое можно передать с одним битом по каналу
которое можно передать с одним битом по каналу
<math>\{\xi_{in},\,\xi_{out}\}</math>?
<math>\{\xi_{in},\,\xi_{out}\}</math>?
Строка 305: Строка 312:


Стандартный информационный канал это
Стандартный информационный канал это

<i class="formula"></i>\Omega_{in}=\Omega_{out}={0,1}.<i class="formula"></i>
:<math>\Omega_{in}=\Omega_{out}=\{0,1\}.</math>





:<math>
:<math>

\label{eq:sm}
\|r_{ij}\|=\begin{array}{||cc||} 1-p &p\\ p& 1-p
\|r_{ij}\|=\begin{array}{||cc||} 1-p &p\\ p& 1-p
\end{array}\;.
\end{array}\;.
</math>
</math> <b>(eq:sm)</b>

То есть канал с бинарным алфавитом и вероятностью помехи <i class="formula">p</i>
То есть канал с бинарным алфавитом и вероятностью помехи <i>p</i>
(<i class="formula">p</i> — вероятность того, что бит будет случайно
(<i>p</i> — вероятность того, что бит будет случайно
инвертирован). Его пропускная способность равна
инвертирован). Его пропускная способность равна

<i class="formula"></i>C= 1-H(p)=1+p\log_2p+(1-p)\log_2{(1-p)}.<i class="formula"></i>
:<math>C= 1-H(p)=1+p\log_2p+(1-p)\log_2{(1-p)}.</math>

Эта функция является решением задачи на максимум (\ref{eq:cdef})
Эта функция является решением задачи на максимум (\ref{eq:cdef})
для матрицы&nbsp;(\ref{eq:sm}).
для матрицы&nbsp;(\ref{eq:sm}).
Строка 331: Строка 343:
Эта функция <math>C(p)</math> (рис.&nbsp;\ref{fig:cideal}) определяет предел
Эта функция <math>C(p)</math> (рис.&nbsp;\ref{fig:cideal}) определяет предел
помехоустойчивого кодирования — если мы хотим с абсолютной
помехоустойчивого кодирования — если мы хотим с абсолютной
надёжностью передать по каналу с пропускной способностью <i class="formula">C</i>
надёжностью передать по каналу с пропускной способностью <i>C</i>
сообщение длиной <i class="formula">m</i>, то минимальное количество бит, которое нам
сообщение длиной <i>m</i>, то минимальное количество бит, которое нам
нужно будет передать&nbsp;<math>n\geqslant m/C</math>. А точнее, всякое
нужно будет передать&nbsp;<math>n\geqslant m/C</math>. А точнее, всякое
помехоустойчивое кодирование, обеспечивающее вероятность
помехоустойчивое кодирование, обеспечивающее вероятность
Строка 338: Строка 350:
раздувает данные в <math>k_{\varepsilon}(m,p)</math> раз и
раздувает данные в <math>k_{\varepsilon}(m,p)</math> раз и



<i class="formula"></i>\lim_{\varepsilon\to 0}\lim_{m\to\infty}k_{\varepsilon}(m,p)\geqslant {1/C(p)}.<i class="formula"></i>
:<math>\lim_{\varepsilon\to 0}\lim_{m\to\infty}k_{\varepsilon}(m,p)\geqslant {1/C(p)}.</math>

Кодирование, при котором в этом пределе достигается
Кодирование, при котором в этом пределе достигается
равенство, называется ''эффективным''. Отметим, что
равенство, называется ''эффективным''. Отметим, что
Строка 349: Строка 363:
\begin{task}
\begin{task}
\label{task:dual}
\label{task:dual}
Мы хотим передавать информацию со скоростью <i class="formula">V</i> по каналу с
Мы хотим передавать информацию со скоростью <i>V</i> по каналу с
пропускной способностью <i class="formula">C</i>. Какова минимальная вероятность
пропускной способностью <i>C</i>. Какова минимальная вероятность
ошибочной передачи одного бита?
ошибочной передачи одного бита?
\end{task}
\end{task}
Решением будет функция заданная неявно
Решением будет функция заданная неявно

<i class="formula"></i>C/V=1+p\log_2p+(1-p)\log_2(1-p),\mbox{ если <math>V/C>1</math>},<i class="formula"></i>
<i class="formula"></i>p(V/C)=0,\mbox{ если <math>V/C\leqslant 1</math>}.<i class="formula"></i>
<math>C/V=1+p\log_2p+(1-p)\log_2(1-p)</math>, если <math>V/C>1</math>,

<math>p(V/C)=0</math>, если <math>V/C\leqslant 1</math>

Оказывается, вероятность ошибки растет не так уж и быстро.
Оказывается, вероятность ошибки растет не так уж и быстро.
Например, если по каналу передавать данных в два раза
Например, если по каналу передавать данных в два раза
Строка 363: Строка 380:
\begin{center}
\begin{center}
\begin{figure}[t!]
\begin{figure}[t!]
\psfrag{v}{<i class="formula">v</i>} \psfrag{p}{ <math>p(v)</math>}
\psfrag{v}{<i>v</i>} \psfrag{p}{ <math>p(v)</math>}
\centering\includegraphics[clip=true,
\centering\includegraphics[clip=true,
width=0.75\textwidth]{pictures/pv.eps} \caption{ <math>p(v)</math> —
width=0.75\textwidth]{pictures/pv.eps} \caption{ <math>p(v)</math> —
Строка 375: Строка 392:
сложная математическая задача.
сложная математическая задача.


===Метод &laquo;чётности&raquo; и общая идея=== Простым примером
===Метод &laquo;чётности&raquo; и общая идея===
Простым примером
кода с обнаружением одной ошибки является код с битом чётности.
кода с обнаружением одной ошибки является код с битом чётности.
Конструкция его такова: к исходному слову добавляется бит
Конструкция его такова: к исходному слову добавляется бит
Строка 384: Строка 402:


В случае вероятных групповых ошибок эту технику можно
В случае вероятных групповых ошибок эту технику можно
скорректировать. Разобъём передаваемые данные на <i class="formula">n</i> слов по <i class="formula">k</i>
скорректировать. Разобъём передаваемые данные на <i>n</i> слов по <i>k</i>
бит и расположим их в виде матрицы&nbsp;<math>n\cdot k</math> (<i class="formula">n</i>&nbsp;столбцов). Для
бит и расположим их в виде матрицы&nbsp;<math>n\cdot k</math> (<i>n</i>&nbsp;столбцов). Для
каждого столбца вычислим бит чётности и разместим его в
каждого столбца вычислим бит чётности и разместим его в
дополнительной строке. Матрица затем передается по строкам. По
дополнительной строке. Матрица затем передается по строкам. По
Строка 393: Строка 411:


\begin{task}
\begin{task}
Слово длиной <i class="formula">n</i> с чётным количеством единиц передано по каналу с
Слово длиной <i>n</i> с чётным количеством единиц передано по каналу с
уровнем шума <i class="formula">p</i>. Покажите, что вероятность того, что при
уровнем шума <i>p</i>. Покажите, что вероятность того, что при
передаче произошли ошибки и мы их не заметили равна
передаче произошли ошибки и мы их не заметили равна

<i class="formula"></i>P_{miss}(2,n,p)=C^2_np^2(1-p)^{n-2}+C^4_np^4(1-p)^{n-4}+\dots+C^{2k}_np^{2k}(1-p)^{n-2k}+\dots
:<math>P_{miss}(2,n,p)=C^2_np^2(1-p)^{n-2}+C^4_np^4(1-p)^{n-4}+\dots+C^{2k}_np^{2k}(1-p)^{n-2k}+\dots
<i class="formula"></i>
</math>

Что можно привести к виду
Что можно привести к виду

<i class="formula"></i>
:<math>
\begin{array}{l @{} l}
\begin{array}{l @{} l}
P_{miss}(2,n,p)&={{((1-p)+p)^n+((1-p)-p)^n -2(1-p)^n}\over 2}=\\
P_{miss}(2,n,p)&={{((1-p)+p)^n+((1-p)-p)^n -2(1-p)^n}\over 2}=\\
&={{1-2(1-p)^n+(1-2p)^n}\over 2}.
&={{1-2(1-p)^n+(1-2p)^n}\over 2}.
\end{array}
\end{array}
</math>
<i class="formula"></i>

Например, при <math>n=1000</math> и <math>p=10^{-6}</math> получаем <math>P_{miss}\approx
Например, при <math>n=1000</math> и <math>p=10^{-6}</math> получаем <math>P_{miss}\approx
4.99\cdot 10^{-7}</math>
4.99\cdot 10^{-7}</math>
Строка 412: Строка 434:
\begin{task}[*]
\begin{task}[*]
\label{task:errmod} Пусть у нас есть возможность контролировать
\label{task:errmod} Пусть у нас есть возможность контролировать
сумму единичек по модулю&nbsp;<i class="formula">d</i>. Тогда вероятность нефиксируемых
сумму единичек по модулю&nbsp;<i>d</i>. Тогда вероятность нефиксируемых
ошибок в слове длиной <i class="formula">n</i> при передаче его по каналу с шумом <i class="formula">p</i>
ошибок в слове длиной <i>n</i> при передаче его по каналу с шумом <i>p</i>
равна <math>P_{miss}(d,n,p)</math>:
равна <math>P_{miss}(d,n,p)</math>:

<i class="formula"></i>
:<math>
\begin{array}{r@{}c@{}l}
\begin{array}{r@{}c@{}l}
P_{miss}(2,n,p)&=&{1+(1-2p)^n-2(1-p)^n \over 2},\\
P_{miss}(2,n,p)&=&{1+(1-2p)^n-2(1-p)^n \over 2},\\
Строка 427: Строка 450:
2}\cos(n\arctan{p\over (1-p)})-4(1-p)^n \over 4}.
2}\cos(n\arctan{p\over (1-p)})-4(1-p)^n \over 4}.
\end{array}
\end{array}
</math>
<i class="formula"></i>

''Примечание.'' Интерес здесь представляет неявно
''Примечание.'' Интерес здесь представляет неявно
заданная функция <math>n(d,P_{miss},p)</math>, а точнее даже коэффициент
заданная функция <math>n(d,P_{miss},p)</math>, а точнее даже коэффициент
содержания полезной информации
содержания полезной информации
<math>\mbox{КПС}(n,P_{miss},p)={n-\log_2 d \over n}</math> в переданных <i class="formula">n</i>
<math>KPS(n,P_{miss},p)={n-\log_2 d \over n}</math> в переданных <i>n</i>
бит как функция от величины шума и вероятности незамеченных
бит как функция от величины шума и вероятности незамеченных
ошибок. Чем выше желаемая надёжность передачи, то есть чем меньше
ошибок. Чем выше желаемая надёжность передачи, то есть чем меньше
Строка 440: Строка 464:
Итак, с помощью одного бита чётности мы повышаем надёжность
Итак, с помощью одного бита чётности мы повышаем надёжность
передачи, и вероятность незамеченной ошибки равна
передачи, и вероятность незамеченной ошибки равна
<math>P_{miss}(2,n,p)</math>. Это вероятность уменьшается с уменьшением <i class="formula">n</i>.
<math>P_{miss}(2,n,p)</math>. Это вероятность уменьшается с уменьшением <i>n</i>.
При <math>n=2</math> получаем <math>P_{miss}(2,2,p)=p^2</math>, это соответствует
При <math>n=2</math> получаем <math>P_{miss}(2,2,p)=p^2</math>, это соответствует
дублированию каждого бита. Рассмотрим общую идею того, как с
дублированию каждого бита. Рассмотрим общую идею того, как с
Строка 446: Строка 470:
высокой надёжности передачи.
высокой надёжности передачи.


''Общая идея'' На множестве слов длины <i class="formula">n</i> определена
''Общая идея'' На множестве слов длины <i>n</i> определена
метрика Хемминга: расстояние Хемминга между двумя словами
метрика Хемминга: расстояние Хемминга между двумя словами
равно количеству несовпадающих бит. Например,
равно количеству несовпадающих бит. Например,

<i class="formula"></i>\rho_H(10001001,10110001)=3.<i class="formula"></i>
:<math>\rho_H(10001001,10110001)=3.</math>

\begin{task}
\begin{task}
Докажите, что <math>\rho_H</math> метрика.
Докажите, что <math>\rho_H</math> метрика.
\end{task}
\end{task}
Если два слова находятся на расстоянии <i class="formula">r</i> по Хеммингу,
Если два слова находятся на расстоянии <i>r</i> по Хеммингу,
это значит, что надо инвертировать ровно <i class="formula">r</i> разрядов, чтобы
это значит, что надо инвертировать ровно <i>r</i> разрядов, чтобы
преобразовать одно слово в другое. В описанном ниже
преобразовать одно слово в другое. В описанном ниже
кодировании Хемминга любые два различных допустимых слова
кодировании Хемминга любые два различных допустимых слова
находятся на расстоянии <math>\rho_H\geqslant 3</math>. Если мы хотим
находятся на расстоянии <math>\rho_H\geqslant 3</math>. Если мы хотим
обнаруживать <i class="formula">d</i> ошибок, то надо, чтобы слова отстояли друг
обнаруживать <i>d</i> ошибок, то надо, чтобы слова отстояли друг
от друга на расстояние <math>\geqslant d+1</math>. Если мы хотим
от друга на расстояние <math>\geqslant d+1</math>. Если мы хотим
исправлять ошибки, то надо чтобы кодослова отстояли друг от
исправлять ошибки, то надо чтобы кодослова отстояли друг от
друга на <math>\geqslant 2d+1</math>. Действительно, даже если
друга на <math>\geqslant 2d+1</math>. Действительно, даже если
переданное слово содержит <i class="formula">d</i> ошибок, оно, как следует из
переданное слово содержит <i>d</i> ошибок, оно, как следует из
неравенства треугольника, все равно ближе к правильному
неравенства треугольника, все равно ближе к правильному
слову, чем к какому-либо еще, и следовательно можно
слову, чем к какому-либо еще, и следовательно можно
Строка 472: Строка 498:
которого есть только четыре ''допустимых кодовых
которого есть только четыре ''допустимых кодовых
слова'':\\
слова'':\\

<i class="formula"></i>0000000000,\; 0000011111,\; 1111100000,\; 1111111111.<i class="formula"></i>
:<math>0000000000,\; 0000011111,\; 1111100000,\; 1111111111.</math>



Расстояние по Хеммингу у этого кода 5, следовательно он может
Расстояние по Хеммингу у этого кода 5, следовательно он может
исправлять двойные ошибки и замечать 4 ошибки. Если получатель
исправлять двойные ошибки и замечать 4 ошибки. Если получатель
получит слово <i class="formula">0001010111</i>, то ясно, что исходное слово имело
получит слово <i>0001010111</i>, то ясно, что исходное слово имело
вид <i class="formula">0000011111</i>. Коэффициент раздувания равен&nbsp;5. То есть
вид <i>0000011111</i>. Коэффициент раздувания равен&nbsp;5. То есть
исходное слово длины <i class="formula">m</i> будет кодироваться в слово длины <math>n=5m</math>
исходное слово длины <i>m</i> будет кодироваться в слово длины <math>n=5m</math>


Отметим что имеет смысл говорить о двух коэффициентах:\\
Отметим что имеет смысл говорить о двух коэффициентах:\\
\begin{tabular}{l}
\begin{tabular}{l}
<math>\mbox{КПС}(n)=\frac{m(n)}{n}</math> — коэффициент содержания
<math>KPS(n)=\frac{m(n)}{n}</math> — коэффициент содержания
полезной информации\\
полезной информации\\
<math>k(m)=\frac{n(m)}{m}</math> — коэффициент раздувания информации
<math>k(m)=\frac{n(m)}{m}</math> — коэффициент раздувания информации
\end{tabular}\\
\end{tabular}\\
Первый есть функция от переменной <i class="formula">n</i>, а второй, обратный
Первый есть функция от переменной <i>n</i>, а второй, обратный
ему, — от переменной <i class="formula">m</i>.
ему, — от переменной <i>m</i>.


Здесь мы подошли к довольно трудной задаче —
Здесь мы подошли к довольно трудной задаче —
Строка 494: Строка 522:


===Циклические коды===
===Циклические коды===
На практике активно применяются полиномиальные коды

На практике активно применяются полиномиальные коды
или циклические избыточные коды ('''Cyclic Redundancy Code
или циклические избыточные коды ('''Cyclic Redundancy Code
— <math>CRC</math>''').
— <i>CRC</i>''').


<math>CRC</math> коды построены на рассмотрении битовой строки как
<i>CRC</i> коды построены на рассмотрении битовой строки как
строки коэффициентов полинома. <i class="formula">k</i>-битовая строка
строки коэффициентов полинома. <i>k</i>-битовая строка
соответствует полиному степени <math>k-1</math>. Самый левый бит строки
соответствует полиному степени <math>k-1</math>. Самый левый бит строки
— коэффициент при старшей степени. Например, строка <i class="formula">110001</i>
— коэффициент при старшей степени. Например, строка <i>110001</i>
представляет полином <math>x^5+x^4+x^0</math>. Коэффициенты полинома
представляет полином <math>x^5+x^4+x^0</math>. Коэффициенты полинома
принадлежат полю <math>G\mathbb{F}(2)</math> вычетов по модулю&nbsp;2.
принадлежат полю <math>G\mathbb{F}(2)</math> вычетов по модулю&nbsp;2.
Строка 520: Строка 547:
сообщения на <math>G(x)</math>, либо добавить к нашему сообщению некоторое
сообщения на <math>G(x)</math>, либо добавить к нашему сообщению некоторое
количество бит так, чтобы результирующий полином делился на
количество бит так, чтобы результирующий полином делился на
<math>G(x)</math>. В <math>CRC</math> используется второй способ.
<math>G(x)</math>. В <i>CRC</i> используется второй способ.


Отправитель и получатель заранее договариваются
Отправитель и получатель заранее договариваются
о конкретном ''полиноме-генераторе'' <math>G(x)</math>. Пусть степень
о конкретном ''полиноме-генераторе'' <math>G(x)</math>. Пусть степень
<math>G(x)</math> равна <i class="formula">l</i>. Тогда длина блока &laquo;конторольной суммы&raquo; также
<math>G(x)</math> равна <i>l</i>. Тогда длина блока &laquo;конторольной суммы&raquo; также
равна <i class="formula">l</i>.
равна <i>l</i>.
Мы добавляем контрольные <i class="formula">l</i> бит в конец передаваемого
Мы добавляем контрольные <i>l</i> бит в конец передаваемого
блоку так, чтобы получился полином кратный генератору
блоку так, чтобы получился полином кратный генератору
<math>G(x)</math>. Когда получатель получает блок с контрольной суммой,
<math>G(x)</math>. Когда получатель получает блок с контрольной суммой,
он проверяет его делимость на <i class="formula">G</i>. Если есть остаток <math>\neq
он проверяет его делимость на <i>G</i>. Если есть остаток <math>\neq
0</math>, то были ошибки при передаче.
0</math>, то были ошибки при передаче.


''Алгоритм кодирования <math>CRC</math>:''
''Алгоритм кодирования <i>CRC</i>:''

''Дано слово <i class="formula">W</i> длины <i class="formula">m</i>. Ему соответствует полином
<math>W(x)</math>.''
\begin{enumerate}
* ''Добавить к исходному слову <i class="formula">W</i> справа <i class="formula">r</i> нулей.
Получиться слово длины <math>n=m+r</math> и полином
<i class="formula"></i>x^r\cdot W(x);<i class="formula"></i>''
* ''Разделить полином <math>x^r\cdot W(x)</math> на <math>G(x)</math> и
вычислить остаток от деления <math>R(x)</math>
<i class="formula"></i>x^r W(x)=G(x)Q(x)+R(x);<i class="formula"></i>''
* ''Вычесть остаток (вычитание в <math>\mathbb{F}_2</math> то же
самое, что и сложение) из полинома <math>x^r\cdot W(x):</math>


''Дано слово <i>W</i> длины <i>m</i>. Ему соответствует полином <math>W(x)</math>.''
<i class="formula"></i>T(x)=x^r W(x)-R(x)=x^r W(x)+R(x)=G(x)Q(x).<i class="formula"></i>


# ''Добавить к исходному слову <i>W</i> справа <i>r</i> нулей. Получиться слово длины <math>n=m+r</math> и полином :<math>x^r\cdot W(x);</math> ''
Слово, которое соответствует полиному <math>T(x)</math>, и есть результат.''
# ''Разделить полином <math>x^r\cdot W(x)</math> на <math>G(x)</math> и вычислить остаток от деления <math>R(x)</math> :<math>x^r W(x)=G(x)Q(x)+R(x);</math> ''
\end{enumerate}
# ''Вычесть остаток (вычитание в <math>\mathbb{F}_2</math> то же самое, что и сложение) из полинома <math>x^r\cdot W(x):</math> :<math>T(x)=x^r W(x)-R(x)=x^r W(x)+R(x)=G(x)Q(x).</math> Слово, которое соответствует полиному <math>T(x)</math>, и есть результат.''
Рис.&nbsp;\ref{fig:crc} иллюстрирует этот алгоритм для блока
Рис.&nbsp;\ref{fig:crc} иллюстрирует этот алгоритм для блока
<i class="formula">1101011011</i> и <math>{G(x)=x^4+x+1}</math>.
<i>1101011011</i> и <math>{G(x)=x^4+x+1}</math>.


\begin{figure}[h!]
\begin{figure}[h!]
Строка 561: Строка 577:
\end{tabular}}
\end{tabular}}
\centering\includegraphics[clip=true,
\centering\includegraphics[clip=true,
width=0.75\textwidth]{pictures/crc2.eps} \caption{CRC —
width=0.75\textwidth]{pictures/crc2.eps}
полиномиальное кодирование} \label{fig:crc}
\caption{CRC — полиномиальное кодирование}
\label{fig:crc}
\end{figure}
\end{figure}


Строка 569: Строка 586:


Существует три международных стандарта на вид <math>G(x)</math>:
Существует три международных стандарта на вид <math>G(x)</math>:
\begin{itemize}
* <math>CRC-12 = x^{12} + x^{11}+x^3+x^2+x+1</math>
* <math>CRC-16 =x^{16}+x^{15}+x^2+1</math>
* <math>CRC-CCITT = x^{16}+x^{12}+x^5+1</math>
\end{itemize}


* <math>CRC-12 = x^{12} + x^{11}+x^3+x^2+x+1</math>
<math>CRC-12</math> используется для передачи символов из <i class="formula">6</i> разрядов.
* <math>CRC-16 =x^{16}+x^{15}+x^2+1</math>
Два остальных — для <i class="formula">8</i> разрядных. <math>CRC-16</math> и <math>CRC-CCITT</math> ловят
* <math>CRC-CCITT = x^{16}+x^{12}+x^5+1</math>

<math>CRC-12</math> используется для передачи символов из <i>6</i> разрядов.
Два остальных — для <i>8</i> разрядных. <math>CRC-16</math> и <math>CRC-CCITT</math> ловят
одиночные, двойные ошибки, групповые ошибки длины не более 16 и
одиночные, двойные ошибки, групповые ошибки длины не более 16 и
нечётное число изолированных ошибок с вероятностью <i class="formula">0.99997</i>.
нечётное число изолированных ошибок с вероятностью <i>0.99997</i>.




===* Теоретический предел=== \label{theory} В примечании
===* Теоретический предел===
\label{theory} В примечании
к задаче&nbsp;\ref{task:errmod} было указано как можно получить
к задаче&nbsp;\ref{task:errmod} было указано как можно получить
значение коэффициента содержания полезной информации (КПС) на
значение коэффициента содержания полезной информации (КПС) на
один бит, если передавать данные по каналу с шумом <i class="formula">p</i> словами
один бит, если передавать данные по каналу с шумом <i>p</i> словами
длиной <i class="formula">n</i> бит, при условии, чтобы вероятность незамеченной
длиной <i>n</i> бит, при условии, чтобы вероятность незамеченной
ошибки была меньше&nbsp;<math>P_{miss}</math>.
ошибки была меньше&nbsp;<math>P_{miss}</math>.


Строка 601: Строка 618:
\label{task:err}
\label{task:err}
Мы хотим передавать информацию блоками, которые содержали
Мы хотим передавать информацию блоками, которые содержали
бы <i class="formula">m</i> бит полезной информации, так, чтобы
бы <i>m</i> бит полезной информации, так, чтобы
вероятность ошибки в одном бите равнялась <i class="formula">p</i>, а
вероятность ошибки в одном бите равнялась <i>p</i>, а
правильность передачи &laquo;фиксировалось контрольной суммой&raquo;. Найти
правильность передачи &laquo;фиксировалось контрольной суммой&raquo;. Найти
минимальный размер блока <math>n(m,p)</math> и коэффициент раздувания
минимальный размер блока <math>n(m,p)</math> и коэффициент раздувания
Строка 608: Строка 625:
\end{task}
\end{task}
\pb''Решение''
\pb''Решение''
Для передачи <i class="formula">m</i> бит с вероятностью ошибки в отдельном бите
Для передачи <i>m</i> бит с вероятностью ошибки в отдельном бите
<i class="formula">p</i> требуется передать <math>m C(p)</math> бит
<i>p</i> требуется передать <math>m C(p)</math> бит
(см.&nbsp;задачу&nbsp;\ref{task:dual}). Кроме того мы хотим сообщать
(см.&nbsp;задачу&nbsp;\ref{task:dual}). Кроме того мы хотим сообщать
об ошибке в передаче. Её вероятность равна <math>(1-p)^m</math>, а
об ошибке в передаче. Её вероятность равна <math>(1-p)^m</math>, а
значит информация, заложенная в этом сообщении,
значит информация, заложенная в этом сообщении,
<math>H((1-p)^m)</math>. В итоге получаем <math>n=mC(p)+H((1-p)^m)</math> и
<math>H((1-p)^m)</math>. В итоге получаем <math>n=mC(p)+H((1-p)^m)</math> и

<i class="formula"></i>k(m,p)=C(p)+\frac{H((1-p)^m)}{m}.\pe<i class="formula"></i>
:<math>k(m,p)=C(p)+\frac{H((1-p)^m)}{m}.\pe</math>

Заметим, что <math>k(1,p)=1</math> — когда блок имеет размер один бит,
Заметим, что <math>k(1,p)=1</math> — когда блок имеет размер один бит,
сообщение об ошибке в нём равносильно передаче самого бита.
сообщение об ошибке в нём равносильно передаче самого бита.


Если передавать эти сообщения по каналу с уровнем помех <i class="formula">p</i>, то
Если передавать эти сообщения по каналу с уровнем помех <i>p</i>, то
количество бит на одно сообщение равно <math>m k(m,p)/C(p)</math>, то есть
количество бит на одно сообщение равно <math>m k(m,p)/C(p)</math>, то есть
теоретическая оценка для количества лишних бит равна
теоретическая оценка для количества лишних бит равна

<i class="formula"></i>\frac{H((1-p)^m)}{C(p)}<i class="formula"></i>
:<math>\frac{H((1-p)^m)}{C(p)}</math>

Понятно, что данная теоретическая оценка занижена.
Понятно, что данная теоретическая оценка занижена.




===Коды Хемминга===
===Коды Хемминга===

Элементарный пример кода исправляющего ошибки был показан на
Элементарный пример кода исправляющего ошибки был показан на
странице&nbsp;\pageref{simplecode}. Его обобщение очевидно. Для
странице&nbsp;\pageref{simplecode}. Его обобщение очевидно. Для
Строка 632: Строка 652:
3</math>. Оказывается это число можно сделать сколь угодно близким к
3</math>. Оказывается это число можно сделать сколь угодно близким к
единице с помощью кодов Хемминга. В частности, при кодировании
единице с помощью кодов Хемминга. В частности, при кодировании
<i class="formula">11</i> бит получается слово длинной <i class="formula">15</i> бит, то есть
<i>11</i> бит получается слово длинной <i>15</i> бит, то есть
<math>\mbox{КПС}=\frac{11}{15}</math>.
<math>KPS=\frac{11}{15}</math>.


Оценим минимальное количество контрольных
Оценим минимальное количество контрольных
разрядов, необходимое для исправления одиночных ошибок. Пусть
разрядов, необходимое для исправления одиночных ошибок. Пусть
содержательная часть составляет <i class="formula">m</i> бит, и мы добавляем ещё <i class="formula">r</i>
содержательная часть составляет <i>m</i> бит, и мы добавляем ещё <i>r</i>
контрольных. Каждое из <math>2^m</math> правильных сообщений имеет <math>n=m+r</math>
контрольных. Каждое из <math>2^m</math> правильных сообщений имеет <math>n=m+r</math>
его неправильных вариантов с ошибкой в одном бите. Такими
его неправильных вариантов с ошибкой в одном бите. Такими
Строка 644: Строка 664:
слов <math>2^n</math>, то
слов <math>2^n</math>, то



<i class="formula"></i>
:<math>
\begin{array}{c}
\begin{array}{c}
(n+1)2^m \leqslant 2^n\\ (m+r+1)\leqslant 2^r.
(n+1)2^m \leqslant 2^n\\ (m+r+1)\leqslant 2^r.
\end{array}
\end{array}
</math>
<i class="formula"></i>



Этот теоретический предел достижим при использовании
Этот теоретический предел достижим при использовании
метода, предложенного Хеммингом. Идея его в следующем: все
метода, предложенного Хеммингом. Идея его в следующем: все
биты, номера которых есть степень <i class="formula">2</i>, — контрольные,
биты, номера которых есть степень <i>2</i>, — контрольные,
остальные — биты сообщения. Каждый контрольный бит
остальные — биты сообщения. Каждый контрольный бит
отвечает за чётность суммы некоторой группы бит. Один и тот
отвечает за чётность суммы некоторой группы бит. Один и тот
же бит может относиться к разным группам. Чтобы определить
же бит может относиться к разным группам. Чтобы определить
какие контрольные биты контролируют бит в позиции <i class="formula">k</i> надо
какие контрольные биты контролируют бит в позиции <i>k</i> надо
разложить <i class="formula">k</i> по степеням двойки: если <math>k=11=8+2+1</math>, то этот
разложить <i>k</i> по степеням двойки: если <math>k=11=8+2+1</math>, то этот
бит относится к трём группам — к группе, чья чётность
бит относится к трём группам — к группе, чья чётность
подсчитывается в 1-ом бите, к группе 2-ого и к группе 8-ого
подсчитывается в 1-ом бите, к группе 2-ого и к группе 8-ого
Строка 665: Строка 687:


:<math>
:<math>

\label{eq:hem}
\begin{array}{l}
\begin{array}{l}
b_1=b_3+b_5+b_7+\dots \\
b_1=b_3+b_5+b_7+\dots \\
Строка 672: Строка 694:
b_8=b_9+b_{10}+b_{11}+b_{12}+b_{13}+b_{14}+b_{15}\dots \\
b_8=b_9+b_{10}+b_{11}+b_{12}+b_{13}+b_{14}+b_{15}\dots \\
\end{array}
\end{array}
</math>
</math> <b>(eq:hem)</b>



Код Хемминга оптимален при <math>n=2^r-1</math> и <math>m=n-r</math>. В общем случае
Код Хемминга оптимален при <math>n=2^r-1</math> и <math>m=n-r</math>. В общем случае
<math>m=n-[\log_2(n+1)]</math>, где <math>[x]</math> — ближайшее целое число
<math>m=n-[\log_2(n+1)]</math>, где <math>[x]</math> — ближайшее целое число
<math>\leqslant x</math>. Код Хемминга мы будем обозначать <math>Hem(n,m)</math> (хотя
<math>\leqslant x</math>. Код Хемминга мы будем обозначать <math>Hem(n,m)</math> (хотя
<i class="formula">n</i> однозначно определяет <i class="formula">m</i>).
<i>n</i> однозначно определяет <i>m</i>).


Пример для <math>Hem(15,11)</math>:
Пример для <math>Hem(15,11)</math>:

<i class="formula"></i>\begin{array}{c}
:<math>\begin{array}{c}
\fbox{10110100111}\to
\fbox{10110100111}\to
\fbox{\fbox{0}\fbox{0}1\fbox{1}011\fbox{0}0100111}\\
\fbox{\fbox{0}\fbox{0}1\fbox{1}011\fbox{0}0100111}\\
Строка 692: Строка 716:
\lefteqn{b_9}\hphantom{010011}
\lefteqn{b_9}\hphantom{010011}
\lefteqn{b_{15}}\hphantom{1}
\lefteqn{b_{15}}\hphantom{1}
\end{array}<i class="formula"></i>
\end{array}</math>





Получив слово,
Получив слово,
получатель проверяет каждый контрольный бит на предмет
получатель проверяет каждый контрольный бит на предмет
правильности чётности и складывая номера контрольных бит, в
правильности чётности и складывая номера контрольных бит, в
которых нарушена чётность. Полученное число, есть <math>XOR</math> номеров
которых нарушена чётность. Полученное число, есть <i>XOR</i> номеров
бит, где произошла ошибка. Если ошибка одна, то это число есть
бит, где произошла ошибка. Если ошибка одна, то это число есть
просто номер ошибочного бита.
просто номер ошибочного бита.


Например, если в контрольных разрядах 1, 2, 8 обнаружено
Например, если в контрольных разрядах 1, 2, 8 обнаружено
несовпадение чётности, то ошибка в 11 разряде, так как
несовпадение чётности, то ошибка в 11 разряде, так как
только он связан одновременно с этими тремя контрольными
только он связан одновременно с этими тремя контрольными
Строка 716: Строка 741:


\begin{task}
\begin{task}
Покажите, что <math>\mbox{КПС}_{Hem(n,m)}\to 1</math> при <math>n\to
Покажите, что <math>KPS_{Hem(n,m)}\to 1</math> при <math>n\to
\infty</math>.
\infty</math>.
\end{task}
\end{task}
Строка 723: Строка 748:
Код Хемминга может исправлять только единичные ошибки. Однако,
Код Хемминга может исправлять только единичные ошибки. Однако,
есть приём, который позволяет распространить этот код на случай
есть приём, который позволяет распространить этот код на случай
групповых ошибок. Пусть нам надо передать <i class="formula">k</i> кодослов.
групповых ошибок. Пусть нам надо передать <i>k</i> кодослов.
Расположим их в виде матрицы одно слово — строка. Обычно,
Расположим их в виде матрицы одно слово — строка. Обычно,
передают слово за словом. Но мы поступим иначе, передадим слово
передают слово за словом. Но мы поступим иначе, передадим слово
длины <i class="formula">k</i>, из 1-ых разрядов всех слов, затем — вторых и т.д. По
длины <i>k</i>, из 1-ых разрядов всех слов, затем — вторых и т.д. По
приёме всех слов матрица восстанавливается. Если мы хотим
приёме всех слов матрица восстанавливается. Если мы хотим
обнаруживать групповые ошибки размера <i class="formula">k</i>, то в каждой строке
обнаруживать групповые ошибки размера <i>k</i>, то в каждой строке
восстановленной матрицы будет не более одной ошибки. А с
восстановленной матрицы будет не более одной ошибки. А с
одиночными ошибками код Хемминга справиться.
одиночными ошибками код Хемминга справиться.


===Анализ эффективности===
===Анализ эффективности===

Начнём c небольшого примера. Пусть у нас есть канал с уровнем
Начнём c небольшого примера. Пусть у нас есть канал с уровнем
ошибок <math>p=10^{-6}</math>. Если мы хотим исправлять единичные ошибки при
ошибок <math>p=10^{-6}</math>. Если мы хотим исправлять единичные ошибки при
передаче блоками по <math>1023=2^{10}-1</math> бит, то среди них потребуется
передаче блоками по <math>1023=2^{10}-1</math> бит, то среди них потребуется
<i class="formula">10</i> контрольных бит: <i class="formula">1</i>, <i class="formula">2</i>, \dots, <math>2^9</math>. На один блок
<i>10</i> контрольных бит: <i>1</i>, <i>2</i>, \dots, <math>2^9</math>. На один блок
приходится <i class="formula">1013</i> бит полезной информации. При передаче <i class="formula">1000</i>
приходится <i>1013</i> бит полезной информации. При передаче <i>1000</i>
таких блоков потребуется <math>\Delta=10\,000</math> контрольных бит.
таких блоков потребуется <math>\Delta=10\,000</math> контрольных бит.


В тоже время для обнаружения единичной ошибки достаточно одного
В тоже время для обнаружения единичной ошибки достаточно одного
бита чётности. И если мы применим технику повторной передачи, то
бита чётности. И если мы применим технику повторной передачи, то
на передачу <i class="formula">1000</i> блоков надо будет потратить <i class="formula">1000</i> бит
на передачу <i>1000</i> блоков надо будет потратить <i>1000</i> бит
дополнительно и примерно <math>0.001\approx
дополнительно и примерно <math>0.001\approx
p_{1014}=1-(1-10^{-6})^{1014}</math> из них придется пересылать
p_{1014}=1-(1-10^{-6})^{1014}</math> из них придется пересылать
повторно. То есть на <i class="formula">1000</i> блоков приходится один попорченый, и
повторно. То есть на <i>1000</i> блоков приходится один попорченый, и
дополнительная нагрузка линии составляет <math>\Delta\approx
дополнительная нагрузка линии составляет <math>\Delta\approx
1000+1001</math>, что меньше <math>10\,000</math>. Но это не значит, что код
1000+1001</math>, что меньше <math>10\,000</math>. Но это не значит, что код
Строка 753: Строка 777:


Рассмотрим этот вопрос подробнее. Пусть нам нужно передать
Рассмотрим этот вопрос подробнее. Пусть нам нужно передать
информацию <i class="formula">M</i> бит. Разобьем её на <i class="formula">L</i> блоков по <math>m=M/L</math> бит
информацию <i>M</i> бит. Разобьем её на <i>L</i> блоков по <math>m=M/L</math> бит
и будем передавать двумя способами
и будем передавать двумя способами
— с помощью кодов Хемминга и без них. При этом будем
— с помощью кодов Хемминга и без них. При этом будем
Строка 767: Строка 791:
блоками по <math>m'</math> бит с повторной пересылкой в случае
блоками по <math>m'</math> бит с повторной пересылкой в случае
обнаружения ошибки, то получим, что в среднем нам придётся
обнаружения ошибки, то получим, что в среднем нам придётся
переслать <i class="formula">D</i> бит:
переслать <i>D</i> бит:

<i class="formula"></i>D=L m'{1 \over 1-P_{r}}<i class="formula"></i>
:<math>D=L m'{1 \over 1-P_{r}}</math>

Где <math>P_{r}=(1-(1-p)^{m'})(1-\varepsilon)</math> — вероятность
Где <math>P_{r}=(1-(1-p)^{m'})(1-\varepsilon)</math> — вероятность
повторной передачи равная вероятности ошибки умноженной на
повторной передачи равная вероятности ошибки умноженной на
вероятность того, что мы её заметим. Коэффициент раздувания
вероятность того, что мы её заметим. Коэффициент раздувания
равен
равен

<i class="formula"></i>k(m,p,\varepsilon)=\frac{D}{M}=\frac{k_{\varepsilon}(m)}{\varepsilon+(1-\varepsilon)(1-p)^{k_{\varepsilon}(m)m}}<i class="formula"></i>
:<math>k(m,p,\varepsilon)=\frac{D}{M}=\frac{k_{\varepsilon}(m)}{\varepsilon+(1-\varepsilon)(1-p)^{k_{\varepsilon}(m)m}}</math>



2) '''С кодом Хемминга.'''\\ При кодировании методом
2) '''С кодом Хемминга.'''\\ При кодировании методом
Хемминга слова длины <math>m'</math> получается слово длины <i class="formula">n</i> бит:
Хемминга слова длины <math>m'</math> получается слово длины <i>n</i> бит:


:<math>
:<math>

\label{eq:hnm}
\begin{array}{c}
\begin{array}{c}
2^n=2^{m'}(n+1),\mbox{ то есть}\\
2^n=2^{m'}(n+1),\\
k_{\varepsilon}(m)m= n-\log_2(n+1)
k_{\varepsilon}(m)m= n-\log_2(n+1)
\end{array}
\end{array}
</math>
</math> <b>(eq:hnm)</b>



Для отдельного блока вероятность
Для отдельного блока вероятность
безошибочной передачи равна <math>{P_0=(1-p)^n}</math>. Вероятность
безошибочной передачи равна <math>{P_0=(1-p)^n}</math>. Вероятность
одинарной ошибки <math>{P_1=n p^1(1-p)^{n-1}}</math>. Вероятность того,
одинарной ошибки <math>{P_1=n p^1(1-p)^{n-1}}</math>. Вероятность того,
что произошло более чем одна ошибка, и мы это заметили
что произошло более чем одна ошибка, и мы это заметили

<i class="formula"></i>P_{r}={(1-P_0-P_1)}{(1-\varepsilon)}={1-\varepsilon-(1-\varepsilon)(1-p)^{n-1}(np+1-p)}<i class="formula"></i>
:<math>P_{r}={(1-P_0-P_1)}{(1-\varepsilon)}={1-\varepsilon-(1-\varepsilon)(1-p)^{n-1}(np+1-p)}</math>

— в этом случае требуется повторная передача кадра.
— в этом случае требуется повторная передача кадра.
Количество передаваемых данных:
Количество передаваемых данных:

<i class="formula"></i>D_{H}=L n{1 \over 1-P_{r}}={L n \over \varepsilon+(1-\varepsilon)(1-p)^{n-1}(np+1-p)}<i class="formula"></i>
:<math>D_{H}=L n{1 \over 1-P_{r}}={L n \over \varepsilon+(1-\varepsilon)(1-p)^{n-1}(np+1-p)}</math>
И коэффициент раздувания <i class="formula"></i>k_H(m,p,\varepsilon)={ n

\over m\bigl(\varepsilon+(1-\varepsilon)(1-p)^{n-1}(np+1-p)\bigr)},<i class="formula"></i>
И коэффициент раздувания
:<math>k_H(m,p,\varepsilon)={ n
\over m\bigl(\varepsilon+(1-\varepsilon)(1-p)^{n-1}(np+1-p)\bigr)},</math>

где <math>n(m)</math> неявно определённая с помощью (\ref{eq:hnm})
где <math>n(m)</math> неявно определённая с помощью (\ref{eq:hnm})
функция. Удобно записать соответствующие коэффициенты
функция. Удобно записать соответствующие коэффициенты
Строка 801: Строка 836:


:<math>
:<math>

\label{eq:kps}
\begin{array}{l}
\begin{array}{l}
\mbox{КПС}= \mbox{КПС}_{\varepsilon}\bigl(n\bigr)\bigl(\varepsilon+(1-\varepsilon)(1-p)^n\bigr)\\
KPS= KPS_{\varepsilon}\bigl(n\bigr)\bigl(\varepsilon+(1-\varepsilon)(1-p)^n\bigr)\\
\\[0.8mm]
\\[0.8mm]
\mbox{КПС}_H={\mbox{КПС}_{\varepsilon}\bigl(m'\bigr)\frac{m'}{n}\bigl(\varepsilon+(1-p)^{n-1}(np+1-p)(1-\varepsilon)\bigr)},
KPS_H={KPS_{\varepsilon}\bigl(m'\bigr)\frac{m'}{n}\bigl(\varepsilon+(1-p)^{n-1}(np+1-p)(1-\varepsilon)\bigr)},
\\[0.5mm] \mbox{ где }m'=n-\log_2{(n+1)}.
\\[0.5mm] m'=n-\log_2{(n+1) \end{array}
</math> <b>(eq:kps)</b>
\end{array}

</math>



Легко обнаружить что при <math>n>3444</math> и <math>p=10^{-6}</math> код Хемминга
Легко обнаружить что при <math>n>3444</math> и <math>p=10^{-6}</math> код Хемминга
оказывается эффективнее, то есть <math>\mbox{КПС}_H/\mbox{КПС}>1</math>
оказывается эффективнее, то есть <math>KPS_H/KPS>1</math>


\begin{center}
\begin{center}
\begin{figure}[h!]
\begin{figure}[h!]
\psfrag{knc}{кпс} \psfrag{n}{<i class="formula">n</i>}
\psfrag{knc}{кпс} \psfrag{n}{<i>n</i>}
\centering\includegraphics[clip=true,
\centering\includegraphics[clip=true,
width=0.48\textwidth]{pictures/kps.eps}
width=0.48\textwidth]{pictures/kps.eps}
\centering\includegraphics[clip=true,
\centering\includegraphics[clip=true,
width=0.48\textwidth]{pictures/kps2.eps} \caption{
width=0.48\textwidth]{pictures/kps2.eps} \caption{
<math>\mbox{КПС}(n,p,\varepsilon)</math> — Коэффициент полезного содержания
<math>KPS(n,p,\varepsilon)</math> — Коэффициент полезного содержания
в канале с помехами как функция размера элементарного блока.}
в канале с помехами как функция размера элементарного блока.}
\parbox{0.85\textwidth}{\small Светлый график — ''без кодирования Хемминга'';\\
\parbox{0.85\textwidth}{\small Светлый график — ''без кодирования Хемминга'';\\
Строка 830: Строка 866:
\begin{center}
\begin{center}
\begin{figure}[h!]
\begin{figure}[h!]
\psfrag{C}{<i class="formula">C</i>} \psfrag{p}{<i class="formula">p</i>}
\psfrag{C}{<i>C</i>} \psfrag{p}{<i>p</i>}
\centering\includegraphics[clip=true,
\centering\includegraphics[clip=true,
width=0.75\textwidth]{pictures/kpseff.eps}
width=0.75\textwidth]{pictures/kpseff.eps}
Строка 841: Строка 877:
\end{center}
\end{center}


Значение <math>\mbox{КПС}_{\varepsilon}(n)</math> используемое в
Значение <math>KPS_{\varepsilon}(n)</math> используемое в
формулах (\ref{eq:kps}) можно оценить как
формулах (\ref{eq:kps}) можно оценить как



<i class="formula"></i>\mbox{КПС}_{\varepsilon}(n)={\log_2{\left(1-\varepsilon(2^n-1)\right)} \over n}<i class="formula"></i>
:<math>KPS_{\varepsilon}(n)={\log_2{\left(1-\varepsilon(2^n-1)\right)} \over n}</math>



Напомним, что <math>\varepsilon</math> есть параметр желаемой
Напомним, что <math>\varepsilon</math> есть параметр желаемой
Строка 852: Строка 890:
ошибочной передачи блока при условии, что &laquo;контрольная сумма
ошибочной передачи блока при условии, что &laquo;контрольная сумма
сошлась&raquo; и кадр засчитан правильно переданным.
сошлась&raquo; и кадр засчитан правильно переданным.
Такое выражение для <math>\mbox{КПС}_{\varepsilon}(p,n)=\frac{m}{n}</math>
Такое выражение для <math>KPS_{\varepsilon}(p,n)=\frac{m}{n}</math>
получается из формулы
получается из формулы



<i class="formula"></i>\varepsilon=\frac{2^m-1}{2^n-1}<i class="formula"></i>
:<math>\varepsilon=\frac{2^m-1}{2^n-1}</math>



Но это безусловно лишь оценочная формула. Оптимальное
Но это безусловно лишь оценочная формула. Оптимальное
значение <math>\mbox{КПС}_{\varepsilon}</math> значительно сложнее и
значение <math>KPS_{\varepsilon}</math> значительно сложнее и
зависит от <i class="formula">p</i>.
зависит от <i>p</i>.


Из графика на рисунке&nbsp;\ref{fig:kps} хорошо видно, что при
Из графика на рисунке&nbsp;\ref{fig:kps} хорошо видно, что при
больших <i class="formula">n</i> код Хемминга начинает работать на пользу.
больших <i>n</i> код Хемминга начинает работать на пользу.


Но зависимость КПС от <i class="formula">n</i> не есть критерий эффективности
Но зависимость КПС от <i>n</i> не есть критерий эффективности
кода. Эффективность кода определяется функцией
кода. Эффективность кода определяется функцией

<i class="formula"></i>C(p,\varepsilon)=\min_{n}{\mbox{KПС}(p,n,\varepsilon)}<i class="formula"></i>
:<math>C(p,\varepsilon)=\min_{n}{KPS(p,n,\varepsilon)}</math>



На рисунке&nbsp;\ref{fig:kpseff} показан график этой функции и из
На рисунке&nbsp;\ref{fig:kpseff} показан график этой функции и из
него ясно, что код Хемминга можно использовать с пользой
него ясно, что код Хемминга можно использовать с пользой
всегда — при любых <math>\varepsilon</math> и <i class="formula">p</i>, если у нас есть
всегда — при любых <math>\varepsilon</math> и <i>p</i>, если у нас есть
возможность выбирать подходящее <i class="formula">n</i>.
возможность выбирать подходящее <i>n</i>.


===Коды как линейные операторы===
===Коды как линейные операторы===

То, что на множестве {0,1} есть структура числового поля,
То, что на множестве {0,1} есть структура числового поля,
позволяет осуществлять алгебраические интерпретации кодирования.
позволяет осуществлять алгебраические интерпретации кодирования.
Строка 890: Строка 931:
(слова мы будем воспринимать как столбцы).
(слова мы будем воспринимать как столбцы).



<i class="formula"></i>
:<math>
\mathbf{A}_{Hem(7,4)}=\begin{array}{||cccc||}
\mathbf{A}_{Hem(7,4)}=\begin{array}{||cccc||}
1&1&0&1\\ 1&0&1&1\\ 1&0&0&0\\ 0&1&1&1\\ 0&1&0&1\\ 0&0&1&0\\
1&1&0&1\\ 1&0&1&1\\ 1&0&0&0\\ 0&1&1&1\\ 0&1&0&1\\ 0&0&1&0\\
0&0&0&1
0&0&0&1
\end{array}<i class="formula"></i>
\end{array}</math>



Процесс выявления ошибок тоже линейная операция, она
Процесс выявления ошибок тоже линейная операция, она
Строка 901: Строка 944:
<math>\mathbf{s}=\overline{s_1s_2s_3}=\mathbf{H}\mathbf{w'}_{out}</math> в
<math>\mathbf{s}=\overline{s_1s_2s_3}=\mathbf{H}\mathbf{w'}_{out}</math> в
случае правильной передачи должно быть равно 000. Значение
случае правильной передачи должно быть равно 000. Значение
<math>\mathbf{s}</math> называется ''синдромом ошибки''. <i class="formula">i</i>-ый разряд
<math>\mathbf{s}</math> называется ''синдромом ошибки''. <i>i</i>-ый разряд
слова <math>\mathbf{s}</math> контролирует <i class="formula">i</i>-ое соотношение в
слова <math>\mathbf{s}</math> контролирует <i>i</i>-ое соотношение в
(\ref{eq:hem}) и, таким образом, <math>\mathbf{s}</math> равно сумме номеров
(\ref{eq:hem}) и, таким образом, <math>\mathbf{s}</math> равно сумме номеров
бит в которых произошла ошибка, как векторов в <math>G\mathbb{F}(2)^3</math>.
бит в которых произошла ошибка, как векторов в <math>G\mathbb{F}(2)^3</math>.



<i class="formula"></i>\mathbf{H}_{Hem(7,4)}=\begin{array}{||ccccccc||}
:<math>\mathbf{H}_{Hem(7,4)}=\begin{array}{||ccccccc||}
1&0&1&0&1&0&1\\ 0&1&1&0&0&1&1\\0&0&0&1&1&1&1
1&0&1&0&1&0&1\\ 0&1&1&0&0&1&1\\0&0&0&1&1&1&1
\end{array}<i class="formula"></i>
\end{array}</math>

Заметим, что столбцы проверочной матрицы представляют собой
Заметим, что столбцы проверочной матрицы представляют собой
последовательно записанные в двоичной форме натуральные
последовательно записанные в двоичной форме натуральные
Строка 915: Строка 960:
Вычиcление рабочей матрицы для циклических кодов
Вычиcление рабочей матрицы для циклических кодов
основывается на значениях <math>G_n(x)=x^n\; mod\; G(x)</math>. Верхняя
основывается на значениях <math>G_n(x)=x^n\; mod\; G(x)</math>. Верхняя
её часть равна единичной, так <i class="formula">m</i> бит сообщения помещаются
её часть равна единичной, так <i>m</i> бит сообщения помещаются
без изменения в начало слова, а нижние <i class="formula">r</i> строчек есть <i class="formula">m</i>
без изменения в начало слова, а нижние <i>r</i> строчек есть <i>m</i>
столбцов высоты <i class="formula">r</i> состоящие из коэффициентов многочленов
столбцов высоты <i>r</i> состоящие из коэффициентов многочленов
<math>G_n</math>, <math>G_{n-1}</math>,
<math>G_n</math>, <math>G_{n-1}</math>,
\dots, <math>G_{n-r}</math>. Например, для <math>G(x)=x^3+x+1</math> и <math>m=4</math> имеем
\dots, <math>G_{n-r}</math>. Например, для <math>G(x)=x^3+x+1</math> и <math>m=4</math> имеем
<math>r=3</math>, <math>n=7</math> и
<math>r=3</math>, <math>n=7</math> и

<i class="formula"></i>
:<math>
\begin{array}{|c|c|c|c|c|c|c|c|}
\begin{array}{|c|c|c|c|c|c|c|c|}
G_0&G_1&G_2&G_3&G_4&G_5&G_6&G_7\\
G_0&G_1&G_2&G_3&G_4&G_5&G_6&G_7\\
Строка 929: Строка 975:
001&010&100&011&110&111&101&001
001&010&100&011&110&111&101&001
\end{array}
\end{array}
</math>
<i class="formula"></i>

Рабочая и проверочная матрицы равны
Рабочая и проверочная матрицы равны

<i class="formula"></i>\mathbf{A}=\left\|\begin{array}{c} E_4\\G_6
:<math>\mathbf{A}=\left\|\begin{array}{c} E_4\\G_6
G_5 G_4 G_3
G_5 G_4 G_3
\end{array}\right\| \mbox{ и } \mathbf{H}=\|G_6G_5G_4G_3E_3\|,<i class="formula"></i> то есть
\end{array}\right\| , \quad \mathbf{H}=\|G_6G_5G_4G_3E_3\|,</math>
то есть

<i class="formula"></i>
:<math>
\mathbf{A}=\begin{array}{||cccc||}
\mathbf{A}=\begin{array}{||cccc||}
1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1\\ 1&1&1&0\\
1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1\\ 1&1&1&0\\
Строка 943: Строка 993:
1&1&1&0&1&0&0\\ 0&1&1&1&0&1&0\\1&1&0&1&0&0&1
1&1&1&0&1&0&0\\ 0&1&1&1&0&1&0\\1&1&0&1&0&0&1
\end{array}.
\end{array}.
</math>
<i class="formula"></i>



Кроме рабочей и проверочной матриц есть ещё множество ''порождающих матриц <math>\mathbf{G}</math>'' и ''декодирующих матриц
Кроме рабочей и проверочной матриц есть ещё множество ''порождающих матриц <math>\mathbf{G}</math>'' и ''декодирующих матриц
Строка 952: Строка 1003:
порождающей. В частности, рабочая матрица является порождающей.
порождающей. В частности, рабочая матрица является порождающей.
Способность обнаруживать и исправлять ошибки однозначно
Способность обнаруживать и исправлять ошибки однозначно
определяется подпространством <i class="formula">L</i>. Порождающих, рабочих и
определяется подпространством <i>L</i>. Порождающих, рабочих и
проверочных матриц соответствующих <i class="formula">L</i> несколько.
проверочных матриц соответствующих <i>L</i> несколько.


Действительно, в порождающей и рабочей матрицах можно осуществлять
Действительно, в порождающей и рабочей матрицах можно осуществлять
Строка 960: Строка 1011:
всегда удовлетворяют отношениям
всегда удовлетворяют отношениям



<i class="formula"></i>\mathbf{H}\cdot \mathbf{A}=\mathbf{0}_{rm},\;
\mathbf{H}\cdot \mathbf{G}=\mathbf{0}_{rm},<i class="formula"></i> где
:<math>\mathbf{H}\cdot \mathbf{A}=\mathbf{0}_{rm},\;
\mathbf{H}\cdot \mathbf{G}=\mathbf{0}_{rm},</math>
где
<math>\mathbf{0}_{rm}</math> — нулевая матрица <math>r\times m</math>.\\ Любая
<math>\mathbf{0}_{rm}</math> — нулевая матрица <math>r\times m</math>.\\ Любая
порождающая матрица может использоваться как
порождающая матрица может использоваться как
Строка 971: Строка 1024:
матриц определяется рабочей матрицей:
матриц определяется рабочей матрицей:



<i class="formula"></i>\mathbf{D}\cdot \mathbf{A}=\mathbf{E}_m,<i class="formula"></i>
:<math>\mathbf{D}\cdot \mathbf{A}=\mathbf{E}_m,</math>

где <math>\mathbf{E}_m</math> — единичная матрица <math>m\times m</math>. На
где <math>\mathbf{E}_m</math> — единичная матрица <math>m\times m</math>. На
подпространстве <i class="formula">L</i> все декодирующие матрицы действуют одинаково.
подпространстве <i>L</i> все декодирующие матрицы действуют одинаково.
Они отличаются на подпространстве ортогональном <i class="formula">L</i>. Приведём
Они отличаются на подпространстве ортогональном <i>L</i>. Приведём
декодирующую матрицу для <math>Hem(7,4)</math> и <math>CRC_{n=7,\;m=7}</math>:
декодирующую матрицу для <math>Hem(7,4)</math> и <math>CRC_{n=7,\;m=7}</math>:

<i class="formula"></i>
:<math>
\mathbf{D}_{H_{7,4}}=\begin{array}{||ccccccc||} 0&0&1&0&0&0&0\\
\mathbf{D}_{H_{7,4}}=\begin{array}{||ccccccc||} 0&0&1&0&0&0&0\\
0&0&0&0&1&0&0\\0&0&0&0&0&1&0\\0&0&0&0&0&0&1
0&0&0&0&1&0&0\\0&0&0&0&0&1&0\\0&0&0&0&0&0&1
Строка 984: Строка 1040:
0&1&0&0&0&0&0\\0&0&1&0&0&0&0\\0&0&0&1&0&0&0
0&1&0&0&0&0&0\\0&0&1&0&0&0&0\\0&0&0&1&0&0&0
\end{array}.
\end{array}.
</math>
<i class="formula"></i>

К каждой строчке декодирующей матрицы можно добавить любую
К каждой строчке декодирующей матрицы можно добавить любую
линейную комбинацию строчек из проверочной матрицы. Следует
линейную комбинацию строчек из проверочной матрицы. Следует
Строка 992: Строка 1049:
Сформулируем теперь основные моменты, касающиеся линейных кодов.
Сформулируем теперь основные моменты, касающиеся линейных кодов.


# Процесс кодирования и декодирования — линейные операторы.\\
# Процесс кодирования и декодирования — линейные операторы. :<math>\mathbf{w}_{out}=\mathbf{A}\mathbf{w}_{in},\; \; channel:\mathbf{w}_{out}\mapsto \mathbf{w}'_{out},\;\; \mathbf{w}'_{in}=\mathbf{D}\mathbf{w}'_{out}</math>
# Обнаружение ошибок равносильно проверке принадлежности полученного слова подпространству <i>L</i> допустимых слов. Для этого необходимо найти проекцию <math>\mathbf{s}</math> (синдром ошибки) полученного слова на <math>L^{\perp}</math> — тоже линейная операция. Для правильно переданного слова&nbsp;<math>\mathbf{s}=\mathbf{0}</math>. :<math>\mathbf{s}=\mathbf{H}\mathbf{w}'_{out}</math>
<i class="formula"></i>\mathbf{w}_{out}=\mathbf{A}\mathbf{w}_{in},\; \; \mbox{канал}:\mathbf{w}_{out}\mapsto \mathbf{w}'_{out},\;\; \mathbf{w}'_{in}=\mathbf{D}\mathbf{w}'_{out}<i class="formula"></i>
# В случае, когда векторы подпространства <i>L</i> достаточно удалены друг от друга в смысле метрики Хемминга, есть возможность обнаруживать и исправлять некоторые ошибки. В частности, значение синдрома ошибки в случае кода Хемминга равно векторной сумме номеров бит, где произошла ошибка.
# Обнаружение ошибок равносильно проверке принадлежности
# Комбинация (композиция) линейных кодов есть снова линейный код.
полученного слова подпространству <i class="formula">L</i> допустимых слов. Для этого
необходимо найти проекцию <math>\mathbf{s}</math> (синдром ошибки)
полученного слова на <math>L^{\perp}</math> — тоже линейная операция. Для
правильно переданного слова&nbsp;<math>\mathbf{s}=\mathbf{0}</math>.
<i class="formula"></i>\mathbf{s}=\mathbf{H}\mathbf{w}'_{out}<i class="formula"></i>
# В случае, когда векторы подпространства <i class="formula">L</i> достаточно удалены друг от друга
в смысле метрики Хемминга, есть возможность обнаруживать и
исправлять некоторые ошибки. В частности, значение синдрома ошибки
в случае кода Хемминга равно векторной сумме номеров бит, где
произошла ошибка.
# Комбинация (композиция) линейных кодов есть снова
линейный код.



Практические методы помехоустойчивого кодирования все основаны на
Практические методы помехоустойчивого кодирования все основаны на
линейных кодах. В основном это модифицированные <math>CRC</math>, коды
линейных кодах. В основном это модифицированные <i>CRC</i>, коды
Хемминга и их композиции. Например <math>Hem(7,4)</math> плюс проверка на
Хемминга и их композиции. Например <math>Hem(7,4)</math> плюс проверка на
чётность. Такой код может исправлять уже две ошибки. Построение
чётность. Такой код может исправлять уже две ошибки. Построение
Строка 1024: Строка 1069:
Для данной проверочной матрицы постройте рабочую и декодирующую
Для данной проверочной матрицы постройте рабочую и декодирующую
матрицу. Докажите, что кодовое расстояние равно 4.
матрицу. Докажите, что кодовое расстояние равно 4.

<i class="formula"></i>\mathbf{H}=\begin{array}{||cccccccc||}
:<math>\mathbf{H}=\begin{array}{||cccccccc||}
1&0&1&0&1&0&1&0\\
1&0&1&0&1&0&1&0\\
0&1&1&0&0&1&1&0\\0&0&0&1&1&1&1&0\\1&1&1&1&1&1&1&1
0&1&1&0&0&1&1&0\\0&0&0&1&1&1&1&0\\1&1&1&1&1&1&1&1
\end{array}<i class="formula"></i>
\end{array}</math>

''Подсказка ''\\
''Подсказка ''\\
1) Это проверочная матрица <math>Hem(7,4)</math> плюс условие на чётность
1) Это проверочная матрица <math>Hem(7,4)</math> плюс условие на чётность
Строка 1040: Строка 1087:
кода с <math>G(x)=x^{3}+x+1</math> и <math>m=4</math> при условии, что в качестве
кода с <math>G(x)=x^{3}+x+1</math> и <math>m=4</math> при условии, что в качестве
рабочей матрицы использовалась матрица
рабочей матрицы использовалась матрица

<i class="formula"></i>\mathbf{A}=
:<math>\mathbf{A}=
\begin{array}{||cccc||}
\begin{array}{||cccc||}
0&0&0&1\\0&0&1&0\\0&1&0&1\\1&0&1&1\\0&1&1&0\\1&1&0&0\\1&0&0&0
0&0&0&1\\0&0&1&0\\0&1&0&1\\1&0&1&1\\0&1&1&0\\1&1&0&0\\1&0&0&0
\end{array}.<i class="formula"></i>
\end{array}.</math>


\end{task}
\end{task}


===*Коды Рида-Соломона===
===*Коды Рида-Соломона===

После перехода на язык линейной алгебры естественно возникает
После перехода на язык линейной алгебры естественно возникает
желание изучить свойства линейных кодов над другими конечными
желание изучить свойства линейных кодов над другими конечными
Строка 1053: Строка 1102:
Рида-Соломона.
Рида-Соломона.


{{info|Коды Рида-Соломона являются циклическими кодами над числовым полем отличным от <math>G\mathbb{F}(2)</math>.}}
{\slshape Коды Рида-Соломона являются циклическими кодами над
числовым полем отличным от <math>G\mathbb{F}(2)</math>.}


Напомним, что существует бесконечное количество конечных полей, и
Напомним, что существует бесконечное количество конечных полей, и
Строка 1061: Строка 1111:
таким числом элементов, которое обозначается как
таким числом элементов, которое обозначается как
<math>G\mathbb{F}(n)</math>. Простейшая реализация этого поля — множество
<math>G\mathbb{F}(n)</math>. Простейшая реализация этого поля — множество
многочленов по модулю неприводимого{{ref|note3}} многочлена <math>p(x)</math> степени <i class="formula">k</i> над
многочленов по модулю неприводимого{{ref|note3}} многочлена <math>p(x)</math> степени <i>k</i> над
полем <math>\mathbb{F}_{q}</math> вычетов по модулю&nbsp;<i class="formula">q</i>. В случае
полем <math>\mathbb{F}_{q}</math> вычетов по модулю&nbsp;<i>q</i>. В случае
многочленов с действительными коэффициентами неприводимыми
многочленов с действительными коэффициентами неприводимыми
многочленами являются только квадратные многочлены с
многочленами являются только квадратные многочлены с
Строка 1073: Строка 1123:


==Примеры протоколов канала данных==
==Примеры протоколов канала данных==
===<i>HDLC</i> протокол===

===<math>HDLC</math> протокол===
Здесь мы познакомимся с группой протоколов давно известных, но
Здесь мы познакомимся с группой протоколов давно известных, но
по-прежнему широко используемых. Все они имеют одного
по-прежнему широко используемых. Все они имеют одного
предшественника – <math>SDLC</math> (Synchronous Data Link Control) –
предшественника – <i>SDLC</i> (Synchronous Data Link Control) –
протокол управления синхронным каналом, предложенным фирмой <math>IBM</math>
протокол управления синхронным каналом, предложенным фирмой <i>IBM</i>
в рамках <math>SNA</math>. <math>ISO</math> модифицировала этот протокол и выпустила
в рамках <i>SNA</i>. <i>ISO</i> модифицировала этот протокол и выпустила
под названием <math>HDLC</math> — High level Data Link Control. <math>MKTT</math>
под названием <i>HDLC</i> — High level Data Link Control. <i>MKTT</i>
модифицировала <math>HDLC</math> для X.25 и выпустила под именем <math>LAP</math> –
модифицировала <i>HDLC</i> для X.25 и выпустила под именем <i>LAP</i> –
Link Access Procedure. Позднее он был модифицирован в <math>LAPB</math>.
Link Access Procedure. Позднее он был модифицирован в <i>LAPB</i>.


Все эти протоколы построены на одних и тех же принципах. Все
Все эти протоколы построены на одних и тех же принципах. Все
Строка 1103: Строка 1152:




* Поле <math>Control</math> используется для последовательных номеров
* Поле <i>Control</i> используется для последовательных номеров кадров, подтверждений и других нужд.
* Поле <i>Data</i> может быть сколь угодно большим и используется для передачи данных. Надо только иметь ввиду, что чем оно длиннее тем, больше вероятность повреждения кадра на линии.
кадров, подтверждений и других нужд.
* Поле <i>Checksum</i> — это поле используется <i>CRC</i> кодом.
* Поле <math>Data</math> может быть сколь угодно большим и используется
для передачи данных. Надо только иметь ввиду, что чем оно
длиннее тем, больше вероятность повреждения кадра на линии.
* Поле <math>Checksum</math> — это поле используется <math>CRC</math> кодом.


Флаговые последовательности <i class="formula">01111110</i> используются для
Флаговые последовательности <i>01111110</i> используются для
разделения кадров и постоянно передаются по незанятой линии
разделения кадров и постоянно передаются по незанятой линии
в ожидании кадра. Существуют три вида кадров: <math>Information</math>,
в ожидании кадра. Существуют три вида кадров: <math>Information</math>,
<math>Supervisory</math>, <math>Unnumbered</math>.
<math>Supervisory</math>, <i>Unnumbered</i>.


Организация поля <math>Control</math> для этих трех видов кадров показана на
Организация поля <i>Control</i> для этих трех видов кадров показана на
рис.&nbsp;\ref{fig:cfield}. Как видно из размера поля <math>Seq</math> в окне
рис.&nbsp;\ref{fig:cfield}. Как видно из размера поля <i>Seq</i> в окне
отправителя может быть до <i class="formula">7</i> неподтверждённых кадров. Поле
отправителя может быть до <i>7</i> неподтверждённых кадров. Поле
<math>Next</math> используется для посылки подтверждения вместе с
<i>Next</i> используется для посылки подтверждения вместе с
передаваемым кадром. Подтверждение может быть в форме номера
передаваемым кадром. Подтверждение может быть в форме номера
последнего правильно переданного кадра, а может быть в форме
последнего правильно переданного кадра, а может быть в форме
первого не переданного кадра. Какой вариант будет использован —
первого не переданного кадра. Какой вариант будет использован —
это параметр.
это параметр.

\begin{center}
\begin{center}
\begin{figure}[h!]
\begin{figure}[h!]
\centering\includegraphics[clip=true,
\centering\includegraphics[clip=true,
width=0.88\textwidth]{pictures/cfield.eps} \caption{Cтруктура поля <math>Control</math>}
width=0.88\textwidth]{pictures/cfield.eps} \caption{Cтруктура поля
<i>Control</i>}
\parbox{0.66\textwidth}{\small (а) Информационный кадр (<math>Information</math>)\\
\parbox{0.66\textwidth}{\small (а) Информационный кадр (<math>Information</math>)\\
(б) Управляющий кадр (<math>Supervisory</math>)\\(в) Ненумерованный
(б) Управляющий кадр (<math>Supervisory</math>)\\(в) Ненумерованный
кадр (<math>Unnumbered</math>) }
кадр (<i>Unnumbered</i>) }
\label{fig:cfield}
\label{fig:cfield}
\end{figure}
\end{figure}
Строка 1138: Строка 1184:
Разряд <math>P/F</math> использует при работе с группой терминалов.
Разряд <math>P/F</math> использует при работе с группой терминалов.
Когда компьютер приглашает терминал к передаче он
Когда компьютер приглашает терминал к передаче он
устанавливает этот разряд в <i class="formula">P</i>. Все кадры, посылаемые
устанавливает этот разряд в <i>P</i>. Все кадры, посылаемые
терминалами имеют здесь <i class="formula">P</i>. Если это последний кадр,
терминалами имеют здесь <i>P</i>. Если это последний кадр,
посылаемый терминалом, то здесь стоит <i class="formula">F</i>.
посылаемый терминалом, то здесь стоит <i>F</i>.


<math>Supervisory</math> кадры имеют четыре типа кадров.
<math>Supervisory</math> кадры имеют четыре типа кадров.




* Тип 0 — уведомление в ожидании следующего кадра (RECEIVE
* Тип 0 — уведомление в ожидании следующего кадра (RECEIVE READY). Используется когда нет встречного трафика, чтобы передать уведомление в кадре с данными.
* Тип 1 — негативное уведомление (REJECT) — указывает на ошибку при передаче. Поле <i>Next</i> указывает номер кадра, начиная с которого надо перепослать кадры.
READY). Используется когда нет встречного трафика, чтобы
* Тип 2 — RECEIVE NOT READY. Подтверждает все кадры, кроме указанного в Next. Используется, чтобы сообщить источнику кадров об необходимости приостановить передачу в силу каких-то проблем у получателя. После устранения этих проблем получатель шлет RECEIVE REDAY, REJECT или другой надлежащий управляющий кадр.
передать уведомление в кадре с данными.
* Тип 3 — SELECTIVE REJECT — указывает на необходимость перепослать только кадр, указанный в Next. <i>LAPB</i> и <i>SDLC</i> не используют этого типа кадров.
* Тип 1 — негативное уведомление (REJECT) — указывает
на ошибку при передаче. Поле <math>Next</math> указывает номер кадра,
начиная с которого надо перепослать кадры.
* Тип 2 — RECEIVE NOT READY. Подтверждает все кадры,
кроме указанного в Next. Используется, чтобы сообщить
источнику кадров об необходимости приостановить передачу в силу каких-то проблем
у получателя. После устранения этих проблем получатель шлет RECEIVE REDAY, REJECT или другой надлежащий управляющий кадр.
* Тип 3 — SELECTIVE REJECT — указывает на необходимость
перепослать только кадр, указанный в Next. <math>LAPB</math> и <math>SDLC</math>
не используют этого типа кадров.


Третий класс кадров — <i>Unnubered</i>. Кадры этого класса иногда

Третий класс кадров — <math>Unnubered</math>. Кадры этого класса иногда
используются для целей управления, но чаще для передачи данных
используются для целей управления, но чаще для передачи данных
при ненадёжной передаче без соединения.
при ненадёжной передаче без соединения.
Строка 1170: Строка 1206:
повреждение управляющего кадра.
повреждение управляющего кадра.


# {{note|note1}} Идея рассмотрения информации как меры на множестве ещё не до конца исчерпала себя — такой меры ещё не построено. Однако доказано, что с помощью этой аналогии можно доказывать неравенства, например <math>{I(\{\xi_{in}\,\xi_{out}\})\geqslant 0}</math>.

# {{note|note2}} Матрица называется ''стохастической'', если все её элементы неотрицательны и сумма элементов в каждом столбце равна единице.
# {{note|note1}} Идея рассмотрения информации как меры на множестве
# {{note|note3}} Многочлен называется ''неприводимым'', если он не разлагается в произведение многочленов меньшей степени.
ещё не до конца исчерпала себя
— такой меры ещё не построено. Однако доказано, что с помощью
этой аналогии можно доказывать неравенства, например
<math>{I(\{\xi_{in}\,\xi_{out}\})\geqslant 0}</math>.
# {{note|note2}} Матрица называется
''стохастической'', если все её элементы неотрицательны и
сумма элементов в каждом столбце равна единице.
# {{note|note3}} Многочлен называется
''неприводимым'', если он не разлагается в произведение
многочленов меньшей степени.

Версия от 14:05, 5 сентября 2006

Аннотация

Здесь мы рассмотрим основные принципы и методы надёжной и эффективной передачи данных между двумя машинами, соединёнными проводом. Под проводом следует понимать любую физическую среду передачи данных. Посредством этой физической среды

нужно научиться передавать биты так, чтобы они безошибочно

принимались получателем точно в той последовательности, в какой они были переданы.

Канальный уровень

На уровне канала данных решается ряд проблем, присущих

только этому уровню:

  • реализация сервиса для сетевого уровня,
  • объединение битов, поступающих с физического уровня в кадры,
  • обработка ошибок передачи, управление потоком кадров.

Основная задача канального уровня — обеспечить сервис сетевому уровню, а это значит помочь передать данные с сетевого уровня одной машины на сетевой уровень другой машины.

Разбиение на кадры

Сервис, создаваемый канальным уровнем для сетевого, опирается на сервис, создаваемый физическим уровнем. На физическом уровне протекают потоки битов. Значение посланного бита не обязательно равно принятому, и количество посланных битов не обязательно равно количеству принятых. Всё это требует специальных усилий на канальном уровне по обнаружению и исправлению ошибок.

Типовой подход к решению этой проблемы — разбиение потока битов на кадры и подсчёт контрольной суммы для каждого кадра при посылке данных.

Контрольная сумма - это, в общем смысле, функция от содержательной части кадра (слова длины ), область значений которой - слова фиксированной длины .

Эти r бит добавляются обычно в конец кадра. При приёме контрольная сумма вычисляется заново и сравнивается с той, что храниться в кадре. Если они различаются, то это признак ошибки передачи. Канальный уровень должен принять меры к исправлению ошибки, например, сбросить плохой кадр, послать сообщение об ошибке тому кто прислал этот кадр. Разбиение потока битов на кадры — задача не простая. Один из способов — делать временную паузу между битами разных кадров. Однако, в сети, где нет единого таймера, нет гарантии, что эта пауза сохраниться или, наоборот, не появятся новые. Так как временные методы ненадёжны, то применяются другие. Здесь мы рассмотрим три основных:

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

Первый метод очевиден. В начале каждого кадра указывается сколько символов в кадре. При приёме число принятых символов подсчитывается опять. Однако, этот метод имеет существенный недостаток — счётчик символов может быть искажён при передаче. Тогда принимающая сторона не сможет обнаружить границы кадра. Даже обнаружив не совпадение контрольных сумм, принимающая сторона не сможет сообщить передающей какой кадр надо переслать, сколько символов пропало. Этот метод ныне используется редко.

Второй метод построен на вставке специальных символов. Обычно для этого используют управляющие последовательности: последовательность для начала кадра и для конца кадра. — Data Link Escape; — Start TeXt, — End TeXt. При этом методе если даже была потеряна граница текущего кадра, надо просто искать ближайшую последовательность или . Но нужно избегать появления этих комбинаций внутри самого тела кадра. Это осуществляется дублированием комбинаций , встречающихся внутри тела кадра, и удаление дублей после получения кадра. Недостатком этого метода является зависимость от кодировки (кодозависимость).

По мере развития сетей эта связь становилась все более и более

обременительной и был предложен новый очевидный кодонезависимый метод — управляющие последовательности должны быть бит-ориентированными. В частности, в протоколе каждый кадр начинается и заканчивается со специального флаг-байта: 01111110. Посылающая сторона, встретив последовательно 5 единиц внутри тела кадра, обязательно вставит 0. Принимающая сторона, приняв 5 последовательных единиц обязательно удалит следующий за ними 0, если таковой будет. Это называется bit-stuffing. Если принято шесть и за ними следует ноль, то это управляющий сигнал: начало или конец кадра, а в случае, когда подряд идут более шести единиц, — сигнал ожидания или аварийного завершения.


 (а) 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1
 (б) 0 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1
 Bit Stuffing. (a) исходные данные (б) посылаемые данные. Жирным отмечены вставленные нули.


Таким образом, кадр легко может быть распознан по флаг-байту. Если граница очередного кадра по какой-то причине была потеряна, то все что надо делать — ловить ближайший флаг-байт.

И наконец, последний метод используется там, где конкретизирована физическая среда. Например, в случае проводной связи для передачи одного бита используется два импульса. 1 кодируется как переход высокое-низкое, 0 — как низкое-высокое. Сочетания низкое-низкое или высокое-высокое не используются для передачи данных, и их используют для границ кадра.

На практике используют, как правило, комбинацию этих методов. Например, счётчик символов с флаг-байтами. Тогда, если число символов в кадре соответствует кодировке границы кадра, кадр считается переданным правильно.

Контроль ошибок

Решив проблему разбиения на кадры, мы приходим к следующей проблеме: как обеспечить, чтобы кадры, пройдя по физическому каналу с помехами, попадали на сетевой уровень по назначению, в надлежащей последовательности и в надлежащем виде?

Частичное решение этой проблемы осуществляется посредством введения обратной связи между отправителем и получателем в виде кадра подтверждения, а также специального кодирования, позволяющего обнаруживать или даже исправлять ошибки передачи конкретного кадра.

Если кадр-подтверждение несет положительную информацию, то считается что переданные кадры прошли нормально, если там сообщение об ошибке, то переданные кадры надо передать заново.

Однако, возможны случаи когда из-за ошибок в канале кадр исчезнет целиком. В этом случае получатель не будет реагировать никак, а отправитель будет сколь угодно долго ждать подтверждения. Для решения этой проблемы на канальном уровне вводят таймеры. Когда передаётся очередной кадр, то одновременно устанавливается таймер на определённое время. Этого времени должно хватать на то, чтобы получатель получил кадр, а отправитель получил подтверждение. Если отправитель не получит подтверждение раньше, чем истечёт время, установленное на таймере то он будет считать, что кадр потерян и повторит его еще раз.

Однако, если кадр-подтверждение был утерян, то вполне возможно, что один и тот же кадр получатель получит дважды. Как быть? Для решения этой проблемы каждому кадру присваивают порядковый номер. С помощью этого номера получатель может обнаружить дубли.

{\slshape Итак, таймеры, нумерация кадров, флаг-байты, кодирование и обратная связь — вот основные средства на канальном уровне, обеспечивающие надёжную доставку каждого кадра до сетевого уровня в единственном экземпляре. Но и с помощью этих средств невозможно достигнуть стопроцентной надёжности передачи.}

Управление потоком

Другая важная проблема, которая решается на канальном уровне — управление потоком. Вполне может случиться, что отправитель будет слать кадры столь часто, что получатель не будет успевать их обрабатывать(например, если машина-отправитель более мощная или загружена слабее, чем машина-получатель). Для борьбы с такими ситуациями вводят управления потоком. Это управление предполагает обратную связь между отправителем и получателем, которая позволяет им урегулировать такие ситуации. Есть много схем управления потоком и все они в основе своей имеют следующий сценарий: прежде, чем отправитель начнёт передачу, он спрашивает у получателя сколько кадров тот может принять. Получатель сообщает ему определённое число кадров. Отправитель после того, как передаст это число кадров, должен приостановить передачу и спросить получателя опять как много кадров тот может принять и т.д.

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

Характеристики ошибок

Физическая среда, по которой передаются данные не может быть абсолютно надёжной. Более того, уровень шума бывает очень высоким, например в беспроводных системах связи и телефонных системах. Ошибки при передаче — это реальность, которую надо обязательно учитывать.

В разных средах характер помех разный. Ошибки могут быть одиночные, а могут возникать группами, сразу по несколько. В результате помех могут исчезать биты или наоборот — появляться лишние.

Основной характеристикой интенсивности помех в канале является параметр шума — p. Это число от 0 до 1, равное вероятности инвертирования бита, при условии что, он был передан по каналу и получен на другом конце.

Следующий параметр — . Это вероятность того же события, но при условии, что предыдущий бит также был инвертирован.

Этими двумя параметрами вполне можно ограничиться при построении теории. Но, в принципе, можно было бы учитывать аналогичные вероятности для исчезновения бита, а также ипользовать полную информацию о пространственной корреляции ошибок, — то есть корреляции соседних ошибок, разделённых одним, двумя или более битами.

У групповых ошибок есть свои плюсы и минусы. Плюсы заключаются в следующем. Пусть данные передаются блоками по 1000 бит, а уровень ошибки 0,001 на бит. Если ошибки изолированные и независимые, то 63% () блоков будут содержать ошибки. Если же они возникают группами по 100 сразу, то ошибки будут содержать 1% () блоков.

Зато, если ошибки не группируются, то в каждом кадре они невелики, и есть возможность их исправить. Групповые ошибки портят кадр безвозвратно. Требуется его повторная пересылка, но в некоторых системах это в принципе невозможно, — например, в телефонных системах, использующие цифровое кодирование, возникает эффект пропадания слов/слогов.

Для надёжной передачи кодов было предложено два основных метода.

Первый заключается в добавлении в передаваемый блок данных нескольких «лишних» битов так, чтобы, анализируя полученный блок, можно было бы сказать есть в переданном блоке ошибки или нет. Это, так называемые, коды с обнаружением ошибок.

Второй — внести избыточность настолько, чтобы, анализируя полученные данные, можно не только замечать ошибки, но и указать, где именно возникли искажения. Это коды исправляющие ошибки.

Такое деление условно. Более общий вариант — это коды обнаруживающие k ошибок и исправляющие l ошибок, где .

* Элементы теории передачи информации

Информационным каналом называется пара зависимых случайных величин , одна из них называется входом другая выходом канала. Если случайные величины дискретны и конечны, то есть имеют конечные множества событий:

то канал определяется матрицей условных вероятностей

, — вероятность того, что на выходе будет значение при условии, что на входе измерено значение .

Входная случайная величина определяется распределением

на , а распределение на выходе вычисляется по формуле


Объединённое распределение на равно



Информация , передаваемая через канал, есть взаимная информация входа и выхода:

(eq:inf)

где




Если случайные величины и независимы (то есть ), то через канал невозможно передавать информацию и . Понять суть формулы ((eq:inf)) можно из следующего соображения: энтропия случайной величины равна информации, которую мы получаем при одном её измерении. и — информация, которая содержится по отдельности во входе и в выходе. Но часть этой информации общая, её нам и нужно найти. равна величине объединённой информации. В теории меры[1] есть выражение аналогичное (\ref{eq:inf}):


Распределение входной случайной величины мы можем варьировать и получать различные значения I. Её максимум называется пропускной способностью канала

(eq:cdef)

Эта функция есть решение задачи \begin{task} (task:shanon) Каково максимальное количество информации, которое можно передать с одним битом по каналу ? \end{task}

{\slshape Итак, пропускная способность есть функция на множестве стохастических матриц[2].}

Стандартный информационный канал это


(eq:sm)

То есть канал с бинарным алфавитом и вероятностью помехи p (p — вероятность того, что бит будет случайно инвертирован). Его пропускная способность равна

Эта функция является решением задачи на максимум (\ref{eq:cdef}) для матрицы (\ref{eq:sm}).

\begin{center} \begin{figure}[t!] \centering\includegraphics[clip=true, width=0.75\textwidth]{pictures/cideal.eps} \caption{ — Пропускная способность канала как функция вероятности инвертирования бита.} \label{fig:cideal} \end{figure} \end{center}

Эта функция (рис. \ref{fig:cideal}) определяет предел помехоустойчивого кодирования — если мы хотим с абсолютной надёжностью передать по каналу с пропускной способностью C сообщение длиной m, то минимальное количество бит, которое нам нужно будет передать . А точнее, всякое помехоустойчивое кодирование, обеспечивающее вероятность незамеченной ошибки в переданном слове меньше, чем , раздувает данные в раз и


Кодирование, при котором в этом пределе достигается равенство, называется эффективным. Отметим, что абсолютно надёжного способа передачи конечного количества данных по каналу с помехами не существует: то есть

Задача дуальная \ref{task:shanon} формулируется следующим образом \begin{task} \label{task:dual} Мы хотим передавать информацию со скоростью V по каналу с пропускной способностью C. Какова минимальная вероятность ошибочной передачи одного бита? \end{task} Решением будет функция заданная неявно

, если ,

, если

Оказывается, вероятность ошибки растет не так уж и быстро. Например, если по каналу передавать данных в два раза больше, чем его пропускная способность, то лишь 11 бит из ста будут переданы с ошибкой.

\begin{center} \begin{figure}[t!] \psfrag{v}{v} \psfrag{p}{ } \centering\includegraphics[clip=true, width=0.75\textwidth]{pictures/pv.eps} \caption{ — минимальная вероятность ошибки в одном бите как функция от отношения скорости передачи и пропускной способности .} \label{fig:pv} \end{figure} \end{center}

Построение конкретных способов кодирования, приближающихся

по пропускной способности к теоретической границе — сложная математическая задача.

Метод «чётности» и общая идея

Простым примером кода с обнаружением одной ошибки является код с битом чётности. Конструкция его такова: к исходному слову добавляется бит чётности. Если в исходном слове число единичек чётно, то значение этого бита 0, если нечётно — 1. Таким образом допустимые слова этого кода имеют чётное количество единичек. Если получено слово с нечётным количеством единичек, то при передаче произошла ошибка.

В случае вероятных групповых ошибок эту технику можно скорректировать. Разобъём передаваемые данные на n слов по k бит и расположим их в виде матрицы  (n столбцов). Для каждого столбца вычислим бит чётности и разместим его в дополнительной строке. Матрица затем передается по строкам. По получению матрица восстанавливается, и если обнаруживется несоответствие, то весь блок передается повторно. Этот метод позволяет обнаружить групповые ошибки длины .

\begin{task} Слово длиной n с чётным количеством единиц передано по каналу с уровнем шума p. Покажите, что вероятность того, что при передаче произошли ошибки и мы их не заметили равна

Что можно привести к виду

Невозможно разобрать выражение (неизвестная функция «\begin{array}»): {\displaystyle \begin{array}{l @{} l} P_{miss}(2,n,p)&={{((1-p)+p)^n+((1-p)-p)^n -2(1-p)^n}\over 2}=\\ &={{1-2(1-p)^n+(1-2p)^n}\over 2}. \end{array} }

Например, при и получаем \end{task}

Следующая задача повышенной сложности. \begin{task}[*] \label{task:errmod} Пусть у нас есть возможность контролировать сумму единичек по модулю d. Тогда вероятность нефиксируемых ошибок в слове длиной n при передаче его по каналу с шумом p равна :

Невозможно разобрать выражение (неизвестная функция «\begin{array}»): {\displaystyle \begin{array}{r@{}c@{}l} P_{miss}(2,n,p)&=&{1+(1-2p)^n-2(1-p)^n \over 2},\\ P_{miss}(3,n,p)&=&{1+(1-p+e^{\frac{2\pi}{3}\im} p)^n+(1-p+e^{-\frac{2\pi}{3}\im} p)^n-3(1-p)^n \over 3},\\ P_{miss}(4,n,p)&=&{1+(1-p+e^{\frac{\pi}{2}\im} p)^n+(1-p+e^{\frac{2\pi}{2}\im} p)^n+ (1-p+e^{\frac{3\pi}{2}\im} p)^n-4(1-p)^n \over 4}=\\ &=&{1+(1-2p)^n + 2((1-p)^2+p^2)^{n \over 2}\cos(n\arctan{p\over (1-p)})-4(1-p)^n \over 4}. \end{array} }
Примечание. Интерес здесь представляет неявно

заданная функция , а точнее даже коэффициент содержания полезной информации в переданных n бит как функция от величины шума и вероятности незамеченных ошибок. Чем выше желаемая надёжность передачи, то есть чем меньше вероятность , тем меньше коэффициент содержания полезной информации. \end{task}

Итак, с помощью одного бита чётности мы повышаем надёжность передачи, и вероятность незамеченной ошибки равна . Это вероятность уменьшается с уменьшением n. При получаем , это соответствует дублированию каждого бита. Рассмотрим общую идею того, как с помощью специального кодирования можно добиться сколь угодно высокой надёжности передачи.

Общая идея На множестве слов длины n определена метрика Хемминга: расстояние Хемминга между двумя словами равно количеству несовпадающих бит. Например,

\begin{task} Докажите, что метрика. \end{task} Если два слова находятся на расстоянии r по Хеммингу, это значит, что надо инвертировать ровно r разрядов, чтобы преобразовать одно слово в другое. В описанном ниже кодировании Хемминга любые два различных допустимых слова находятся на расстоянии . Если мы хотим обнаруживать d ошибок, то надо, чтобы слова отстояли друг от друга на расстояние . Если мы хотим исправлять ошибки, то надо чтобы кодослова отстояли друг от друга на . Действительно, даже если переданное слово содержит d ошибок, оно, как следует из неравенства треугольника, все равно ближе к правильному слову, чем к какому-либо еще, и следовательно можно определить, исходное слово. Минимальное расстояние Хемминга между двумя различными допустимыми кодовыми словами называется расстоянием Хемминга данного кода. \label{simplecode} Элементарный пример помехоустойчивого кода — это код, у которого есть только четыре допустимых кодовых слова:\\


Расстояние по Хеммингу у этого кода 5, следовательно он может исправлять двойные ошибки и замечать 4 ошибки. Если получатель получит слово 0001010111, то ясно, что исходное слово имело вид 0000011111. Коэффициент раздувания равен 5. То есть исходное слово длины m будет кодироваться в слово длины

Отметим что имеет смысл говорить о двух коэффициентах:\\ \begin{tabular}{l} — коэффициент содержания полезной информации\\ — коэффициент раздувания информации \end{tabular}\\ Первый есть функция от переменной n, а второй, обратный ему, — от переменной m.

Здесь мы подошли к довольно трудной задаче — минимизировать коэффициент раздувания для требуемой надёжности передачи. Она рассматривается в \ref{theory}.

Циклические коды

На практике активно применяются полиномиальные коды или циклические избыточные коды (Cyclic Redundancy CodeCRC).

CRC коды построены на рассмотрении битовой строки как строки коэффициентов полинома. k-битовая строка соответствует полиному степени . Самый левый бит строки — коэффициент при старшей степени. Например, строка 110001 представляет полином . Коэффициенты полинома принадлежат полю вычетов по модулю 2.

Основная идея заключена в том, чтобы пересылать только такие сообщения, полиномы которых делятся на некоторый фиксированный полином . Если мы получаем сообщение, чей полином не делится на , значит при передаче сигнал был искажен. Мы не заметим ошибок, если они один допустимый полином (то есть полином делящийся на ) преобразовали в другой допустимый полином. Полином тем лучше, чем больше среднее расстояние Хемминга на парах допустимых полиномов.


Есть два очевидных способа кодирования сообщения в полином, который делится на — это либо умножить полином исходного сообщения на , либо добавить к нашему сообщению некоторое количество бит так, чтобы результирующий полином делился на . В CRC используется второй способ.

Отправитель и получатель заранее договариваются о конкретном полиноме-генераторе . Пусть степень равна l. Тогда длина блока «конторольной суммы» также равна l.

 Мы добавляем контрольные l бит в конец передаваемого

блоку так, чтобы получился полином кратный генератору . Когда получатель получает блок с контрольной суммой, он проверяет его делимость на G. Если есть остаток , то были ошибки при передаче.

Алгоритм кодирования CRC:

Дано слово W длины m. Ему соответствует полином .

  1. Добавить к исходному слову W справа r нулей. Получиться слово длины и полином  :
  2. Разделить полином на и вычислить остаток от деления  :
  3. Вычесть остаток (вычитание в то же самое, что и сложение) из полинома  : Слово, которое соответствует полиному , и есть результат.

Рис. \ref{fig:crc} иллюстрирует этот алгоритм для блока 1101011011 и .

\begin{figure}[h!] \psfrag{Remainder}{Остаток} \centering\parbox{0.66\textwidth}{ \begin{tabular}{lcl} Слово&:&1101011011 \\&:&10011\\ Результат&:&11010110111110 \end{tabular}} \centering\includegraphics[clip=true, width=0.75\textwidth]{pictures/crc2.eps} \caption{CRC — полиномиальное кодирование} \label{fig:crc} \end{figure}

Этот метод позволяет отлавливать одиночные ошибки и групповые ошибки длины не более степени полинома.

Существует три международных стандарта на вид :

используется для передачи символов из 6 разрядов. Два остальных — для 8 разрядных. и ловят одиночные, двойные ошибки, групповые ошибки длины не более 16 и нечётное число изолированных ошибок с вероятностью 0.99997.


* Теоретический предел

\label{theory} В примечании к задаче \ref{task:errmod} было указано как можно получить значение коэффициента содержания полезной информации (КПС) на один бит, если передавать данные по каналу с шумом p словами длиной n бит, при условии, чтобы вероятность незамеченной ошибки была меньше .

Но ясно, что указанная там функция дает лишь оценку снизу оптимального значения КПС — возможно, существует другие методы контролирования ошибок, для которых он выше. Теория информации позволяет нам найти точное значение этого коэффициента.

Сформулируем задачу о кодировании, обнаруживающем ошибки. Для начала предположим, что наличие ошибки фиксируется с абсолютной точностью.

\begin{task} \label{task:err}

Мы хотим передавать информацию блоками, которые содержали
бы m бит полезной информации, так, чтобы
вероятность ошибки в одном бите равнялась p, а

правильность передачи «фиксировалось контрольной суммой». Найти минимальный размер блока и коэффициент раздувания . \end{task} \pbРешение Для передачи m бит с вероятностью ошибки в отдельном бите p требуется передать бит (см. задачу \ref{task:dual}). Кроме того мы хотим сообщать об ошибке в передаче. Её вероятность равна , а значит информация, заложенная в этом сообщении, . В итоге получаем и

Невозможно разобрать выражение (неизвестная функция «\pe»): {\displaystyle k(m,p)=C(p)+\frac{H((1-p)^m)}{m}.\pe}

Заметим, что — когда блок имеет размер один бит, сообщение об ошибке в нём равносильно передаче самого бита.

Если передавать эти сообщения по каналу с уровнем помех p, то количество бит на одно сообщение равно , то есть теоретическая оценка для количества лишних бит равна

Понятно, что данная теоретическая оценка занижена.


Коды Хемминга

Элементарный пример кода исправляющего ошибки был показан на странице \pageref{simplecode}. Его обобщение очевидно. Для подобного кода, обнаруживающего одну ошибку, КПС равен . Оказывается это число можно сделать сколь угодно близким к единице с помощью кодов Хемминга. В частности, при кодировании 11 бит получается слово длинной 15 бит, то есть .

Оценим минимальное количество контрольных разрядов, необходимое для исправления одиночных ошибок. Пусть содержательная часть составляет m бит, и мы добавляем ещё r контрольных. Каждое из правильных сообщений имеет его неправильных вариантов с ошибкой в одном бите. Такими образом, с каждым из сообщений связано множество из слов и эти множества не должны пересекаться. Так как общее число слов , то



Этот теоретический предел достижим при использовании метода, предложенного Хеммингом. Идея его в следующем: все биты, номера которых есть степень 2, — контрольные, остальные — биты сообщения. Каждый контрольный бит отвечает за чётность суммы некоторой группы бит. Один и тот же бит может относиться к разным группам. Чтобы определить какие контрольные биты контролируют бит в позиции k надо разложить k по степеням двойки: если , то этот бит относится к трём группам — к группе, чья чётность подсчитывается в 1-ом бите, к группе 2-ого и к группе 8-ого бита. Другими словами в контрольный бит с номером заносится сумма (по модулю 2) бит с номерами, которые имеют в разложении по степеням двойки степень :

(eq:hem)


Код Хемминга оптимален при и . В общем случае , где — ближайшее целое число . Код Хемминга мы будем обозначать (хотя n однозначно определяет m).

Пример для :

Невозможно разобрать выражение (неизвестная функция «\fbox»): {\displaystyle \begin{array}{c} \fbox{10110100111}\to \fbox{\fbox{0}\fbox{0}1\fbox{1}011\fbox{0}0100111}\\ \hphantom{\fbox{10110100111}\to}\;\; \lefteqn{\,b_1}\hphantom{\fbox{0}} \lefteqn{\,b_2}\hphantom{\fbox{0}} \lefteqn{b_3}\hphantom{1} \lefteqn{\;b_4}\hphantom{\fbox{1}011} \lefteqn{\,b_8}\hphantom{\fbox{0}} \lefteqn{b_9}\hphantom{010011} \lefteqn{b_{15}}\hphantom{1} \end{array}}


Получив слово, получатель проверяет каждый контрольный бит на предмет правильности чётности и складывая номера контрольных бит, в которых нарушена чётность. Полученное число, есть XOR номеров бит, где произошла ошибка. Если ошибка одна, то это число есть просто номер ошибочного бита.

Например, если в контрольных разрядах 1, 2, 8 обнаружено несовпадение чётности, то ошибка в 11 разряде, так как только он связан одновременно с этими тремя контрольными разрядами.

\begin{figure}[h!] \psfrag{Check bits}{\hspace{-12mm}Контрольные биты} \centering\includegraphics[clip=true, width=0.65\textwidth]{pictures/hem.eps} \caption{Кодирование Хемминга} \label{fig:hem} \end{figure}


\begin{task} Покажите, что при . \end{task}


Код Хемминга может исправлять только единичные ошибки. Однако, есть приём, который позволяет распространить этот код на случай групповых ошибок. Пусть нам надо передать k кодослов. Расположим их в виде матрицы одно слово — строка. Обычно, передают слово за словом. Но мы поступим иначе, передадим слово длины k, из 1-ых разрядов всех слов, затем — вторых и т.д. По приёме всех слов матрица восстанавливается. Если мы хотим обнаруживать групповые ошибки размера k, то в каждой строке восстановленной матрицы будет не более одной ошибки. А с одиночными ошибками код Хемминга справиться.

Анализ эффективности

Начнём c небольшого примера. Пусть у нас есть канал с уровнем ошибок . Если мы хотим исправлять единичные ошибки при передаче блоками по бит, то среди них потребуется 10 контрольных бит: 1, 2, \dots, . На один блок приходится 1013 бит полезной информации. При передаче 1000 таких блоков потребуется контрольных бит.

В тоже время для обнаружения единичной ошибки достаточно одного бита чётности. И если мы применим технику повторной передачи, то на передачу 1000 блоков надо будет потратить 1000 бит дополнительно и примерно из них придется пересылать повторно. То есть на 1000 блоков приходится один попорченый, и дополнительная нагрузка линии составляет , что меньше . Но это не значит, что код Хемминга плох для такого канала. Надо правильно выбрать длину блока — если , то код Хемминга эффективен.

Рассмотрим этот вопрос подробнее. Пусть нам нужно передать информацию M бит. Разобьем её на L блоков по бит и будем передавать двумя способами — с помощью кодов Хемминга и без них. При этом будем считать, что в обоих случаях осуществлено предварительное кодирование, позволяющее с вероятностью определять ошибочность передачи. Это осуществляется путем добавления «лишней» информации. Обозначим коэффициент раздувания для этого кодирования . После этого кодирования каждый блок несёт информацию

1) Без кода Хемминга.\\ Если пересылать информацию блоками по бит с повторной пересылкой в случае обнаружения ошибки, то получим, что в среднем нам придётся переслать D бит:

Где — вероятность повторной передачи равная вероятности ошибки умноженной на вероятность того, что мы её заметим. Коэффициент раздувания равен


2) С кодом Хемминга.\\ При кодировании методом Хемминга слова длины получается слово длины n бит:

(eq:hnm)


Для отдельного блока вероятность безошибочной передачи равна . Вероятность одинарной ошибки . Вероятность того, что произошло более чем одна ошибка, и мы это заметили

— в этом случае требуется повторная передача кадра. Количество передаваемых данных:

И коэффициент раздувания

где неявно определённая с помощью (\ref{eq:hnm}) функция. Удобно записать соответствующие коэффициенты полезного содержания:

Невозможно разобрать выражение (неизвестная функция «\begin{array}»): {\displaystyle \begin{array}{l} KPS= KPS_{\varepsilon}\bigl(n\bigr)\bigl(\varepsilon+(1-\varepsilon)(1-p)^n\bigr)\\ \\[0.8mm] KPS_H={KPS_{\varepsilon}\bigl(m'\bigr)\frac{m'}{n}\bigl(\varepsilon+(1-p)^{n-1}(np+1-p)(1-\varepsilon)\bigr)}, \\[0.5mm] m'=n-\log_2{(n+1) \end{array} } (eq:kps)


Легко обнаружить что при и код Хемминга оказывается эффективнее, то есть

\begin{center} \begin{figure}[h!] \psfrag{knc}{кпс} \psfrag{n}{n} \centering\includegraphics[clip=true, width=0.48\textwidth]{pictures/kps.eps} \centering\includegraphics[clip=true, width=0.48\textwidth]{pictures/kps2.eps} \caption{ — Коэффициент полезного содержания

в канале с помехами как функция размера элементарного блока.}

\parbox{0.85\textwidth}{\small Светлый график — без кодирования Хемминга;\\ Темный график — с кодированием Хемминга; \\Параметры: ; } \label{fig:kps} \end{figure} \end{center} \begin{center} \begin{figure}[h!] \psfrag{C}{C} \psfrag{p}{p} \centering\includegraphics[clip=true, width=0.75\textwidth]{pictures/kpseff.eps} \caption{ — максимальный коэффициент полезного содержания в канале с помехами как функция уровня помех.} \parbox{0.97\textwidth}{ \small Светлый график — без кодирования Хемминга;\\ Темный график — с кодированием Хемминга;\\Тонкий график — теоретический предел, задаваемый функцией \\Параметры: .} \label{fig:kpseff} \end{figure} \end{center}

Значение используемое в формулах (\ref{eq:kps}) можно оценить как



Напомним, что есть параметр желаемой надёжности передачи — чем меньше , тем надёжнее передача. По определению — вероятности ошибочной передачи блока при условии, что «контрольная сумма сошлась» и кадр засчитан правильно переданным.

Такое выражение для 

получается из формулы



Но это безусловно лишь оценочная формула. Оптимальное значение значительно сложнее и зависит от p.

Из графика на рисунке \ref{fig:kps} хорошо видно, что при больших n код Хемминга начинает работать на пользу.

Но зависимость КПС от n не есть критерий эффективности кода. Эффективность кода определяется функцией


На рисунке \ref{fig:kpseff} показан график этой функции и из него ясно, что код Хемминга можно использовать с пользой всегда — при любых и p, если у нас есть возможность выбирать подходящее n.

Коды как линейные операторы

То, что на множестве {0,1} есть структура числового поля, позволяет осуществлять алгебраические интерпретации кодирования. Заметим, в частности, что как коды Хемминга, так и циклические коды линейны:\\ 1) отношения (\ref{eq:hem}) на с. \pageref{eq:hem}, связывающие контрольные биты кода Хемминга с другими линейны,\\ 2) остаток от деления суммы многочленов на третий равен сумме остатков.\\ То есть кодирование в этих двух случаях есть линейное отображение из в . Поясним на примерах. Ниже представлена матрица кода Хемминга (см. соотношения (\ref{eq:hem})). Исходное слово есть , а результирующее

(слова мы будем воспринимать как столбцы).



Процесс выявления ошибок тоже линейная операция, она осуществляется с помощью проверочной матрицы . Пусть принято слово . Слово в случае правильной передачи должно быть равно 000. Значение называется синдромом ошибки. i-ый разряд слова контролирует i-ое соотношение в (\ref{eq:hem}) и, таким образом, равно сумме номеров бит в которых произошла ошибка, как векторов в .


Заметим, что столбцы проверочной матрицы представляют собой последовательно записанные в двоичной форме натуральные числа от 1 до 7.

Вычиcление рабочей матрицы для циклических кодов основывается на значениях . Верхняя её часть равна единичной, так m бит сообщения помещаются без изменения в начало слова, а нижние r строчек есть m столбцов высоты r состоящие из коэффициентов многочленов , , \dots, . Например, для и имеем , и

Рабочая и проверочная матрицы равны

то есть


Кроме рабочей и проверочной матриц есть ещё множество порождающих матриц и декодирующих матриц . Понятно, что в случае линейных кодов допустимые слова образуют линейное подпространство равное . Любая матрица, столбцы которой образуют базис этого подпространства, называется порождающей. В частности, рабочая матрица является порождающей. Способность обнаруживать и исправлять ошибки однозначно определяется подпространством L. Порождающих, рабочих и проверочных матриц соответствующих L несколько.

Действительно, в порождающей и рабочей матрицах можно осуществлять элементарные операции со столбцами, а в проверочной — со строчками. Матрицы , и всегда удовлетворяют отношениям


где

— нулевая матрица .\\ Любая порождающая матрица может использоваться как

рабочая.

Декодирующая матрица должна декодировать: . Матриц с таким свойством может быть несколько. Множество декодирующих матриц определяется рабочей матрицей:


где — единичная матрица . На подпространстве L все декодирующие матрицы действуют одинаково. Они отличаются на подпространстве ортогональном L. Приведём декодирующую матрицу для и :

К каждой строчке декодирующей матрицы можно добавить любую линейную комбинацию строчек из проверочной матрицы. Следует отметить, что процесс исправления ошибок для кодов Хемминга нелинеен и его нельзя «внедрить» в декодирующую матрицу.

Сформулируем теперь основные моменты, касающиеся линейных кодов.

  1. Процесс кодирования и декодирования — линейные операторы.  :
  2. Обнаружение ошибок равносильно проверке принадлежности полученного слова подпространству L допустимых слов. Для этого необходимо найти проекцию (синдром ошибки) полученного слова на — тоже линейная операция. Для правильно переданного слова .  :
  3. В случае, когда векторы подпространства L достаточно удалены друг от друга в смысле метрики Хемминга, есть возможность обнаруживать и исправлять некоторые ошибки. В частности, значение синдрома ошибки в случае кода Хемминга равно векторной сумме номеров бит, где произошла ошибка.
  4. Комбинация (композиция) линейных кодов есть снова линейный код.

Практические методы помехоустойчивого кодирования все основаны на линейных кодах. В основном это модифицированные CRC, коды Хемминга и их композиции. Например плюс проверка на чётность. Такой код может исправлять уже две ошибки. Построение эффективных и удобных на практике задача сходная с творчеством художника. На практике важны не только корректирующая способность кода, но и вычислительная сложность процессов кодирования и декодирования, а также спектральная характеристика результирующего аналогового сигнала. Кроме того, важна способность исправлять специфические для данного физического уровня групповые ошибки.

\begin{task} Для данной проверочной матрицы постройте рабочую и декодирующую матрицу. Докажите, что кодовое расстояние равно 4.

Подсказка \\ 1) Это проверочная матрица плюс условие на чётность числа единичек в закодированном слове вместе с дополнительным восьмым контрольным битом.\\ 2) Кодовое расстояние равно минимальному количеству линейно зависимых столбцов в . \end{task}

\begin{task} Посторойте декодирующую и проверочную матрицу для циклического кода с и при условии, что в качестве рабочей матрицы использовалась матрица


\end{task}

*Коды Рида-Соломона

После перехода на язык линейной алгебры естественно возникает желание изучить свойства линейных кодов над другими конечными числовыми полями. С помощью такого обобщения появились коды Рида-Соломона.

{\slshape Коды Рида-Соломона являются циклическими кодами над числовым полем отличным от .}

Напомним, что существует бесконечное количество конечных полей, и количество элементов в конечном поле всегда равно степени простого числа. Если мы зафиксируем число элементов , то найдётся единственное с точностью до изоморфности конечное поле с таким числом элементов, которое обозначается как . Простейшая реализация этого поля — множество многочленов по модулю неприводимого[3] многочлена степени k над полем вычетов по модулю q. В случае многочленов с действительными коэффициентами неприводимыми многочленами являются только квадратные многочлены с отрицательным дискриминантом. Поэтому существует только квадратичное расширение действительного поля — комплексные числа. А над конечным полем существуют неприводимые многочлены любой степени. В частности, над многочлен неприводим и множество многочленов по модулю  образуют поле из элементов.

Примеры протоколов канала данных

HDLC протокол

Здесь мы познакомимся с группой протоколов давно известных, но по-прежнему широко используемых. Все они имеют одного предшественника – SDLC (Synchronous Data Link Control) – протокол управления синхронным каналом, предложенным фирмой IBM в рамках SNA. ISO модифицировала этот протокол и выпустила под названием HDLC — High level Data Link Control. MKTT модифицировала HDLC для X.25 и выпустила под именем LAP – Link Access Procedure. Позднее он был модифицирован в LAPB.

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

\begin{center} \begin{figure}[h!] \centering\includegraphics[clip=true, width=0.88\textwidth]{pictures/frame.eps} \caption{Типовая структура кадра} \label{fig:frame} \end{figure} \end{center}


На рис. \ref{fig:frame} показана типовая структура кадра. Поле адреса используется для адресации терминала, если их несколько на линии. Для линий точка-точка это поле используется для различия команды от ответа.


  • Поле Control используется для последовательных номеров кадров, подтверждений и других нужд.
  • Поле Data может быть сколь угодно большим и используется для передачи данных. Надо только иметь ввиду, что чем оно длиннее тем, больше вероятность повреждения кадра на линии.
  • Поле Checksum — это поле используется CRC кодом.

Флаговые последовательности 01111110 используются для разделения кадров и постоянно передаются по незанятой линии в ожидании кадра. Существуют три вида кадров: , , Unnumbered.

Организация поля Control для этих трех видов кадров показана на рис. \ref{fig:cfield}. Как видно из размера поля Seq в окне отправителя может быть до 7 неподтверждённых кадров. Поле Next используется для посылки подтверждения вместе с передаваемым кадром. Подтверждение может быть в форме номера последнего правильно переданного кадра, а может быть в форме первого не переданного кадра. Какой вариант будет использован — это параметр. \begin{center} \begin{figure}[h!] \centering\includegraphics[clip=true, width=0.88\textwidth]{pictures/cfield.eps} \caption{Cтруктура поля Control} \parbox{0.66\textwidth}{\small (а) Информационный кадр ()\\ (б) Управляющий кадр ()\\(в) Ненумерованный кадр (Unnumbered) } \label{fig:cfield} \end{figure} \end{center}


Разряд использует при работе с группой терминалов. Когда компьютер приглашает терминал к передаче он устанавливает этот разряд в P. Все кадры, посылаемые терминалами имеют здесь P. Если это последний кадр, посылаемый терминалом, то здесь стоит F.

кадры имеют четыре типа кадров.


  • Тип 0 — уведомление в ожидании следующего кадра (RECEIVE READY). Используется когда нет встречного трафика, чтобы передать уведомление в кадре с данными.
  • Тип 1 — негативное уведомление (REJECT) — указывает на ошибку при передаче. Поле Next указывает номер кадра, начиная с которого надо перепослать кадры.
  • Тип 2 — RECEIVE NOT READY. Подтверждает все кадры, кроме указанного в Next. Используется, чтобы сообщить источнику кадров об необходимости приостановить передачу в силу каких-то проблем у получателя. После устранения этих проблем получатель шлет RECEIVE REDAY, REJECT или другой надлежащий управляющий кадр.
  • Тип 3 — SELECTIVE REJECT — указывает на необходимость перепослать только кадр, указанный в Next. LAPB и SDLC не используют этого типа кадров.

Третий класс кадров — Unnubered. Кадры этого класса иногда используются для целей управления, но чаще для передачи данных при ненадёжной передаче без соединения.

Все протоколы имеют команду DISConnect для указания о разрыве соединения, SNRM и SABM — для установки счётчиков кадров в ноль, сброса соединения в начальное состояние, установки соподчинённости на линии. Команда FRMR — указывает на повреждение управляющего кадра.

  1. ^  Идея рассмотрения информации как меры на множестве ещё не до конца исчерпала себя — такой меры ещё не построено. Однако доказано, что с помощью этой аналогии можно доказывать неравенства, например .
  2. ^  Матрица называется стохастической, если все её элементы неотрицательны и сумма элементов в каждом столбце равна единице.
  3. ^  Многочлен называется неприводимым, если он не разлагается в произведение многочленов меньшей степени.