Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/r_htm_p/rsc1r_p.htm
Дата изменения: Fri Nov 6 13:31:12 2015 Дата индексирования: Sun Apr 10 01:13:34 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)