Автор: Пользователь скрыл имя, 24 Марта 2011 в 13:40, курсовая работа
Объект исследования: кодирование информации.
Предмет исследования: основные алгоритмы экономичного и помехоустойчивого кодирования.
Целью нашего исследования является изучение теоретических основ и процесса кодирования информации, формирования экономичных и помехоустойчивых кодов на примере алгоритмов Хемминга, Хаффмана и Шеннона – Фано.
Введение…………………………………….....2
Кодирование информации…………………3
Задача кодирования……………………...3
Экономичное кодирование……………...8
Помехоустойчивое кодирование………16
Практическая реализация кодирования….22
Реализация программы кодирования
по методу Хаффмана………………………...22
Реализация программы – эмулятора
терминала азбуки Морзе…………………….28
Заключение…………………………………...32
Список литературы…………………………..33
Систематические коды образуют наиболее обширную группу (n, k)- разделимых кодов. Особенностью этих кодов является то, что проверочные (корректирующие) символы образуются с помощью линейных операций над информационными. Кроме того, любая разрешённая кодовая комбинация может быть получена в результате линейной операции над набором к линейно независимых кодовых комбинаций. В частности, суммирование по модулю 2 двух и более разрешённых комбинаций также дает разрешённую кодовую комбинацию.
Поскольку
теоретической основой
Эти коды получили наибольшее применение в системах передачи дискретной информации.
В
систематических кодах
Наиболее известны среди систематических кодов коды Хемминга, которые исторически были найдены раньше многих других кодов и сыграли большую роль в развитии теории корректирующих кодов. В этих кодах используется принцип проверки на чётность определённого ряда информационных символов.
Проверочная
группа из r символов формируется поэлементно
по соответствующему алгоритму. Коды Хемминга,
имеющие dmin = 3, позволяют исправить одну
ошибку. [2; c. 230]
2. ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ КОДИРОВАНИЯ
2.1 Реализация программы кодирования по методу Хаффмана.
Алгоритм
Хаффмана ( англ. Huffman) — адаптивный жадный
алгоритм оптимального
Код Хаффмана — статистический способ сжатия информации, который дает снижение средней длины кода, используемого для представления символов фиксированного алфавита. [7]
Данная программа представляет собой реализацию кодирования по методу Хаффмана. Средой разработки данного приложения явилась среда программирования Borland Delphi 7. Ниже будут приведены описания основных процедур и функций данной программы с подробным описанием и комментариями. Полный исходный код будет представлен в приложениях.
Работа
данного приложения начинается с формирование
таблицы частот символов на основе частотного
анализа введённой пользователем строки.
По умолчанию, строке присваивается значение
«ИНФОРМАТИКА!». Заметим, что приложение
чувствительно к регистру. Заполнение
таблицы происходит по событию «TForm1.Button2Click»(кнопка
«Заполнение вероятностной таблицы»)
и описано в соответствующей процедуре:
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
ch:char;
schVh:integer;
begin
if edit8.Text = '' then edit8.Text:='ИНФОРМАТИКА!';
form2.ListBox1.Clear;
Form2.listbox1.Items.Add('
str:=edit8.Text;
kolCh:=0;
While str<>'' do
begin
ch:=str[1];
schVh:=0;
kolCh:=kolCh+1;
i:=1;
while i<=length(str) do
begin
if str[i]=ch then
begin
end;
i:=i+1;
end;
stringGrid1.RowCount:=kolCh+1;
stringGrid1.Cells[0,kolCh]:=
stringGrid1.Cells[1,kolCh]:='"
stringGrid1.Cells[2,kolCh]:=
end;
//СТАТИСТИКА (общие расчёты, выводятся на Form2)
Form2.listbox1.Items.Add('
For i:=1 to kolCh do
stringGrid1.Cells[3,i]:=
For i:=1 to kolCh do
begin
StringGrid1.Cells[4,i]:=
ent:=ent-strtofloat(
end;
Form2.listbox1.Items.Add('
//СТАТИСТИКА END
end;
Бинарное дерево, соответствующее коду Хаффмана, называют деревом Хаффмана.
Задача построения кода Хаффмана равносильна задаче построения соответствующего ему дерева.
Общая схема построения дерева Хаффмана:
Таким образом, для формирования кодов нам достаточно построить взвешенное кодовое дерево. Это реализуется путём построения «вектора отцов» (arrOtec) - один из способов представления подвешенных деревьев, представляющего собой массив из n элементов (n – количество листьев дерева), в котором будут содержаться номера «отцов» каждого элемента, соответствующего индексу. Этот массив является динамическим, его размер определяется из количества символов в таблице (2*KolCh-1), поэтому целесообразным является обработка возможных исключительных ситуаций с помощью конструкции Try…Except…end. В случае ошибки (незаполненной вероятностной таблицы 2*KolCh-1=2*0-1=-1) всплывающие окно сообщает об ошибке и необходимости заполнения таблицы.
Построение дерева с помощью вектора отцов происходит в несколько этапов:
После построения дерева начинаем обратный ход:
К значению массива кодов (arrKod) добавляем символ кода ветви(arrChKod), после чего, переходим к «отцу» данного элемента, пользуясь «вектором отцов» и так пока не дойдём до корня дерева.
Построение
кодов происходит по событию TForm1.Button1Click.
Try
n:=kolCh*2-1; //размерность дерева.
//инициируем массивы: весов, "вектор отцов", кодовых символов (0,1), массив кода
setlength (arrVes,n+1);
setlength (arrOtec,n+1);
setlength (arrChKod,n+1);
setlength (arrKod,n+1);
For i:=1 to n do arrVes[i]:=0;
For i:=1 to n do arrOtec[i]:=0;
For i:=1 to n do arrChKod[i]:='_';
For i:=1 to kolCh do
arrVes[i]:=strtofloat(
For j:=kolCh+1 to n do
begin
min:=100; //минимальный
newmin:=100; //самый минимальный :)
for i:=1 to n do
begin
if (newmin>=arrVes[i]) and(arrVes[i]<>0) then //ищем 2 элемента с минимальным весом
nnewmin:=i;
if (min>=arrVes[i]) and(arrVes[i]<>0) and (arrVes[i]<>newmin) then //контрольный поиск 2 минимального :)
end; //end i
//заполняем вектор отцов. на основе 2-х найденых элементов образуется новый
//попутно формируется массив кодов. в процессе формирования изменяется и анализируется массив весов.
arrOtec[nmin]:=j;
arrOtec[nnewmin]:=j;
arrVes[j]:=arrVes[nmin]+
arrVes[nmin]:=0;
arrVes[nnewmin]:=0;
arrChKod[nmin]:='0';
arrChKod[nnewmin]:='1';
end; //end j
Отчистка таблицы и кодовых полей происходит по изменению вводимой строки, а так же из основного меню: «Меню»-«Новый Код». Вызывается процедура обнуления всех глобальных параметров программы и объектов на формах Form1, Form2.
Данная
программа также рассчитывает основные
информационные параметры данного кодирования.
Доступ к этой информации осуществляется
через главное меню программы, вкладка
«Статистика».
2.2. Реализация программы – эмулятора терминала азбуки Морзе.
А́збука
Мо́рзе— способ кодирования букв
Была названа в честь американского изобретателя Сэмюэля Морзе, который предложил её в 1838.
Никаких специальных мер по исправлению и обнаружению ошибок в коде Морзе не предусматривается в связи с большой избыточностью самого передаваемого текста. В этом смысле код Морзе не относится к классу корректирующих кодов. [7]
Данное приложение является наглядной иллюстрацией кодирования непрефиксного кодирования информации. Она может служить не только наглядным пособием для ознакомления с данной системой кодирования, но и тренажёром – обучающей программой для углубленного изучения азбуки Морзе.