|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/r_htm_p/rsc1r_p.htm
Дата изменения: Fri Nov 6 13:31:12 2015 Дата индексирования: Sun Apr 10 02:06:41 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий rsc1r_p.zip |
Тексты тестовых примеров trsc1r_p.zip |
Построение автокорреляционных и взаимных корреляционных функций двух случайных процессов по оценкам их спектров.
Пусть SXm, SYm, SXYm - заданные значения автоспектров и взаимного спектра двух случайных процессов X, Y начастотах λm = m * Δλ, где m = 0, 1, ..., NC - 1, Δλ = 2π/(N * DT) - шаг сетки по частотной оси, N = 2 (NC - 1), DT - шаг сетки по оси времени. Доопределим (внутри подпрограммы) функции SXm, SYm, SXY1m = Re SXYm симметрично относительно точки m = NC - 1, а функцию SXY2m = Im SXYm антисимметрично относительно m = NC - 1. Применяя обратное дискретное преобразование Фурье к N значениям спектров, получаем соответствующие оценки для автокорреляционных и взаимной корреляционной функций [1]:
N-1
CXs = 1/(N*DT) ∑ SXm exp( i λm ts) =
m=0
N-1
= 1/(N*DT) ∑ SXm exp(2π i m s / N) ,
m=0
N-1
CYs = 1/(N*DT) ∑ SYm exp( i λm ts) =
m=0
N-1
= 1/(N*DT) ∑ SYm exp(2π i m s / N) ,
m=0
N-1
CXYs = 1/(N*DT) ∑ SXYm exp( i λm ts) =
m=0
N-1
= 1/(N*DT) ∑ SXYm exp(2π i m s / N) ,
m=0
где ts = S * DT, s = 0, 1, ..., N - 1, i = √ -1.
Построенные оценки CXs, CYs, являются вещественными функциями симметричными относительно центра S = N/2 = NC - 1. Эти оценки "циклические" [1, стp.357], поэтому рекомендуется применять данный метод для быстро затухающих корреляций.
Полное описание реализованного алгоритма содержится в статье [2] (подпрограмма CORREL).
| 1. | Дж.Бендат, А.Пирсол, Измерение и анализ случайных процессов, Изд - во "Мир", M., 1974. |
| 2. | М.В.Арефьева, Корреляционный и спектральный анализ стационарных случайных процессов (часть 1), сб. "Численный анализ на ФОРТРАНе", вып.15, Изд - во МГУ, M., 1976. |
procedure RSC1R(var SX :Array of Real; var SY :Array of Real;
var SXY1 :Array of Real; var SXY2 :Array of Real;
NC :Integer; DT :Real; var CX :Array of Real;
var CY :Array of Real; var CXY :Array of Real;
var R :Array of Real);
Параметры
| SX - | одномерный массив длины NC, содержащий заданные значения автоспектра процесса X (тип: вещественный); |
| SY - | одномерный массив длины NC, содержащий заданные значения автоспектра процесса Y (тип: вещественный); |
| SXY1 - | одномерный массив длины NC, содержащий заданные значения вещественной части взаимного спектра процессов X, Y (тип: вещественный); |
| SXY2 - | одномерный массив длины NC, содержащий заданные значения мнимой части взаимного спектра процессов X, Y (тип: вещественный); |
| NC - | количество заданных значений автоспектров и взаимного спектра процессов X, Y, NC = 2n + 1, где n ≥ 1 - целое число (тип: целый); |
| DT - | заданный шаг сетки по оси времени, DT > 0 (тип: вещественный); |
| CX - | одномерный массив длины NC, содержащий вычисленные значения автокорреляционной функции процесса X (тип: вещественный); |
| CY - | одномерный массив длины NC, содержащий вычисленные значения автокорреляционной функции процесса Y (тип: вещественный); |
| CXY - | одномерный массив длины 2 NC - 1, содержащий в первых (2 NC - 2) элементах вычисленные значения взаимной корреляционной функции процессов X, Y (тип: вещественный); |
| R - | одномерный массив длины 2 NC - 1, используемый в подпрограмме как рабочий (тип: вещественный). |
Версии: нет
Вызываемые подпрограммы
| FTF1C - | подпрограмма вычисления дискретного или обратного дискретного преобразования Фурье комлексного ряда длины, равной степени двух, методом быстрого преобразования Фурье. |
Замечания по использованию
| 1. |
C целью экономии числа используемых массивов результаты можно получать на месте исходной информации, а именно, допустимы совпадения параметров: CX = SX, CY = SY. | |
| 2. | B частных случаях применения подпрограммы возможны совмещения массивов: SX = SY = SXY1 = SXY2, CX = CY - при построении автокорреляционной функции одного случайного процесса X и SY = SXY1 = SXY2 - при построении только автокорреляцонных функций двух случайных процессов X, Y без вычисления их взаимной корреляции; в этих случаях массив CXY используется в подпрограмме как рабочий. |
Unit TRSC1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, RSC1R_p;
function TRSC1R: String;
implementation
function TRSC1R: String;
var
NC,_i :Integer;
DT :Real;
СХ :Array [0..2] of Real;
CY :Array [0..2] of Real;
CXY :Array [0..4] of Real;
R :Array [0..4] 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;
DT := 1.0;
RSC1R(SX,SY,SXY1,SXY2,NC,DT,CX,CY,CXY,R);
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
begin
Result := Result + Format('%20.16f ',[CX[_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 ',[CY[_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 4 do
begin
Result := Result + Format('%20.16f ',[CXY[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('TRSC1R',Result); { вывод результатов в файл TRSC1R.res }
exit;
end;
end.
Результаты:
CX = (7.5, 6., 5.5)
CY = (7.5, 6., 5.5)
CXY = (5., 6.5, 7., 6.5)