Система распознавания объектов в миллиметровом диапазоне радиоволн

Анализ физических предпосылок селекции движущихся малоразмерных наземных целей по спектральным параметрам. Разработка алгоритмов обнаружения МНЦ и повышения эффективности их распознавания в интересах радиолокационных станций разведки и целеуказания.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 28.04.2009
Размер файла 830,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

(2.19)

Безусловная вероятность правильного обнаружения объекта системой селекции при предъявлении ей K-го признака из совокупности определятся как , а безусловная вероятность ошибочных решений .

Решение задач обнаружения неподвижной МНЦ (колесной или бронированной) на фоне отражений от подстилающей поверхности и классификации МНЦ (колесная/гусеничная) производилось раздельно. Подразумеваются, что классификация при необходимости производится после решения задач обнаружения. Усредненные значения безусловных вероятностей ошибочных решений при использовании признаков априорного словаря приведены в таблице 2.16.

Таблица 2.16.Усреднённые значения безусловных вероятностей при использовании признаков априорного словаря

Подстилающая.

поверхность

0,19

0,21

0,35

0,31

0,34

0,38

0,41

0,21

0,34

0,20

0,51

0,54

0,48

МНЦ

0,21

0,19

0,34

0,33

0,33

0,41

0,37

0,19

0,35

0,18

0,49

0,51

0,44

Искусств.объекты

0,31

0,32

0,49

0,54

0,43

0,51

0,41

0,24

0,37

0,21

0,47

0,49

0,47

Продолжение таблицы 2.16

0,39

0,29

0,31

0,25

0,29

0,34

0,38

0,19

0,22

0,19

0,24

0,39

0,27

0,32

0,31

0,29

0,35

0,36

0,20

0,23

0,19

0,21

0,41

0,33

0,37

0,34

0,31

0,41

0,43

0,25

0,27

0,19

0,23

Анализ таблицы 2.16 позволяет сделать следующие выводы:

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

2. Указанные четыре группы параметров коррелированы внутри группы (например ), поэтому целесообразно использовать только один из них.

3. В рабочий словарь признаков обнаружения целесообразно включить четыре параметра, например: или любую возможную комбинацию из приведенных параметров, которые будут обладать приблизительно равной эффективностью. Аналогичные исследования были проведены для выявления признаков рабочего словаря при использовании классов гусеничная/колесная техника. Наименьшие ошибки классификации получены при использовании признаков . Очевидно, что включение в рабочий словарь коррелированных признаков нецелесообразно, поскольку они обладают приблизительно равной эффективностью. Вариант рабочего словаря признаков классификации может иметь вид

.

3. Программное обеспечение

3.1 Комплекса программных средств (КПС) и его условное обозначение

Полное наименование КПС - программное обеспечение системы распознавания радиолокационных сигналов в мм диапазоне волн. Условное обозначение - СР РЛС.

Заказчиком КПС «Программное обеспечение системы распознавания радиолокационных сигналов в мм диапазоне волн» является ТулГУ, кафедра АИУС.

Назначение КПС - распознавания радиолокационных сигналов в мм диапазоне волн.

Цели создания КПС - Разработать программный комплекс (ПК) для селекции объектов, с помощью радиолокационных сигналов в мм диапазоне волн.

3.2 Характеристика объектов автоматизации

Объект автоматизации - процесс сортировки отраженных сигналов, для классификации объектов. Объектом является техника гусеничного или колесного типа.

Схема и алгоритм обработки данных, формат выходных данных представляет собой многоузловую иерархическую систему с элементами самообучения и графически представлена на рисунках 3.1, 3.2, 3.3

Рис. 3.1. Приемное устройство входных сигналов

Входные данные (детерминированный РЛС-сигнал) поступают с приемного устройства на устройство обработки данных, всякая задача, для которой неизвестен алгоритм решения, априорно относится к искусственному интеллекту. В таких задачах программе предоставляется свобода выбора действия в условиях неопределенности. Именно эта свобода действия является существенной составляющей интеллекта, как естественного, так и искусственного, но такие алгоритмы сильно «утяжеляют» системы обработки информации, у нас же структура программных средств неизменна и представлена следующим алгоритмом:

Рис. 3.2. Алгоритм распознавания и обнаружения целей.

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

Рис. 3.3. Классификация объектов (выходные данные)

Сведения об условиях эксплуатации КПС: данный КПС будет эксплуатироваться в идеальных условиях. Для работы не требуется специализированных навыков. Необходимо наличие программного обеспечения и ЭВМ.

Состав к КПС в целом: КПС состоит из программных модулей для ввода исходной информации, моделирования процесса распознавания (селекции), вывода полученной информации в виде графиков и таблиц.

Структура функционирования КПС: КПС стабильно функционирует, обеспечивает легкий доступ к информации, гибок и компактен, открыт для внесения изменений и дополнений.

Для удобства внесение изменений и улучшений приведен листинг программы:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, ComCtrls, TeeFunci;

type

TForm1 = class(TForm) {ОБЪЕКТЫ ОКНА}

Chart1: TChart;

Label1: TLabel;

Button1: TButton;

Button2: TButton;

ProgressBar1: TProgressBar;

Label2: TLabel;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

CheckBox4: TCheckBox;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label9: TLabel;

Label10: TLabel;

CheckBox5: TCheckBox;

Label11: TLabel;

Series1: TPointSeries;

Series2: TPointSeries;

Series3: TPointSeries;

Series4: TPointSeries;

Series5: TPointSeries;

Series6: TPointSeries;

Series7: TPointSeries;

Series8: TPointSeries;

Series9: TPointSeries;

Series10: TPointSeries;

Series11: TPointSeries;

Series12: TPointSeries;

Series13: TPointSeries;

Series14: TPointSeries;

Series15: TPointSeries;

Series16: TPointSeries;

Series17: TPointSeries;

Series18: TPointSeries;

Series19: TPointSeries;

Series20: TPointSeries;

Series21: TPointSeries;

Series22: TPointSeries;

Series23: TPointSeries;

Series24: TPointSeries;

Series25: TPointSeries;

Button3: TButton;

Series26: TPointSeries;

Series27: TPointSeries;

Series28: TPointSeries;

Series29: TPointSeries;

Series30: TPointSeries;

Label8: TLabel;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

{Работа с Файлом Sign01.txt}

function DoFileDialog(Window: HWnd;

FilePath, DialogName, Caption: PChar): Boolean;

function DoFileOpen(Window: HWnd; FilePath: PChar): Boolean;

function DoFileSave(Window: HWnd; FilePath: PChar): Boolean;

var

Form1: TForm1;

ind:byte = 0;

implementation

type

TRec = Integer;

PSYV = ^TSYV;

TSYV = Longint;

THRec = THandle;

TCL = Integer;

TALC = Longint;

THKP = Word;

type

TDF = function(dirq: Integer; InP, OutP: Pointer; Max: Integer;

Context, Data : Longint): Integer;

const

BitPenup = $8000;

function FPenUp(X: LongInt): Boolean;

inline(

$58/ { POP AX }

$5A/ { POP DX }

$2D/$00/$80/ { SUB AX,8000H }

$1B/$C0/ { SBB AX,AX }

$40); { INC AX }

const

IDC_Pen = MakeIntResource(32631);

const

IDC_AltSelect = MakeIntResource(32501);

const

rc_WDefault = $FFFF;

rc_Ldefault = $FFFFFFFF;

rc_WDefaultFlags = $8000;

rc_LDefaultFlags = $80000000;

{ Макрос идентификации(входные потоки)}

const

syvhi_Special = 0;

