RSS    

   Реферат: Помехоустойчивое кодирование, распознавание символов

     sr:string;

     driver,mode,errcode:integer;

 begin

      driver:=detect;

      initgraph(driver, mode,'');    {инициализация графики}

      errcode:=graphResult;

       if errcode<>grOk then

         begin

            Writeln(' Ошибка графики. ');

            writeln(GraphErrorMSG(Errcode));

                     halt

         end;

  setcolor(white);                   {контуры фигур и текст}

  line(x0,y0,x0,y0-300);                  {------ось y-----}

  line(x0,y0,x0+200,y0);                  {------ось x-----}

  SetTextStyle(DefaultFont, HorizDir, 1); {установка шрифта}

  OutTextXY(x0,y0+40,'Количество повторений , n');

  SetTextStyle(DefaultFont, VertDir, 1);

  SetTextJustify(LeftText,TopText);{--способ выравнивания--}

  OutTextXY(x0-50,180,'Количество ошибок , %');

  SetTextStyle(DefaultFont, HorizDir, 1);

   for i:=1 to 5 do

    line(x0+i*35,y0,x0+i*35,y0-5);{делительные штрихи оси x}

         outtextxy(x0+35,y0+10,'20');

         outtextxy(x0+5*35,y0+10,'100');

   for i:=1 to 4 do

    line(x0,y0-i*65,x0+5,y0-i*65);{делительные штрихи оси y}

         outtextxy(x0-20,y0-65,'15');

         outtextxy(x0-20,y0-3*65,'45');

   for nn:=1 to 33 do

   begin                                     {рисуем график}

     setcolor(2);

     line(x0+(nn+1)*5,round((y0-data_n[nn])),

       x0+(nn+2)*5,round((y0-data_n[nn+1])));

   end;

   setcolor(15);

   outtextxy(50,460,'Press any key...');

   readkey;

   ClearViewPort;

   line(x0,y0,x0,y0-360);                            {------ось y-----}

   line(x0,y0,x0+200,y0);                            {------ось x-----}

   SetTextStyle(SmallFont, HorizDir, 5);        {---установка шрифта--}

   OutTextXY(x0,y0+40,'Значения p01 и p10 , %');

   SetTextStyle(SmallFont, VertDir, 5);

   SetTextJustify(LeftText,TopText);    {-----способ выравнивания-----}

   OutTextXY(x0-50,140,'Количество ошибок , %');

   SetTextStyle(DefaultFont, HorizDir, 1);

    for i:=1 to 5 do

      line(x0+i*35,y0,x0+i*35,y0-5);  {----делительные штрихи оси x---}

          outtextxy(x0+35,y0+5,'20');

          outtextxy(x0+5*35,y0+5,'100');

    for i:=1 to 4 do

      line(x0,y0-i*75,x0+5,y0-i*75); {----делительные штрихи оси y---}

          outtextxy(x0-25,y0-75,'25');

          outtextxy(x0-25,y0-2*75,'50');

          outtextxy(x0-25,y0-3*75,'75');

          outtextxy(x0-25,y0-4*75,'100');

      {line(x0,y0-4*75,x0+200,y0-4*75);}

   setcolor(2);

   for nn:=1 to 13 do

                                        {рисуем график}

       line(x0+(nn+1)*12,round((y0-data_p[nn])),

       x0+(nn+2)*12,round((y0-data_p[nn+1])));

 end;

 {=====================ОСНОВНОЙ БЛОК=======================}

Begin

   clrscr;

   p10:=0.2+0.02*a;

   p01:=0.2+0.02*b;

   randomize; {--инициализация генератора случайных чисел--}

   ver;        {инициализация и упорядочивание вероятностей}

   set_codes;         {--------инициализация кодов---------}

   TextColor(15);

   gotoxy(10,1);

   write('ПАРАМЕТРЫ КАНАЛА :');

   gotoxy(1,2);write('Вероятности одиночных ошибок :');

   gotoxy(3,5);write('при передаче нуля :    ',p01:4:3);

   gotoxy(3,6);write('при передаче единицы : ',p10:4:3);

   gotoxy(40,1);write('НЕРАВНОМЕРНЫЕ КОДЫ СООБЩЕНИЙ : ');

   for i := 1 to m do          {--------вывод кодов--------}

     begin

         gotoxy(45,1+i);

         write(' z(',i,') = ');

         gotoxy(55,1+i);

         for j := 1 to dl[i] do

           write((z[i] shr (8 - j)) and 1);        {побитно}

     end;

   gotoxy(10,19);

   write('Ввести длину передаваемого массива сообщений : ');

   read(dlina);

   write('         Ввести n для (n,1) - кода : ');

   read(n);

   count_of_errors := 0;

   for sh := 1 to dlina do

     begin            {--------передача сообщений----------}

       ent := sourse; {--случайное сообщение из ансамбля---}

       deranges;      {-----------внесение помех-----------}

       decoder;       {----декодирование двоичного кода----}

       if ent <> decode then inc(count_of_errors);

     end;

   gotoxy(10,23);

   write('РЕЗУЛЬТАТ ПЕРЕДАЧИ СООБЩЕНИЙ : ');

   TextColor(12);

   write( 'КОЛИЧЕСТВО ОШИБОК =  ',count_of_errors);

   TextColor(15);

   gotoxy(10,24);

   write('Please wait...');

   {---------расчет count_of_errors для разных n-----------}

   n := 0;count := 0;dlina := 100;

   repeat

     n := n + 3;

     inc(count);

     count_of_errors := 0;

     for sh := 1 to dlina do

       begin

         ent := sourse;

         deranges;

         decoder;

      if ent <> decode then inc(count_of_errors);

     end;

     data_n[count] := round(count_of_errors*3) ;

   until n >= 96;

       {---расчет count_of_errors для разных p01 и p10---}

   n:=3;count:=0;dlina := 100;p01:=0;p10:=0;

   repeat

     p01:=p01+0.07;

     p10:=p10+0.07;

     inc(count);

     count_of_errors := 0;

     for sh := 1 to dlina do

       begin

         ent := sourse;

         deranges;;

         decoder;

      if ent <> decode then inc(count_of_errors);

     end;

     data_p[count] := round(count_of_errors*3) ;

   until p01 >= 0.98;

   gotoxy(10,24);

   writeln('Press any key to continue...');

   readkey;

   graphiki;

   readkey;

   closegraph;

