Вы находитесь на странице: 1из 6

Канал с шумом

Перед обсуждением кодов для «сжатия» данных (эффективного кодирования)


мы поговорили о содержании информации в данных – т.е. об энтропии, а затем
перешли к кодам. С кодами коррекции ошибок мы поступили наоборот – сначала
обсудили некоторые вопросы кодирования. Теперь скажем несколько слов о
передаче данных по каналам с шумами с точки зрения теории информации.
Пусть у нас есть канал, по которому мы можем подавать сигналы различной
мощности, от до . И пусть в канале присутствует шум с мощностью .
Допустим, мы можем подавать сигналы с частотой раз в секунду. Сколько бит
информации в секунду можно передать по такому каналу?
Принятый сигнал имеет мощность от до (после усиления,
восстановления уровня и т.д.). В каком случае мы можем на стороне приёма
различить, какой сигнал (какой мощности) был передан? Различить сигналы
возможно, если при передаче разность их мощностей была не меньше -
максимальной мощности шума. Тогда, если на сигнал и наложится шум, при приёме
будет ясно, к какому исходному сигналу ближе полученный сигнал, а значит, какой
сигнал был передан.
Так что количество возможных уровней сигнала, которые можно использовать
при передаче, чтобы их можно было различить после приёма, равно . Больше
разных вариантов сигнала передать нельзя. Как мы помним, максимальное
количество информации на сообщение при возможных сообщений равно .
Так что если мы передаём сигналов в секунду, то максимальное количество
информации, которое можно передать в секунду равно

бит в секунду.
Такова максимальная скорость передачи информации в канале с шумом при
указанном отношении сигнал/шум . Отношение сигнал/шум измеряется в
децибелах (точнее, в белах, деци- - приставка, означающая одну десятую). Данная
единица – логарифмическая, изменение на 1 бел = в 10 раз. Отношение сигнал/шум
в 1 бел означает, что сигнал имеет мощность, большую, чем шум в 10 раз, 2 бел – в
100 раз и т.д. Отношение сигнал/шум в белах бел, в децибелах

дБ.
Число изменений (новых значений) сигнала в секунду измеряется в бодах. Эту
единицу часто путают с битами в секунду. Если сигнал у нас имеет вид «включено-
выключено» или «одна частота - другая частота» (такой сигнал использовался на
начальном этапе соединения модемов), то число изменений сигнала в секунду
совпадает с числом бит в секунду, но как видно из рассуждений выше, за одну
подачу сигнала мы можем передать, если канал позволяет, гораздо больше -
бит информации, так что скорость передачи бит в секунду может быть
значительно больше числа значений сигнала в секунду.
Отметим, что иллюстрация, с помощью которой мы получили формулу выше,
конечно, не доказательство, а именно иллюстрация. Два сигнала, в принципе, можно
различить, даже если разность их мощностей меньше мощности шума, но для этого
их надо передавать достаточно долго. Сигналы различаются не только текущей
мощностью, но и частотой и фазой, и по этим параметрам их тоже можно различать
и передавать сигналы на достаточном «расстоянии» по этим параметрам друг от
друга. Однако, сама формула верна, доказательство, с помощью геометрических
рассуждений, вы можете найти в работе Шеннона. Обратите внимание, кстати, даже
для случая когда и наше рассуждение-иллюстрация не работает, формула
даёт определённое значение для скорости передачи не равное нулю. В
оригинальной формуле под понимается ширина полосы частот, занимаемая
сигналом. Отметим также, что под шумом выше понимается именно белый шум –
значения которого для каждого следующего сигнала никак не связаны с
предыдущим, иначе мы могли бы воспользоваться характеристиками шума для
лучшей передачи сигнала.
Рассуждение о расстоянии между сигналами – по мощности или по частоте или
фазе, напоминает рассуждение о расстоянии Хэмминга между кодовыми словами, о
котором мы говорили выше. Суть та же – в том или ином пространстве разнести
разные сигналы или коды на достаточное расстояние, чтобы отличить их друг от
друга даже при некотором уровне шума.
Вернёмся к вопросам кодирования. В прошлый раз мы познакомились с одним
из корректирующих кодов – кодом Хэмминга и, отдельно, поговорили о расстоянии
между кодовыми последовательностями, о шарах в пространстве таких расстояний с
«радиусом», равным максимальной ошибке, вокруг кодов передаваемых данных.
Напомню, что расстоянием Хэмминга между двумя битовыми
последовательностями называется количество позиций, в которых у этих
последовательностей биты отличаются, например, расстояние между 11100 и 10001
равно 3 – различающиеся позиции подчёркнуты. Шарами радиуса вокруг данной
кодовой последовательности, как и в обычной геометрии, называется множество
точек (т.е. множество кодовых последовательностей), расстояние от которых до
данной меньше или равно . Например, шар радиуса 1 вокруг последовательности
000 включает в себя 100, 010 и 001, остальные 3-битные кодовые
последовательности - «дальше», не попадают внутрь шара.
Мы рассмотрели эти две темы отдельно. Отметили только, что при обсуждении
расстояний между кодовыми последовательностями мы нигде не выделяли биты
исходных данных и контрольные биты, а в коде Хэмминга эти биты были чётко
разделены. Действительно, коды не обязательно содержат отдельно биты исходных
данных, отдельно контрольные – лишь бы по кодовой последовательности в целом
мы могли определить, какие биты данных были закодированы. Коды, в которых
присутствуют отдельно биты данных и контрольные биты в явном виде называются
систематическими кодами, те, в которых биты данных и контрольные не разделены, -
несистематическими,
Мы хотим подбирать кодовые последовательности так, чтобы шары вокруг них
с заданным радиусом не пересекались, при этом мы теряем (не используем в
кодировании) последовательности внутри шаров, кроме центральной, вокруг которой
построен шар. Чем больше последовательностей мы теряем, тем меньше их
остаётся для кодирования и тем на меньшие порции придётся разбивать исходные
данные, чтобы закодировать их данным кодом, т.е. тем больше кодовых
последовательностей придётся передать, чтобы передать одно и то же число
данных.
Но последовательности внутри шаров мы исключаем специально – чтобы код
исправлял ошибки, но что насчёт последовательностей вне шаров? В обычной
геометрии, как бы плотно мы шары (или круги на плоскости) ни расположили,
останутся ещё промежутки между ними, не входящие ни в один шар. Есть ли такие
кодовые последовательности, которые не исключаются ради корректирующей
способности кода, но всё-таки не используются в кодировании?
Пусть мы используем кодовые слова длины . И хотим, чтобы наш код
исправлял ошибок ( , конечно). Значит, мы исключаем вокруг каждого
используемого кодового слова все кодовые слова, отличающиеся от него в и
менее позициях. Количество комбинаций, отличающихся от данного слова ровно в
позициях равно, что называется в комбинаторике, числу сочетаний из по , .

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

