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

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

                                          

      Рис. 1.1

          Блочный код, обладающий свойствами линейности и систематичности, называется линейным блочным систематическим (n, k)-кодом.  
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

          1.2.1 Код с  проверкой на четность

          Самым простым линейным блочным кодом  является (n,n-1)-код, построенный с помощью одной общей проверки на четность. Например, кодовое слово (4,3)-кода можно записать в виде вектора-столбца:

                                    = ( m0, m1, m2, m0+m1+m2 ),                                  (1.1) 

          где   m -  символы информационной последовательности, принимающие значения 0 и 1, а суммирование производится по модулю 2 ( mod2 ).

          Поясним основную идею проверки на четность.

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

                                      m  = ( 1 0 1 ).         (1.2)

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

                                 U = ( U0, U1, U2, U3 ) = ( 1 0 1 0 ), (1.3)

          где проверочный символ U3 формируется путем суммирования по mod2 символов информационной последовательности   m :

                                   U3 = m0 +  m1 + m2 .                                                         (1.4)

          Нетрудно  заметить, что если число единиц в последовательности  m четно, то результатом суммирования будет 0, если нечетно — 1, то есть проверочный символ дополняет кодовую последовательность таким образом, чтобы количество единиц в ней было четным. [6]

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

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

                                  P1 = n× Pош × (1- Pош)n-1                                                                            (1.5)

          (то  есть в одном бите ошибка  есть, а во всех остальных  n - 1  битах ошибки нет).

          Вероятность того, что произойдет две ошибки, определяется уже числом возможных  сочетаний ошибок по две (в двух произвольных битах ошибка есть, а во всех остальных n - 2  битах ошибки нет):

                              P2 = Cn2 × Pош × (1- Pош)n-2  ,                                                                         (1.6)

          и аналогично  для ошибок более  высокой кратности.

          Если  считать, что вероятность ошибки на символ принятой последовательности Pош достаточно мала (Pош<<1), а в противном случае передача информации не имеет смысла, то вероятность выпадения ровно l  ошибок составит  Pl @ Pошl

          Отсюда  видно, что наиболее вероятными являются одиночные ошибки, менее вероятными — двойные, еще меньшую вероятность будут иметь трехкратные ошибки  и т. д.

          Если  при передаче рассматриваемого (4,3)-кода произошла одна ошибка, причем неважно, в какой его позиции, то общее число единиц в принятой последовательности  r уже не будет четным.

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

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

          На  основании общей идеи проверки на четность и проверочного уравнения (1.4)  легко организовать схему  кодирования - декодирования для  произвольного кода с простой  проверкой на четность.

          Схема кодирования может выглядеть  следующим образом   (рис. 1.2):  
       
       

      

      

                            
 
 

             
 
 
 
 

      Рис. 1.2

          Декодирующее  устройство для кода с проверкой  на четность изображено на  рис. 1.3.

                       
 

          Рис. 1.3 

          Декодер, как это видно из рис. 1.3, проверяет на четность общее число единиц в принятой последовательности и выдает на своем выходе нуль или единицу в зависимости от того, выполнилась проверка или нет.[17]

          Отметим следующий момент. Если посимвольно  сложить два кодовых слова, принадлежащих рассматриваемому (4, 3)-коду:

                a  = ( a0, a1, a2, a0 + a1 + a2 ),  и  b  = ( b0, b1, b2, b0 + b1 + b2 ),            (1.7)

      то получим

          с = ( a0+b0, a1+b1, a2+b2, a0+b0+a1+b1+a2+b2) = ( c0, c1, c2, c0+c1+c2 ),        (1.8)

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

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

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

          1.2.2 Порождающая матрица линейного блочного кода 

          Только  что в качестве примера были рассмотрены  два простейших корректирующих кода  - код с простой проверкой на четность, позволяющий обнаруживать однократную ошибку в принятой последовательности, и блочный итеративный код, исправляющий одну ошибку с помощью набора проверок на четность по строкам и столбцам таблицы.  Однако  формальное правило, по которому осуществляется кодирование, то есть преобразование информационной последовательности в кодовое слово, по-настоящему еще не определено.  Так как же задаются блочные коды?[11]

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

                       Таблица 1.2

          m U
          000 0000
          001 0011
          010 0101
          011 0110
          100 1001
          101 1010
          110 1100
          111 1111

            Такой способ описания кодов, кстати, применим для любых, а  не только линейных кодов. Однако при больших k  размер кодовой таблицы оказывается слишком большим, чтобы им пользоваться на практике (для кода с простой проверкой на четность двухбайтового слова размер таблицы составит  ~ 25 * 216  = 2000000 двоичных символов).

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

      U0 = m0,

      U1 = m1,          (1.9)

      U2 = m2,     

      U3 = m + m1 + m2.

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

          1  0  0 … 0 P00     P01  . . . .   P0, n- k- 1  
      G  = 0  1  0 … 0 P10     P11  . . . .  P1, n- k- 1  
        ……… ……………… .             (1.10)
          0  0  0 … 1 Pk- 1, 0    Pk- 1, 1  . . . . Pk- 1, n- k- 1  
        единичная 

      матрица  I 
      k
      *k

      матрица  Р

      k*(n- k)

       

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