syvhi_ANSI = 1;

syvhi_Gesture = 2;

syvhi_Kanji = 3;

syvhi_Shape = 4;

syvhi_UniCode = 5;

syvhi_VKey = 6;

function FIsSpecial(syv: TSYV): Boolean;

function FIsAnsi(syv: TSYV): Boolean;

function FIsGesture(syv: TSYV): Boolean;

function FIsKanji(syv: TSYV): Boolean;

function FIsShape(syv: TSYV): Boolean;

function FIsUniCode(syv: TSYV): Boolean;

function FIsVKey(syv: TSYV): Boolean;

{ Конвертеры кодировки файла }

function ChSyvToAnsi(syv: TSYV): Byte;

function SyvCharacterToSymbol(c: Char): TSYV;

function SyvKanjiToSymbol(c: Char): TSYV;

{ SYV значения }

const

syv_Null = $00000000;

syv_Unknown = $00000001;

syv_Empty = $00000003;

syv_BeginOr = $00000010;

syv_EndOr = $00000011;

syv_Or = $00000012;

syv_SoftNewLine = $00000020;

syv_SpaceNull = $00010000;

const

syv_KKConvert = $0002FFD4;

syv_Clear = $0002FFD5;

syv_ExtendSelect = $0002FFD8;

syv_Undo = $0002FFD9;

syv_Copy = $0002FFDA;

syv_Cut = $0002FFDB;

syv_Paste = $0002FFDC;

syv_ClearWord = $0002FFDD;

syv_User = $0002FFDE; { Восстановление исходника }

syv_Correct = $0002FFDF;

syv_Backspace = $00020008;

syv_Tab = $00020009;

syv_Return = $0002000D;

syv_Space = $00020020;

function FIsStdGesture(syv: TSYV): Boolean;

function FIsAnsiGesture(syv: TSYV): Boolean;

{ Приложения по подгрузки масок }

const

syv_AppGestureMask = $00020000;

syv_CircleUpA = $000224B6;

syv_CircleUpZ = $000224CF;

syv_CircleLoA = $000224D0;

syv_CircleLoZ = $000224E9;

function FIsLoAppGesture(syv: TSYV): Boolean;

function FIsUpAppGesture(syv: TSYV): Boolean;

function FIsAppGesture(syv: TSYV): Boolean;

function SyvAppGestureFromLoAnsi(Ansi: Char): TSYV;

function SyvAppGestureFromUpAnsi(Ansi: Char): TSYV;

function AnsiFromSyvAppGesture(syv: TSYV): Byte;

{Константы обработки входных значений декодирования}

const

rec_OEM = -1024;

rec_Language = -48;

rec_Guide = -47;

rec_ParamError = -46;

rec_InvalidRef = -45;

rec_RectExclude = -44;

rec_RectBound = -43;

rec_PCM = -42;

rec_ResultMode = -41;

rec_HWnd = -40;

rec_ALC = -39;

rec_ErrorLevel = -38;

rec_CLVerify = -37;

rec_Dict = -36;

rec_HRec = -35;

rec_BadEventRef = -33;

rec_NoCollection = -32;

rec_Debug = -32;

rec_PointerEvent = -31;

rec_BadHPenData = -9;

rec_OOM = -8;

rec_NoInput = -7;

rec_NoTablet = -6;

rec_Busy = -5;

rec_BufferTooSmall = -4;

rec_Abort = -3;

rec_Overflow = -1;

rec_OK = 0;

rec_TermBound = 1;

rec_TermEx = 2;

rec_TermPenUp = 3;

rec_TermRange = 4;

rec_TermTimeOut = 5;

rec_Done = 6;

rec_TermOEM = 512;

type

POEMPenInfo = ^TOEMPenInfo;

TOEMPenInfo = record

wPdt: Word;

wValueMax: Word;

wDistinct: Word;

end;

const

pdt_Null = 0;

pdt_Pressure = 1;

pdt_Height = 2;

pdt_AngleXY = 3;

pdt_AngleZ = 4;

pdt_BarrelRotation = 5;

pdt_OEMSpecific = 16;

MaxOEMDataWords = 6;

type

PPenPacket = ^TPenPacket;

TPenPacket = record

wTabletX: Word;

wTabletY: Word;

wPDK: Word;

rgwOemData: array[0..MaxOEMDataWords - 1] of Word;

end;

type

TRawHook = function(PenPacket: PPenPacket): Bool;

type

PPenInfo = ^TPenInfo;

TPenInfo = record

cxRawWidth: Word;

cyRawHeight: Word;

wDistinctWidth: Word;

wDistinctHeight: Word;

nSamplingRate: Integer;

nSamplingDist: Integer;

lPdc: Longint;

cPens: Integer;

cbOemData: Integer;

rgoempeninfo: array[0..MaxOEMDataWords - 1] of TOEMPenInfo;

rgwReserved: array[0..7] of Word;

end;

const

pdc_Integrated = $00000001;

pdc_Proximity = $00000002;

pdc_Range = $00000004;

pdc_Invert = $00000008;

pdc_Relative = $00000010;

pdc_Barrel1 = $00000020;

pdc_Barrel2 = $00000040;

pdc_Barrel3 = $00000080;

type

PStrokeInfo = ^TStrokeInfo;

TStrokeInfo = record

cPnt: Word;

cbPnts: Word;

wPDK: Word;

dwTick: Longint;

end;

type

PCalbStruct = ^TCalbStruct;

TCalbStruct = record

wOffsetX: Integer;

wOffsetY: Integer;

wDistinctWidth: Integer;

wDistinctHeight: Integer;

end;

const

drv_SetPenDriverEntryPoints = drv_Reserved+1;

drv_RemovePenDriverEntryPoints = drv_Reserved+2;

drv_SetPenSamplingRate = drv_Reserved+3;

drv_SetPenSamplingDist = drv_Reserved+4;

drv_GetCalibration = drv_Reserved+11;

drv_SetCalibration = drv_Reserved+12;

const

pdk_Up = $0000;

pdk_Down = $0001;

pdk_Barrel1 = $0002;

pdk_Barrel2 = $0004;

pdk_Barrel3 = $0008;

pdk_Transition = $0010;

pdk_Inverted = $0080;

pdk_OutOfRange = $4000;

pdk_Driver = $8000;

pdk_TipMask = $0001;

pdk_Switches = pdk_Down or pdk_Barrel1 or pdk_Barrel2 or

pdk_Barrel3;

const

pcm_Penup = $00000001;

pcm_Range = $00000002;

pcm_Invert = $00000020;

pcm_RectExclude = $00002000;

pcm_RectBound = $00004000;

pcm_Timeout = $00008000;

pcm_AddDefaults = rc_LDefaultFlags; { $80000000 }

procedure PostVirtualKeyEvent(vk: Word; fUp: Bool);

procedure PostVirtualMouseEvent(wMouseFlag: Word; xPos, yPos: Integer);

procedure AtomicVirtualEvent(fBegin: Bool);

const

vwm_MouseMove = $0001;

vwm_MouseLeftDown = $0002;

vwm_MouseLeftUp = $0004;

vwm_MouseRightDown = $0008;

vwm_MouseRightUp = $0010;

const

cl_Null = 0;

cl_Minimum = 1;

cl_Maximum = 100;

InkWidth_Minimum = 0;

InkWidth_Maximum = 15;

enum_Minimum = 1;

enum_Maximum = 4096;

MaxDictionaries = 16;

type

PGuide = ^TGuide;

TGuide = record

xOrigin: Integer;

yOrigin: Integer;

cxBox: Integer;