End.

ПРИЛОЖЕНИЕ Б

 

     Текст программы распознавания символов

Program Final_of_work;

uses graph;

const BiH=50;       {-------высота картинки в пикселях------}

      BiW=160;      {-------ширина картинки в пикселях------}

stroka:array[1..10] of char=

                   ('I','h','i','G','F','k','H','g','J','j');

   {-----эталонная строка для установления соответствия-----}

type arr=array[1..BiW,1..BiH] of byte; {тип массива-картинки}

const

path0='work.bmp';       {путь к bmp-файлу с исходной строкой}

var file0,file1:file of byte; {файловые переменные для связи}

    counter,          {счетчик текущей позиции распознавания}

    rasp:byte;         {номер текущего распознанного символа}

f0,                            {массив с эталонной картинкой}

f:arr;                {массив с картинкой, содержащей помехи}

       x,y,                       {счетчики хода по массивам}

xmin, ymin,xmax, ymax , {минимально описанный прямоугольника}

             xt, {текущая позиция x при движении по картинке}

xsav,{для сохранения текущего x при использовании корреляции}

                     i,j,          {вспомогательные счетчики}

xm,xk,ym,yk,

{для сохранения текущего м.о.п. при использовании корреляции}

            k,{счетчик шаблонов при использовании корреляции}

di,dj  :   integer;

          {смещения шаблона и символа по x и y при наложении}

flag :boolean;          {признак отображения на экране рамки}

      kfmax,     {глобальный максимум корреляции для символа}

      max,         {значение корреляции для текущего шаблона}

      kf,      {текущая переменная для вычисления корреляции}

      smin:longint;    {минимально возможная площадь шаблона}

Procedure Init_Graph_Mode;  {-----инициализация графики-----}

var

  Driver,              {код драйвера графического устройства}

  Mode,                             {код графического режима}

  TestDriver,       {внутренний номер драйвера в таблице BGI}

  ErrCode: Integer;                              {код ошибки}

  function TestDetect: Integer; far;

{функция определения параметров графического режима драйвера}

{полный адрес точки входа в функцию, т.е. = сегмент+смещение}

      begin

        TestDetect := 3;    {разрешение экрана 800*600 точек}

      end;

begin

  TestDriver := InstallUserDriver('svga256', @TestDetect);

                  {устанавливает новый драйвер в таблицу BGI}

  if GraphResult <> grOk then

  begin

Writeln('Ошибка при установке драйвера:',

                                     GraphErrorMSG(ErrCode));

    Halt(1);

  end;

  Driver := Detect;{автоматическое определение драйвера-SVGA}

  InitGraph(Driver, Mode, '');

                         {инициализация графического режима;}

                               {драйвер - в текущем каталоге}

  ErrCode := GraphResult;

  if ErrCode <> grOk then

  begin

    Writeln('Ошибка графического режима:',

                                     GraphErrorMSG(ErrCode));

    Halt(1);

  end;

  SetTextStyle(DefaultFont, HorizDir, 1);     {текущий шрифт}

  OutTextXY(120,20,'Идет инициализация графического режима...');

  for x := 0 to 255 do      {инициализация палитры grayscale}

      SetRGBPalette(x,x,x,x);

  OutTextXY(450,20,'Ok.');

end;

Procedure showlist(xn,yn:integer);

      {---отображение картинки c масштабированием в 9 раз---}

                     {xn,yn-начало координат при отображении}

Страницы: 1, 2, 3, 4, 5, 6, 7


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.