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

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

         Среднее значение длины кодового обозначения  здесь равно 2,686, т.е. на одну букву текста приходится в среднем 0,895 двоичных знаков, что всего на 1,5% больше значения дв.зн./букву.

               В случае еще большей  разницы в вероятностях букв А и Б приближение к минимально возможному значению Н дв.зн./букву может несколько менее быстрым, но оно проявляется не менее наглядно. Так, при р(А) = 0,89 и р(Б) = 0,11 это значение равно – 0,89 log0,89 – 0,11 log0,11 ≈ 0,5 дв.зн./букву, а равномерный код (равносильный применению кода Шеннона – Фано к совокупности двух имеющихся букв) требует затраты одного двоичного знака на каждую букву – в два раза больше. Нетрудно проверить, что применение кода Шеннона – Фано к всевозможным двухбуквенным комбинациям здесь приводит к коду, в котором на каждую букву приходится в среднем 0,66 двоичных знаков, применение к трехбуквенным комбинациям - 0,55, а к четырехбуквенным блокам - в среднем 0,52 двоичных знаков – всего на 4% больше минимального значения 0,50 дв.зн./букву.[2] 
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

           2.2 Описание  Кода Шеннона – Фано.

           Программа состоит из 6 частей.

           Более подробно описание программы смотри Приложение 1.

           Части программы:

           1)Раздел  описании переменных, массивов.

           2)Описание  файлов, связывание файла с переменной  и обращение к файлу. Ввод строки

           3) Отделение символов и их количество. Запись символов в переменную s1, а количество символов в переменную a.

           4) Сортировка по количеству вхождений в строку.

           5) Сам код. На против верхней  части проставляем 0, напротив  нижней части 1.С последующим проделыванием с остальными частями то же самое. Складываем первые части со второй. Сортируем, меняя местами.

           6) Вывод файла. Закрытие файла. 
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

         Заключение

         До  появления работ Шеннона и  Фано, кодирование символов алфавита при передаче сообщения по каналам связи осуществлялось одинаковым количеством бит, получаемым по формуле Хартли. С появлением этих работ начали появляться способы, кодирующие символы разным числом бит в зависимости от вероятности появления их в тексте, то есть более вероятные символы кодируются короткими кодами, а редко встречающиеся символы - длинными (длиннее среднего).

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

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

         Список  литературы

    1. Банкет В.Л., Дорофеев В.П.  Цифровые  методы  в  спутниковой  связи.  - М.: Радио и связь, 1988.
    2. Вернер М.О. Основы кодирования. Учебник для ВУЗов. Москва: Техносфера, 2004.
    3. Гуткин Л.С. Проектирование радиосистем и радиоустройств. - М.: Радио и связь, 1986.
    4. Зюко А.Г., Коробов Ю.Ф. Теория передачи сигналов. - М.: Сов. радио, 1972.
    5. Калинин А.Н., Черенков Е.П. Распространение радиоволн и работа радиолиний. - М.: Радио и связь,  1971.
    6. Кларк Дж., Кейн Дж. Кодирование  с  исправлением ошибок в системах цифровой связи. – М.: Радио и связь, 1987.
    7. Коржик В.И., Финк Л.М., Шелкунов К.Н..  Расчет  помехоустойчивости  систем передачи дискретных сообщений. - М.: Радио и связь, 1981.
    8. Кузьмин И.В. Основы теории информации и кодирования. - Минск: Вышэйш. шк., 1986.
    9. Лезин  Ю.С.  Введение  в теорию и технику радиотехнических  систем. - М.:   Радио и связь, 1986.
    10. Мордухович Л.Г., Степанов А.Г. Системы радиосвязи (курсовое проектирование). - М.: Радио и связь, l987.
    11. Пенин П.И. Системы передачи цифровой информации. - М.: Сов. радио, 1976.
    12. Пестряков В.Б., Кузенков В.Д. Радиотехнические системы. - М.: Радио и связь, 1988.
    13. Радиотехнические системы/ Под ред. Ю.М. Казаринова - М.: Сов. радио, 1968.
    14. Справочник по радиорелейной связи/ Под peд. С.В. Бородича - М.: Радио и связь, 1981.
    15. Тепляков И.П., Рощин Б.В. Радиосистемы передачи информации. - М.: Радио  и связь, 1982. 
    16. Хемминг Р.В. Теория информации и теория кодирования. - М.: Радио и связь, 1983.
    17. Чердынцев В.А. Радиотехнические системы. – Минск: Вышэйш. шк., 1988.
 

    Приложение 1

          uses crt;

         var {Раздел описания переменных и массивов}

            c:char;

            s,s1,s2:string;

            i,n,j,j1:byte;

            a:array [1..255] of byte;

            str:array [1..255] of string[9];

            st:array [1..255] of string[100];

            f,f1,f2:text;

         begin clrscr;

         assign(f,’Cod.txt’); assign(f1,’Bukv.txt’); assign(f2,’1&0.txt’);

         rewrite(f);rewrite(f1);rewrite(f2);

         writeln('Введите строку');readln(s);{Ввод строки}

         s2:=s; {присвоение s2 =s}

         while length(s) <> 0 do {цикл до конца строки}

         begin

         s1:=s1+s[1];

          for i:=1 to length(s) do {Идем до конца строки}

           if (s1[length(s1)] = s[i])and(pos(s1[length(s1)],s) <> 0) then

           begin

           inc(n);delete(s,pos(s1[length(s1)],s),1);dec(i);{Отделяем буквы и передаем их в s1}

           end;

         a[length(s1)]:=n;n:=0;{Записываем в a}

         end;

           for j:=1 to 10 do {Сортировка массива}

           for i:=1 to length(s1) do

           begin

            if (a[i] > a[i-1])and(i<>1) then

            begin {меняем местами символы по количеству вхождений}

            n:=a[i];a[i]:=a[i-1];a[i-1]:=n;

            c:=s1[i];s1[i]:=s1[i-1];s1[i-1]:=c;

            end;

             if (a[i] < a[i+1])and(i<>0) then

             begin

             n:=a[i];a[i]:=a[i+1];a[i+1]:=n;

             c:=s1[i];s1[i]:=s1[i+1];s1[i+1]:=c;

             end;

            end;{составляем собственно код}

             for i:=1 to length(s1) do {Идем до конца строки}

             st[i]:=s1[i]; {st присваиваем s1}

            i:=length(s1); {I количество символов в строке}

             while length(s1) <> length(st[1]) do {Пока количество символов s1 не равно st1 будем выполнять}

             begin

              for n:=1 to length(st[i]) do {n=1 идем до конца строки}

              begin

              j:=pos(st[i][n],s1); {j присваивается sti n в строке s1}

               if a[i] > a[i-1] then str[j]:='1'+str[j] {Первому символу присваеваем 1 а остальным 0}

               else str[j]:='0'+str[j];

              end;

               for n:=1 to length(st[i-1]) do

               begin

               j:=pos(st[i-1][n],s1);

                if a[i] > a[i-1] then str[j]:='0'+str[j]

                 else str[j]:='1'+str[j];

               end;

              a[i-1]:=a[i]+a[i-1];a[i]:=0; {Складываем первичную часть со второй}

              st[i-1]:=st[i-1]+st[i];st[i]:='';dec(i);

           for j1:=i downto 1 do

           begin

            if (a[j1] > a[j1-1])and((j1-1) <> 0) then

            begin

            n:=a[j1];a[j1]:=a[j1-1];a[j1-1]:=n;{Сортируем.Меняем части местами}

            s:=st[j1];st[j1]:=st[j1-1];st[j1-1]:=s;

            end;

           end;

             end;

          for i:=1 to length(s2) do

          begin

          write(f2,str[pos(s2[i],s1)],' ');{Вывод в файл}

          write(str[pos(s2[i],s1)],' ');

          end;

           for i:=1 to length(s1) do

           begin

           write(f1,s1[i],' ');

           write(f,str[i],' ');

           end;

         close(f);close(f1);close(f2); {Закрываем файлы}

         end. 
       

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