cyBox: Integer;

cxBase: Integer;

cyBase: Integer;

cHorzBox: Integer;

cVertBox: Integer;

cyMid: Integer;

end;

type

TRCYieldProc = function : Bool;

const

cbRcLanguageMax = 44;

cbRcUserMax = 32;

cbRcrgbfAlcMax = 32;

cwRcReservedMax = 8;

type

PRC = ^TRC;

TRC = record

HRec: THRec;

hw: HWnd;

wEventRef: Word;

wRcPreferences: Word;

lRcOptions: Longint;

lpfnYield: TRCYieldProc;

lpUser: array[0..cbRcUserMax-1] of Byte;

wCountry: Word;

wIntlPreferences: Word;

lpLanguage: array[0..cbRcLanguageMax-1] of Char;

rglpdf: array[0..MaxDictionaries-1] of TDF;

wTryDictionary: Word;

clErrorLevel: TCL;

alc: TALC;

alcPriority: TALC;

rgbfAlc: array[0..cbRcrgbfAlcMax-1] of Byte;

wResultMode: Word;

wTimeOut: Word;

lPcm: Longint;

rectBound: TRect;

rectExclude: TRect;

guide: TGuide;

wRcOrient: Word;

wRcDirect: Word;

nInkWidth: Integer;

rgbInk: TColorRef;

dwAppParam: Longint;

dwDictParam: Longint;

dwRecognizer: Longint;

rgwReserved: array[0..cwRcReservedMax-1] of Word;

end;

type

THPenData = THandle;

type

PSYC = ^TSYC;

TSYC = record

wStrokeFirst: Word;

wPntFirst: Word;

wStrokeLast: Word;

wPntLast: Word;

fLastSyc: Bool;

end;

const

wPntAll = $FFFF;

iSycNull = -1;

type

PSYE = ^TSYE;

TSYE = record

syv: TSYV;

lRecogVal: Longint;

cl: TCL;

iSyc: Integer;

end;

const

MaxHotSpot = 8;

type

PSYG = ^TSYG;

TSYG = record

rgpntHotSpots: array[0..MaxHotSpot-1] of TPoint;

cHotSpot: Integer;

nFirstBox: Integer;

lRecogVal: Longint;

lpsye: PSYE;

cSye: Integer;

lpsyc: PSYC;

cSyc: Integer;

end;

type

TEnumProc = function(syv: PSYV; i: Integer; P: Pointer): Integer;

type

PRCResult = ^TRCResult;

TRCResult = record

syg: TSYG;

wResultsType: Word;

cSyv: Integer;

lpsyv: PSYV;

HSyv: THandle;

nBaseLine: Integer;

nMidLine: Integer;

hPenData: THPenData;

rectBoundInk: TRect;

pntEnd: TPoint;

lprc: PRC;

end;

const

rcrt_Default = $0000;

rcrt_Unidentified = $0001;

rcrt_Gesture = $0002;

rcrt_NoSymbolMatch = $0004;

rcrt_Private = $4000;

rcrt_NoRecog = $8000;

rcrt_AlreadyProcessed = $0008;

rcrt_GestureTranslated = $0010;

rcrt_GestureToKeys = $0020;

hkp_SetHook = 0;

hkp_Unhook = $FFFF;

hwr_Results = 0;

hwr_AppWide = 1;

pen_NoInkWidth = 0;

const

rpa_Default = 1;

{ GetGlobalRC возвращает кода}

const

ggrc_OK = 0;

ggrc_DictBufTooSmall = 1;

ggrc_ParamError = 2;

{ SetGlobalRC устанавливает код}

const

sgrc_OK = $0000;

sgrc_User = $0001;

sgrc_ParamError = $0002;

sgrc_RC = $0004;

sgrc_Recognizer = $0008;

sgrc_Dictionary = $0010;

sgrc_INIFile = $0020;

{ Макро }

function GetWEventRef: Word;

function InstallRecognizer(lpszRecogName: PChar): THRec;

procedure UninstallRecognizer(HRec: THRec);

function GetGlobalRC(lprc: PRC; lpDefRecog: PChar; lpDefDict: PChar;

cbDefDictMax: Integer): Word;

function SetGlobalRC(lprc: PRC; lpDefRecog: PChar; lpDefDict: PChar): Word;

procedure RegisterPenApp(wFlags: Word; fRegister: Bool);

function IsPenAware: Word;

function SetRecogHook(whrHook: Word; hkpPosition: Word; HWndHook: HWnd): Bool;

procedure InitRC(hw: HWnd; lprc: PRC);

function Recognize(lprc: PRC): TRec;

function RecognizeData(lprc: PRC; hPenData: THPenData): TRec;

function TrainInk(lprc: PRC; hPenData: THPenData; lpsyv: PSYV): Bool;

function TrainContext(lprcresult: PRCResult; lpsye: PSYE; cSye: Integer;

lpsyc: PSYC; cSyc: Integer): Bool;

function ProcessWriting(hw: HWnd; lprc: PRC): TRec;

function CorrectWriting(hw:HWnd; lpBuf:PChar; cbBuf: Word; lprc: PRC;

dwCwrFlags: Longint; dwReserved: Longint): Bool;

procedure EmulatePen(fPen: Bool);

function GetSymbolMaxLength(lpsyg: PSYG): Integer;

function GetSymbolCount(lpsyg: PSYG): Integer;

procedure FirstSymbolFromGraph(lpsyg: PSYG; lpsyv: PSYV; cSyvMax: Integer;

lpcSyv: PInteger);

function EnumSymbols(lpsyg: PSYG; wMaxStr: Word; lpEnumFunc: TEnumProc;

lvData: Pointer): Word;

function TPtoDP(lpPnt: PPoint; cPnt: Integer): Bool;

function DPtoTP(lpPnt: PPoint; cPnt: Integer): Bool;

procedure BoundingRectFromPoints(lpPnt: PPoint; cPnt: Integer;

lpRectBound: PRect);

function SymbolToCharacter(lpsyv: PSYV; cSyv: Integer; lpstr: PStr;

lpnConv: PInteger): Bool;

function CharacterToSymbol(lpstr: PStr; cSyv: Integer; lpsyv: PSYV): Integer;

function GetVersionPenWin: Word;

function ExecuteGesture(hw: HWnd; syv: TSYV; lprcresult: PRCResult): Bool;

const

alc_All = $000043FF;

alc_Default = $00000000;

alc_LCAlpha = $00000001;

alc_UCAlpha = $00000002;

alc_Alpha = $00000003;

alc_Numeric = $00000004;

alc_Alphanumeric = $00000007;

alc_Punc = $00000008;

alc_Math = $00000010;

alc_Monetary = $00000020;

alc_Other = $00000040;

alc_White = $00000100;

alc_NonPrint = $00000200;

alc_Gesture = $00004000;

alc_UseBitmap = $00008000;

alc_DBCS = $00000400;

alc_Hiragana = $00010000;

alc_Katakana = $00020000;

alc_Kanji = $00040000;

alc_OEM = $0FF80000;

alc_Reserved = $F0003800;

alc_NoPriority = $00000000;

alc_SysMinimum = alc_Alphanumeric or

alc_Punc or alc_White or

alc_Gesture;

{ macros }

function MpAlcB(lprc: PRC; i: Word): PByte;

function MpIbf(i: Word): Byte;

procedure SetAlcBitAnsi(lprc: PRC; i: Word);

procedure ResetAlcBitAnsi(lprc: PRC; i: Word);

function IsAlcBitAnsi(lprc: PRC; i: Word): Boolean;

