Текст подпрограммы и версий rss3r_c.zip |
Тексты тестовых примеров trss3r_c.zip |
Построение сглаженных оценок спектров случайных процессов путем усреднения по частотам.
Подпрограмма 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. )