|
Текст подпрограммы и версий 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.)