const

rcd_Default = 0;

rcd_LR = 1;

rcd_RL = 2;

rcd_TB = 3;

rcd_BT = 4;

const

rco_NoPointerEvent = $00000001;

rco_SaveAllData = $00000002;

rco_SaveHPenData = $00000004;

rco_NoFlashUnknown = $00000008;

rco_TabletCoord = $00000010;

rco_NoSpaceBreak = $00000020;

rco_NoHideCursor = $00000040;

rco_NoHook = $00000080;

rco_Boxed = $00000100;

rco_Suggest = $00000200;

rco_DisableGesMap = $00000400;

rco_NoFlashCursor = $00000800;

rco_ColdRecog = $00008000;

const

rcp_LeftHand = $0001;

rcp_MapChar = $0004;

const

rcor_Normal = 1;

rcor_Right = 2;

rcor_Upsidedown = 3;

rcor_Left = 4;

rrm_Stroke = 0;

rrm_Symbol = 1;

rrm_Word = 2;

rrm_NewLine = 3;

rrm_Complete = 16;

rcip_AllAnsiChar = $0001;

rcip_Mask = $0001;

cwr_StripCR = $00000001;

cwr_StripLF = $00000002;

cwr_StripTAB = $00000004;

cwr_SingleLineEdit = $00000007;

cwr_Title = $00000010;

cwr_KKConvert = $00000020;

const

map_GestOGES = rcrt_Gesture or rcrt_GestureTranslated;

map_GestOVKeys = rcrt_GestureToKeys or rcrt_AlreadyProcessed;

{ макросы }

function IsGestureToGesture(lprcresult: PRCResult): Boolean;

function IsGestureToVkeys(lprcresult: PRCResult): Boolean;

procedure SetAlreadyProcessed(lprcresult: PRCResult);

type

PPenDataHeader = ^TPenDataHeader;

TPenDataHeader = record

wVersion: Word;

cbSizeUsed: Word;

cStrokes: Word;

cPnt: Word;

cPntStrokeMax: Word;

rectBound: TRect;

wPndts: Word;

nInkWidth: Integer;

rgbInk: Longint;

end;

const

pdts_LOMetric = $0000;

pdts_HIMetric = $0001;

pdts_HIEnglish = $0002;

pdts_ScaleMax = $0003;

pdts_Display = $0003;

pdts_Arbitrary = $0004;

pdts_ScaleMask = $000F;

pdts_StandardScale = pdts_HIEnglish;

pdts_NoPenInfo = $0100;

pdts_NoUpPoints = $0200;

pdts_NoOEMData = $0400;

pdts_NoColinear = $0800;

pdts_Compressed = $8000;

pdts_CompressMethod = $00F0;

pdts_Compress2ndDeriv = $0010;

pdtt_Default = $0000;

pdtt_PenInfo = pdts_NoPenInfo;

pdtt_UpPoints = pdts_NoUpPoints;

pdtt_OEMdata = pdts_NoOEMData;

pdtt_Colinear = pdts_NoColinear;

pdtt_Compress = pdts_Compressed;

pdtt_Decompress = $4000;

pdtt_All = pdtt_PenInfo or pdtt_UpPoints or pdtt_OEMdata or pdtt_Colinear;

function DestroyPenData(hPenData: THPenData): Boolean;

procedure EndEnumStrokes(hPenData: THPenData);

function IsPenEvent(Message: Word; lExtraInfo: Longint): Bool;

function GetPenAsyncState(wPDK: Word): Bool;

function GetPenDataInfo(hPenData: THPenData; lppendataheader: PPenDataHeader;

lpPenInfo: PPenInfo; dwReserved: Longint): Bool;

function GetPenDataStroke(lppendata: PPenDataHeader; wStroke: Word;

lplpPoint: PPoint; lplpvOem: Pointer; lpsi: PStrokeInfo ): Bool;

function GetPointsFromPenData(hPenData: PPenDataHeader; wStroke, wPnt, cPnt: Word;

lppoint: PPoint): Bool;

procedure DrawPenData(DC: HDC; lprect: PRect; hPenData: THPenData);

function MetricScalePenData(hPenData: THPenData; wPdts: Word): Bool;

function ResizePenData(hPenData: THPenData; lprect: PRect): Bool;

function OffsetPenData(hPenData: THPenData; dx, dy: Integer): Bool;

function RedisplayPenData(DC:HDC; hPenData: THPenData; lpDelta: PPoint;

lpExt: PPoint; nInkWidth: Integer; rgbColor: Longint): Bool;

function CompactPenData(hPenData: THPenData; wTrimOptions: Word): THPenData;

function DuplicatePenData(hPenData:THPenData; gmemFlags: Word): THPenData;

function CreatePenData(lpPenInfo: PPenInfo; cbOemData: Integer;

wPdtScale: Word; gmemFlags: Word): THPenData;

function AddPointsPenData(hPenData: THPenData; lpPnt: PPoint;

lpvOemData: Pointer; lpsiNew: PStrokeInfo): THPenData;

function BeginEnumStrokes(hPenData: THPenData): PPenDataHeader;

function DictionarySearch(lprc: PRC; lpsye: PSYE; cSye: Integer;

lpsyv: PSYV; cSyvMax: Integer): Bool;

const

he_GetRC = 3;

he_SetRC = 4;

he_GetInflate = 5;

he_SetInflate = 6;

he_GetUnderline = 7;

he_SetUnderline = 8;

he_GetInkHandle = 9;

he_SetInkMode = 10;

he_StopInkMode = 11;

he_GetRCResultCode = 12;

he_DefaultFont = 13;

he_CharPosition = 14;

he_CharOffset = 15;

he_GetRCResult = 22;

he_KKConvert = 30;

he_GetKKConvert = 31;

he_CancelKKConvert = 32;

he_FixKKConvert = 33;

hekk_Default = 0;

hekk_Convert = 1;

hekk_Candidate = 2;

hep_NoRecog = 0;

hep_Recog = 1;

hep_WaitForTap = 2;

hn_EndRec = 4;

hn_DelayedRecogFail = 5;

hn_RCResult = 20;

hn_EndKKConvert = 30;

type

PRectOfs = ^TRectOfs;

TRectOfs = record

dLeft: Integer;

dTop: Integer;

dRight: Integer;

dBottom: Integer;

end;

{Конроль за идентификацией данных}

type

PBoxLayout = ^TBoxLayout;

TBoxLayout = record

cyCusp: Integer;

cyEndCusp: Integer;

Style: Word;

rgbText: Longint;

rgbBox: Longint;

rgbSelect: Longint;

end;

const

bxs_None = 0;

bxs_Rect = 1;

bxs_EndTextmark = 2;

bxs_Mask = 3;

he_GetBoxLayout = 20;

he_SetBoxLayout = 21;

bxd_CellWidth = 12;

bxd_CellHeight = 16;

bxd_BaseHeight = 13;

bxd_BaseHorz = 0;

bxd_CuspHeight = 2;

bxd_EndCuspHeight = 4;

function ShowKeyboard(Handle: HWnd; wCommand: Word; lpPnt: PPoint;

lpSKBInfo: PSKBInfo): Bool;

const

cbn_EndRec = 16;

cbn_DelayedRecogFail = 17;

cbn_RcResult = 18;

implementation

type

LongRec = record

Lo, Hi: Word;

end;

WordRec = record

Lo, Hi: Byte;

end;

{ translations of macros }

function ChSyvToAnsi(syv: Longint): Byte;

begin

ChSyvToAnsi := WordRec(LongRec(syv).Lo).Lo;

