В результате моделирования (по любому алгоритму) мы получили реализацию из N отчетов. Для того, чтобы убедиться в правильности использованного алгоритма воспользуемся оценкой корреляционной функции по следующей формуле (в которой учитывается нулевое математическое ожидание):
, при | (4) |
Для отрицательных m можно воспользоваться симметричностью корреляционной функции.
На следующем фрагменте приведена программа моделирования реализации дискретного гауссовского шума с функцией корреляции вида . В программе, используя соотношение (4), по получившейся реализации производится оценка корреляционной функции.
Программа 2 ( исходный файл lect2_2.cpp , выполняемый файл lect2_2.exe )
#define N 3000 #include "model.h" #include <math.h> float D = 1, a = 0.1; float x[N],e[N]; float r[500]; // массив для оценки корреляционной функции int N_realiz ; // длительность реализации стационарного // фрагмента получившегося случайного процесса main() { float c[500], aa; int n, P, m, k; for(n = 0; n < N; n++) e[n] = gauss(0, 1); P = 2. / a ; for( k=0; k<= P ; k++) { if (k!= 0) c[k]= sqrt(D)/sqrt(PI*a) *sin (a*k )/k ; else c[k] = sqrt( D )/sqrt(PI*a )* a; } for (n = 0; n < N; n++) { x[n] = 0.0; for(k= -P; k <= P; k++) { if(k < 0) aa = c[-k]; else aa = c[k]; if(((n-k)>= 0) && ((n - k) < N )) x[n] = aa * e[n-k] + x[n]; } } for(n=0; n < ( N - 2*P); n++) x[n] = x[n + P]; N_realiz = N - 2*P; for(m=0; m<500; m++) { r[m] = 0.0; for (n = 0; n <(N_realiz -m-1); n++) r[m]=r[m]+1./(N_realiz-m)*x[n] *x[n+m]; } Init_graph(); graf_1("realizasia random process ",x, 0, 499); graf_1("function korration sin x / x ", r, 0, 499); Close_graph(); } |