Программная модель помехоустойчивого кодирования

Автор работы: Пользователь скрыл имя, 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

Работа состоит из  1 файл

курсовая.doc

— 877.00 Кб (Скачать документ)

                                              G1(x) = 1 + x + x2,                                           (2.5)

                                                       G2(x) = 1 + x2.                                               (2.6)

          Пусть, например, кодируется последовательность  m  = (1010… .  Соответствующий информационный полином запишется  как   m(x) = 1 + x2.

      Тогда на входе первой ячейки выходного  регистра при кодировании будет  последовательность  U 1 = (11011000… ,  которой  соответствует  полином  U1(x) = 1 + x + x3 + x4,  а на входе второй ячейки — U 2 = (10001000…  и, соответственно, полином   U2 (x) = 1 + x4.

          Легко заметить, что при этом справедливы  равенства

                                     U1(x) = m(x) × G1(x),                                                  (2.7)

                                       U2(x) = m(x)× G2(x).                                                  (2.8)

          Такая форма записи удобна, поскольку видна  структура кодирующего устройства (по набору полиномов можно сразу синтезировать устройство). На практике полиномы задаются набором своих коэффициентов. В табл. 2.1 приведены примеры кодеров сверточных кодов, заданных своими коэффициентами при степенях порождающих полиномов.

                      Таблица 2.1

        G1 G2
        111 101
        1111 1101
        11101 10011
        111011 10100111
        110001 11111001

          В качестве примера кодера с k0 ¹ 1 можно привести кодер сверточного (12,9)  кода Вайнера-Эша с параметрами: k0 = 3,  n0 = 4,  k = 9,  n = 12,  R = ¾  (рис. 2.3).

                

      Рис. 2.3

          Пусть,  например, m = (100.000.000....  Тогда кодовое слово U =     =(1001.0001.0001.0000.... ).  Видно, что это – систематический код, в котором к трем информационным символам добавляется один проверочный, зависящий от значений информационных символов не только текущего кадра, но и двух предшествующих кадров. При этом влияние одного кадра информационных символов распространяется на 12 символов кодовой последовательности, то есть кодовая длина блока для этого кода  n = 12. [16] 

         
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

          1.4.2 Синдромное декодирование сверточных кодов 

          Предположим, что нами принята полубесконечная  последовательность  r, состоящая из слова сверточного кода и вектора ошибки:

                                                    r  = U + e.                                                         (2.9)

          Аналогично  тому, как это делается для блочных кодов, можно вычислить синдром принятой последовательности:

                                                  S =  r× H =  e × Н.                                                  (2.10)

          Однако  из-за бесконечной длины принятой последовательности (а сверточный код представляет собой непрерывную бесконечную последовательность двоичных символов) синдром  также будет иметь бесконечную длину и его прямое вычисление не имеет смысла.

          Вместе  с тем  можно заметить, что для  рассмотренных нами сверточных кодов влияние одного информационного  кадра распространяется всего на несколько кодовых кадров.  Поэтому декодер может просматривать не весь синдром, а вычислять его компоненты по мере поступления кадров кодовой последовательности, исправлять текущие ошибки и сбрасывать те компоненты синдрома, которые вычислены давно

          Для исправления ошибок при этом декодер  должен содержать таблицу сегментов синдромов и сегментов конфигураций ошибок,  образующих данные конфигурации синдрома. Если декодер находит в таблице полученный сегмент синдрома, он исправляет начальный сегмент кодового слова.

          Схема декодера для сверточного (12,9)-кода Вайнера-Эша изображена ниже  (рис. 2.4). Исправление ошибок с помощью данного декодера производится на сегментах из трех кодовых кадров  -  n = 12.

          Декодер работает следующим образом. Во входной регистр записывается первый кадр принимаемой последовательности  (четыре символа). По первым трем (информационным) символам кадра по тем же правилам, что и при кодировании, определяется значение контрольного  бита, который далее сравнивается с четвертым (проверочным) символом принятого кадра.

        

        Рис.  2.4

          При совпадении контрольного и проверочного битов (а это будет, если ошибки в  первом кадре нет) в первую ячейку синдромного регистра записывается  0, если же в кадре ошибка есть, − то 1. Далее первый кадр принятой последовательности переносится в регулирующий буфер, а во входной регистр заносится очередной кадр принятой последовательности.

          После аналогичных проверок для второго и третьего кадров принятой последовательности на выходе регулирующего буфера оказывается первый кадр принятой последовательности, в регистре синдрома — трехбитовый синдром, соответствующий принятому сегменту из трех кадров, а на выходе адресной логики — дешифрированный по  синдрому S вектор ошибки  e.

          Исправленный  кадр записывается в выходной регистр, при этом исправление производится только при наличии единицы на входах схем “И”, что соответствует присутствию ошибки именно в первом кадре. После исправления ошибки регистр синдрома сбрасывается. Потеря второго и третьего битов синдрома при этом не имеет значения, так как ни во втором, ни в третьем кадрах ошибки быть не должно (она была в первом кадре, а значит, во фрагменте из трех кадров ошибки больше быть не должно).[13]

          Все возможные конфигурации ошибок в  первых трех кадрах и соответствующие  им первые три бита синдрома приведены в табл. 2.2.

 

    

                                                                                                      Таблица 2.2

                                  

                                

    Конфигурация ошибок в принятом сегменте     Синдром
1-й  кадр 2-й кадр 3-й кадр
1000 0000 0000   111
0100 0000 0000   011
0010 0000 0000   101
0001 0000 0000   001
0000 1000 0000   110
0000 0100 0000   110
0000 0010 0000   010
0000 0001 0000   010
0000 0000 1000   100
0000 0000 0100   100
0000 0000 0010   100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

      1.4.3 Декодирование сверточных кодов. Алгоритм  Витерби

          Наилучшей схемой декодирования корректирующих кодов, как уже отмечалось, является декодирование методом максимального правдоподобия, когда декодер определяет набор условных вероятностей Р(r/Ui), соответствующих всем возможным кодовым векторам Ui , и решение принимает  в  пользу  кодового  слова,  соответствующего  максимальному Р( r/Ui ).

          Для двоичного симметричного канала без памяти (канала, в котором вероятности передачи   и  1,  а   также вероятности   ошибок  вида  0 ® 1  и 1 ® 0 одинаковы, ошибки в j-м и i-м символах кода независимы) декодер максимального правдоподобия сводится к декодеру минимального хеммингова расстояния. Последний вычисляет расстояние Хемминга между принятой последовательностью  r  и всеми возможными кодовыми векторами Ui и выносит решение в пользу того вектора, который оказывается ближе к принятому.

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

          Характерная структура сверточных кодов (повторяемость структуры за пределами окна длиной n) позволяет создать вполне приемлемый по сложности декодер максимального правдоподобия.

          Впервые идея такого декодера была предложена Витерби. Работает он следующим образом.

          Предположим, на вход декодера поступил сегмент  последовательности r длиной b, превышающей кодовую длину блока n. Назовем b окном декодирования. Сравним все кодовые слова данного кода (в пределах сегмента длиной b) с принятым словом и выберем кодовое слово, ближайшее к принятому. Первый информационный кадр выбранного кодового слова примем в качестве оценки информационного кадра декодированного слова.

          После этого в декодер вводится  n0  новых символов, а введенные ранее самые старые  n0 символов сбрасываются, и процесс повторяется для определения следующего информационного кадра. [12]

Информация о работе Программная модель помехоустойчивого кодирования