end;

function SyvCharacterToSymbol(c: Char): Longint;

begin

SyvCharacterToSymbol := Byte(c) or $10000;

end;

function SyvKanjiToSymbol(c: Char): TSYV;

begin

SyvKanjiToSymbol := Byte(c) or $30000;

end;

function FIsStdGesture(syv: Longint): Boolean;

begin

FIsStdGesture := (syv = syv_Clear) or (syv = syv_ExtendSelect) or

(syv = syv_Undo) or (syv = syv_Copy) or (syv = syv_Cut) or

(syv = syv_Paste) or (syv = syv_ClearWord) or (syv = syv_KKConvert) or

(syv = syv_User) or (syv = syv_Correct);

end;

function FIsAnsiGesture(syv: TSYV): Boolean;

begin

FIsAnsiGesture := (syv = syv_Backspace) or (syv = syv_Tab) or

(syv = syv_Return) or (syv = syv_Space);

end;

{ Gesture macros }

function FIsLoAppGesture(syv: Longint): Boolean;

begin

FIsLoAppGesture := (syv >= syv_CircleLoA) and (syv <= syv_CircleLoZ);

end;

function FIsUpAppGesture(syv: Longint): Boolean;

begin

FIsUpAppGesture := (syv >= syv_CircleUpA) and (syv <= syv_CircleUpZ);

end;

function FIsAppGesture(syv: Longint): Boolean;

begin

FIsAppGesture := (syv >= syv_CircleUpA) and (syv <= syv_CircleLoZ);

end;

function SyvAppGestureFromLoAnsi(Ansi: Char): TSYV;

begin

SyvAppGestureFromLoAnsi := Byte( (Ord(Ansi) - Ord('a')) + syv_CircleLoA );

end;

function SyvAppGestureFromUpAnsi(Ansi: Char): TSYV;

begin

SyvAppGestureFromUpAnsi := Byte( (Ord(Ansi) - Ord('A')) + syv_CircleUpA );

end;

function AnsiFromSyvAppGesture(syv: TSYV): Byte;

begin

if FIsUpAppGesture(syv) then syv := syv_CircleUpA - TSYV('A')

else syv := syv_CircleLoA - TSYV('a');

AnsiFromSyvAppGesture := ChSyvToAnsi(syv);

end;

function FIsSpecial(syv: TSYV): Boolean;

begin

FIsSpecial := LongRec(syv).Hi = syvhi_Special;

end;

function FIsAnsi(syv: TSYV): Boolean;

begin

FIsAnsi := LongRec(syv).Hi = syvhi_ANSI;

end;

function FIsGesture(syv: TSYV): Boolean;

begin

FIsGesture := LongRec(syv).Hi = syvhi_Gesture;

end;

function FIsKanji(syv: TSYV): Boolean;

begin

FIsKanji := LongRec(syv).Hi = syvhi_Kanji;

end;

function FIsShape(syv: TSYV): Boolean;

begin

FIsShape := LongRec(syv).Hi = syvhi_Shape;

end;

function FIsUniCode(syv: TSYV): Boolean;

begin

FIsUniCode := LongRec(syv).Hi = syvhi_UniCode;

end;

function FIsVKey(syv: TSYV): Boolean;

begin

FIsVKey := LongRec(syv).Hi = syvhi_VKey;

end;

function GetWEventRef: Word;

var

Result: Longint;

begin

Result := GetMessageExtraInfo;

GetWEventRef := LongRec(Result).Lo;

end;

function MpAlcB(lprc: PRC; i: Word): PByte;

begin

MpAlcB := @lprc^.rgbfAlc[ (i and $FF) shr 3 ];

end;

function MpIbf(i: Word): Byte;

begin

MpIbf := 1 shl (i and 7);

end;

procedure SetAlcBitAnsi(lprc: PRC; i: Word);

var

P: PByte;

begin

P := MpAlcB(lprc, i);

P^ := P^ or MpIbf(i);

end;

procedure ResetAlcBitAnsi(lprc: PRC; i: Word);

var

P: PByte;

begin

P := MpAlcB(lprc, i);

P^ := P^ and not MpIbf(i);

end;

function IsAlcBitAnsi(lprc: PRC; i: Word): Boolean;

begin

IsAlcBitAnsi := MpAlcB(lprc,i)^ and MpIbf(i) <> 0;

end;

function IsGestureToGesture(lprcresult: PRCResult): Boolean;

begin

IsGestureToGesture :=

(lprcresult^.wResultsType and map_GestOGES) = map_GestOGES;

end;

function IsGestureToVkeys(lprcresult: PRCResult): Boolean;

begin

IsGestureToVkeys :=

(lprcresult^.wResultsType and map_GestOVKeys) = map_GestOVKeys;

end;

procedure SetAlreadyProcessed(lprcresult: PRCResult);

begin

lprcresult^.wResultsType :=

(lprcresult^.wResultsType and (not rcrt_GestureToKeys)) or rcrt_AlreadyProcessed;

end;

function DestroyPenData(hPenData: THPenData): Boolean;

begin

DestroyPenData := GlobalFree(hPenData) = 0;

end;

procedure EndEnumStrokes(hPenData: THPenData);

begin

GlobalUnlock(hPenData);

end;

procedure UpdatePenInfo; external 'PENWIN' index 207;

function EndPenCollection; external 'PENWIN' index 137;

function GetPenHwData; external 'PENWIN' index 138;

function GetPenHwEventData; external 'PENWIN' index 139;

function SetPenHook; external 'PENWIN' index 115;

procedure PostVirtualKeyEvent; external 'PENWIN' index 102;

procedure PostVirtualMouseEvent; external 'PENWIN' index 101;

procedure AtomicVirtualEvent; external 'PENWIN' index 104;

function InstallRecognizer; external 'PENWIN' index 14;

procedure UninstallRecognizer; external 'PENWIN' index 15;

function GetGlobalRC; external 'PENWIN' index 151;

function SetGlobalRC; external 'PENWIN' index 150;

procedure RegisterPenApp; external 'PENWIN' index 111;

function IsPenAware; external 'PENWIN' index 110;

function SetRecogHook; external 'PENWIN' index 114;

procedure InitRC; external 'PENWIN' index 10;

function Recognize; external 'PENWIN' index 11;

function RecognizeData; external 'PENWIN' index 12;

function TrainInk; external 'PENWIN' index 16;

function TrainContext; external 'PENWIN' index 17;

function ProcessWriting; external 'PENWIN' index 170;

function CorrectWriting; external 'PENWIN' index 172;

procedure EmulatePen; external 'PENWIN' index 173;

function GetSymbolMaxLength; external 'PENWIN' index 121;

function GetSymbolCount; external 'PENWIN' index 122;

procedure FirstSymbolFromGraph; external 'PENWIN' index 123;

function EnumSymbols; external 'PENWIN' index 124;

function TPtoDP; external 'PENWIN' index 132;

function DPtoTP; external 'PENWIN' index 131;

procedure BoundingRectFromPoints; external 'PENWIN' index 13;

function SymbolToCharacter; external 'PENWIN' index 125;

function CharacterToSymbol; external 'PENWIN' index 126;

function GetVersionPenWin; external 'PENWIN' index 402;

function ExecuteGesture; external 'PENWIN' index 418;

function IsPenEvent; external 'PENWIN' index 135;

function GetPenAsyncState; external 'PENWIN' index 144;

function GetPenDataInfo; external 'PENWIN' index 211;

function GetPenDataStroke; external 'PENWIN' index 219;

function GetPointsFromPenData; external 'PENWIN' index 221;

