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

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

          Определение. Линейный блочный систематический (n,k)-код полностью определяется матрицей G размером k * n с двоичными матричными элементами. При этом  каждое кодовое слово является линейной комбинацией строк матрицы  G, а каждая линейная комбинация строк   G - кодовым словом.

          Пусть m = (m0 , m1 ,. . . , mk -1) будет тем блоком-сообщением, который необходимо закодировать с использованием данного кода.

          Тогда соответствующим ему кодовым  словом   U   будет

                                                     U = m× G .                                                  (1.11)          

          С учетом структуры матрицы  G  символы кодового слова U будут такими:

          для  i = 0, 1, 2,. . . , k- 1

                                                Ui = mi ;                                                           (1.12)

          для  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                                          (1.14)
        0 0 0 1 1 0 1  

          Тогда символы соответствующего кодового слова определяются следующим образом : 

        1 0 0 0 1 1 0  
          U = m× =  ( m0 m1 m2 m3 )
      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,  
      U
      1=m1,  
      U
      2   =   m2 ,  

      U3   =   m3 ,                                                                  (1.16) 
      U
      4=m0+m2+m3,  
      U
      5=m0+m1+m2,  
      U
      6   =   m +  m +  m3 .                                                                       

            Например, пусть  m =  ( 1 0 1 1 ) ,  тогда соответствующее кодовое слово будет иметь вид    U ( 1 0 1 1 1 0 0 ).  Или другой пример: пусть  m  = ( 1 0 0 0 ),  тогда    ( 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 ,… U ) является кодовым словом, переданным по каналу с помехами, а r  = ( r0 , r1 , ... r )  - принятой последовательностью, возможно, отличающейся от переданного кодового слова 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  будет иметь вид

                                                      r   =  U  + e ,                    (1.21)

      например:     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  

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