Сверточное кодирование

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



?троки

*}TTreeHandler.rotateString(val: string): string;: string;: int;: int;:= '';:= length(val);:= strLen;(i >= 1) do:= res + val[i];:= i-1;;:= res;;

// декодер - КОНЕЦ

// методы формы - НАЧАЛО

{**

* Создание формы

*}TmyForm.FormCreate(Sender: TObject);

// инициализируем автомат мили:= MealyAutomaton.init();

// инициализируем декодер:= TTreeHandler.init();.DoubleBuffered := true;:= TBitmap.Create;();.Clear();.Text := 'тест1.';;

{**

* перерисовка формы

*}TmyForm.FormPaint(Sender: TObject);(treeHandler.pleft, 0);;

{**

* Отображение дерева

*}TmyForm.printTree(t:TListElemPtr; levelNum :int);: int;: TNodeDataPtr;: TNodeDataPtr;: int;: int;: int;: int;: int;: int;: int;: int;: int;: int;:= 60 - leftTreePaintPosition.Position;:= 40{+myForm.GroupBox2.Height};:=35;:=60;:=12;:= 0;:= 0;

// очищаем канву.Width := myForm.Width;.Height := myForm.Height;.Canvas.Brush.Color:= {clWhite}clBtnFace;.Canvas.Pen.Style:= psSolid;.Canvas.Pen.Color:= clBlack;.Canvas.FillRect(Rect(0,0,myForm.Width,myForm.Height));

// Рекурсивное прохождение заканчивается на пустом поддереве

while (t NIL)then:= topPos + levelHeight*i; := t^.nodes[i];

// рисуем связь с родителем

nodeParent := node^.parent;(nodeParent <> NIL) then(nodeParent.val = '00') then parentNodeY :=0if(nodeParent.val = '10') then parentNodeY :=1if(nodeParent.val = '01') then parentNodeY :=2parentNodeY :=3;:= topPos + levelHeight*parentNodeY;:= levelX-levelWidth;

// выделяем минимальный путь(node^.minWayBelong) then.Canvas.Pen.Color:= clRed;.Canvas.Pen.Width :=2;.Canvas.Pen.Color:= clBlack;.Canvas.Pen.Width :=1;;.Canvas.MoveTo(levelX, levelY);.Canvas.LineTo(parentNodeX, parentNodeY);;.Canvas.Pen.Color:= clBlack;.Canvas.Pen.Width :=1;

// рисуем текущий узел.Canvas.Ellipse(levelX-ellipse, levelY-ellipse, levelX+ellipse, levelY+ellipse);.Canvas.TextOut(levelX-7, levelY-6, IntToStr(node^.way));

// перерисовывам родителя(nodeParent <> NIL) then.Canvas.Ellipse(parentNodeX-ellipse, parentNodeY-ellipse, parentNodeX+ellipse, parentNodeY+ellipse);.Canvas.TextOut(parentNodeX-7, parentNodeY-6, IntToStr(nodeParent^.way));;;

// номер уровня.Canvas.TextOut(levelX-7, topPos-6 + levelHeight*4, IntToStr(levelNum+1));

// декодируемый код.Canvas.TextOut(levelX-7+ trunc(levelWidth/2), 10, t^.code);;

// рисуем следующий уровень

t := t^.pnext;

levelNum := levelNum+1;;(treeHandler.pleft 0) then.Visible := true;.Max := max;.Visible := false;.Visible := false;;;

{**

* преобразование строки в двоичный код

*}TmyForm.step0();: char;: int;: int;: string;Data.Text := '';i := 1 to length(inputData.Text) do:= inputData.Text[i];:= '';j:=0 to 7 do(int(sym) and (1 shl j) > 0) then str :='1'+strstr :='0'+str;;Data.Text := step0Data.Text + str;;Label.Caption := 'Соощение в двоичном коде ('+IntToStr(length(step0Data.Text))+' бит)';;

{**

* кодирование строки с помощью автомата мили

*}

procedure TmyForm.step1();

var

y1: int;// Выходы автомата Мили

y2: int;

res: string;// Результат кодирования

i: int;: int;:= '';.init();i := 1 to length(step0Data.Text) do((step0Data.Text[i] = '0') OR (step0Data.Text[i] = '1')) then:= int(step0Data.Text[i])-int('0');.Coding(sym, @y1, @y2);:= res + IntToStr(y1)+IntToStr(y2);;;Data.Text := res;Label.Caption := 'Закодированное сообщение ('+IntToStr(length(step1Data.Text))+' бит)';;

{**

* имитация канала связи

*}TmyForm.step2();: int;: int;: int;: int;: int;// промежуток, в котором возможно появление пачки ошибок: int;// местоположение ошибки: string; : int;// максимальное количество ошибок

errorCount : int;// счетчик количества ошибок

