4.3 Кодирование в дискретном канале с шумом
Теоремы Шеннона о кодировании в дискретном канале с шумом. Дискретным каналом с шумом называется канал, в котором сигналы А(t) и В(t) (см. рис. 4.1.1) являются последовательностями символов, однозначная связь между входными и выходными сигналами отсутствует, и поэтому передача символов в канале сопровождается случайными ошибками.
Ответ на вопрос о возможности безошибочной передачи информации дается теоремами Шеннона о кодировании в дискретных каналах с шумом.
Первая и вторая теоремы. Если скорость создания информации Н источником на входе шумящего канала без памяти с пропускной способностью С меньше пропускной способности, то существует такой код, при котором вероятность ошибок на приемном конце сколь угодно мала, а скорость передачи информации сколь угодно близка к скорости ее создания.
Обратная теорема. Если Н > С, то никакой код не сможет сделать вероятность ошибок сколь угодно малой и достигнуть ненадежности, меньшей чем Н-С.
Основной способ повышения помехоустойчивости системы передачи информации – это разумное введение избыточности в передаваемый сигнал А(t).
Корректирующие коды. Идея рационального введения избыточности в передаваемый сигнал для борьбы с ошибками в каналах с шумами реализуется применением корректирующих кодов. Так называются коды, которые позволяют обнаруживать и даже исправлять ошибки, возникающие в канале. Наиболее часто применяют двоичные равномерные корректирующие коды.
Пусть а1, а2, ... , аs – двоичные кодовые слова длиной в n символов каждое, соответствующие s буквам алфавита источника. Каждое кодовое слово можно формально рассматривать как вектор-строку, соответствующий некоторой точке в n-мерном пространстве.
Расстояние Хэмминга djk между двумя кодовыми словами аj и аk равно числу символов, в которых эти слова отличаются одно от другого.
У
Таблица 4.3.1
0
0=0
0
1=1
1
0=1
1
1=1
Сложение и вычитание по модулю 2 эквивалентны.
Расстояние между двумя кодовыми словами можно теперь определить как количество единиц в кодовом слове, полученном при суммировании этих слов по модулю 2.
Наименьшее значение расстояния между словами в выбранной системе кодирования называется кодовым расстоянием dкод.
Считают, что в канале произошла q-кратная ошибка, если кодовое слово на выходе канала отличается от кодового слова на его входе ровно в q символах (т.е. расстояние между этими словами-векторами равно q). Таким образом, вектор на выходе канала равен сумме по модулю 2 входного вектора и вектора ошибки.
Код позволяет обнаруживать любую ошибку кратности qо, если его кодовое расстояние удовлетворяет условию
. |
(4.3.1) |
Код позволяет исправлять любую ошибку кратности qи, если выполняется условие
. |
(4.3.2) |
Линейные блочные коды. Среди всех корректирующих кодов наибольшее применение нашли линейные блочные коды. Это – двоичный корректирующий (n,k)-код, удовлетворяющий следующим требованиям:
1) Все кодовые слова содержат по n символов, из которых k символов – информационные, а остальные n-k символов – проверочные.
2) Сумма по модулю 2 любых двух кодовых слов снова дает кодовое слово, принадлежащее этому же коду.
Линейный блочный код код задается производящей матрицей G, имеющей k строк и n столбцов. Строки производящей матрицы должны быть линейно независимыми, т.е. сумма любых строк (по 2, по 3 и т.д. в любых комбинациях) не должна давать нулевое слово (состоящее из одних нулей).
Следующим этапом в построении линейного блочного кода является определение проверочной матрицы Н, имеющей r=n-k строк и n столбцов. Любой вектор-строка проверочной матрицы Н ортогонален любому вектору-строке производящей матрицы G, следовательно,
GHT=0, |
(4.3.3) |
где HT – транспонированная матрица H.
Заметим, что два вектора u=u1,...,un и v=v1,...,vn являются, по определению, ортогональными, если
.
Работа кодера для (n,k)-кода заключается в том, что к поступающему на его вход k-разрядному вектору информационных символов x он должен добавить r проверочных символов. Правило образования кодового слова а определяется соотношением
a=xG. |
(4.3.4) |
Умножив обе части этого выражения справа на HT и учитывая (4.3.3), получим другое соотношение, определяющее функции кодера
а HT =0, |
(4.3.5) |
т.е. он должен добавлять r проверочных символов таким образом, чтобы любой из получаемых в итоге кодовых векторов а удовлетворял соотношению (4.3.5).
Один из способов декодирования принятого вектора b предусматривает вычисление r-разрядного исправляющего вектора (синдрома) с по правилу
с=bHT. |
(4.3.6) |
Из формулы (4.3.5) следует, что значение синдрома определяется только вектором ошибки. Если с 0, делают заключение о наличии ошибки (обнаружение ошибки). Так как различным ошибкам кратности qи, удовлетворяющей неравенству (4.3.2), соответствуют различные значения синдрома, то вычисленное значение синдрома с однозначно определяет положение символов, в которых произошли такие ошибки. Эти ошибки исправляются в декодере суммированием принятого вектора b с соответствующим вектором ошибок.
Основными элементами кодирующих и декодирующих устройств для систематических кодов являются сумматоры по модулю 2 и сдвигающие регистры. Сдвигающим регистром называют цепочку, состоящую из двоичных ячеек (в дальнейшем они изображаются прямоугольниками), меняющую свое состояние в дискретные моменты времени (шагами). На каждом шаге двоичный символ, имеющийся на входе ячейки, перемещается на ее выход.
Ниже приведены краткие данные наиболее распространенных систематических кодов.
Код Хэмминга имеет кодовое расстояние, равное трем, и полностью характеризуется числом проверочных символов r. Общее число символов в кодовом слове равно n=2r-1. В качестве столбцов проверочной матрицы Н выбираются всевозможные r-разрядные двоичные числа, исключая число нуль.
Код Рида-Малера полностью характеризуется двумя целыми положительными числами: m≥З и δ<m. Число δ называется порядком кода. Остальные параметры кода определяются из соотношений:
|
(4.3.7) |
Первая строка производящей матрицы G состоит из единиц. Следующие m строк (базисные векторы первого порядка) можно получить, если записать n столбцов, состоящих из m-разрядных двоичных чисел. Следующие строк (базисные векторы второго порядка) получают, вычисляя поэлементные произведения различных пар базисных векторов первого порядка, и т.д. до получения базисных векторов δ-го порядка.
Циклический код полностью определяется первой строкой производящей матрицы G. Остальные строки получают в результате циклического сдвига первой строки на 1,2,...,k-1 элементов. Таким же циклическим свойством обладает и проверочная матрица Н.
Более удобным является общепринятое описание кодовых комбинаций циклического кода при помощи полиномов. Кодовой комбинации v=(v0,v1,…,vn-1) соответствует полином
v(x)= v0x0+ v1x1+,…,vn-1xn-1. Способы кодирования и декодирования для конкретного кода полностью определяются, если задать производящий полином g(x)=1+g1x+ g2x2+…+ gr-1xr-1+xr.
Фундаментальное свойство циклического кода заключается в том, что полином, соответствующий любой разрешенной (передаваемой) кодовой комбинации, делится без остатка на производящий полином.