Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 523 → Rev 524

/programy/C/ix86/signals/correlation.c
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);