Автор работы: Пользователь скрыл имя, 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
= (r0 + r2 + r3 + r4 ), ( r0 + r1 + r2 + r5 ), ( r1 + r2 + r2 + r6 ), (1.23)
или
S0=r0+r2+r3+r4,
S1 = r0
+ r1
+ r2
+ r5
,
S2 = r1
+ r2
+ r2
+ r6
.
Основываясь на полученных соотношениях, можно легко организовать схему для вычисления синдрома. Для (7,4)-кода Хемминга она приведена на рис. 1.5.
Рис.
1.5
1.2.4
Синдромное декодирование
линейных блочных кодов
Покажем, как можно использовать синдром принятого вектора не только для обнаружения, но и для исправления ошибок.
Пусть U = ( U0 , U1 , …, Un-1 ), e = ( е0 , е1, …, еn-1 ) и r = ( r0 , r1, r2 , …, rn-1) являются передаваемым кодовым словом, вектором-ошибкой и принятым вектором соответственно. Тогда
r = U + e (1.25)
и синдром
S = r×HT = (U + e )× HT = U× HT + e× HT = 0 + e× HT = e× HT , (1.26)
поскольку для любого кодового слова U × HT = 0.
Таким образом, синдром принятой последовательности r зависит только от ошибки, имеющей место в этой последовательности, и совершенно не зависит от переданного кодового слова. Задача декодера, используя эту зависимость, определить элементы (координаты) вектора ошибок. Найдя вектор ошибки можно восстановить кодовое слово как
U* = r + e
.
На примере одиночных
ошибок при кодировании с
Найдем значения синдрома для всех возможных одиночных ошибок в последовательности из семи символов:
e_ = ( 0000000 ),
1011100 | T | |
e_ × HT = ( 0000000 ) × | 1110010 | = (000); |
0111001 |
e0 = ( 1000000 ),
1011100 | T | |
e0× HT = ( 1000000 ) × | 1110010 | = (110); |
0111001 |
e1 = ( 0100000 ),
1011100 | T | |
e1× HT = ( 0100000 ) × | 1110010 | = (011); |
0111001 |
e2 = ( 0010000 ),
1011100 | T | |
e2× HT = ( 0010000 ) × | 1110010 | = (111); |
0111001 |
e3 = ( 0001000 ),
1011100 | T | |
e3× HT = ( 0001000 ) × | 1110010 | = (101); |
0111001 |
e4 = ( 0000100 ),
1011100 | T | |
e4× HT = ( 0000100 ) × | 1110010 | = (100); |
0111001 |
e5 = ( 0000010 ),
1011100 | T | |
e5× HT = ( 0000010 ) × | 1110010 | = (010); |
0111001 |
e6 = ( 0000001 ),
1011100 | T | |
e6× HT = ( 0000001 ) × | 1110010 | = (001). |
0111001 |
Все возможные для (7,4)-кода одиночные ошибки и соответствующие им векторы синдрома приведены в табл. 1.3.
Таблица 1.3
Вектор ошибки | Синдром ошибки | Десятичный код синдрома |
1000000 | 110 | 6 |
0100000 | 011 | 3 |
0010000 | 111 | 7 |
0001000 | 101 | 5 |
0000100 | 100 | 4 |
0000010 | 010 | 2 |
0000001 | 001 | 1 |
Из этой таблицы видно, что существует однозначное соответствие между сочетанием ошибок (при одиночной ошибке) и его синдромом, то есть, зная синдром, можно совершенно однозначно определить позицию кода, в которой произошла ошибка.
Например, если синдром, вычисленный по принятому вектору, равен ( 111 ), это значит, что произошла одиночная ошибка в третьем символе, если S = ( 001 ) – то в последнем, и т.д. [9]
Если место ошибки определено, то устранить ее уже не представляет никакого труда.
Полная декодирующая схема для (7,4)-кода Хемминга, использующая синдром вектора r не только для обнаружения, но и для исправления ошибок, приведена на рис. 1.6.
Рис. 1.6
А теперь посмотрим, что произойдет, если в принятой последовательности будет не одна, а, например, две ошибки. Пусть ошибки возникли во второй и шестой позициях e = ( 0100010 ). Соответствующий синдром определится как
S = ( 0100010 ) = (001).
Однако синдром S = ( 001 ) соответствует также и одиночной ошибке в седьмой позиции ( e6 ). Следовательно, наш декодер не только не исправит ошибок в позициях, в которых они произошли, но и внесет ошибку в ту позицию, где ее не было. Таким образом, видно, что (7,4)-код не обеспечивает исправления двойных ошибок, а также ошибок большей кратности.
Это,
однако, обусловлено не тем, каким
образом производится декодирование,
а свойствами самого кода. Несколько
позднее будет показано, от чего зависит
исправляющая способность кода, то есть
сколько ошибок он может исправить.
1.2.5
Вес и расстояние Хемминга.
Способность кодов обнаруживать
и исправлять ошибки
Рассмотрим, чем определяется способность блочного кода обнаруживать и исправлять ошибки, возникшие при передаче.
Пусть U = (U0, U1, U2, ...Un-1) - двоичная последовательность длиной n.
Число единиц (ненулевых компонент) в этой последовательности называется весом Хемминга вектора U и обозначается w(U).
Например, вес Хемминга вектора U = ( 1001011 ) равен четырем, для вектора U = ( 1111111 ) величина w(U) составит 7 и т.д.
Таким образом, чем больше единиц в двоичной последовательности, тем больше ее вес Хемминга.
Далее, пусть U и V будут двоичными последовательностями длиной n.
Число разрядов, в которых эти последовательности различаются, называется расстоянием Хемминга между U и V и обозначается d( U, V).
Например, если U = ( 1001011 ), а V = ( 0100011 ), то d( U, V) = 3.
Задав линейный код, то есть определив все 2k его кодовых слов, можно вычислить расстояние между всеми возможными парами кодовых слов. Минимальное из них называется минимальным кодовым расстоянием кода и обозначается dmin.
Можно проверить и убедиться, что минимальное кодовое расстояние для рассматриваемого нами в примерах (7,4)-кода равно трем: dmin(7,4) = 3. Для этого нужно записать все кодовые слова (7,4)-кода Хемминга (всего 16 слов), вычислить расстояния между их всеми парами и взять наименьшее значение. Однако можно определить dmin блочного кода и более простым способом.
Информация о работе Программная модель помехоустойчивого кодирования