procedure DrawPenData; external 'PENWIN' index 214;

function MetricScalePenData; external 'PENWIN' index 215;

function ResizePenData; external 'PENWIN' index 222;

function OffsetPenData; external 'PENWIN' index 216;

function RedisplayPenData; external 'PENWIN' index 242;

function CompactPenData; external 'PENWIN' index 223;

function DuplicatePenData; external 'PENWIN' index 218;

function CreatePenData; external 'PENWIN' index 210;

function AddPointsPenData; external 'PENWIN' index 212;

function BeginEnumStrokes; external 'PENWIN' index 213;

function DictionarySearch; external 'PENWIN' index 420;

function ShowKeyboard; external 'PENWIN' index 250;

{$R *.DFM}

const

id_FName = 100;

id_FPath = 101;

id_FList = 102;

id_DList = 103;

const

fsFileSpec = fsFileName + fsExtension;

type

TDWord = record

Lo, Hi: Word;

end;

var

GCaption: PChar;

GFilePath: PChar;

GPathName: array[0..fsPathName] of Char;

GExtension: array[0..fsExtension] of Char;

GFileSpec: array[0..fsFileSpec] of Char;

function GetFileName(FilePath: PChar): PChar;

var

P: PChar;

begin

P := StrRScan(FilePath, '\');

if P = nil then P := StrRScan(FilePath, ':');

if P = nil then GetFileName := FilePath else GetFileName := P + 1;

end;

function GetExtension(FilePath: PChar): PChar;

var

P: PChar;

begin

P := StrScan(GetFileName(FilePath), '.');

if P = nil then GetExtension := StrEnd(FilePath) else GetExtension := P;

end;

function FileDialog(Dialog: HWnd; Message, WParam: Word;

LParam: TDWord): Bool; export;

var

PathLen: Word;

P: PChar;

procedure UpdateFileName;

begin

SetDlgItemText(Dialog, id_FName, StrLower(GPathName));

SendDlgItemMessage(Dialog, id_FName, em_SetSel, 0, $7FFF0000);

end;

procedure SelectFileName;

begin

SendDlgItemMessage(Dialog, id_FName, em_SetSel, 0, $7FFF0000);

SetFocus(GetDlgItem(Dialog, id_FName));

end;

function UpdateListBoxes: Boolean;

var

Result: Integer;

Path: array[0..fsPathName] of Char;

begin

UpdateListBoxes := False;

if GetDlgItem(Dialog, id_FList) <> 0 then

begin

StrCopy(Path, GPathName);

Result := DlgDirList(Dialog, Path, id_FList, id_FPath, 0);

if Result <> 0 then DlgDirList(Dialog, '*.*', id_DList, 0, $C010);

end else

begin

StrLCopy(Path, GPathName, GetFileName(GPathName) - GPathName);

StrLCat(Path, '*.*', fsPathName);

Result := DlgDirList(Dialog, Path, id_DList, id_FPath, $C010);

end;

if Result <> 0 then

begin

StrLCopy(GFileSpec, GetFileName(GPathName), fsFileSpec);

StrCopy(GPathName, GFileSpec);

UpdateFileName;

UpdateListBoxes := True;

end;

end;

begin

FileDialog := True;

case Message of

wm_InitDialog:

begin

SendDlgItemMessage(Dialog, id_FName, em_LimitText, fsPathName, 0);

if GCaption <> nil then SetWindowText(Dialog, GCaption);

StrLCopy(GPathName, GFilePath, fsPathName);

StrLCopy(GExtension, GetExtension(GPathName), fsExtension);

if not UpdateListBoxes then

begin

StrCopy(GPathName, '*.*');

UpdateListBoxes;

end;

SelectFileName;

Exit;

end;

wm_Command:

case WParam of

id_FName:

begin

if LParam.Hi = en_Change then

EnableWindow(GetDlgItem(Dialog, id_Ok),

SendMessage(LParam.lo, wm_GetTextLength, 0, 0) <> 0);

Exit;

end;

id_FList:

if (LParam.Hi = lbn_SelChange) or (LParam.Hi = lbn_DblClk) then

begin

DlgDirSelect(Dialog, GPathName, id_FList);

UpdateFileName;

if LParam.Hi = lbn_DblClk then

SendMessage(Dialog, wm_Command, id_Ok, 0);

Exit;

end;

id_DList:

if (LParam.Hi = lbn_SelChange) or (LParam.Hi = lbn_DblClk) then

begin

DlgDirSelect(Dialog, GPathName, id_DList);

StrCat(GPathName, GFileSpec);

if LParam.Hi = lbn_DblClk then

UpdateListBoxes else

UpdateFileName;

Exit;

end;

id_Ok:

begin

GetDlgItemText(Dialog, id_FName, GPathName, fsPathName + 1);

FileExpand(GPathName, GPathName);

PathLen := StrLen(GPathName);

if (GPathName[PathLen - 1] = '\') or

(StrScan(GPathName, '*') <> nil) or

(StrScan(GPathName, '?') <> nil) or

(GetFocus = GetDlgItem(Dialog, id_DList)) then

begin

if GPathName[PathLen - 1] = '\' then

StrLCat(GPathName, GFileSpec, fsPathName);

if not UpdateListBoxes then

begin

MessageBeep(0);

SelectFileName;

end;

Exit;

end;

StrLCat(StrLCat(GPathName, '\', fsPathName),

GFileSpec, fsPathName);

if UpdateListBoxes then Exit;

GPathName[PathLen] := #0;

if GetExtension(GPathName)[0] = #0 then

StrLCat(GPathName, GExtension, fsPathName);

StrLower(StrCopy(GFilePath, GPathName));

EndDialog(Dialog, 1);

Exit;

end;

id_Cancel:

begin

EndDialog(Dialog, 0);

Exit;

end;

end;

end;

FileDialog := False;

end;

function DoFileDialog(Window: HWnd;

FilePath, DialogName, Caption: PChar): Boolean;

var

DialogProc: TFarProc;

begin

GFilePath := FilePath;

GCaption := Caption;

DialogProc := MakeProcInstance(@FileDialog, HInstance);

DoFileDialog := DialogBox(HInstance, DialogName, Window, DialogProc) = 1;

FreeProcInstance(DialogProc);

end;

function DoFileOpen(Window: HWnd; FilePath: PChar): Boolean;

begin

DoFileOpen := DoFileDialog(Window, FilePath, 'FileOpen', nil);

end;

function DoFileSave(Window: HWnd; FilePath: PChar): Boolean;

begin

DoFileSave := DoFileDialog(Window, FilePath, 'FileSave', nil);

end;

procedure TForm1.Button2Click(Sender: TObject); {ВЫХОД}

begin

close;

end;

procedure TForm1.Button1Click(Sender: TObject); {СПЕКТР. АНАЛ.}

var

i,j,k,n: integer;

sred,otkl:real;

sign:textfile;

mass:array[0..5] of real;

massx,massy:array[1..5,0..5]of real;

s,m:byte;

p,min:real;

mass1: array [1..20,1..20] of word;

mass2: array [1..20,1..20,1..20] of word;

begin

n:= 27;

ind:=0;

assignfile(sign,'sign01.txt');

reset(sign);

progressbar1.StepIt;progressbar1.StepIt;progressbar1.StepIt;progressbar1.StepIt;progressbar1.StepIt;

progressbar1.StepIt;progressbar1.StepIt;progressbar1.StepIt;progressbar1.StepIt;progressbar1.StepIt;

{Весь файл}

for k:=1 to 5 do

begin

{Объект}

for j:=0 to 5 do

begin

{Выборка}

sred:=0;otkl:=0;

for i:=0 to 5 do

begin

read(sign,mass[i]);

sred:=sred+mass[i];

end;

sred:=sred/6;

for i:=0 to 5 do otkl:=otkl+abs(mass[i]-sred);

otkl:=otkl/100+i*0.01;

massx[k,j]:=sred;

massy[k,j]:=otkl;

end;end;close(sign);reset(sign);

for i:=1 to 5 do

for j:=0 to 5 do

begin

read(sign,p)

mass[i,j]:=p*ln(sqrt(otkl)/(1.325113*p/16)-exp(p));

otkl:=1.3*arctg(mass[i,j])+sqr(i-p);

sred:=ln(sqr(p+sred)*456/otkl-mass[i,j]);

mass[i,j]:=mass[i,j]/otkl+ sred;

end;

{cоздание образа}

inc(ind,1);

if ind = 1 then

begin

for i:=0 to 5 do chart1.SeriesList[0].AddXY(massx[1,i],massy[1,i],'',clred);

for i:=0 to 5 do chart1.SeriesList[1].AddXY(massx[2,i],massy[2,i],'',clred);

for i:=0 to 5 do chart1.SeriesList[2].AddXY(massx[3,i],massy[3,i],'',clred);

for i:=0 to 5 do chart1.SeriesList[3].AddXY(massx[4,i],massy[4,i],'',clred);

for i:=0 to 5 do chart1.SeriesList[4].AddXY(massx[5,i],massy[5,i],'',clred);

for i:=0 to 5 do begin

chart1.SeriesList[5].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[5].AddXY(massx[2,i],massy[2,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[6].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[6].AddXY(massx[3,i],massy[3,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[7].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[7].AddXY(massx[4,i],massy[4,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[8].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[8].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[9].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[9].AddXY(massx[3,i],massy[3,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[10].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[10].AddXY(massx[4,i],massy[4,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[11].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[11].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[12].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[12].AddXY(massx[4,i],massy[4,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[13].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[13].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[14].AddXY(massx[4,i],massy[4,i],'',clred);

chart1.SeriesList[14].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[15].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[15].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[15].AddXY(massx[3,i],massy[3,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[16].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[16].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[16].AddXY(massx[4,i],massy[4,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[17].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[17].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[17].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[18].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[18].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[18].AddXY(massx[4,i],massy[4,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[19].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[19].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[19].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[20].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[20].AddXY(massx[4,i],massy[4,i],'',clred);

chart1.SeriesList[20].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[21].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[21].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[21].AddXY(massx[4,i],massy[4,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[22].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[22].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[22].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[23].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[23].AddXY(massx[4,i],massy[4,i],'',clred);

chart1.SeriesList[23].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[24].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[24].AddXY(massx[4,i],massy[4,i],'',clred);

chart1.SeriesList[24].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[25].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[25].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[25].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[25].AddXY(massx[4,i],massy[4,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[26].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[26].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[26].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[26].AddXY(massx[5,i],massy[5,i],'',clred);

end;

for i:=0 to 5 do begin

chart1.SeriesList[27].AddXY(massx[1,i],massy[1,i],'',clred);

chart1.SeriesList[27].AddXY(massx[2,i],massy[2,i],'',clred);

chart1.SeriesList[27].AddXY(massx[3,i],massy[3,i],'',clred);

chart1.SeriesList[27].AddXY(massx[4,i],massy[4,i],'',clred);

chart1.SeriesList[27].AddXY(massx[5,i],massy[5,i],'',clred);

end;

end;

{система перегруппировки}

for i:=0 to n do chart1.SeriesList[i].Active:=false;

if checkbox1.Checked=true then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[0].Active:=true;

end;

if checkbox2.Checked=true then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[1].Active:=true;

end;

if checkbox3.Checked=true then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[2].Active:=true;

end;

if checkbox4.Checked=true then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[3].Active:=true;

end;

if checkbox5.Checked=true then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[4].Active:=true;

end;

if ((checkbox1.Checked=true)and(checkbox2.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[5].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox3.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[6].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox4.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[7].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[8].Active:=true;

end;

if ((checkbox2.Checked=true) and (checkbox3.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[9].Active:=true;

end;

if ((checkbox2.Checked=true) and (checkbox4.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[10].Active:=true;

end;

if ((checkbox2.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[11].Active:=true;

end;

if ((checkbox3.Checked=true) and (checkbox4.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[12].Active:=true;

end;

if ((checkbox3.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[13].Active:=true;

end;

if ((checkbox4.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[14].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox2.Checked=true) and (checkbox3.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[15].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox2.Checked=true) and (checkbox4.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[16].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox2.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[17].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox3.Checked=true) and (checkbox4.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[18].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox3.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[19].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox4.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[20].Active:=true;

end;

if ((checkbox2.Checked=true) and (checkbox3.Checked=true) and (checkbox4.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[21].Active:=true;

end;

if ((checkbox2.Checked=true) and (checkbox3.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[22].Active:=true;

end;

if ((checkbox2.Checked=true) and (checkbox4.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[23].Active:=true;

end;

if ((checkbox3.Checked=true) and (checkbox4.Checked=true) and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[24].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox2.Checked=true) and (checkbox3.Checked=true)and (checkbox4.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[25].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox2.Checked=true) and (checkbox3.Checked=true)and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[26].Active:=true;

end;

if ((checkbox1.Checked=true) and (checkbox2.Checked=true) and

(checkbox3.Checked=true)and (checkbox4.Checked=true)and (checkbox5.Checked=true)) then

begin

for i:=0 to n do chart1.SeriesList[i].Active:=false;

chart1.SeriesList[27].Active:=true;

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var q:byte;

x1,x2,x3,x_1,x_2,x_3:real;

a1,b1,c1,a2,b2,c2,a3,b3,c3:real;

y1,y2,y3:real;

y,x:array[0..10]of real;

k:array[0..3]of real;

h:real;

i,j:integer;

begin

for i:=0 to 16 do

begin

x1:=1.9;x2:=9.7;x3:=-1.4;a1:=7.6;a2:=2.2;

a3:=-1.3;b1:=0.5;b2:=9.1;b3:=0.2;c1:=2.4;

c2:=4.4;c3:=5.8;y1:=1.9;y2:=9.7;y3:=-1.4;

x_1:=1/a1*(y1-b1*x2-c1*x3);

x_2:=1/b2*(y2-a2*x_1-c2*x3);

x_3:=1/c3*(y3-a3*x_1-b3*x_2);

x1:=x_1;x2:=x_2;x3:=x_3;

k[0]:=h*(x[i]+y[i]);

k[1]:=h*x[i]+h/2*y[i]+k[0]/2;

k[2]:=h*x[i]+h/2-y[i]+k[1]/2;

k[3]:=h*x[i]+h*y[i]+k[2];

y[i+1]:=y[i]+1/6*(k[0]+2*k[1]+2*k[2]+k[3]);

end;

for q:=0 to 24 do

chart1.SeriesList[q].Active:=true;

end;

end.

Все функции программы реализованы следующими подпрограммами:

1) Ввод данных (принятого сигнала);

2) Обработка сигнала;

3) Алгоритм селекции;

4) Вывод результатов (классификация).

Каждая подпрограмма осуществлять некоторый набор функций.

Подпрограмма ввода данных выполняет следующие функции:

- ввод исходных данных;

Подпрограмма обработка данных;

- создание базы типовых характеристик;

Подпрограмма алгоритм селекции:

- сравнение характеристик сигнала с эталонными;

Подпрограмма вывода:

- присвоение класса сигналу и визуализация результатов.

Все функции выполняются в диалоговом режиме.

Для работы с программой требуется один человек. Необходимо знание ПК.

Требования к безопасности КПС включает в себя: основные правила, нормы и условия по технике безопасности, пожарной безопасности и промышленной санитарии, обеспечивающие безопасные условия работы. Безопасность КПС соответствует требованиям, предъявляемым следующими нормативными документами: ГОСТ 12.1.019-79 «ССБТ. Электробезопасность. Общие требования и номенклатура видов защиты», ГОСТ 12.1.045, ГОСТ 12.1.030-81 «ССБТ. Электробезопасность. Заземление. Зануление.»

Комплекс программных средств соответствовует требованиям по эргономике и технической эстетике, то есть:

- отсутствие на рабочем месте посторонних предметов;

- необходимому уровню обеспечения освещенности помещения;

- удобству рабочего места с соблюдением анатомических пропорций человека;

- соблюдением санитарно-технических условий труда.

Требования нормируются системой ГОСТ ССБТ.

В качестве исходных данных используется:

- детерминированный информационный сигнал;

Промежуточные выходные данные:

- дисперсия;

- среднеквадратичное отклонение;

- математическое ожидание;

Выходные данные:

Наибольшая вероятность отнесение классифицируемого объекта к эталонному.

Заключение

В данной работе был проведен анализ и получены следующие результаты:

Проведен анализ физических предпосылок селекции движущихся МНЦ по спектральным параметрам. Разработка алгоритмов и устройств обнаружения МНЦ и оценка их эффективности.

Разработан алгоритм обнаружения МНЦ и оценена их эффективности.

Синтезирован алгоритм классификации движущихся МНЦ и оценена их эффективности.

Разработана система интеллектуального распознавания классов движущихся и селекции неподвижных МНЦ на фоне подстилающей поверхности в интересах построения РЛС разведки и целеуказания повышенной информативности.

Применяемые методы исследования - методологической основой развиваемых методов, алгоритмов и разрабатываемых устройств служат:

1. Элементы теории вероятностей, математической статистики и случайных процессов;

2. Методы статистической теории обнаружения и классификации случайных сигналов;

3. Методы статистической теории радиолокации;

4. Методы радиофизики, электродинамики и теории распространения радиоволн.

В рамках научно-технической задачи, решаемой в работе получены следующие результаты:

- разработана математическая модель.

- разработано информационное обеспечение.

- оценена эффективность полученных алгоритмов.

- разработано программное обеспечение.

На защиту выносятся следующие вопросы, соответствующие основе рассматриваемой задачи.

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

5. Алгоритмы обнаружения сигналов, отраженных от неподвижных МНЦ, по поляризационным и корреляционным свойствам.

6. Алгоритмы распознавания классов движущихся МНЦ, методика оценки их эффективности.

Практическая значимость работы состоит в следующем:

4. В разработке программного комплекса для определения спектральных и поляризационных характеристик реальных целей.

5. В получении данных о спектральных свойствах и ПХ МНЦ, позволяющих осуществлять анализ эффективности радиолокационных систем разведки и целеуказания.

6. В разработке методов поляризационной селекции неподвижных МНЦ, наблюдаемых на фоне подстилающей поверхности и местных предметов.

Достоверность результатов диссертационной работы определяется следующими факторами:

1. В основе исследований, проведенных в работе, лежат хорошо апробированные ранее положения статистической теории радиолокации. Обработка данных и сопоставление их с теоретическими базируется на методах математической статистики.

Литература

1. Белецкий Н.Г. Разделяющие возможности комитетов с различными логиками. - Свердловск: УНЦ АН СССР, 1984. - 23с.

2. Белецкий Н.Г. Модели комитетных алгоритмов распознавания образов // Мат. Методы планирования пром. Производства. - Свердловск: УНЦ АН СССР, 1984. - С. 91-95.

3. Вапник В.Н., Червоненкис А.Я. Теория распознавания образов. - М.: Наука, 1974.

4. Еремин И.И. О несовместных системах линейных неравенств. // ДАН СССР. - 1961. - Т. 138, №6. - С. 1280-1283.

5. Еремин И.И. Итеративный метод для чебышевских приближений несовместных систем линейных неравенств // ДАН СССР. - 1962. - Т.143,№6. - С.1253-1256.

6. Еремин И.И. О задачах выпуклого программирования с противоречивыми ограничениями // Кибернетика.-1971.-№4.-С. 124-129.

7. Еремин И.И., Мазуров Вл.Д. Нестационарные процессы математического программирования.-М.: Наука, 1979.

8. Журавлев Ю.И. Корректные алгебры над множествами некоторых (эвристических) алгоритмов. I-III// Кибернетика.-1977.-№4.-С. 14-21; 1977.-№6.-С. 21-27; 1978.-№2.-С. 35-43.


Подобные документы

  • Оптико-электронная система идентификации объектов подвижного состава железнодорожного транспорта. Автоматический комплекс распознавания автомобильных номеров. Принципы и этапы работы систем оптического распознавания. Особенности реализации алгоритмов.

    дипломная работа [887,3 K], добавлен 26.11.2013

  • Словесный, графический, табличный, программный способы представления алгоритма. Основные конструкции в любом алгоритмическом языке. Теория обнаружения, различения и оценивания сигналов. Радиолокационные системы обнаружения. Система распознавания образов.

    презентация [4,8 M], добавлен 09.06.2015

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

    дипломная работа [1,1 M], добавлен 16.09.2017

  • Методы предобработки изображений текстовых символов. Статистические распределения точек. Интегральные преобразования и структурный анализ. Реализация алгоритма распознавания букв. Анализ алгоритмов оптического распознавания символов. Сравнение с эталоном.

    курсовая работа [2,1 M], добавлен 20.09.2014

  • Понятие системы распознавания образов. Классификация систем распознавания. Разработка системы распознавания формы микрообъектов. Алгоритм для создания системы распознавания микрообъектов на кристаллограмме, особенности его реализации в программной среде.

    курсовая работа [16,2 M], добавлен 21.06.2014

  • Необходимость в системах распознавания символов. Виды сканеров и их характеристики. Оптимальное разрешение при сканировании. Программы распознавания текста. Получение электронного документа. FineReader - система оптического распознавания текстов.

    презентация [469,2 K], добавлен 15.03.2015

  • Основные понятия теории распознавания образов и ее значение. Сущность математической теории распознавания образов. Основные задачи, возникающие при разработке систем распознавания образов. Классификация систем распознавания образов реального времени.

    курсовая работа [462,2 K], добавлен 15.01.2014

  • Обзор существующих алгоритмов для обнаружения лиц. Выравнивание лица с помощью разнообразных фильтров. Использование каскадного классификатора Хаара для поиска лиц на изображении. Распознавание лиц людей с использованием локальных бинарных шаблонов.

    дипломная работа [332,4 K], добавлен 30.09.2016

  • Обзор математических методов распознавания. Общая архитектура программы преобразования автомобильного номерного знака. Детальное описание алгоритмов: бинаризация изображения, удаление обрамления, сегментация символов и распознавание шаблонным методом.

    курсовая работа [4,8 M], добавлен 22.06.2011

  • Условия применения и технические требования для работы программно-аппаратной платформы. Система распознавания лиц VOCORD Face Control. Система распознавания текста ABBYY FineReader. Алгоритмы и методы, применяемые в программе. Алгоритм хеширования MD5.

    дипломная работа [1,8 M], добавлен 19.01.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.