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

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

            Если  же  вероятность  ошибки  в  канале  будет  в  сто  раз меньше  Рош = 10 -5, то  вероятность ее неисправления   составит уже Р(N) » 2×10 -9,  или в   5000 раз меньше!

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

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

          Другими словами, помехоустойчивое кодирование существенно улучшает свойства хороших каналов, в плохих же каналах оно большого эффекта не дает. [17] 
       
       
       
       
       
       
       
       
       
       

          1.3 Циклические коды

          Линейный (n,k)-код называется циклическим, если в результате циклического сдвига кодового слова получается другое кодовое слово данного кода.  Другими словами, если  U = ( U0, U1, ...Un- 1 ) является кодовым словом, то и V = ( Un- 1, U0, U1, ...Un- 2 ), полученное циклическим сдвигом U, является кодовым словом данного кода.[4]

          Циклические коды привлекательны по двум причинам.

          Во-первых, операции кодирования и вычисления синдрома для них выполняются очень просто с использованием сдвиговых регистров.

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

          Основные  свойства циклических кодов:

    1. В циклическом (n,k)-коде каждый ненулевой полином должен иметь степень, по крайней мере (n-k), но не более n-1.

          g(x)=1 + g1 × x + g2 × x2 +...+ gn-k-1 × xn-k-1 + xn-k,                             (1.60)  

 Существует  только  один  кодовый  полином  g(x)  степени (n-k)

        вида 
      называемый порождающим полиномом кода.

    1. Каждый кодовый полином U(x) является кратным g(x), то есть

                                    U(x)= m(x) × g(x).                                                        (1.61)    
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

      1.3.1 Кодирование с использованием циклических кодов 

          Предположим, надо закодировать некоторую информационную последовательность

                                      m = ( m0, m1, m2... mk- 1 ).                                           (1.62)  

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

                       m(x)= m0 + m1 × x + m2 × x2 +...+mk- 1 × xk-1.                                 (1.63)  

          Умножив  m(x) на xn-k:

           

           xn-k × m(x)= m0 × xn-k + m1 × xn-k+1 +...+mk- 1 × xn-1 ,                                  (1.64)  

      получим полином степени n-1 или меньшей.

          Воспользовавшись  теоремой о делении полиномов, можно  записать

                     xn-k × m(x) = q(x) × g(x) + r(x) ,                                                     (1.65)  

      где  q(x) и r(x) — частное и остаток от деления полинома xn-k × m(x) на порождающий полином g(x).

          Поскольку  степень  g(x)   равна (n-k), то степень r(x) должна  быть  (n-k-1)  или меньше, а сам полином r(x) будет иметь вид

                       r(x)= r0 + r1 × x + r2 × x2 +...+ rn- k- 1 × xn-k-1 .                              (1.66)  

          С учетом правил арифметики в GF(2) данное выражение можно переписать следующим образом:

                         r(x) + xn-k × m(x) = q(x)× g(x) ,                                                  (1.67)  

      откуда  видно, что полином r(x)+xn-k × m(x) является кратным g(x) и имеет степень n-1 или меньшую. Следовательно, полином r(x)+xn-k × m(x) - это кодовый полином, соответствующий кодируемой информационной  последовательности m(x).

          Раскрыв последнее выражение, получим

      r(x)+m(x)× xn-k =r0 +r1 x +r2 x2  ..+rn- k-1 xn-k-1 + m0 xn-k + m1 × xn-k+1 + ..+ mk-1 xn-1,

      что соответствует кодовому слову

      U =     ( r0r ...  rn- k-1    ,       m0,  m ...  mk-1),
            проверочные символы        информационные символы

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

          Чтобы полученный результат был понятнее, напомним, что умножению некоторого двоичного полинома на xn-k соответствует сдвиг двоичной последовательности m  =  (m0, m1 ... mk-1)  на  n-k  разрядов вправо.

            Рассмотрим пример. С использованием кода, задаваемого порождающим полиномом g(x) = 1 + x + x3, закодируем произвольную последовательность, например m = (0111).

          Последовательности  m =(0111) соответствует полином m (x)=x+ x2 + x3.

          Умножим m(x) на xn-k :

          m(x) × xn-k =m(x) × x3 =(x + x2 + x3) × x3 = x4 + x5 + x6 .                         (1.68)  

          Разделим  m(x) × xn-k на порождающий полином g(x) :

    

              
        X
        5 + 0  + X
         X5 + 0 + X3 +X
              X2=
        r(x).                                                      (1.69)  

          Таким образом, кодовый полином, соответствующий  информационной последовательности m = (0111), будет иметь следующий вид:

          U(x) =   0*X0 + 0*X1 + 1*X2 +  0*X3 + 1*X4 + 1*X5 + 1*X6,                (1.70)  

      а соответствующее кодовое слово  U = (0010111).

          Итак, циклический (n,k)-код k-разрядной информационной последовательности m = (m0, m1 ... mk-1) получают следующим образом:

          -  информационную последовательность  m умножают на xn-k, то есть сдвигают вправо на n-k разрядов;

           полином полученной последовательности делят на порождающий полином кода g(x);

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