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

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

      = (r + r2 + r3 + r4 ), ( r + r + r + r5 ), ( r + r + r + r ),                    (1.23)              

      или

      S0=r0+r2+r3+r4,  
      S
      1  =  r + r + r + r5 ,                                                                  (1.24)                
      S
      2  =  r + r + r + r .                                                                   

            Основываясь на полученных соотношениях, можно легко организовать схему для вычисления синдрома. Для (7,4)-кода Хемминга она приведена на рис. 1.5.

       

      Рис. 1.5  
       
       
       
       
       
       
       
       
       

      1.2.4 Синдромное декодирование линейных блочных кодов 

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

          Пусть U = ( U0 , U1 , …, Un-1 ),  = ( е0 , е1, …, еn-1 ) и =  ( 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 × H = 0.

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

                                                  U*  =  r  + e .                                                        (1.27)

            На примере одиночных  ошибок при кодировании с использованием линейного блочного (7,4)-кода покажем, как вектор ошибки связан с синдромом, и как, имея синдром, локализовать и устранить ошибки, возникшие при передаче. [7]

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

      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)-кода Хемминга, использующая синдром вектора не только для обнаружения, но и для исправления ошибок,  приведена на рис. 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 блочного кода и более простым способом.

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