Текст подпрограммы и версий
rsf1r_p.zip
Тексты тестовых примеров
trsf1r_p.zip

Подпрограмма:  RSF1R (модуль RSF1R_p)

Назначение

Построение взаимного амплитудного спектра, функций разности фаз и взаимной когерентности двух случайных процессов по оценкам их автоспектров и взаимных спектров.

Математическое описание

Пусть SXm, SYm, SXYm - оценки автоспектров и взаимного спектра двух случайных процессов  X, Y на некоторых частотах  λm,  m = 1, 2, ..., NC. Тогда справедливы следующие оценки функций спектров [1]:

 AVm = | SXYm| = (SXY12m + SXY22m) 1/2  -  оценка взаимного
                                                                          амплитудного спектра, где
             SXY1m  =  Re SXYm  -  синфазная составляющая (коспектр),
             SXY2m  =  Im SXYm  -  квадратурная составляющая
                                                    (квадратурный спектр),
 DPHm = arctg (SXY2m/SXY1m) - оценка функции разности фаз
                                                       (фазового спектра),
 COHm = AV2m/(SXm * SYm)     - оценка функции взаимной
                                                        когерентности. 

Полное описание реализованного алгоритма содержится в статье [2] (подпрограмма FUNSPE).

1.  Дж.Бендат, А.Пирсол, Измерение и анализ случайных процессов, Изд - во "Мир", M., 1974.
2.  М.В.Арефьева, Корреляционный и спектральный анализ стационарных случайных процессов (часть 1), сб. "Численный анализ на ФОРТРАНе", вып.15. Изд - во МГУ, M., 1976.

Использование

procedure RSF1R(var SX :Array of Real; var SY :Array of Real;
                var SXY1 :Array of Real; var SXY2 :Array of Real;
                NC :Integer; var DPH :Array of Real;
                var AV :Array of Real; var COH :Array of Real);

Параметры

SX - одномерный массив длины NC, содержащий заданные значения автоспектра процесса  X (тип: вещественный);
SY - одномерный массив длины NC, содержащий заданные значения автоспектра процесса  Y (тип: вещественный);
SXY1 - одномерный массив длины NC, содержащий заданные значения вещественной части взаимного спектра процессов  X, Y (тип: вещественный);
SXY2 - одномерный массив длины NC, содержащий заданные значения мнимой части взаимного спектра процессов  X, Y (тип: вещественный);
NC - число заданных значений автоспектров и взаимного спектра процессов  X, Y (тип: целый);
DPH - одномерный массив длины NC, содержащий вычисленные значения функции разности фаз процессов  X, Y (тип: вещественный);
AV - одномерный массив длины NC, содержащий вычисленные значения взаимного амплитудного спектра процессов  X, Y (тип: вещественный);
COH - одномерный массив длины NC, содержащий вычисленные значения функции взаимной когерентности процессов  X, Y (тип: вещественный).

Версии: нет

Вызываемые подпрограммы: нет

Замечания по использованию

 

C целью экономии числа используемых массивов результаты можно получать на месте исходной информации, а именно, допустимы совпадения параметров: DPH = SXY2,  AV = SXY1,  COH = SY.

Пример использования

Unit TRSF1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, RSF1R_p;

function TRSF1R: String; 

implementation

function TRSF1R: String;
var
NC,_i :Integer;
DРН :Array [0..2] of Real;
AV :Array [0..2] of Real;
СОН :Array [0..2] of Real;
const
SX :Array [0..2] of Real = ( 25.0,2.0,1.0 );
SY :Array [0..2] of Real = ( 25.0,2.0,1.0 );
SXY1 :Array [0..2] of Real = ( 25.0,-2.0,-1.0 );
SXY2 :Array [0..2] of Real = ( 0.0,0.0,0.0 );
begin
Result := '';
NC := 3;
RSF1R(SX,SY,SXY1,SXY2,NC,DPH,AV,COH);
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f ',[DPH[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f ',[AV[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f ',[COH[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TRSF1R',Result);  { вывод результатов в файл TRSF1R.res }
exit;
end;

end.

Результаты:

       DPH  =  (0., 0., 0.)
       AV    =  (25., 2., 1.)
       COH  =  (1., 1., 1.)