Subversion Repositories svnkaklik

Rev

Rev 523 | Rev 525 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 523 Rev 524
Line 1... Line 1...
1
#include <stdio.h>
1
#include <stdio.h>
2
#include <stdlib.h>
2
#include <stdlib.h>
3
#include <math.h>
3
#include <math.h>
4
 
4
 
5
int x[500];
5
int sample[100];
6
int y[500];
6
int signal[500];
7
#define n 500
-
 
8
int delay;
7
 
9
int maxdelay = 500;
-
 
10
double correlation[1000];
8
double correlation[1000];
11
 
9
 
12
int obdelnik(int *pole, int delka_pulsu, int spozdeni)
10
int obdelnik(int *pole, int delka_pole, int delka_pulsu, int spozdeni) //generuje testovaci lichobeznikovy puls  do zadaneho pole
13
{
11
{
14
int i;
12
int i;
15
int value=1;
13
int value=1;
16
  for (i=0; i <= n; i++) { 
14
  for (i=0; i <= delka_pole; i++) { 
17
    if (i < spozdeni && i < n) pole[i]=value;
15
    if (i < spozdeni && i < delka_pole) pole[i]=value;
18
 
16
 
19
    if ((i > spozdeni) && (i < (spozdeni+10))) pole[i] = value++;
17
    if ((i > spozdeni) && (i < (spozdeni+10))) pole[i] = value++;
20
 
18
 
21
    if (i < (spozdeni+delka_pulsu+10) && i > (spozdeni+10) && i < n) pole[i]= value;      
19
    if (i < (spozdeni+delka_pulsu+10) && i > (spozdeni+10) && i < delka_pole) pole[i]= value;      
22
 
20
 
23
    if (i < (spozdeni+delka_pulsu+20) && i > (spozdeni+delka_pulsu+10) && i < n) pole[i] = value--;      
21
    if (i < (spozdeni+delka_pulsu+20) && i > (spozdeni+delka_pulsu+10) && i < delka_pole) pole[i] = value--;      
24
 
22
 
25
    if (i > (spozdeni+delka_pulsu+20) && i < n) pole[i]=value;
23
    if (i > (spozdeni+delka_pulsu+20) && i < delka_pole) pole[i]=value;
26
  }
24
  }
27
}
25
}
28
 
26
 
29
int main (void)
27
int main (void)
30
{
28
{
31
   int i,j;
29
   int i,n,m;
32
   double mx,my,sx,sy,sxy,denom;
-
 
33
 
-
 
34
   fprintf(stdout,"inicializace bufferu s chirpem \n");
-
 
35
   obdelnik(x,10,40);
-
 
36
   obdelnik(y,10,75);
30
   double r;
37
 
31
 
-
 
32
   obdelnik(sample,100,10,35);			// vyrobi vzorek signalu
-
 
33
   obdelnik(signal,500,10,100);			// vyrobi signal ve kterem se vzorek hleda
38
 
34
 
39
// vypocita stredni hodnotu signalu  
35
   for(n=0; n < 400;n++){			//spocita korelaci pro mozna spozdeni
40
   mx = 0;
36
     r=0;
41
   my = 0;   
-
 
42
   for (i=0;i<n;i++) {
37
     for(m=0;m < 100;m++) r += sample[m]*signal[m+n];
43
      mx += x[i];
-
 
44
      my += y[i];
38
     correlation[n]=r;
45
   }
39
   }
46
   mx /= n;
-
 
47
   my /= n;
-
 
48
 
40
 
49
// spoocita jmenovatele
-
 
50
 
-
 
51
   sx = 0;
-
 
52
   sy = 0;
-
 
53
   for (i=0;i<n;i++) {
-
 
54
      sx += (x[i] - mx) * (x[i] - mx);
-
 
55
      sy += (y[i] - my) * (y[i] - my);
-
 
56
   }
-
 
57
   denom = sqrt(sx*sy);
-
 
58
 
-
 
59
//spocita korelacni koeficient
-
 
60
   for (delay=-maxdelay;delay<maxdelay;delay++) {
-
 
61
      sxy = 0;
-
 
62
      for (i=0;i<n;i++)
-
 
63
      {
-
 
64
         j = i + delay;
-
 
65
         if (j < 0 || j >= n)
-
 
66
            continue;
-
 
67
         else
-
 
68
            sxy += (x[i] - mx) * (y[j] - my);
-
 
69
         /* Or should it be (?)
-
 
70
         if (j < 0 || j >= n)
-
 
71
            sxy += (x[i] - mx) * (-my);
-
 
72
         else
-
 
73
            sxy += (x[i] - mx) * (y[j] - my);
-
 
74
         */
-
 
75
      }
-
 
76
      correlation[delay+maxdelay] = sxy / denom;
-
 
77
      
-
 
78
      /* r is the correlation coefficient at "delay" */
-
 
79
 
-
 
80
   }
-
 
81
 
41
 
82
   for(i=0;i<=n;i++)
42
   for(i=0;i<400;i++)
83
   {
43
   {
-
 
44
     fprintf(stdout,"%3u ",i);	 		// vypise cislo bunky v poli (spozdeni)
84
     fprintf(stdout,"%2d ",x[i]);
45
//     fprintf(stdout,"%2d ",sample[i]);
85
     fprintf(stdout,"%2d ",y[i]);
46
//     fprintf(stdout,"%2d ",signal[i]);
86
     fprintf(stdout,"%3.2f\n",correlation[i]);
47
     fprintf(stdout,"%3.2f\n",correlation[i]);		// vypise hodnotu korelace nejvissi cislo je nejvetsi korelace.
87
   }
48
   }
88
 
49
 
89
  exit(1);
50
  exit(1);
90
}
51
}