шары не пересекаются у разных используемых последовательностей, если мы хотим


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

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

используемую последовательность и получим, что последовательностей в каждом


шаре . Двоичных последовательностей длины всего , так что если мы не

теряем никакие последовательности, кроме тех, что исключили в шарах ради


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

и это максимально возможное значение, оно называется границей Хэмминга, если


же теряются ещё какие-то последовательности, то знак равенства нужно заменить
на ,

Коды, для которых выполняется равенство, называются совершенными кодами,


те, для которых выполняется неравенство – несовершенными. Совершенные коды
используют максимум кодовых последовательностей длины при условии
исправления ошибок при передаче кодового слова.
Код Хэмминга – совершенный код. Он простой и удобный для аппаратной
реализации. Почему же везде не используется код Хэмминга, для чего придумывают
другие коды? Дело в том, что код Хэмминга исправляет только одну ошибку на
кодовое слово.
Что ж, можно взять слова покороче – такие, на которые в используемом канале
приходится в среднем одна ошибка. Дело в том, что ошибки в каналах могут быть
распределены по-разному, они могут быть по одной равномерно рассеяны по всей
передаче, но могут группироваться в большие кластеры – при том же среднем
значении ошибок на бит. В каналах первого типа коды Хэмминга действительно
хорошо работают, но в каналах второго типа для исправления всех ошибок придётся
брать очень малые пакеты кода Хэмминга (а чем меньше пакет, тем большая часть
его бит - проверочная, т.е. тем больше бит передаётся на одно и то же количество
исходных данных), причём большая часть таких пакетов не будет содержать ни
одной ошибки, ведь ошибки сгруппированы, и все их проверочные биты будут
добавлены напрасно.
Поэтому люди используют другие виды кодов, исправляющие большее
количество ошибок на пакет, пусть и несовершенные в указанном выше смысле.
Самый известный пример таких кодов – код Рида-Соломона.
Код Рида-Соломона является, как и код Хэмминга, линейным, но недвоичным.
Сначала о недвоичности. Все примеры кодов, которые мы рассматривали,
работали с двоичными единицами, но это отнюдь не обязательно. Известный вам
код Морзе, например, троичный – паузы там имеют значение, мы с вами кодируем на
письме нашу речь буквами, число символов в алфавите более 30 (учтём ещё
пробел, знаки препинания), выше при обсуждении формулы для максимальной
скорости мы говорили, что за одну передачу сигнала может быть передано одно из
значений, получается -символьный алфавит. Код Рида-
Соломона работает с недвоичным алфавитом, например, с целыми байтами, т.е. с
256-значным алфавитом.
Для недвоичного, -ичного алфавита мы можем ввести аналог контрольного
бита (например, сумма кодов всех символов блока – сумма по модулю, конечно) и
построить аналог кода Хэмминга. Немного изменятся известные нам формулы,
например, граница Хэмминга (максимум слов исходных данных, которые можно
закодировать одним блоком кода) будет иметь вид

