Помехоустойчивое кодирование: различия между версиями
Содержимое удалено Содержимое добавлено
Нет описания правки |
Greck (обсуждение | вклад) Пробую автоматически получить из TeXa викиразметку |
||
Строка 1:
==Аннотация==
Строка 41 ⟶ 37 :
значений которой - слова фиксированной длины <math>r</math>.
Эти <i>r</i> бит добавляются обычно в конец кадра. При приёме
контрольная сумма вычисляется заново и сравнивается с той, что
храниться в кадре. Если они различаются, то это признак ошибки
Строка 51 ⟶ 47 :
нет единого таймера, нет гарантии, что эта пауза сохраниться или,
наоборот, не появятся новые. Так как временные методы ненадёжны,
то применяются другие. Здесь мы рассмотрим
* счетчик символов;
* вставка специальных стартовых и конечных символов или последовательностей бит;
Строка 67 ⟶ 63 :
Второй метод построен на вставке специальных символов.
Обычно для этого используют управляющие последовательности:
последовательность <math>DLE
для конца кадра. <math>DLE</math> — Data Link Escape; <math>STX</math> — Start
TeXt, <math>ETX</math> — End TeXt. При этом методе если даже была
Строка 117 ⟶ 113 :
===Контроль ошибок===
Решив проблему разбиения на кадры, мы приходим к следующей
проблеме: как обеспечить, чтобы кадры, пройдя по физическому
Строка 123 ⟶ 118 :
надлежащей последовательности и в надлежащем виде?
введения обратной связи между отправителем и получателем в
виде кадра подтверждения, а также специального кодирования,
Строка 134 ⟶ 129 :
заново.
кадр исчезнет целиком. В этом случае получатель не будет
реагировать никак, а отправитель будет сколь угодно долго ждать
Строка 145 ⟶ 140 :
считать, что кадр потерян и повторит его еще раз.
тот же кадр получатель получит дважды. Как быть? Для решения
этой проблемы каждому кадру присваивают порядковый номер. С
Строка 158 ⟶ 153 :
===Управление потоком===
Другая важная проблема, которая решается на канальном уровне
— управление потоком. Вполне может
Строка 176 ⟶ 170 :
==Помехоустойчивое кодирование==
===Характеристики ошибок===
Физическая среда, по которой передаются данные не может быть
абсолютно надёжной. Более того, уровень шума бывает очень
Строка 191 ⟶ 183 :
Основной характеристикой ''интенсивности помех'' в канале
является параметр шума — <i
вероятности инвертирования бита, при условии что, он был
передан по каналу и получен на другом конце.
Строка 206 ⟶ 198 :
битами.
заключаются в следующем. Пусть данные передаются блоками по
1000 бит, а уровень ошибки 0,001 на бит. Если ошибки
изолированные и независимые, то 63
1-0.999^{1000}</math>) блоков будут содержать ошибки. Если же они
возникают группами по 100 сразу, то ошибки будут содержать
1
и есть возможность их исправить. Групповые ошибки портят
кадр безвозвратно. Требуется его повторная пересылка, но в
Строка 223 ⟶ 215 :
Для надёжной передачи кодов было предложено два основных метода.
данных нескольких «лишних» битов так, чтобы, анализируя
полученный блок, можно было бы сказать есть в переданном
Строка 235 ⟶ 227 :
Такое деление условно. Более общий вариант — это коды
обнаруживающие <i
<math>l<k</math>.
===* Элементы теории передачи информации===
''Информационным каналом'' называется пара ''зависимых''
случайных величин <math>\{\xi_{in},\,\xi_{out}\}</math>, одна из них
называется входом другая выходом канала. Если случайные величины
дискретны и конечны, то есть имеют конечные множества событий:
:<math>\Omega_{in}=\{x_1,\dots, x_a\},\;\Omega_{out}=\{y_1,\dots, y_b\},</math>
то канал определяется матрицей условных вероятностей
<math>\|r_{ij}\|</math>, <math>r_{ij}</math> — вероятность того, что на выходе
Строка 254 ⟶ 247 :
выходе вычисляется по формуле
:<math>q_i=\sum_{j=1}^{a}r_{ij}p_j.</math>
Объединённое распределение на
<math>\Omega_{in}\times\Omega_{out}</math> равно
:<math>P_{ij}=r_{ij}p_j.</math>
Информация <math>I(\{\xi_{in},\,\xi_{out}\})</math>, передаваемая через
Строка 264 ⟶ 261 :
:<math>
I(\{\xi_{in}\,\xi_{out}\})=H(\xi_{in})+H(\xi_{out})-H(\{\xi{in},\xi_{out}\}),
</math> <b>(eq:inf)</b>
где
:<
:<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> независимы (то
Строка 275 ⟶ 279 :
<math>\{\xi_{in},\,\xi_{out}\}</math> невозможно передавать информацию и
<math>I(\{\xi_{in},\,\xi_{out}\})=0</math>. Понять суть формулы
(
величины равна информации, которую мы получаем при одном её
измерении. <math>H(\xi_{in})</math> и <math>H(\xi_{out})</math> — информация, которая
Строка 283 ⟶ 287 :
меры{{ref|note1}} есть выражение
аналогичное (\ref{eq:inf}):
:<math>\mu(A\wedge B)=\mu(A)+\mu(B)-\mu(A\vee B).</math>
Распределение входной случайной величины <math>\xi_{in}</math> мы можем
варьировать и получать различные значения <i
называется пропускной способностью канала
:<math>
C(\|r_{ij}\|)=\max_{p_i}I(\{\xi_{in}\,\xi_{out}\}).
</math> <b>(eq:cdef)</b>
Эта функция есть решение задачи
\begin{task}
которое можно передать с одним битом по каналу
<math>\{\xi_{in},\,\xi_{out}\}</math>?
Строка 305 ⟶ 312 :
Стандартный информационный канал это
:<math>\Omega_{in}=\Omega_{out}=\{0,1\}.</math>
:<math>
\|r_{ij}\|=\begin{array}{||cc||} 1-p &p\\ p& 1-p
\end{array}\;.
</math> <b>(eq:sm)</b>
То есть канал с бинарным алфавитом и вероятностью помехи <i>p</i>
(<i>p</i> — вероятность того, что бит будет случайно
инвертирован). Его пропускная способность равна
:<math>C= 1-H(p)=1+p\log_2p+(1-p)\log_2{(1-p)}.</math>
Эта функция является решением задачи на максимум (\ref{eq:cdef})
для матрицы (\ref{eq:sm}).
Строка 331 ⟶ 343 :
Эта функция <math>C(p)</math> (рис. \ref{fig:cideal}) определяет предел
помехоустойчивого кодирования — если мы хотим с абсолютной
надёжностью передать по каналу с пропускной способностью <i
сообщение длиной <i
нужно будет передать <math>n\geqslant m/C</math>. А точнее, всякое
помехоустойчивое кодирование, обеспечивающее вероятность
Строка 338 ⟶ 350 :
раздувает данные в <math>k_{\varepsilon}(m,p)</math> раз и
:<math>\lim_{\varepsilon\to 0}\lim_{m\to\infty}k_{\varepsilon}(m,p)\geqslant {1/C(p)}.</math>
Кодирование, при котором в этом пределе достигается
равенство, называется ''эффективным''. Отметим, что
Строка 349 ⟶ 363 :
\begin{task}
\label{task:dual}
Мы хотим передавать информацию со скоростью <i
пропускной способностью <i
ошибочной передачи одного бита?
\end{task}
Решением будет функция заданная неявно
<
<math>p(V/C)=0</math>, если <math>V/C\leqslant 1</math>
Оказывается, вероятность ошибки растет не так уж и быстро.
Например, если по каналу передавать данных в два раза
Строка 363 ⟶ 380 :
\begin{center}
\begin{figure}[t!]
\psfrag{v}{<i
\centering\includegraphics[clip=true,
width=0.75\textwidth]{pictures/pv.eps} \caption{ <math>p(v)</math> —
Строка 375 ⟶ 392 :
сложная математическая задача.
===Метод «чётности» и общая идея===
Простым примером кода с обнаружением одной ошибки является код с битом чётности.
Конструкция его такова: к исходному слову добавляется бит
Строка 384 ⟶ 402 :
В случае вероятных групповых ошибок эту технику можно
скорректировать. Разобъём передаваемые данные на <i
бит и расположим их в виде матрицы <math>n\cdot k</math> (<i
каждого столбца вычислим бит чётности и разместим его в
дополнительной строке. Матрица затем передается по строкам. По
Строка 393 ⟶ 411 :
\begin{task}
Слово длиной <i
уровнем шума <i
передаче произошли ошибки и мы их не заметили равна
:<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
</math>
Что можно привести к виду
:<math>
\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}
</math>
Например, при <math>n=1000</math> и <math>p=10^{-6}</math> получаем <math>P_{miss}\approx
4.99\cdot 10^{-7}</math>
Строка 412 ⟶ 434 :
\begin{task}[*]
\label{task:errmod} Пусть у нас есть возможность контролировать
сумму единичек по модулю <i
ошибок в слове длиной <i
равна <math>P_{miss}(d,n,p)</math>:
:<math>
\begin{array}{r@{}c@{}l}
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}.
\end{array}
</math>
''Примечание.'' Интерес здесь представляет неявно
заданная функция <math>n(d,P_{miss},p)</math>, а точнее даже коэффициент
содержания полезной информации
<math>
бит как функция от величины шума и вероятности незамеченных
ошибок. Чем выше желаемая надёжность передачи, то есть чем меньше
Строка 440 ⟶ 464 :
Итак, с помощью одного бита чётности мы повышаем надёжность
передачи, и вероятность незамеченной ошибки равна
<math>P_{miss}(2,n,p)</math>. Это вероятность уменьшается с уменьшением <i
При <math>n=2</math> получаем <math>P_{miss}(2,2,p)=p^2</math>, это соответствует
дублированию каждого бита. Рассмотрим общую идею того, как с
Строка 446 ⟶ 470 :
высокой надёжности передачи.
''Общая идея'' На множестве слов длины <i
метрика Хемминга: расстояние Хемминга между двумя словами
равно количеству несовпадающих бит. Например,
:<math>\rho_H(10001001,10110001)=3.</math>
\begin{task}
Докажите, что <math>\rho_H</math> метрика.
\end{task}
это значит, что надо инвертировать ровно <i
преобразовать одно слово в другое. В описанном ниже
кодировании Хемминга любые два различных допустимых слова
находятся на расстоянии <math>\rho_H\geqslant 3</math>. Если мы хотим
обнаруживать <i
от друга на расстояние <math>\geqslant d+1</math>. Если мы хотим
исправлять ошибки, то надо чтобы кодослова отстояли друг от
друга на <math>\geqslant 2d+1</math>. Действительно, даже если
переданное слово содержит <i
неравенства треугольника, все равно ближе к правильному
слову, чем к какому-либо еще, и следовательно можно
Строка 472 ⟶ 498 :
которого есть только четыре ''допустимых кодовых
слова'':\\
:<math>0000000000,\; 0000011111,\; 1111100000,\; 1111111111.</math>
Расстояние по Хеммингу у этого кода 5, следовательно он может
исправлять двойные ошибки и замечать 4 ошибки. Если получатель
получит слово <i
вид <i
исходное слово длины <i
Отметим что имеет смысл говорить о двух коэффициентах:\\
\begin{tabular}{l}
<math>
полезной информации\\
<math>k(m)=\frac{n(m)}{m}</math> — коэффициент раздувания информации
\end{tabular}\\
Первый есть функция от переменной <i
ему, — от переменной <i
Здесь мы подошли к довольно трудной задаче —
Строка 494 ⟶ 522 :
===Циклические коды===
На практике активно применяются полиномиальные коды
или циклические избыточные коды ('''Cyclic Redundancy Code
— <
<
строки коэффициентов полинома. <i
соответствует полиному степени <math>k-1</math>. Самый левый бит строки
— коэффициент при старшей степени. Например, строка <i
представляет полином <math>x^5+x^4+x^0</math>. Коэффициенты полинома
принадлежат полю <math>G\mathbb{F}(2)</math> вычетов по модулю 2.
Строка 520 ⟶ 547 :
сообщения на <math>G(x)</math>, либо добавить к нашему сообщению некоторое
количество бит так, чтобы результирующий полином делился на
<math>G(x)</math>. В <
о конкретном ''полиноме-генераторе'' <math>G(x)</math>. Пусть степень
<math>G(x)</math> равна <i
равна <i
Мы добавляем контрольные <i
блоку так, чтобы получился полином кратный генератору
<math>G(x)</math>. Когда получатель получает блок с контрольной суммой,
он проверяет его делимость на <i
0</math>, то были ошибки при передаче.
''Алгоритм кодирования <
''Дано слово <i>W</i> длины <i>m</i>. Ему соответствует полином <math>W(x)</math>.''
# ''Добавить к исходному слову <i>W</i> справа <i>r</i> нулей. Получиться слово длины <math>n=m+r</math> и полином :<math>x^r\cdot W(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> ''
# ''Вычесть остаток (вычитание в <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>, и есть результат.''
Рис. \ref{fig:crc} иллюстрирует этот алгоритм для блока
<i
\begin{figure}[h!]
Строка 561 ⟶ 577 :
\end{tabular}}
\centering\includegraphics[clip=true,
width=0.75\textwidth]{pictures/crc2.eps}
\caption{CRC — полиномиальное кодирование}
\label{fig:crc} \end{figure}
Строка 569 ⟶ 586 :
Существует три международных стандарта на вид <math>G(x)</math>:
* <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>
<math>CRC-12</math> используется для передачи символов из <i>6</i> разрядов.
Два остальных — для <i>8</i> разрядных. <math>CRC-16</math> и <math>CRC-CCITT</math> ловят
одиночные, двойные ошибки, групповые ошибки длины не более 16 и
нечётное число изолированных ошибок с вероятностью <i
===* Теоретический предел===
\label{theory} В примечании к задаче \ref{task:errmod} было указано как можно получить
значение коэффициента содержания полезной информации (КПС) на
один бит, если передавать данные по каналу с шумом <i
длиной <i
ошибки была меньше <math>P_{miss}</math>.
Строка 601 ⟶ 618 :
\label{task:err}
Мы хотим передавать информацию блоками, которые содержали
бы <i
вероятность ошибки в одном бите равнялась <i
правильность передачи «фиксировалось контрольной суммой». Найти
минимальный размер блока <math>n(m,p)</math> и коэффициент раздувания
Строка 608 ⟶ 625 :
\end{task}
\pb''Решение''
Для передачи <i
<i
(см. задачу \ref{task:dual}). Кроме того мы хотим сообщать
об ошибке в передаче. Её вероятность равна <math>(1-p)^m</math>, а
значит информация, заложенная в этом сообщении,
<math>H((1-p)^m)</math>. В итоге получаем <math>n=mC(p)+H((1-p)^m)</math> и
:<math>k(m,p)=C(p)+\frac{H((1-p)^m)}{m}.\pe</math>
Заметим, что <math>k(1,p)=1</math> — когда блок имеет размер один бит,
сообщение об ошибке в нём равносильно передаче самого бита.
Если передавать эти сообщения по каналу с уровнем помех <i
количество бит на одно сообщение равно <math>m k(m,p)/C(p)</math>, то есть
теоретическая оценка для количества лишних бит равна
:<math>\frac{H((1-p)^m)}{C(p)}</math>
Понятно, что данная теоретическая оценка занижена.
===Коды Хемминга===
Элементарный пример кода исправляющего ошибки был показан на
странице \pageref{simplecode}. Его обобщение очевидно. Для
Строка 632 ⟶ 652 :
3</math>. Оказывается это число можно сделать сколь угодно близким к
единице с помощью кодов Хемминга. В частности, при кодировании
<i
<math>
разрядов, необходимое для исправления одиночных ошибок. Пусть
содержательная часть составляет <i
контрольных. Каждое из <math>2^m</math> правильных сообщений имеет <math>n=m+r</math>
его неправильных вариантов с ошибкой в одном бите. Такими
Строка 644 ⟶ 664 :
слов <math>2^n</math>, то
:<math>
\begin{array}{c}
(n+1)2^m \leqslant 2^n\\ (m+r+1)\leqslant 2^r.
\end{array}
</math>
метода, предложенного Хеммингом. Идея его в следующем: все
биты, номера которых есть степень <i
остальные — биты сообщения. Каждый контрольный бит
отвечает за чётность суммы некоторой группы бит. Один и тот
же бит может относиться к разным группам. Чтобы определить
какие контрольные биты контролируют бит в позиции <i
разложить <i
бит относится к трём группам — к группе, чья чётность
подсчитывается в 1-ом бите, к группе 2-ого и к группе 8-ого
Строка 665 ⟶ 687 :
:<math>
\begin{array}{l}
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 \\
\end{array}
</math> <b>(eq:hem)</b>
Код Хемминга оптимален при <math>n=2^r-1</math> и <math>m=n-r</math>. В общем случае
<math>m=n-[\log_2(n+1)]</math>, где <math>[x]</math> — ближайшее целое число
<math>\leqslant x</math>. Код Хемминга мы будем обозначать <math>Hem(n,m)</math> (хотя
<i
Пример для <math>Hem(15,11)</math>:
:<math>\begin{array}{c}
\fbox{10110100111}\to
\fbox{\fbox{0}\fbox{0}1\fbox{1}011\fbox{0}0100111}\\
Строка 692 ⟶ 716 :
\lefteqn{b_9}\hphantom{010011}
\lefteqn{b_{15}}\hphantom{1}
\end{array}
получатель проверяет каждый контрольный бит на предмет
правильности чётности и складывая номера контрольных бит, в
которых нарушена чётность. Полученное число, есть <
бит, где произошла ошибка. Если ошибка одна, то это число есть
просто номер ошибочного бита.
несовпадение чётности, то ошибка в 11 разряде, так как
только он связан одновременно с этими тремя контрольными
Строка 716 ⟶ 741 :
\begin{task}
Покажите, что <math>
\infty</math>.
\end{task}
Строка 723 ⟶ 748 :
Код Хемминга может исправлять только единичные ошибки. Однако,
есть приём, который позволяет распространить этот код на случай
групповых ошибок. Пусть нам надо передать <i
Расположим их в виде матрицы одно слово — строка. Обычно,
передают слово за словом. Но мы поступим иначе, передадим слово
длины <i
приёме всех слов матрица восстанавливается. Если мы хотим
обнаруживать групповые ошибки размера <i
восстановленной матрицы будет не более одной ошибки. А с
одиночными ошибками код Хемминга справиться.
===Анализ эффективности===
Начнём c небольшого примера. Пусть у нас есть канал с уровнем
ошибок <math>p=10^{-6}</math>. Если мы хотим исправлять единичные ошибки при
передаче блоками по <math>1023=2^{10}-1</math> бит, то среди них потребуется
<i
приходится <i
таких блоков потребуется <math>\Delta=10\,000</math> контрольных бит.
В тоже время для обнаружения единичной ошибки достаточно одного
бита чётности. И если мы применим технику повторной передачи, то
на передачу <i
дополнительно и примерно <math>0.001\approx
p_{1014}=1-(1-10^{-6})^{1014}</math> из них придется пересылать
повторно. То есть на <i
дополнительная нагрузка линии составляет <math>\Delta\approx
1000+1001</math>, что меньше <math>10\,000</math>. Но это не значит, что код
Строка 753 ⟶ 777 :
Рассмотрим этот вопрос подробнее. Пусть нам нужно передать
информацию <i
и будем передавать двумя способами
— с помощью кодов Хемминга и без них. При этом будем
Строка 767 ⟶ 791 :
блоками по <math>m'</math> бит с повторной пересылкой в случае
обнаружения ошибки, то получим, что в среднем нам придётся
переслать <i
:<math>D=L m'{1 \over 1-P_{r}}</math>
Где <math>P_{r}=(1-(1-p)^{m'})(1-\varepsilon)</math> — вероятность
повторной передачи равная вероятности ошибки умноженной на
вероятность того, что мы её заметим. Коэффициент раздувания
равен
:<math>k(m,p,\varepsilon)=\frac{D}{M}=\frac{k_{\varepsilon}(m)}{\varepsilon+(1-\varepsilon)(1-p)^{k_{\varepsilon}(m)m}}</math>
2) '''С кодом Хемминга.'''\\ При кодировании методом
Хемминга слова длины <math>m'</math> получается слово длины <i
:<math>
\begin{array}{c}
2^n=2^{m'}(n+1),
k_{\varepsilon}(m)m= n-\log_2(n+1)
\end{array}
</math> <b>(eq:hnm)</b>
безошибочной передачи равна <math>{P_0=(1-p)^n}</math>. Вероятность
одинарной ошибки <math>{P_1=n p^1(1-p)^{n-1}}</math>. Вероятность того,
что произошло более чем одна ошибка, и мы это заметили
:<math>P_{r}={(1-P_0-P_1)}{(1-\varepsilon)}={1-\varepsilon-(1-\varepsilon)(1-p)^{n-1}(np+1-p)}</math>
— в этом случае требуется повторная передача кадра.
Количество передаваемых данных:
:<math>D_{H}=L n{1 \over 1-P_{r}}={L n \over \varepsilon+(1-\varepsilon)(1-p)^{n-1}(np+1-p)}</math>
И коэффициент раздувания
:<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})
функция. Удобно записать соответствующие коэффициенты
Строка 801 ⟶ 836 :
:<math>
\begin{array}{l}
\\[0.8mm]
\\[0.5mm]
</math> <b>(eq:kps)</b>
Легко обнаружить что при <math>n>3444</math> и <math>p=10^{-6}</math> код Хемминга
оказывается эффективнее, то есть <math>
\begin{center}
\begin{figure}[h!]
\psfrag{knc}{кпс} \psfrag{n}{<i
\centering\includegraphics[clip=true,
width=0.48\textwidth]{pictures/kps.eps}
\centering\includegraphics[clip=true,
width=0.48\textwidth]{pictures/kps2.eps} \caption{
<math>
в канале с помехами как функция размера элементарного блока.}
\parbox{0.85\textwidth}{\small Светлый график — ''без кодирования Хемминга'';\\
Строка 830 ⟶ 866 :
\begin{center}
\begin{figure}[h!]
\psfrag{C}{<i
\centering\includegraphics[clip=true,
width=0.75\textwidth]{pictures/kpseff.eps}
Строка 841 ⟶ 877 :
\end{center}
Значение <math>
формулах (\ref{eq:kps}) можно оценить как
:<math>KPS_{\varepsilon}(n)={\log_2{\left(1-\varepsilon(2^n-1)\right)} \over n}</math>
Напомним, что <math>\varepsilon</math> есть параметр желаемой
Строка 852 ⟶ 890 :
ошибочной передачи блока при условии, что «контрольная сумма
сошлась» и кадр засчитан правильно переданным.
Такое выражение для <math>
получается из формулы
:<math>\varepsilon=\frac{2^m-1}{2^n-1}</math>
Но это безусловно лишь оценочная формула. Оптимальное
значение <math>
зависит от <i
больших <i
Но зависимость КПС от <i
кода. Эффективность кода определяется функцией
:<math>C(p,\varepsilon)=\min_{n}{KPS(p,n,\varepsilon)}</math>
На рисунке \ref{fig:kpseff} показан график этой функции и из
него ясно, что код Хемминга можно использовать с пользой
всегда — при любых <math>\varepsilon</math> и <i
возможность выбирать подходящее <i
===Коды как линейные операторы===
То, что на множестве {0,1} есть структура числового поля,
позволяет осуществлять алгебраические интерпретации кодирования.
Строка 890 ⟶ 931 :
(слова мы будем воспринимать как столбцы).
:<math>
\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\\
0&0&0&1
\end{array}
Процесс выявления ошибок тоже линейная операция, она
Строка 901 ⟶ 944 :
<math>\mathbf{s}=\overline{s_1s_2s_3}=\mathbf{H}\mathbf{w'}_{out}</math> в
случае правильной передачи должно быть равно 000. Значение
<math>\mathbf{s}</math> называется ''синдромом ошибки''. <i
слова <math>\mathbf{s}</math> контролирует <i
(\ref{eq:hem}) и, таким образом, <math>\mathbf{s}</math> равно сумме номеров
бит в которых произошла ошибка, как векторов в <math>G\mathbb{F}(2)^3</math>.
:<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
\end{array}
Заметим, что столбцы проверочной матрицы представляют собой
последовательно записанные в двоичной форме натуральные
Строка 915 ⟶ 960 :
Вычиcление рабочей матрицы для циклических кодов
основывается на значениях <math>G_n(x)=x^n\; mod\; G(x)</math>. Верхняя
её часть равна единичной, так <i
без изменения в начало слова, а нижние <i
столбцов высоты <i
<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> имеем
<math>r=3</math>, <math>n=7</math> и
:<math>
\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\\
Строка 929 ⟶ 975 :
001&010&100&011&110&111&101&001
\end{array}
</math>
Рабочая и проверочная матрицы равны
:<math>\mathbf{A}=\left\|\begin{array}{c} E_4\\G_6
G_5 G_4 G_3
\end{array}\right\| , \
то есть :<math>
\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\\
Строка 943 ⟶ 993 :
1&1&1&0&1&0&0\\ 0&1&1&1&0&1&0\\1&1&0&1&0&0&1
\end{array}.
</math>
Кроме рабочей и проверочной матриц есть ещё множество ''порождающих матриц <math>\mathbf{G}</math>'' и ''декодирующих матриц
Строка 952 ⟶ 1003 :
порождающей. В частности, рабочая матрица является порождающей.
Способность обнаруживать и исправлять ошибки однозначно
определяется подпространством <i
проверочных матриц соответствующих <i
Действительно, в порождающей и рабочей матрицах можно осуществлять
Строка 960 ⟶ 1011 :
всегда удовлетворяют отношениям
:<math>\mathbf{H}\cdot \mathbf{
\mathbf{H}\cdot \mathbf{G}=\mathbf{0}_{rm},</math>
где
<math>\mathbf{0}_{rm}</math> — нулевая матрица <math>r\times m</math>.\\ Любая
порождающая матрица может использоваться как
Строка 971 ⟶ 1024 :
матриц определяется рабочей матрицей:
:<math>\mathbf{D}\cdot \mathbf{A}=\mathbf{E}_m,</math>
где <math>\mathbf{E}_m</math> — единичная матрица <math>m\times m</math>. На
подпространстве <i
Они отличаются на подпространстве ортогональном <i
декодирующую матрицу для <math>Hem(7,4)</math> и <math>CRC_{n=7,\;m=7}</math>:
:<math>
\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
Строка 984 ⟶ 1040 :
0&1&0&0&0&0&0\\0&0&1&0&0&0&0\\0&0&0&1&0&0&0
\end{array}.
</math>
К каждой строчке декодирующей матрицы можно добавить любую
линейную комбинацию строчек из проверочной матрицы. Следует
Строка 992 ⟶ 1049 :
Сформулируем теперь основные моменты, касающиеся линейных кодов.
#
# Обнаружение ошибок равносильно проверке принадлежности полученного слова подпространству <i>L</i> допустимых слов. Для этого необходимо найти проекцию <math>\mathbf{s}</math> (синдром ошибки) полученного слова на <math>L^{\perp}</math> — тоже линейная операция. Для правильно переданного слова <math>\mathbf{s}=\mathbf{0}</math>. :<math>\mathbf{s}=\mathbf{H}\mathbf{w}'_{out}</math>
# В случае, когда векторы подпространства <i>L</i> достаточно удалены друг от друга в смысле метрики Хемминга, есть возможность обнаруживать и исправлять некоторые ошибки. В частности, значение синдрома ошибки в случае кода Хемминга равно векторной сумме номеров бит, где произошла ошибка.
# Комбинация (композиция) линейных кодов есть снова линейный код.
Практические методы помехоустойчивого кодирования все основаны на
линейных кодах. В основном это модифицированные <
Хемминга и их композиции. Например <math>Hem(7,4)</math> плюс проверка на
чётность. Такой код может исправлять уже две ошибки. Построение
Строка 1024 ⟶ 1069 :
Для данной проверочной матрицы постройте рабочую и декодирующую
матрицу. Докажите, что кодовое расстояние равно 4.
:<math>\mathbf{H}=\begin{array}{||cccccccc||}
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
\end{array}
''Подсказка ''\\
1) Это проверочная матрица <math>Hem(7,4)</math> плюс условие на чётность
Строка 1040 ⟶ 1087 :
кода с <math>G(x)=x^{3}+x+1</math> и <math>m=4</math> при условии, что в качестве
рабочей матрицы использовалась матрица
:<math>\mathbf{A}=
\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
\end{array}.
\end{task}
===*Коды Рида-Соломона===
После перехода на язык линейной алгебры естественно возникает
желание изучить свойства линейных кодов над другими конечными
Строка 1053 ⟶ 1102 :
Рида-Соломона.
{
числовым полем отличным от <math>G\mathbb{F}(2)</math>. Напомним, что существует бесконечное количество конечных полей, и
Строка 1061 ⟶ 1111 :
таким числом элементов, которое обозначается как
<math>G\mathbb{F}(n)</math>. Простейшая реализация этого поля — множество
многочленов по модулю неприводимого{{ref|note3}} многочлена <math>p(x)</math> степени <i
полем <math>\mathbb{F}_{q}</math> вычетов по модулю <i
многочленов с действительными коэффициентами неприводимыми
многочленами являются только квадратные многочлены с
Строка 1073 ⟶ 1123 :
==Примеры протоколов канала данных==
===<i>HDLC</i> протокол===
Здесь мы познакомимся с группой протоколов давно известных, но
по-прежнему широко используемых. Все они имеют одного
предшественника – <
протокол управления синхронным каналом, предложенным фирмой <
в рамках <
под названием <
модифицировала <
Link Access Procedure. Позднее он был модифицирован в <
Все эти протоколы построены на одних и тех же принципах. Все
Строка 1103 ⟶ 1152 :
*
* Поле <i>Data</i> может быть сколь угодно большим и используется для передачи данных. Надо только иметь ввиду, что чем оно длиннее тем, больше вероятность повреждения кадра на линии.
* Поле <i>Checksum</i> — это поле используется <i>CRC</i> кодом.
Флаговые последовательности <i
разделения кадров и постоянно передаются по незанятой линии
в ожидании кадра. Существуют три вида кадров: <math>Information</math>,
<math>Supervisory</math>, <
Организация поля <
рис. \ref{fig:cfield}. Как видно из размера поля <
отправителя может быть до <i
<
передаваемым кадром. Подтверждение может быть в форме номера
последнего правильно переданного кадра, а может быть в форме
первого не переданного кадра. Какой вариант будет использован —
это параметр.
\begin{center}
\begin{figure}[h!]
\centering\includegraphics[clip=true,
width=0.88\textwidth]{pictures/cfield.eps} \caption{Cтруктура поля
< \parbox{0.66\textwidth}{\small (а) Информационный кадр (<math>Information</math>)\\
(б) Управляющий кадр (<math>Supervisory</math>)\\(в) Ненумерованный
кадр (<
\label{fig:cfield}
\end{figure}
Строка 1138 ⟶ 1184 :
Разряд <math>P/F</math> использует при работе с группой терминалов.
Когда компьютер приглашает терминал к передаче он
устанавливает этот разряд в <i
терминалами имеют здесь <i
посылаемый терминалом, то здесь стоит <i
<math>Supervisory</math> кадры имеют четыре типа кадров.
*
* Тип 1 — негативное уведомление (REJECT) — указывает на ошибку при передаче. Поле <i>Next</i> указывает номер кадра, начиная с которого надо перепослать кадры.
* Тип 2 — RECEIVE NOT READY. Подтверждает все кадры, кроме указанного в Next. Используется, чтобы сообщить источнику кадров об необходимости приостановить передачу в силу каких-то проблем у получателя. После устранения этих проблем получатель шлет RECEIVE REDAY, REJECT или другой надлежащий управляющий кадр.
* Тип 3 — SELECTIVE REJECT — указывает на необходимость перепослать только кадр, указанный в Next. <i>LAPB</i> и <i>SDLC</i> не используют этого типа кадров.
Третий класс кадров — <i>Unnubered</i>. Кадры этого класса иногда
используются для целей управления, но чаще для передачи данных
при ненадёжной передаче без соединения.
Строка 1170 ⟶ 1206 :
повреждение управляющего кадра.
# {{note|note1}} Идея рассмотрения информации как меры на множестве ещё не до конца исчерпала себя — такой меры ещё не построено. Однако доказано, что с помощью этой аналогии можно доказывать неравенства, например <math>{I(\{\xi_{in}\,\xi_{out}\})\geqslant 0}</math>.
# {{note|note2}} Матрица называется ''стохастической'', если все её элементы неотрицательны и сумма элементов в каждом столбце равна единице.
# {{note|note3}} Многочлен называется ''неприводимым'', если он не разлагается в произведение многочленов меньшей степени.
|