Автор работы: Пользователь скрыл имя, 15 Декабря 2010 в 13:39, курсовая работа
Цель исследования: на основе теоретического анализа изучить механизм действия помехоустойчивого кодирования.
Объект исследования: код Шеннона – Фано.
В соответствии с целью работы были определены следующие задачи исследования:
1. Изучить основные типы кодов помехоустойчивого кодирования;
2. Исследовать один из выбранных кодов (код Шеннона - Фано)
3. Реализовать код Шеннона – Фано на языке программирования Pascal.
Введение……………………………………………………………………………3
Глава 1.
1.1 Основные принципы. Типы кодов …………………………………………...5
1.2 Линейные блочные коды………………………………………………..7
1.2.1 Код с проверкой на четность……………………………………….9
1.2.2 Порождающая матрица линейного блочного кода …………………12
1.2.3 Синдром и обнаружение ошибок ……………………………………16
1.2.4 Синдромное декодирование линейных блочных кодов …………18
1.2.5 Вес и расстояние Хемминга. Способность кодов обнаруживать и исправлять ошибки ………………………………………………………………21
1.3 Циклические коды……………………………………………………..26
1.3.1 Кодирование с использованием циклических кодов……………..27
1.3.2 Вычисление синдрома и исправление ошибок в циклических кодах………………………………………………………………………………32
1.3.3 Неалгебраические методы декодирования циклических кодов …..34
1.4 Сверточные коды……………………………………………………..38
1.4.1 Кодирование с использованием сверточных кодов ………………..39
1.4.2 Синдромное декодирование сверточных кодов………………….43
1.4.3 Декодирование сверточных кодов. Алгоритм Витерби …………46
Глава 2
2.1 Коды Шеннона – Фано (Теоритическая часть)……………………..50
2.2 Описание Кода Шеннона – Фано……………………………………55
Заключение ……………………………………………………………………….56
Литература………………………………………………………………………..57
Приложение1……………………………………………………………………..58
Таким образом, декодер Витерби последовательно обрабатывает кадр за кадром, двигаясь по решетке, аналогичной используемой кодером. В каждый момент времени декодер не знает, в каком узле находится кодер, и не пытается его декодировать. Вместо этого декодер по принятой последовательности определяет наиболее правдоподобный путь к каждому узлу и определяет расстояние между каждым таким путем и принятой последовательностью. Это расстояние называется мерой расходимости пути. В качестве оценки принятой последовательности выбирается сегмент, имеющий наименьшую меру расходимости. Путь с наименьшей мерой расходимости называется выжившим путем.
Рассмотрим работу декодера Витерби на простом примере. Полагаем, что кодирование производится с использованием сверточного (6,3)-кода (схема кодера приведена на рис. 2.5, решетчатая диаграмма, соответствующая этому кодеру, – на рис. 2.7).
Пользуясь решетчатой диаграммой кодера, попытаемся, приняв некоторый сегмент r, проследить наиболее вероятный путь кодера. При этом для каждого сечения решетчатой диаграммы будем отмечать меру расходимости пути к каждому ее узлу.
Предположим, что передана кодовая последовательность U = = ( 0000000…), а принятая последовательность имеет вид r = (10001000 00...), то есть в первом и в третьем кадрах кодового слова возникли ошибки. Как мы уже убедились, процедура и результат декодирования не зависят от передаваемого кодового слова и определяются только ошибкой, содержащейся в принятой последовательности. Поэтому проще всего считать, что передана нулевая последовательность, то есть U = (0000000…).
Приняв первую пару символов (10), определим меру расходимости для первого сечения решетки (см. рис. 2.7), приняв следующую пару символов (00), — для второго сечения и т.д. При этом из входящих в каждый узел путей оставляем путь с меньшей расходимостью, поскольку путь с большей на данный момент расходимостью уже не сможет стать в дальнейшем короче.
Заметим, что для рассматриваемого примера начиная с четвертого уровня метрика (или мера расходимости) нулевого пути меньше любой другой метрики. Поскольку ошибок в канале больше не было, ясно, что в конце концов в качестве ответа будет выбран именно этот путь. Из этого примера также видно, что выжившие пути могут достаточно долго отличаться друг от друга.
Однако
на шестом - седьмом уровне первые
семь ребер всех выживших путей совпадут
друг с другом. В этот момент согласно
алгоритму Витерби и
Процедура
декодирования
Рис.
2.8
Глубина, на которой происходит слияние выживших путей, не может быть вычислена заранее; она является случайной величиной, зависящей от кратности и вероятности возникающих в канале ошибок. Поэтому на практике обычно не ждут слияния путей, а устанавливают фиксированную глубину декодирования.
Из рис. 2.8 видно, что уже на уровне Е степень различия метрик правильного и неправильного путей достаточно велика ( dпр = 2, dош = 4), то есть в данном случае можно было бы ограничить глубину декодирования величиной b ≤ 6. Но иногда более длинный к данному сечению путь может оказаться в конечном итоге самым коротким, поэтому особенно увлекаться уменьшением размера окна декодирования b с целью упрощения работы декодера не стоит.
На практике глубину декодирования обычно выбирают в диапазоне n < b ≤ n + l , где l - число исправляемых данным кодом ошибок.
Из
рис. 2.8 видно также, что, несмотря
на наличие в принятом фрагменте
двух ошибок, его декодирование произошло
без ошибки и в качестве ответа
будет принята переданная нулевая
последовательность.[16]
Глава 2
2.1 Коды Шеннона – Фано.
Для удобства расположим все имеющиеся п букв в один столбик в порядке убывания вероятностей. Затем все эти буквы следует разбить на две группы – верхнюю и нижнюю – так, чтобы суммарная вероятность первой группы была наиболее близка к суммарной вероятности второй группы. Для букв первой группы в качестве первой цифры кодового обозначения используется цифра 1, а для букв второй группы – цифра 0. Далее, каждую из двух групп подобным образом снова надо разделить на две части и в качестве второй цифры кодового обозначения мы будем использовать цифру 1 или 0 в зависимости от того, принадлежит ли наша группа к первой или ко второй из этих подгрупп. Затем, каждая из содержащих более одной буквы групп снова делится на две части возможно более близкой суммарной вероятности и т.д.; процесс повторяется до тех пор, пока мы не придем к группам, каждая из которых содержит по одной единственной букве. [6]
Такой метод кодирования сообщений был впервые предложен в 1948 – 1949 гг. независимо друг от друга Р. Фано и К. Шенноном; поэтому соответствующий код обычно называется кодом Шеннона – Фано. Так, например, если наш алфавит содержит всего шесть букв, вероятность которых (в порядке убывания) равны 0,4, 0,2, 0,2, 0,1, 0,05 и 0,05, то на первом этапе деления букв на группы мы отщепим лишь одну первую букву (1-я группа), оставив во второй группе все остальные. Далее, вторая буква составит 1-ю подгруппу 2-й группы; 2-я же подгруппа той же группы, состоящая из оставшихся четырех букв, будет и далее последовательно делиться на части так, что каждый раз 1-я часть будет состоять лишь из одной буквы.
№ буквы | вероят-ность | разбиение на подгруппы (римские цифры обозначают номера групп и подгрупп) | кодовое обозначение | ||||
1 | 0,4 | } I | 1 | ||||
2 | 0,2 | } II | } I | 01 | |||
3 | 0,2 | } II | } I | 001 | |||
4 | 0,1 | } II | } I | 0001 | |||
5 | 0,05 | } II | } I | 00001 | |||
6 | 0,05 | } II | 00000 |
Табл.1
Аналогично
предыдущему примеру разобран случай
«алфавита», включающего 18 букв, имеющих
следующие вероятности: 0,3; 0,2; 0,1 (2 буквы);
0,05; 0,03 (5 букв); 0,02(2 буквы); 0,01 (6 букв). (Табл.
2)
№ буквы | вероят-ность | разбиение на подгруппы | кодовое обозначение | ||||||
1 | 0,3 | } I | } I | 11 | |||||
2 | 0,2 | } II | 10 | ||||||
3 | 0,1 | } II | } I | } I | 011 | ||||
4 | 0,1 | } II | } I | 0101 | |||||
5 | 0,05 | } II | 0100 | ||||||
6 | 0,03 | } II | } I | } I | } I | 00111 | |||
7 | 0,03 | } II | 00110 | ||||||
8 | 0,03 | } II | } I | 00101 | |||||
9 | 0,03 | } II | 00100 | ||||||
10 | 0,03 | } II | } I | } I | 00011 | ||||
11 | 0,02 | } II | } I | 000101 | |||||
12 | 0,02 | } II | 000100 | ||||||
13 | 0,01 | } II | } I | } I | 000011 | ||||
14 | 0,01 | } II | } I | 0000101 | |||||
15 | 0,01 | } II | 0000100 | ||||||
16 | 0,01 | } II | } I | 000001 | |||||
17 | 0,01 | } II | } I | 0000001 | |||||
18 | 0,01 | } II | 0000000 |
Основной принцип, положенный в основу кодирования по методу Шеннона – Фано, заключается в том, что при выборе каждой цифры кодового обозначения мы стараемся, чтобы содержащееся в ней количество информации было наибольшим, т. е. чтобы независимо от значений всех предыдущих цифр эта цифра принимала оба возможных для нее значения 0 и 1 по возможности с одинаковой вероятностью. Разумеется, количество цифр в различных обозначениях при этом оказывается различным (в частности, во втором из разобранных примеров он меняется от двух до семи), т. е. код Шеннона – Фано является неравномерным. Нетрудно понять, однако, что никакое кодовое обозначение здесь не может оказаться началом другого, более длинного обозначения; поэтому закодированное сообщение всегда может быть однозначно декодировано. В результате, среднее значение длины такого обозначения все же оказывается лишь немногим большим минимального значения Н, допускаемого соображениями сохранения количества информации при кодировании. Так, для рассмотренного выше примера 6-буквенного алфавита наилучший равномерный код состоит из трехзначных кодовых обозначений (ибо 22 < 6 < 23), и поэтому в нем на каждую букву исходного сообщения приходится ровно 3 элементарных сигнала; при использовании же кода Шеннона – Фано среднее число элементарных сигналов, приходящихся на одну букву сообщения, равно
Это значение заметно меньше, чем 3, и не очень далеко от энтропии
Аналогично этому для рассмотрения примера 18-буквенного алфавита наилучший равномерный код состоит из пятизначных кодовых обозначений (так как 24 < 18 < 25); в случае же кода Шеннона – Фано имеются буквы, кодируемые даже семью двоичными сигналами, но зато среднее число элементарных сигналов, приходящихся на одну букву, здесь равно
Последнее значение заметно меньше, чем 5, - и уже не намного отличается от величины
Особенно выгодно бывает кодировать по методу Шеннона – Фано не отдельные буквы, а сразу целые блоки из нескольких букв. Правда, при этом все равно невозможно превзойти предельное значение Н двоичных знаков на одну букву сообщения. Рассмотрим, например, случай, когда имеются лишь две различные буквы А и Б, имеющие вероятности р(А) = 0,7 и р(Б) = 0,3; тогда
H = - 0,7 log0,7 – 0,3 log0,3 = 0,881…
Применение метода Шеннона – Фано к исходному двухбуквенному алфавиту здесь оказывается бесцельным: оно приводит нас лишь к простейшему равномерному коду
буква | вероятность | кодовое обозначение |
А | 0,7 | 1 |
Б | 0,3 | 0 |
требующему для передачи каждой буквы одного двоичного знака – на 12% больше минимального достижимого значения 0,881 дв.зн./букву. Применяя же метод Шеннона – Фано к кодированию всевозможных двухбуквенных комбинаций (вероятность которых определяется правилом умножения вероятностей для независимых событий), мы придем к следующему коду:
комбина- ция букв | вероятность | кодовое обозначение |
АА | 0,49 | 1 |
АБ | 0,21 | 01 |
БА | 0,21 | 001 |
ББ | 0,09 | 000 |
Среднее значение длины кодового обозначения здесь равно
,
так что на одну букву алфавита здесь приходится в среднем двоичных знаков – лишь на 3% больше значения 0,881 дв.зн./букву. Еще лучше результаты мы получим, применив метод Шеннона – Фано к кодированию трехбуквенной комбинации; при этом мы придем к следующему коду:
комбина- ция букв | вероятность | кодовое обозначение |
ААА | 0,343 | 11 |
ААБ | 0,147 | 10 |
АБА | 0,147 | 011 |
БАА | 0,147 | 010 |
АББ | 0,063 | 0010 |
БАБ | 0,063 | 0011 |
ББА | 0,063 | 0001 |
БББ | 0,027 | 0000 |
Информация о работе Программная модель помехоустойчивого кодирования