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

Автор работы: Пользователь скрыл имя, 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 Кб (Скачать документ)

          -  полученный  остаток  от деления  m(x) × xn-k на g(x) прибавляют  к m(x) × xn-k, то есть записывают в младших n-k разрядах кода.[8]

          Алгоритм  кодирования, основанный на делении  полиномов, можно реализовать, используя схему деления. Она представляет собой регистр сдвига, в котором цепи обратной связи замкнуты в соответствии c коэффициентами порождающего полинома g(x) (рис. 1.10).

        
 
 
 

      
 
 
 
 
 
 
 
 

      Рис. 1.10

          Кодирование в схеме рис. 1.10   выполняется  следующим образом:

          -  k символов информационной последовательности m через переключатель П, находящийся в верхнем положении, один за другим передаются в канал и одновременно с этим через открытую схему И записываются в регистр проверочных символов, в котором благодаря наличию цепей обратной связи g0 ... gn-k-1 формируется остаток от деления xn-k × m(x) на g(x) проверочные символы;

           начиная с (k+1)-го такта переключатель переводится в нижнее положение, и из сдвигового регистра выводятся (n-k) проверочных символов; цепь обратной связи при этом разомкнута ( схема И закрыта ).

          Для циклического (7,4)-кода Хемминга (а этот код обладает свойством цикличности), используемого в качестве примера и имеющего порождающий полином g(x) = 1 + x + x3, схема кодирования выглядит следующим образом (рис. 1.11): 

            

      Рис. 1.11

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

          На  примере этого же кода и соответствующего ему кодера рассмотрим в динамике процесс кодирования произвольной последовательности m.

          Пусть  m = (1001). Тогда последовательность состояний ячеек сдвигового регистра с обратными связями в процессе кодирования будет определяться табл. 1.4 .

                                                 Таблица 1.4

      Номер

      такта

      Положение

      переключателя

      Уровень

      разрешения

      Вход

      m

      Состояние ячейки регистра Выход
      P0 P1 P2 U







      7
      ­ 
      ­ 
      ­ 
      ­ 
      ¯ 
      ¯ 
      ¯ 
      ¯







      0







      0


      1  
      0  
      0


      1  


      0



      1  


      0






      0

          Еще одним важным свойством циклического (n,k)-кода, вытекающим из теоремы о существовании циклических кодов,  является то, что его порождающий полином делит без остатка двучлен xn +1, то есть

                                   xn + 1 = g(x)× h(x) + 0.                                              (1.71)

          Полином h(x) — частное от деления xn +1  на  g(x) - называется проверочным полиномом.

          Поскольку h(x) однозначно связан с g(x), он также определяет код. Следовательно, с помощью проверочного полинома h(x) тоже можно производить кодирование. Схема кодирования на основании проверочного полинома h(x) приведена на рис. 1.12.

        

      Рис. 1.12

          Процедура кодирования на основании h(x) выглядит следующим образом :

          1.  На входе "Разрешение" устанавливается 1, при этом открывается нижняя схема И и закрывается верхняя.

          2. Сообщение m последовательно записывается в k-разрядный сдвиговый регистр и одновременно с этим передается в канал.

          3. По окончании ввода k информационных символов на входе "Разрешение"  устанавливается 0, замыкая через верхнюю схему И цепь обратной связи.

          4.  Производится (n-k) сдвигов, при этом формируются и выдаются в канал (n-k) проверочных символов.

          Для циклического (7,4)-кода с порождающим полиномом g(x)= 1+ x + x3 проверочный полином  h(x) имеет вид

                                                (1.72)

          С учетом этого  схема кодирования  на основании полинома h(x) для (7,4)-кода выглядит следующим образом  (рис. 1.13):

      Рис. 1.13  
       

      1.3.2 Вычисление  синдрома  и  исправление  ошибок  в циклических кодах 

          Вычисление  синдрома для циклических кодов  является довольно простой процедурой.

          Пусть U(x) и r(х) - полиномы, соответствующие переданному кодовому слову и принятой последовательности.

          Разделив  r(x) на g(x), получим

                                 r(x) = q(x)× g(x) + s(x),                                                 (1.73)

      где - q(x) — частное от деления,  s(x) — остаток от деления.

          Если  r(x) является кодовым полиномом, то он делится на g(x) без остатка, то есть s(x) = 0.

          Следовательно, s(x) ¹ 0 является условием наличия ошибки в принятой последовательности,  то есть синдромом принятой последовательности.

          Синдром s(x) имеет в общем случае вид

               S(x) = S0  +  S1 × x  +  ... +  Sn- k-1 × xn-k-1  .                                        (1.74)

          Очевидно, что схема вычисления синдрома является схемой деления, подобной схемам кодирования рис. 1.10  или 1.11 .

          При наличии в принятой последовательности r хотя бы одной ошибки вектор синдрома S  будет иметь, по крайней мере, один нулевой элемент, при этом факт наличия ошибки легко обнаружить, объединив по ИЛИ выходы всех ячеек регистра синдрома.

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

          Пусть

                          e(x) = e0  +  e1 × x  +  e2 × x2  +  ...  +  en-1 × x n-1                       (1.75)

      — полином вектора ошибки.

          Тогда  полином принятой последовательности 

                                      r(x) = U(x) + e(x).                                                       (1.76)

          Прибавим  в этом выражении  слева и справа U(x), а также учтем, что

                  r(x) = q(x)× g(x) + S(x), U(x) = m(x)× g(x),                                     (1.77)

      тогда

               ,                     (1.78)

      то  есть синдромный полином S(x) есть остаток от деления полинома ошибки e(x) на порождающий полином g(x).

          Отсюда  следует, что по синдрому S(x) можно однозначно определить вектор ошибки e(x), а следовательно, исправить эту ошибку. [10]

          На  рис. 1.14 приведена схема синдромного  декодера с исправлением однократной  ошибки для циклического (7,4)-кода. По своей структуре она подобна схеме, приведенной на рис. 1.6, с той лишь разницей, что вычисление синдрома принятой последовательности производится здесь не умножением на проверочную матрицу, а делением на порождающий полином. При этом она сохраняет и недостаток, присущий всем синдромным декодерам: необходимость иметь запоминающее устройство, ставящее в соответствие множеству возможных синдромов  S множество векторов ошибок e. Цикличность структуры кода в этом случае не учитывается. 

          

          Рис. 1.14  
       
       
       
       
       
       
       
       
       
       
       

          3.3 Неалгебраические методы декодирования циклических кодов 

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

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

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

          Одним из неалгебраических методов является декодирование с использованием алгоритма Меггитта, пригодного для исправления как одиночных, так и l-кратных ошибок (на практике l £ 3).

          При декодировании в соответствии с алгоритмом Меггитта также вычисляется синдром принятой последовательности S(x), однако используется он иначе, нежели в рассмотренных ранее синдромных декодерах.[11]

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