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

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

Назначение

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

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

Подпрограмма rss3r_c реализует один из способов уменьшения дисперсии спектральных оценок и, тем самым, повышения их точности, который состоит в усреднении значений спектрального ряда S ( I ),  I = 1, 2, ..., NC на каждой частоте  I по 2Р + 1 соседним частотам [1].
Величина  P имеет смысл полуширины усредняющего фильтра. Усреднение производится с равными весами и усредненное значение приписывается центральной частоте.

Процесс усреднения проводится итерационно, а именно: усредненнное значение для  I - ой частоты получается из усредненного значения для ( I - 1) - ой частоты путем прибавления и вычитания неусредненных значений для соответствующих крайних частот. При этом спектр  S доопределяется (внутри подпрограммы) симметрично или антисимметрично относительно концов 1 и NC - в зависимости от задаваемого значения управляющего параметра  Q.

Полное описание реализованного алгоритма содержится в статье [2] (подпрограмма SPEMFR).

1.  Дж.Бендат, А.Пирсол, Измерение и анализ случайных процессов, Изд - во "Мир", M., 1974.
2.  М.В.Арефьева, Корреляционный и спектральный анализ стационарных случайных процессов (часть 2), сб. "Численный анализ на ФОРТРАНе", вып.20. Изд - во МГУ, M., 1977.

Использование

    int rss3r_c (real *s, integer *nc, integer *p, real *q,
            real *w)

Параметры

s - одномерный массив длины nc, содержащий заданные значения усредняемого спектрального ряда (тип: вещественный);
nc - количество заданных значений исходного ряда (тип: целый);
p - заданная величина, определяющая число соседних частот 2p + 1, по которым производится усреднение, 0 < p < nc (тип: целый);
q - заданный управляющий параметр (тип: вещественный):
при q =  1. - усредняется симметричный относительно 1 и nc спектральный ряд,
при q = -1. - усредняется антисимметричный относительно 1 и nc спектральный ряд;
w - одномерный массив длины nc, содержащий вычисленные значения усредненного ряда (тип: вещественный).

Версии: нет

Вызываемые подпрограммы: нет

Замечания по использованию

  B случае антисимметричного спектра  S (q = - 1.) должны выполняться условия: s (1) = 0., s (nc) = 0. .

Пример использования

int main(void)
{
    /* Initialized data */
    static float s[9] = { 9.f,8.f,7.f,6.f,5.f,4.f,3.f,2.f,1.f };

    /* Local variables */
    extern int rss3r_c(float *, int *, int *, float *, float *);
    static int p, i;
    static float q, w1[9], w2[9];
    static int nc;

    nc = 9;
    p = 3;
    q = 1.f;
    rss3r_c(s, &nc, &p, &q, w1);

    for (i = 0; i <= 6; i += 3) {
         printf("\n %16.7e %16.7e %16.7e \n", w1[i], w1[i + 1], w1[i + 2]);
    }
    s[0] = 0.f;
    s[8] = 0.f;
    q = -1.f;
    rss3r_c(s, &nc, &p, &q, w2);

    for (i = 0; i <= 6; i += 3) {
         printf("\n %16.7e %16.7e %16.7e \n", w2[i], w2[i + 1], w2[i + 2]);
    }
    return 0;
} /* main */


Результаты:

     w1  =  ( 7.142857,  7.,  6.571429,  5.857143,  5.,  4.,  3.285714, 
                   2.857143,  2.714286 ) , 

     w2  =  ( 0.,  1.571429,  3.142857,  4.714286,  5.,  3.857143, 
                   2.571429,  1.285714,  0. )