т.к. общее количество слов длины станет равным , а число слов на расстоянии
вокруг используемого слова увеличится в раз, т.к. заменить каждый символ
мы сможем не на 1 другой (1 на 0 и 0 на 1 в двоичном коде), а на .
Что означает «линейность» вы помните – «сумма переходит в сумму,
умножение на константу переходит в умножение на константу», например,
производная – линейный оператор, т.к. и
. А уравнение линейно, т.к. если и его решения, то и
- тоже решение, и - тоже решение.
Линейные коды – такие, что сумма двух используемых кодовых слов тоже
используется в коде и произведение на константу (по модулю! все операции по
модулю) тоже используемое кодовое слово.
Линейные коды – самые распространённые.
Код Хэмминга – линейный, что видно просто из того, что мы выписывали для
него матрицу – такую, что произведение исходного слова на такую матрицу давало
кодовое слово для данного исходного:

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


данных перейдёт в сумму соответствующих им кодовых слов, произведение
исходного слова на константу (здесь, правда, только 0 и 1) – в произведение.
Такие матрицы, позволяющие получать для линейных кодов кодовые слова по
словам исходных данных называются порождающими или генераторными или
генерирующими матрицами.
Вообще, в матричной алгебре преобразования из вектора в вектор через
умножение на матрицу чаще встречается в форме умножения не строки на матрицу,
а матрицы на столбец (тогда матрица пишется перед вектором, что выглядит
привычнее – как применение оператора) и получается столбец. Кодовые слова,
поскольку это слова, было привычнее записывать как строки, а не столбцы, поэтому
здесь преобразование чаще встречается в виде сторка×матрицу, но то же
преобразование можно записать и в форме матрица на столбец, например,
преобразования выше будет выглядеть так:

Напомню, что умножение нулей и единиц выполняется здесь обычным образом,


а суммирование осуществляется по модулю, т.е. берётся xor.
Как вы помните, синдром кода – биты результата проверки , указывающие
на бит с ошибкой, либо равные , если ошибки не было, тоже получался в виде
суммы битов кодового слова. То есть, получение синдрома тоже можно записать в
виде матрицы, для кода выше –
(видите «локализацию пересекающимися группами 4-2-1», описанную ранее? с
учётом того, что нуль означает, что шибок нет, так что нулевой бит не
записывается), то есть синдром кода равен

такая матрица называется проверочной матрицей.


Определение кода в виде матриц – серьёзное упрощение, т.к. вместо
составления таблицы соответствия всех исходных слов всем кодовым словам, мы
задаём одну компактную матрицу для всех исходных слов.

Задачи

1. Найти расстояние Хэмминга для следующих пар


а) 0000 и 0001, б) 1100 и 0110, в) 0101 и 1010

2. Найти и записать все кодовые слова, входящие в шар радиуса 2 вокруг


кодового слова 00011. Сколько получилось таких кодовых слов? В тексте
упоминалась формула для числа кодовых последовательностей, которые «окажутся
в шаре и будут исключены из используемых» - совпадает ли число найденных вами
последовательностей с числом, найденным по данной формуле?

3. Является ли 3-битный код (0 → 000, 1 → 111), исправляющий одну ошибку,


описанный в предыдущем тексте, совершенным?

4. Какая максимальная скорость передачи возможна в канале с отношением


сигнал/шум 50 дБ при ширине полосы частот 200 кГц (стандартная полоса GSM
телефона), слагаемым в числителе можете пренебречь, помните об основании
логарифма для децибел и для скорости.

5. Получить кодовую последовательность кода Хэмминга с помощью


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

Вам также может понравиться