Автор работы: Пользователь скрыл имя, 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
Определение. Линейный блочный систематический (n,k)-код полностью определяется матрицей G размером k * n с двоичными матричными элементами. При этом каждое кодовое слово является линейной комбинацией строк матрицы G, а каждая линейная комбинация строк G - кодовым словом.
Пусть m = (m0 , m1 ,. . . , mk -1) будет тем блоком-сообщением, который необходимо закодировать с использованием данного кода.
Тогда соответствующим ему кодовым словом U будет
С учетом структуры матрицы G символы кодового слова U будут такими:
для i = 0, 1, 2,. . . , k- 1
для i = k, k+1,. . . , n
Ui = m0× P0j + m1× P1j + m2× P2j +…+ mk- 1× Pk- 1, j . (1.13)
Иными словами, k крайних левых символов кодового слова совпадает с символами кодируемой информационной последовательности, а остальные (n - к) символов являются линейными комбинациями символов информационной последовательности.
Определенный таким образом код называется линейным блочным систематическим (n,k)-кодом с обобщенными проверками на четность, а задающая его матрица G называется порождающей матрицей кода. [14]
В качестве примера рассмотрим известный (7,4)-код Хемминга, являющийся классической иллюстрацией простейших кодов с исправлением ошибок.
Пусть m = (m0, m1, m2, m3) будет тем сообщением, или информационной последовательностью, которую нужно закодировать.
Порождающая
матрица G для (7. 4)-кода
Хемминга имеет вид
1 | 0 | 0 | 0 | 1 | 1 | 0 | ||
G(7,4) = | 0 | 1 | 0 | 0 | 0 | 1 | 1 | . |
0 | 0 | 1 | 0 | 1 | 1 | 1 | | |
0 | 0 | 0 | 1 | 1 | 0 | 1 |
Тогда
символы соответствующего кодового
слова определяются следующим образом
:
1 | 0 | 0 | 0 | 1 | 1 | 0 | ||
|
0 | 1 | 0 | 0 | 0 | 1 | 1 | = |
0 | 0 | 1 | 0 | 1 | 1 | 1 | ||
0 | 0 | 0 | 1 | 1 | 0 | 1 |
= (m0 , m1 , m2 , m3 , m0 + m2 + m3 , m0 + m1 + m2 , m1 + m2 + m3 ), (1.15)
или
U0=m0,
U1=m1,
U2
= m2
,
U3
= m3
,
U4=m0+m2+m3,
U5=m0+m1+m2,
U6
= m1
+ m2
+ m3
.
Например, пусть m = ( 1 0 1 1 ) , тогда соответствующее кодовое слово будет иметь вид U = ( 1 0 1 1 1 0 0 ). Или другой пример: пусть m = ( 1 0 0 0 ), тогда U = ( 1 0 0 0 1 1 0 ).
Интересно отметить, что в соответствии с приведенным выше определением строки матрицы G сами являются кодовыми словами данного кода, а все остальные кодовые слова - линейными комбинациями строк порождающей матрицы.
На основании порождающей матрицы G(7,4) (1.15) или приведенной системы проверочных уравнений (1.16) легко реализовать схему кодирования для рассматриваемого (7,4)-кода Хемминга (рис. 1.4).
Кодер
работает точно так же, как и при простой
проверке на четность, но теперь выполняет
не одну общую, а несколько частичных проверок,
формируя, соответственно, несколько
проверочных символов.[14]
Рис.
1.4
1.2.3
Синдром и обнаружение
ошибок
Пусть U = ( U0 , U1 ,… Un ) является кодовым словом, переданным по каналу с помехами, а r = ( r0 , r1 , ... rn ) - принятой последовательностью, возможно, отличающейся от переданного кодового слова U. Отличие r от U состоит в том, что некоторые символы ri принятой последовательности могут отличаться от соответствующих символов Ui переданного кодового слова. Например, U = ( 0 0 0 1 0 0 0 ) , а r = ( 0 0 0 0 0 0 0 ) , то есть произошла ошибка в четвертом символе кодового слова, 1 перешла в 0 . Или другой пример: передано кодовое слово U = ( 0 0 1 1 1 1 ), а принятая последовательность имеет вид r = ( 1 0 1 1 1 1 1 ), то есть ошибка возникла в первом бите кодового слова, при этом 0 перешел в единицу. [5]
Для описания возникающих в канале ошибок используют вектор ошибки, обычно обозначаемый как e и представляющий собой двоичную последовательность длиной n с единицами в тех позициях, в которых произошли ошибки.
Так, вектор ошибки e = ( 0 0 0 1 0 0 0 ) означает однократную ошибку в четвертой позиции (четвертом бите), вектор ошибки e = ( 1 1 0 0 0 0 0 ) - двойную ошибку в первом и втором битах и т.д.
Тогда при передаче кодового слова U по каналу с ошибками принятая последовательность r будет иметь вид
например: U = ( 0 0 0 1 0 0 0 ),
e = ( 0 0 0 1 0 0 0 ), (1.22)
r = ( 0 0 0 0 0 0 0 ) .
Приняв вектор r , декодер сначала должен определить, имеются ли в принятой последовательности ошибки. Если ошибки есть, то он должен выполнить действия по их исправлению.
Чтобы проверить, является ли принятый вектор кодовым словом, декодер вычисляет (n-k)-последовательность, определяемую следующим образом :
S = ( S0 , S1 , … , Sn-k-1 ) = r × HT. (1.23)
При этом r является кодовым словом тогда, и только тогда, когда S = (00..0), и не является кодовым словом данного кода, если S ¹ 0. Следовательно, S используется для обнаружения ошибок, ненулевое значение S служит признаком наличия ошибок в принятой последовательности. Поэтому вектор S называется синдромом принятого вектора r.
Некоторые сочетания ошибок, используя синдром, обнаружить невозможно. Например, если переданное кодовое слово U под влиянием помех превратилось в другое действительное кодовое слово V этого же кода, то синдром S = V * HT = 0 . В этом случае декодер ошибки не обнаружит и, естественно, не попытается ее исправить.
Сочетания ошибок такого типа называются необнаруживаемыми. При построении кодов необходимо стремиться к тому, чтобы они обнаруживали наиболее вероятные сочетания ошибок.
Для рассматриваемого в качестве примера линейного блочного систематического (7,4)-кода Хемминга синдром определяется следующим образом:
пусть принят вектор r = ( r0 , r1 , r2 , r3 , r4 , r5 , r6 ), тогда
1 0 1 1 1 0 0 | T | |
S = r* H(7,4)T = ( r0, r1, r2, r3, r4, r5, r6 ) * | 1 1 1 0 0 1 0 | = |
0 1 1 1 0 0 1 |
Информация о работе Программная модель помехоустойчивого кодирования