begin:= 1;:= StrToInt(errorMultiplicityBox.Text);:= trunc(StrToFloat(errorProbabilityBox.Text) * 100);

// очищаем стилиData.SelStart:= 1;Data.SelLength := length(step2Data.Text);Data.SelAttributes.Color:= clBlack;Data.SelAttributes.Style:= [];Data.Lines.Clear();:= step1Data.Text;();:= round(length(str) * (errorProbability/100));:= 0;:=1;((i = maxErrors) then;;(random(99) + 1 <= errorProbability) then

errorPosition := 0;

// меняем 1 на 0 и 0 на 1 (т.е. генерируем ошибку)

for j:=i+errorPosition to i+errorPosition+errorMultiplicity - 1 do(j > length(str)) then;;(str[j] = '0') then[j] := '1'[j] := '0';;:= errorCount + 1;:= i + 1;; := i - 1;

// стараемся сделать так, чтобы ошибки не "слепливались"

if ((errorProbability errorProbability)) then:= i + 1;;;:= i + errorInterval;;Data.Text := str;Label.Caption := 'После прохождения канала ('+IntToStr(length(step2Data.Text))+' бит)';

// выделяем ошибочные символыi:=1 to length(str) do(str[i] <> step1Data.Text[i])thenData.SelStart:= i-1;Data.SelLength:= 1;Data.SelAttributes.Color:= clFuchsia;Data.SelAttributes.Style:= [fsUnderline, fsBold];;

end

end;

{**

* декодирование в двоичный код

*}TmyForm.step3();: string;: int;: int;:= step2Data.Text;:= length(code);(codeLen > 0) then

// удаление дерева (если уже был запуск декодера)

treeHandler.DeleteTree(treeHandler.pleft);

// Инициализация дерева

treeHandler.CreatRoot();

// строим дерево декодера

i := 1;

while (i < codeLen) do.createLevel(treeHandler.pleft, copy(code, i, 2)); := i+2;

end;

// выводим результат декодирования

step3Data.Text := treeHandler.decode();

// рисуем дерево декодера

printTree(treeHandler.pleft, 0);;;

{**

* перевод из двоичного кода в строку

*}TmyForm.step4();: string;: int;: int;: int;:= '';:= 1;(i < length(step3Data.Text)) do

{str := str + copy(step3Data.Text, i, 8);}:= 0;j:=0 to 7 do:= (sym shl 1) + (byte(step3Data.Text[i+j]) and 1) ;

{sym + integer(step3Data.Text[i+j])-integer('0');:= sym shr 1;};

//sym := 176;:= str + char(sym);:= i+8;;Data.Text := str;;

{**

* кнопка "закодировать"

*}TmyForm.step1BtnClick(Sender: TObject);();();;

{**

* кнопка "канал связи"

*}TmyForm.step2BtnClick(Sender: TObject);();;

{**

* кнопка "декодировать"

*}TmyForm.step3BtnClick(Sender: TObject);();();;

{**

* кнопка "все шаги сразу"

*}TmyForm.allStepsBtnClick(Sender: TObject);();();();();4();

end;

{**

* прокрутка отображения дерева

*}

procedure TmyForm.leftTreePaintPositionChange(Sender: TObject);(treeHandler.pleft, 0);;

// методы формы - КОНЕЦ

end.

Приложение Б

Таблица ASCII кодов ASCII Таблица символов 0 - 127.

dechexсимвпояснениеdechexсимвdechexсимвdechexсимв00NULПустой символ3220пробел6440@9660`11SOHНачало заголовка3321!6541A9761a22STXНачало текста3422"6642B9862b33ETXКонец текста3523#6743C9963c44EOTКонец передачи3624$6844D10064d55ENQЗапрос372545E10165e66ACKПодтвержд. получения3826&7046F10266f77BELЗвуковой сигнал3927'7147G10367g88BS**Обратный ход каретки4028(7248H10468h99TAB**Горизонт. табуляция4129)7349I10569i10ALF**Начало строки422A*744AJ1066Aj11BVTВертикальная табуляция432B+754BK1076Bk12CFFНачало формы442C,764CL1086Cl13DCR**Возврат каретки452D-774DM1096Dm14ESOПередача462E.784EN1106En15FSIПрием472F/794FO1116Fo1610DLEЗакр. канала связи483008050P11270p1711DC1Упр. устройством 1493118151Q11371q1812DC2Упр. устройством 2503228252R11472r1913DC3Упр. устройством 3513338353S11573s2014DC4Упр. устройством 4523448454T11674t2115NAKОтрицание получения533558555U11775u2216SYNСинхронизация543668656V11876v2317ETBКонец пакета553778757W11977w2418CANОтмена563888858X12078x2519EMЗакрытие среды573998959Y12179y261ASUBЗамена583A:905AZ1227Az271BESCЗавершение593B;915B[1237