Текст подпрограммы и версий rsf1r_c.zip |
Тексты тестовых примеров trsf1r_c.zip |
Построение взаимного амплитудного спектра, функций разности фаз и взаимной когерентности двух случайных процессов по оценкам их автоспектров и взаимных спектров.
Пусть 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. |
int rsf1r_c (real *sx, real *sy, real *sxy1, real *sxy2, integer *nc, real *dph, real *av, real *coh)
Параметры
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. |
int main(void) { /* Initialized data */ static float sx[3] = { 25.f,2.f,1.f }; static float sy[3] = { 25.f,2.f,1.f }; static float sxy1[3] = { 25.f,-2.f,-1.f }; static float sxy2[3] = { 0.f,0.f,0.f }; /* Local variables */ extern int rsf1r_c(float *, float *, float *, float *, int *, float *, float *, float *); static int nc; static float av[3], coh[3], dph[3]; nc = 3; rsf1r_c(sx, sy, sxy1, sxy2, &nc, dph, av, coh); printf("\n %16.7e %16.7e %16.7e \n", dph[0], dph[1], dph[2]); printf("\n %16.7e %16.7e %16.7e \n", av[0], av[1], av[2]); printf("\n %16.7e %16.7e %16.7e \n", coh[0], coh[1], coh[2]); return 0; } /* main */ Результаты: dph = (0., 0., 0.) av = (25., 2., 1.) coh = (1., 1., 1.)