Помехоустойчивое кодирование: различия между версиями
Содержимое удалено Содержимое добавлено
Greck (обсуждение | вклад) Нет описания правки |
Greck (обсуждение | вклад) Нет описания правки |
||
Строка 14:
только этому уровню:
* реализация сервиса для сетевого уровня,
* разбиение потока бит на кадры,
*
* обработка ошибок передачи.
Основная задача канального уровня — обеспечить сервис сетевому уровню,
Строка 33 ⟶ 34 :
посылке данных.
<b>Контрольная сумма</b>
содержательной части кадра (слова длины <math>m</math>), область
значений которой
Эти <i>r</i> бит добавляются обычно в конец кадра. При приёме
Строка 85 ⟶ 86 :
принято шесть и за ними следует ноль, то это управляющий сигнал:
начало или конец кадра, а в случае, когда подряд идут более шести
единиц, — сигнал ожидания или аварийного завершения.
(а) 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1
Строка 94 ⟶ 92 :
Bit Stuffing. (a) исходные данные (б) посылаемые данные. Жирным отмечены вставленные нули.
Таким образом, кадр легко может быть распознан по
Строка 167 ⟶ 164 :
кадров тот может принять. Получатель сообщает ему определённое
число кадров. Отправитель после того, как передаст это число
кадров, должен приостановить передачу и снова спросить получателя,
как много кадров тот может принять, и т.д.
==Помехоустойчивое кодирование==
Строка 217 ⟶ 214 :
''Первый'' заключается в добавлении в передаваемый блок
данных нескольких
полученный блок, можно было бы сказать есть в переданном
блоке ошибки или нет. Это, так называемые, '''коды с
Строка 247 ⟶ 244 :
<math>\{p_1,\dots,p_a\}</math> на <math>\Omega_{in}</math>, а распределение на
выходе вычисляется по формуле
:<math>q_i=\sum_{j=1}^{a}r_{ij}p_j.</math>
Строка 253 ⟶ 249 :
Объединённое распределение на
<math>\Omega_{in}\times\Omega_{out}</math> равно
:<math>P_{ij}=r_{ij}p_j.</math>
Информация <math>I(\{\xi_{in},\,\xi_{out}\})</math>, передаваемая через
Строка 268 ⟶ 262 :
где
:<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> независимы (то
Строка 287 ⟶ 278 :
равна величине объединённой информации. В теории
меры{{ref|note1}} есть выражение
аналогичное (
:<math>\mu(A\wedge B)=\mu(A)+\mu(B)-\mu(A\vee B).</math>
Распределение входной случайной величины <math>\xi_{in}</math> мы можем
Строка 303 ⟶ 292 :
Эта функция есть решение задачи
<div class="task"><b>Задача 1.</b>
<b>(task:shanon)</b> Каково максимальное количество информации,
которое можно передать с одним битом по каналу
<math>\{\xi_{in},\,\xi_{out}\}</math>?
<b>Конец задачи.</b></div>
{\slshape Итак, пропускная способность есть функция на
Строка 315 ⟶ 307 :
:<math>\Omega_{in}=\Omega_{out}=\{0,1\}.</math>
:<math>
Строка 330 ⟶ 320 :
:<math>C= 1-H(p)=1+p\log_2p+(1-p)\log_2{(1-p)}.</math>
Эта функция является решением задачи на максимум (
для матрицы (
\begin{figure}[t!]
\centering\includegraphics[clip=true,
width=0.75\textwidth]{pictures/cideal.eps} \caption{ <math>C(p)</math> —
Пропускная способность канала как функция вероятности
инвертирования бита.}
\end{figure}
</div>
Эта функция <math>C(p)</math> (рис.
помехоустойчивого кодирования — если мы хотим с абсолютной
надёжностью передать по каналу с пропускной способностью <i>C</i>
Строка 350 ⟶ 340 :
незамеченной ошибки в переданном слове меньше, чем <math>\varepsilon</math>,
раздувает данные в <math>k_{\varepsilon}(m,p)</math> раз и
:<math>\lim_{\varepsilon\to 0}\lim_{m\to\infty}k_{\varepsilon}(m,p)\geqslant {1/C(p)}.</math>
Строка 360 ⟶ 349 :
<math>k_0(m,p)=\infty.</math>
Задача дуальная
образом
<div class="task"><b>Задача 2.</b>
<b>(task:dual)</b>
Мы хотим передавать информацию со скоростью <i>V</i> по каналу с
пропускной способностью <i>C</i>. Какова минимальная вероятность
ошибочной передачи одного бита?
<b>Конец задачи.</b></div>
Решением будет функция заданная неявно
Строка 379 ⟶ 372 :
ста будут переданы с ошибкой.
\begin{figure}[t!]
\psfrag{v}{<i>v</i>} \psfrag{p}{ <math>p(v)</math>}
Строка 386 ⟶ 379 :
минимальная вероятность ошибки в одном бите как функция от
отношения скорости передачи и пропускной способности <math>v=V/C</math>.}
\end{figure}
</div>
Построение конкретных способов кодирования, приближающихся
по пропускной способности к теоретической границе —
сложная математическая задача.
===Метод
Простым примером
кода с обнаружением одной ошибки является код с битом чётности.
Строка 411 ⟶ 405 :
позволяет обнаружить групповые ошибки длины <math>\leqslant n</math>.
<div class="task"><b>Задача 3.</b>
Слово длиной <i>n</i> с чётным количеством единиц передано по каналу с
уровнем шума <i>p</i>. Покажите, что вероятность того, что при
Строка 429 ⟶ 424 :
Например, при <math>n=1000</math> и <math>p=10^{-6}</math> получаем <math>P_{miss}\approx 4.99\cdot 10^{-7}</math>
<b>Конец задачи.</b></div>
Следующая задача повышенной сложности.
<div class="task"><b>Задача 4.</b>
[*]
<b>(task:errmod)</b> Пусть у нас есть возможность контролировать
сумму единичек по модулю <i>d</i>. Тогда вероятность нефиксируемых
ошибок в слове длиной <i>n</i> при передаче его по каналу с шумом <i>p</i>
Строка 461 ⟶ 459 :
вероятность <math>P_{miss}</math>, тем меньше коэффициент содержания
полезной информации.
<b>Конец задачи.</b></div>
Итак, с помощью одного бита чётности мы повышаем надёжность
Строка 477 ⟶ 476 :
:<math>\rho_H(10001001,10110001)=3.</math>
<div class="task"><b>Задача 5.</b>
Докажите, что <math>\rho_H</math> метрика.
<b>Конец задачи.</b></div>
Если два слова находятся на расстоянии <i>r</i> по Хеммингу,
Строка 497:
между двумя различными допустимыми кодовыми словами
называется ''расстоянием Хемминга данного кода''.
Элементарный пример помехоустойчивого кода — это код, у
Строка 504 ⟶ 503 :
:<math>0000000000,\; 0000011111,\; 1111100000,\; 1111111111.</math>
Расстояние по Хеммингу у этого кода 5, следовательно он может
Строка 523 ⟶ 521 :
Здесь мы подошли к довольно трудной задаче —
минимизировать коэффициент раздувания для требуемой
надёжности передачи. Она рассматривается в
===Циклические коды===
Строка 545 ⟶ 543 :
Полином <math>G(x)</math> тем лучше, чем больше среднее расстояние Хемминга
на парах допустимых полиномов.
Есть два очевидных способа кодирования сообщения в полином,
Строка 555 ⟶ 552 :
Отправитель и получатель заранее договариваются
о конкретном ''полиноме-генераторе'' <math>G(x)</math>. Пусть степень
<math>G(x)</math> равна <i>l</i>. Тогда длина блока
равна <i>l</i>.
Строка 571 ⟶ 568 :
# ''Разделить полином <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>, и есть результат.''
Рис.
<i>1101011011</i> и <math>{G(x)=x^4+x+1}</math>.
Строка 584 ⟶ 581 :
width=0.75\textwidth]{pictures/crc2.eps}
\caption{CRC — полиномиальное кодирование}
\end{figure}
Строка 600 ⟶ 597 :
одиночные, двойные ошибки, групповые ошибки длины не более 16 и
нечётное число изолированных ошибок с вероятностью <i>0.99997</i>.
===* Теоретический предел===
к задаче
значение коэффициента содержания полезной информации (КПС) на
один бит, если передавать данные по каналу с шумом <i>p</i> словами
Строка 620 ⟶ 616 :
абсолютной точностью.
<div class="task"><b>Задача 6.</b>
<b>(task:err)</b>
Мы хотим передавать информацию блоками, которые содержали
бы <i>m</i> бит полезной информации, так, чтобы
вероятность ошибки в одном бите равнялась <i>p</i>, а
правильность передачи
минимальный размер блока <math>n(m,p)</math> и коэффициент раздувания
<math>k=\frac{n(m)}{m}</math>.
<b>Конец задачи.</b></div>
''Решение.''
Для передачи <i>m</i> бит с вероятностью ошибки в отдельном бите
<i>p</i> требуется передать <math>m C(p)</math> бит
(см. задачу
об ошибке в передаче. Её вероятность равна <math>(1-p)^m</math>, а
значит информация, заложенная в этом сообщении,
Строка 651 ⟶ 650 :
Понятно, что данная теоретическая оценка занижена.
===Коды Хемминга===
Строка 670 ⟶ 668 :
слов и эти множества не должны пересекаться. Так как общее число
слов <math>2^n</math>, то
:<math>
Строка 677 ⟶ 674 :
\end{array}
</math>
Этот теоретический предел достижим при использовании
Строка 702 ⟶ 698 :
\end{array}
</math> <b>(eq:hem)</b>
Код Хемминга оптимален при <math>n=2^r-1</math> и <math>m=n-r</math>. В общем случае
Строка 724 ⟶ 719 :
\lefteqn{b_{15}}\hphantom{1}
\end{array}</math>
Получив слово,
Строка 743 ⟶ 736 :
\centering\includegraphics[clip=true,
width=0.65\textwidth]{pictures/hem.eps} \caption{Кодирование
Хемминга}
\end{figure}
<div class="task"><b>Задача 7.</b>
Покажите, что <math>KPS_{Hem(n,m)}\to 1</math> при <math>n\to
\infty</math>.
<b>Конец задачи.</b></div>
Код Хемминга может исправлять только единичные ошибки. Однако,
Строка 790 ⟶ 783 :
кодирование, позволяющее с вероятностью <math>1-\varepsilon</math>
определять ошибочность передачи. Это осуществляется путем
добавления
раздувания для этого кодирования <math>k_\varepsilon(m)</math>. После
этого кодирования каждый блок несёт информацию
Строка 808 ⟶ 801 :
:<math>k(m,p,\varepsilon)=\frac{D}{M}=\frac{k_{\varepsilon}(m)}{\varepsilon+(1-\varepsilon)(1-p)^{k_{\varepsilon}(m)m}}</math>
2) '''С кодом Хемминга.'''\\ При кодировании методом
Строка 820 ⟶ 812 :
\end{array}
</math> <b>(eq:hnm)</b>
Для отдельного блока вероятность
Строка 838 ⟶ 829 :
\over m\bigl(\varepsilon+(1-\varepsilon)(1-p)^{n-1}(np+1-p)\bigr)},</math>
где <math>n(m)</math> неявно определённая с помощью (
функция. Удобно записать соответствующие коэффициенты
полезного содержания:
Строка 850 ⟶ 841 :
\\[0.5mm] m'=n-\log_2{(n+1) \end{array}
</math> <b>(eq:kps)</b>
Легко обнаружить что при <math>n>3444</math> и <math>p=10^{-6}</math> код Хемминга
оказывается эффективнее, то есть <math>KPS_H/KPS>1</math>
\begin{figure}[h!]
\psfrag{knc}{кпс} \psfrag{n}{<i>n</i>}
Строка 868 ⟶ 857 :
Темный график — ''с кодированием Хемминга'';
\\Параметры: <math>\varepsilon=10^{-6}\;</math>; <math>p=10^{-6}.</math>}
\end{figure}
</div>
<div align="center">
\begin{figure}[h!]
\psfrag{C}{<i>C</i>} \psfrag{p}{<i>p</i>}
Строка 880 ⟶ 870 :
\parbox{0.97\textwidth}{ \small Светлый график — ''без кодирования Хемминга'';\\ Темный график — ''с кодированием Хемминга'';\\Тонкий график — теоретический
предел, задаваемый функцией <math>C(p)</math>\\Параметры:
<math>\varepsilon=10^{-6}</math>.}
\end{figure}
</div>
Значение <math>KPS_{\varepsilon}(n)</math> используемое в
формулах (
:<math>KPS_{\varepsilon}(n)={\log_2{\left(1-\varepsilon(2^n-1)\right)} \over n}</math>
Напомним, что <math>\varepsilon</math> есть параметр желаемой
Строка 895 ⟶ 883 :
— чем меньше <math>\varepsilon</math>, тем надёжнее передача.
По определению <math>\varepsilon=P_{miss}/(1-P_{0})</math> — вероятности
ошибочной передачи блока при условии, что
сошлась
Такое выражение для <math>KPS_{\varepsilon}(p,n)=\frac{m}{n}</math>
получается из формулы
:<math>\varepsilon=\frac{2^m-1}{2^n-1}</math>
Но это безусловно лишь оценочная формула. Оптимальное
Строка 908 ⟶ 894 :
зависит от <i>p</i>.
Из графика на рисунке
больших <i>n</i> код Хемминга начинает работать на пользу.
Строка 916 ⟶ 902 :
:<math>C(p,\varepsilon)=\min_{n}{KPS(p,n,\varepsilon)}</math>
На рисунке <b>(fig:kpseff)</b> показан график этой функции и из
него ясно, что код Хемминга можно использовать с пользой
всегда — при любых <math>\varepsilon</math> и <i>p</i>, если у нас есть
Строка 926 ⟶ 911 :
позволяет осуществлять алгебраические интерпретации кодирования.
Заметим, в частности, что как коды Хемминга, так и циклические
коды ''линейны'':\\ 1) отношения (
с. \pageref{eq:hem}, связывающие контрольные биты кода Хемминга с
другими линейны,\\ 2) остаток от деления суммы многочленов на
Строка 933 ⟶ 918 :
<math>G\mathbb{F}(2)^n</math>. Поясним на примерах. Ниже представлена
матрица кода Хемминга <math>Hem(7,4)</math> (см.
соотношения (
<math>{\mathbf{w}_{in}=\overline{b_3b_5b_6b_7}}</math>, а результирующее
<math>{\mathbf{w}_{out}=\overline{b_1b_2b_3b_4b_5b_6b_7}=\mathbf{A}_{Hem(7,4)}\mathbf{w}_{in}}</math>
(слова мы будем воспринимать как столбцы).
:<math>
Строка 944 ⟶ 928 :
0&0&0&1
\end{array}</math>
Процесс выявления ошибок тоже линейная операция, она
Строка 953 ⟶ 936 :
<math>\mathbf{s}</math> называется ''синдромом ошибки''. <i>i</i>-ый разряд
слова <math>\mathbf{s}</math> контролирует <i>i</i>-ое соотношение в
(
бит в которых произошла ошибка, как векторов в <math>G\mathbb{F}(2)^3</math>.
:<math>\mathbf{H}_{Hem(7,4)}=\begin{array}{||ccccccc||}
Строка 1001 ⟶ 983 :
\end{array}.
</math>
Кроме рабочей и проверочной матриц есть ещё множество ''порождающих матриц <math>\mathbf{G}</math>'' и ''декодирующих матриц
Строка 1017 ⟶ 998 :
строчками. Матрицы <math>\mathbf{A}</math>, <math>\mathbf{H}</math> и <math>\mathbf{G}</math>
всегда удовлетворяют отношениям
:<math>\mathbf{H}\cdot \mathbf{A}=\mathbf{0}_{rm},\;
Строка 1030 ⟶ 1010 :
таким свойством может быть несколько. Множество декодирующих
матриц определяется рабочей матрицей:
:<math>\mathbf{D}\cdot \mathbf{A}=\mathbf{E}_m,</math>
Строка 1052 ⟶ 1031 :
линейную комбинацию строчек из проверочной матрицы. Следует
отметить, что процесс исправления ошибок для кодов Хемминга
нелинеен и его нельзя
Сформулируем теперь основные моменты, касающиеся линейных кодов.
Строка 1073 ⟶ 1052 :
уровня групповые ошибки.
<div class="task"><b>Задача 8.</b>
Для данной проверочной матрицы постройте рабочую и декодирующую
матрицу. Докажите, что кодовое расстояние равно 4.
Строка 1088 ⟶ 1068 :
2) Кодовое расстояние равно минимальному количеству линейно
зависимых столбцов в <math>\mathbf{H}</math>.
<b>Конец задачи.</b></div>
<div class="task"><b>Задача 9.</b>
Посторойте декодирующую и проверочную матрицу для циклического
кода с <math>G(x)=x^{3}+x+1</math> и <math>m=4</math> при условии, что в качестве
Строка 1100 ⟶ 1082 :
\end{array}.</math>
<b>Конец задачи.</b></div>
===*Коды Рида-Соломона===
Строка 1144 ⟶ 1125 :
битов. Различия между ними незначительные.
\begin{figure}[h!]
\centering\includegraphics[clip=true,
width=0.88\textwidth]{pictures/frame.eps} \caption{Типовая
структура кадра}
\end{figure}
</div>
На рис. <b>(fig:frame)</b> показана типовая структура кадра.
Поле адреса используется для адресации терминала, если их
несколько на линии. Для линий точка-точка это поле
используется для различия команды от ответа.
* Поле <i>Control</i> используется для последовательных номеров кадров, подтверждений и других нужд.
Строка 1169 ⟶ 1148 :
Организация поля <i>Control</i> для этих трех видов кадров показана на
рис.
отправителя может быть до <i>7</i> неподтверждённых кадров. Поле
<i>Next</i> используется для посылки подтверждения вместе с
Строка 1176 ⟶ 1155 :
первого не переданного кадра. Какой вариант будет использован —
это параметр.
<div align="center">
\begin{figure}[h!]
\centering\includegraphics[clip=true,
Строка 1184 ⟶ 1164 :
(б) Управляющий кадр (<math>Supervisory</math>)\\(в) Ненумерованный
кадр (<i>Unnumbered</i>) }
\end{figure}
</div>
Разряд <math>P/F</math> использует при работе с группой терминалов.
Строка 1196 ⟶ 1175 :
<math>Supervisory</math> кадры имеют четыре типа кадров.
* Тип 0 — уведомление в ожидании следующего кадра (RECEIVE READY). Используется когда нет встречного трафика, чтобы передать уведомление в кадре с данными.
|