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

Подпрограмма:  rsf1r_c

Назначение

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

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

Пусть 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.)