#include #define M 5 float correlate(); float sum_sqr_2(); float sum_both_2(); main() { int f[100]; int g[100]; int gs,ge, fs, fe, n; int sum, m; float num; float g_bar, g_sqrs; init_corr (f,g); printf ("gs?"); scanf ("%d", &gs); printf ("ge?"); scanf ("%d", &ge); printf ("fs?"); scanf ("%d", &fs); n = ge-gs; printf ("n: %d\n", n); sum = sum_funct (g, gs, n); g_bar = (float)sum / n; g_sqrs = sum_sqr_2 (g, gs, n, g_bar); #ifdef ROGER printf ("g_bar: %f", g_bar); printf (" g_sqrs: %f\n", g_sqrs); #endif for (m = -M; m <= M; m++) { num = correlate (g_bar, g_sqrs, f,g, gs,ge, fs+m, n); printf ("=========================================\n"); printf ("m: %d ----> correl_value: %f\n", m, num); printf ("=========================================\n"); } } init_corr(f,g) int f[]; int g[]; { int x; for (x=0;x<=100;x++) { if (x<8) f[x] = 0; else f[x] = x-8; if (x<4) g[x] = 0; else g[x] = x-4; /*printf ("f[%d]: %d", x, f[x]); printf (" --- g[%d]: %d\n", x, g[x]); */ } } sum_funct (array, s,n) int array[]; int s,n; { int x; int sum = 0; for (x=s;x<= s+n;x++) { sum = sum + array[x]; } return (sum); } float sum_both_2 (f,g, gs,ge, fs, f_bar, g_bar) int f[], g[]; int gs,ge, fs; float f_bar, g_bar; { int x; float numer = 0.0; int ind; ind = fs; for (x=gs;x<=ge;x++) { numer = numer + ( ((float)f[ind] - f_bar) * ((float)g[x] - g_bar) ); ind++; } return (numer); } float sum_sqr_2 (array, s,n, ave) int array[]; int s,n; float ave; { int x; float num; float sum = 0.0; for (x=s;x<=s+n;x++) { num = (float)array[x] - ave; sum = sum + (num * num); } return (sum); } float correlate(g_bar, g_sqrs, f,g, gs,ge, fs, n) float g_bar, g_sqrs; int f[],g[], gs,ge, fs, n; { int one, two, mt; float numer, denom, first, second; float correl_value; float f_bar, f_sqrs; f_bar = sum_funct (f, fs, n); f_bar = f_bar / n; #ifdef ROGER printf (" f_bar: %f", f_bar); #endif numer = sum_both_2 (f,g, gs,ge, fs, f_bar, g_bar); f_sqrs = sum_sqr_2 (f, fs, n, f_bar); #ifdef ROGER printf (" f_sqrs: %f\n", f_sqrs); #endif denom = sqrt ((float)f_sqrs * (float)g_sqrs); correl_value = (float)numer/denom; #ifdef ROGER printf ("numer: %f denom: %f corr: %f\n", numer, denom, correl_value); #endif return (correl_value); }