Текст подпрограммы и версий rss2r_c.zip |
Тексты тестовых примеров trss2r_c.zip |
Построение сглаженных оценок автоспектров и взаимных спектров двух вещественных случайных процессов методом модифицированных периодограмм.
Пусть заданы реализации двух вещественных, стационарных, центрированных случайных процессов Xq, Yq, q = 0, 1, ..., M - 1 достаточно большой длины M на сетке по оси времени tq = q * DT с шагом DT > 0.
Разобьем каждую реализацию на K коротких отрезков, возможно
перекрывающихся, длины N:
1 ≤ N ≤ M
так, что начальные точки двух соседних отрезков отстоят друг от
друга на расстоянии L:
1 ≤ L ≤ N
(т.е. перекрывание коротких отрезков происходит в N - L
точках), а значение параметра K ≥ 1
выбирается из соотношения:
N + (K - 1) L = M1 ≤ M.
Вообще говоря, не требуется, чтобы конец последнего
короткого отрезка длины N совпадал с концами исходных рядов.
Таким образом, получим отрезки временны'х рядов вида:
Xs( J ) = Xs + ( J-1) L , Ys( J ) = Ys + ( J-1) L , s = 0, 1, ..., N - 1 , J = 1, 2, ..., K , где J - номеp короткого отрезка.
Обозначим через Am( J ), Bm( J ), m = 0, 1, ..., N - 1 их соответствующие дискретные преобразования Фурье, которые вычисляются по формулам:
N-1 Am( J ) = ∑ Xs( J ) exp(- i λm ts ) = s=0 N-1 = ∑ Xs( J ) exp(- 2π i m s / N) , s=0 N-1 Bm( J ) = ∑ Ys( J ) exp(- i λm ts ) = s=0 N-1 = ∑ Ys( J ) exp(- 2π i m s / N) , s=0
где λm = m * Δλ, m = 0, 1, ..., N - 1, Δλ = 2π/(N * DT), i = √-1.
B качестве оценок для автоспектров SX, SY и взаимного спектра SXY исходных случайных процессов берутся периодограммы, усредненные по K указанным коротким отрезкам, а именно, величины:
K SXm = 1/ K ∑ (DT / N) | Am( J ) | 2 , J=1 K SYm = 1/ K ∑ (DT / N) | Bm( J ) | 2 , m = 0, 1, ..., N - 1 , J=1 K SXYm = 1/ K ∑ (DT / N) Am* ( J ) Bm( J ) , J=1
где * - знак комплексного сопряжения. При этом функции SХm, SYm и SXY1m = Re SXYm симметричны относительно точки m = N/2, а функция SXY2m = Im SXYm антисимметрична относительно m = N/2.
Данный метод модифицированных периодограмм [1] дает уменьшение дисперсии спектральных оценок порядка K раз (при N << M) по сравнению с оценками через периодограммы без усреднения.
Полное описание реализованного алгоритма содержится в статье [2] (подпрограмма SPEMMP).
1. | P.D.Welch, The Use of Fast Fourier Transform for the Estimation of Power Spectra, IEEE Transactions on Audio, Electroacoustics, June, 1967, AU - 15, N 2, 70 - 73. |
2. | М.В.Арефьева, Корреляционный и спектральный анализ стационарных случайных процессов (часть 1), сб."Численный анализ на ФОРТРАНе", вып.15. Изд - во МГУ, M., 1976. |
int rss2r_c (real *x, real *y, integer *n, integer *k, integer *l, real *dt, real *sx, real *sy, real *sxy1, real *sxy2, real *z1, real *z2)
Параметры
x, y - | одномерные массивы длины m1 = n + (k - 1) * l, содеpжащие последовательные значения исходных реализаций случайных процессов Xq, Yq, q = 0, 1, ..., m1 - 1 (тип: вещественный); |
n - | заданная длина короткого отрезка, n ≥ 4 - целая степень числа два (тип: целый); |
k - | заданное число коротких отрезков (тип: целый); |
l - | заданное расстояние между начальными точками двух соседних коротких отрезков, 1 ≤ l ≤ n (тип: целый); |
dt - | заданный шаг сетки по оси времени, dt > 0 (тип: вещественный); |
sx - | одномерный массив длины n/2 + 1, содержащий вычисленные значения автоспектра процесса X (тип: вещественный); |
sy - | одномерный массив длины n/2 + 1, содержащий вычисленные значения автоспектра процесса Y (тип: вещественный); |
sxy1 - | одномерный массив длины n/2 + 1, содержащий вычисленные значения вещественной части взаимного спектра процессов X, Y - коспектра (тип: вещественный); |
sxy2 - | одномерный массив длины n/2 + 1, содержащий вычисленные значения мнимой части взаимного спектра процессов X, Y - квадратурного спектра (тип: вещественный); |
z1, z2 - | одномерные массивы длины n + 1, используемые в подпрограмме как рабочие (тип: вещественный). |
Версии: нет
Вызываемые подпрограммы
ftf1c_c - | подпрограмма вычисления дискретного или обратного дискретного преобразования Фурье комплексного ряда длины, равной степени двух, методом быстрого преобразования Фурье. |
Замечания по использованию
1. |
Значения параметров k, l, n должны быть связаны соотношением: n + (k - 1) * l = m1 ≤ m, где m - общее число заданных значений каждого из двух случайных процессов Xq, Yq, m1 - количество этих значений, используемых в подпрограмме для построения оценок спектров. В частности, возможно m = m1. | |
2. | B частном случае одного случайного процесса X допустимы совпадения параметров: x = y, sy = sxy1 = sxy2, при этом массив sy используется в подпрограмме как рабочий. |
int main(void) { /* Initialized data */ static float x[8] = { 1.f,2.f,3.f,4.f,1.f,2.f,3.f,4.f }; static float y[8] = { 4.f,3.f,2.f,1.f,4.f,3.f,2.f,1.f }; /* Local variables */ static float sxy1[3], sxy2[3]; static int k, l; extern int rss2r_c(float *, float *, int *, int *, int *, float *, float *, float *, float *, float *, float *, float *); static int n; static float z1[5], z2[5], dt, sx[3], sy[3]; n = 4; k = 2; l = 4; dt = 1.f; rss2r_c(x, y, &n, &k, &l, &dt, sx, sy, sxy1, sxy2, z1, z2); printf("\n %16.7e %16.7e %16.7e \n", sx[0], sx[1], sx[2]); printf("\n %16.7e %16.7e %16.7e \n", sy[0], sy[1], sy[2]); printf("\n %16.7e %16.7e %16.7e \n", sxy1[0], sxy1[1], sxy1[2]); printf("\n %16.7e %16.7e %16.7e \n", sxy2[0], sxy2[1], sxy2[2]); return 0; } /* main */ Результаты: sx = (25., 2., 1.), sy = (25., 2., 1.), sxy1 = (25., - 2., - 1.), sxy2 = (0., 0., 0.)