2,88 → 2,49 |
#include <stdlib.h> |
#include <math.h> |
|
int x[500]; |
int y[500]; |
#define n 500 |
int delay; |
int maxdelay = 500; |
int sample[100]; |
int signal[500]; |
|
double correlation[1000]; |
|
int obdelnik(int *pole, int delka_pulsu, int spozdeni) |
int obdelnik(int *pole, int delka_pole, int delka_pulsu, int spozdeni) //generuje testovaci lichobeznikovy puls do zadaneho pole |
{ |
int i; |
int value=1; |
for (i=0; i <= n; i++) { |
if (i < spozdeni && i < n) pole[i]=value; |
for (i=0; i <= delka_pole; i++) { |
if (i < spozdeni && i < delka_pole) pole[i]=value; |
|
if ((i > spozdeni) && (i < (spozdeni+10))) pole[i] = value++; |
|
if (i < (spozdeni+delka_pulsu+10) && i > (spozdeni+10) && i < n) pole[i]= value; |
if (i < (spozdeni+delka_pulsu+10) && i > (spozdeni+10) && i < delka_pole) pole[i]= value; |
|
if (i < (spozdeni+delka_pulsu+20) && i > (spozdeni+delka_pulsu+10) && i < n) pole[i] = value--; |
if (i < (spozdeni+delka_pulsu+20) && i > (spozdeni+delka_pulsu+10) && i < delka_pole) pole[i] = value--; |
|
if (i > (spozdeni+delka_pulsu+20) && i < n) pole[i]=value; |
if (i > (spozdeni+delka_pulsu+20) && i < delka_pole) pole[i]=value; |
} |
} |
|
int main (void) |
{ |
int i,j; |
double mx,my,sx,sy,sxy,denom; |
int i,n,m; |
double r; |
|
fprintf(stdout,"inicializace bufferu s chirpem \n"); |
obdelnik(x,10,40); |
obdelnik(y,10,75); |
obdelnik(sample,100,10,35); // vyrobi vzorek signalu |
obdelnik(signal,500,10,100); // vyrobi signal ve kterem se vzorek hleda |
|
|
// vypocita stredni hodnotu signalu |
mx = 0; |
my = 0; |
for (i=0;i<n;i++) { |
mx += x[i]; |
my += y[i]; |
for(n=0; n < 400;n++){ //spocita korelaci pro mozna spozdeni |
r=0; |
for(m=0;m < 100;m++) r += sample[m]*signal[m+n]; |
correlation[n]=r; |
} |
mx /= n; |
my /= n; |
|
// spoocita jmenovatele |
|
sx = 0; |
sy = 0; |
for (i=0;i<n;i++) { |
sx += (x[i] - mx) * (x[i] - mx); |
sy += (y[i] - my) * (y[i] - my); |
} |
denom = sqrt(sx*sy); |
|
//spocita korelacni koeficient |
for (delay=-maxdelay;delay<maxdelay;delay++) { |
sxy = 0; |
for (i=0;i<n;i++) |
{ |
j = i + delay; |
if (j < 0 || j >= n) |
continue; |
else |
sxy += (x[i] - mx) * (y[j] - my); |
/* Or should it be (?) |
if (j < 0 || j >= n) |
sxy += (x[i] - mx) * (-my); |
else |
sxy += (x[i] - mx) * (y[j] - my); |
*/ |
} |
correlation[delay+maxdelay] = sxy / denom; |
|
/* r is the correlation coefficient at "delay" */ |
|
} |
|
for(i=0;i<=n;i++) |
for(i=0;i<400;i++) |
{ |
fprintf(stdout,"%2d ",x[i]); |
fprintf(stdout,"%2d ",y[i]); |
fprintf(stdout,"%3.2f\n",correlation[i]); |
fprintf(stdout,"%3u ",i); // vypise cislo bunky v poli (spozdeni) |
// fprintf(stdout,"%2d ",sample[i]); |
// fprintf(stdout,"%2d ",signal[i]); |
fprintf(stdout,"%3.2f\n",correlation[i]); // vypise hodnotu korelace nejvissi cislo je nejvetsi korelace. |
} |
|
exit(1); |