Реферат: Помехоустойчивое кодирование, распознавание символов
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-начало координат при отображении}