//**************************************************************************// // Библиотека статистических блоков к п/к "МВТУ" версии 3 // // Автор : Тимофеев К.А., МГТУ им.Баумана, кафедра Э7 // //**************************************************************************// //Дата последнего изменения 12.06.2001 // //Внесены следующие изменения : // // 1.Добавлены рестарты. // // 2.Изменены типы динамических комплексных массивов в функциях, // // использующих БПФ (сделано обращение через указатели). // // 3.Переделана процедура быстрого преобразования Фурье // // (Введён обратный цикл вместо прямого и переделаны массивы данных). // // 2.В функциях TStatMean,TStatVaranc,TStatSkew,TStatKurt // // счётчик N сделан типа double. // // 3.Дописана недостающая строка в массиве aStatHistCaps функции GetLibInfo// // В строке 108 функции GetLibInfo значение строки изменено с "Да:Нет" на// // "Нет:Да". // // 4.Исправлена неточность при удалении тренда, дописано удаление тренда // // при расчёте гистограммы, дисперсии, коэффициента эксцесса и фактора // // сплющиваемости, а также добавлено соответствующее поле в функции // // GetLibInfo. // // 5.В блоках вычисления простейших статистик тренд удаляется всегда по // // по всей выборке. // // 6.Добавлено вычиление нормированной плотности вероятности в гистограмме // // 7.В модуле Fourier в цикле помеченном (***) применён обратный цикл // // вместо прямого. // // 8.Улучшен алгоритм вычисления гистограммы // // 9.В функции GetLibInfo изменено выражение в строке 112. // //**************************************************************************// library StatLib; uses SysUtils, GLType, hist in 'hist.pas', mean in 'mean.pas', Variance in 'Variance.pas', spectrum in 'spectrum.pas', WinFuncs in 'WinFuncs.pas', DblCorrel in 'DblCorrel.pas', CorCoef in 'CorCoef.pas', Skew in 'Skew.pas', Kurt in 'Kurt.pas', DblSpectr in 'DblSpectr.pas'; procedure AllInit(var at,adt,atfinal:PRealType;Dirs : PDirRec);export; begin end; procedure AllDone;export; begin end; procedure GetLibInfo(Action: Integer;var BlockId, ParamId: Integer; Info: pchar);export; const aStatNames : array[1..9] of pchar = ('TStatHist','TStatMean','TStatVaranc','TStatSpectr','TStatDblSpctr', 'TStatCorel','TStatCorCoef','TStatSkew','TStatKurt'); {$IFDEF ENGLVER} aStatHints : array[1..9] of pchar = ( 'Probability density function', 'Mean value', 'RMS', 'Power spectrum density function', 'Cross-power spectrum density function', 'Cross-correlation function', 'Autocorrelation function', 'Excess factor', 'Peak factor'); {$ELSE} aStatHints : array[1..9] of pchar = ( 'Плотность вероятности', 'Среднее значение', 'Среднеквадратическое отклонение', 'Спектральная плотность', 'Взаимная спектральная плотность', 'Функция взаимной корелляции', 'Коэффициент корелляции', 'Коэффициент эксцесса', 'Фактор сплющиваемости'); {$ENDIF} { aStatParams : array[1..4] of pchar = ('Size','CalcMode','Tau','DelTrend'); aStatHistParams : array[1..4] of pchar = ('Min','Max','Col','AutoRange'); aStatSpectrParams : array[1..2] of pchar = ('Window','OutMode');} {$IFDEF ENGLVER} aStatCaps : array[1..4] of pchar = ( 'Series count', 'All series mode', 'Quantum time', 'Delete linear trend'); aStatHistCaps : array[1..5] of pchar = ( 'Low bound', 'High bound', 'Interval count', 'Automatical bounds', 'Out value type'); aStatSpectrCaps : array[1..2] of pchar = ( 'Window filter type', 'Out'); {$ELSE} aStatCaps : array[1..4] of pchar = ( 'Размер серии', 'Расчёт по всей выборке', 'Период квантования', 'Удаление линейного тренда'); aStatHistCaps : array[1..5] of pchar = ( 'Нижняя граница', 'Верхняя граница', 'Число интервалов', 'Автоматически вычислять границы', 'Выводимое значение'); aStatSpectrCaps : array[1..2] of pchar = ( 'Тип окна', 'Вывод'); {$ENDIF} begin StrCopy(Info,nul); case Action of {$IFDEF ENGLVER} i_GetPageName : StrCopy(Info,'Statistics'); {$ELSE} i_GetPageName : StrCopy(Info,'Статистика'); {$ENDIF} i_GetBlocksCount: BlockId := 9; i_GetBlockIndex, i_GetHelpIndex : ParamId := BlockId+210; i_GetBlockType : ParamId := t_dis; i_GetBlockName, i_GetRUNName : StrCopy(Info,aStatNames[BlockId]); i_GetRstName : StrCopy(Info,PChar(aStatNames[BlockId]+'Rst')); i_GetBMPName : StrCopy(Info,@aStatNames[BlockId][5]); i_GetBlockHint : StrCopy(Info,aStatHints[BlockId]); i_GetHelpName : StrCopy(Info,'MBTY'); i_GetChild : ParamId := 0; i_GetInputCount : if (BlockId>4)and(BlockId<8) then ParamId := -2 else ParamId := -1; i_GetOutPutCount: case BlockId of 1,4,5,6:ParamId := -2; else ParamId := -1 end; i_GetParamsCount: case BlockId of 1 :ParamId := 9; 4,5:ParamId := 6; 2,7:ParamId := 3; else ParamId := 4 end; { i_GetParamName : if ParamId<5 then StrCopy(Info,aStatParams[ParamId]) else if BlockId>1 then StrCopy(Info,aStatSpectrParams[ParamId-4]) else StrCopy(Info,aStatHistParams[ParamId-4]);} i_GetParamCaption: if ParamId<5 then StrCopy(Info,aStatCaps[ParamId]) else if BlockId>1 then StrCopy(Info,aStatSpectrCaps[ParamId-4]) else StrCopy(Info,aStatHistCaps[ParamId-4]); i_GetParamValue : case ParamId of 1 : StrCopy(Info,'256'); 2,3,4: StrCopy(Info,'0'); else if BlockId=1 then case ParamId of 5: StrCopy(Info,'-10'); 6: StrCopy(Info,'10'); 7: StrCopy(Info,'21'); 8: StrCopy(Info,'1'); 9: StrCopy(Info,'0'); end else if ParamId=5 then StrCopy(Info,'0') else StrCopy(Info,'1'); end; i_GetParamValues: begin if ParamId=2 then {$IFDEF ENGLVER} StrCopy(Info,'Yes:No') {$ELSE} StrCopy(Info,'Да:Нет') {$ENDIF} else if BlockId=1 then case ParamId of 8: {$IFDEF ENGLVER} StrCopy(Info,'Yes:No') {$ELSE} StrCopy(Info,'Да:Нет') {$ENDIF}; {$IFDEF ENGLVER} 9: StrCopy(Info,'Relation count:Absolute count:Absolute density:Normal density'); {$ELSE} 9: StrCopy(Info,'Относительное число попаданий:Абсолютное число попаданий:Плотность вероятности абсолютная:Плотность вероятности нормированная'); {$ENDIF} end else case ParamId of {$IFDEF ENGLVER} 5: StrCopy(Info,'Rectangle:Hann:Welch:Parsen'); 6: if BlockId=5 then StrCopy(Info,'Absolute spectr:Normal spectr:Phase') else StrCopy(Info,'Absolute spectr:Normal spectr'); {$ELSE} 5: StrCopy(Info,'Прямоугольное:Ханна:Вэлча:Парсена'); 6: if BlockId=5 then StrCopy(Info,'Абсолютный спектр:Нормированный спектр:Угол сдвига фаз') else StrCopy(Info,'Абсолютный спектр:Нормированный спектр'); {$ENDIF} end; if ParamId=4 then {$IFDEF ENGLVER} StrCopy(Info,'Yes:No') {$ELSE} StrCopy(Info,'Да:Нет') {$ENDIF}; end; i_GetParamType : case ParamId of 1 : StrCopy(Info,'0'); 2,4: StrCopy(Info,'40'); 3 : StrCopy(Info,'1'); else if BlockId=1 then case ParamId of 5,6: StrCopy(Info,'1'); 7: StrCopy(Info,'0'); else StrCopy(Info,'40'); end else StrCopy(Info,'40'); end; i_GetParamAct : StrCopy(Info,'0'); i_GetFuncsCount : BlockId := 0; end; end; {$R Stat.res} exports AllInit, AllDone, GetLibInfo, TStatHist, //Гистограмма распределения TStatMean, //Среднее значение TStatVaranc, //Среднеквадратическое отклонение TStatSpectr, //Спектральная плотность TStatDblSpctr, //Взаимная спектральная плотность TStatCorel, //Функция взаимной корелляции TStatCorCoef, //Коэффициент корелляции TStatSkew, //Эксцесс TStatKurt, //Степень сплющенности TStatHistRst, TStatMeanRst, TStatVarancRst, TStatSpectrRst, TStatDblSpctrRst, TStatCorelRst, TStatCorCoefRst, TStatSkewRst, TStatKurtRst; end.