1,3 → 1,6 |
// jednoduchy algoritmus krizove korelace |
// copile gcc correlation.c -lm -o correlation |
|
#include <stdio.h> |
#include <stdlib.h> |
#include <math.h> |
24,12 → 27,26 |
} |
} |
|
int linear_chirp(int *pole, int delka_pole, int delka_pulsu, int spozdeni){ |
|
static const double pi = 3.141592653589793238462643383279502884197; // Archimedes constant pi |
static const float f0 = 1; |
static const float k = 1; |
|
int t; |
|
// for(t=0;t < delka_pole;t++){ pole[t] = (int) ( 100*sin(2*pi*t*(f0+(k/2)*t)) ) ; |
// } |
for(t=0;t < delka_pole;t++){ pole[t] = (int) ( 100*sin(t/2) ) ; |
} |
} |
|
int main (void) |
{ |
int i,n,m; |
int i,n,m,delay; |
double r; |
|
obdelnik(sample,100,10,35); // vyrobi vzorek signalu |
linear_chirp(sample,100,10,0); // vyrobi vzorek signalu |
obdelnik(signal,500,10,100); // vyrobi signal ve kterem se vzorek hleda |
|
for(n=0; n < 400;n++){ //spocita korelaci pro mozna spozdeni |
38,14 → 55,23 |
correlation[n]=r; |
} |
|
r=0; |
for(n=0; n < 400;n++){ //najde nejvetsi shodu (pro nazornost v samostatnem cyklu) |
if (r < correlation[n]){ |
delay = n; |
r = correlation[n]; |
} |
} |
|
|
for(i=0;i<400;i++) |
{ |
fprintf(stdout,"%3u ",i); // vypise cislo bunky v poli (spozdeni) |
// fprintf(stdout,"%2d ",sample[i]); |
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. |
// fprintf(stdout,"%3.2f\n",correlation[i]); // vypise hodnotu korelace nejvissi cislo je nejvetsi korelace. |
} |
fprintf(stdout,"\nvzorek v signalu zacina na miste: %3u \n",delay); |
|
exit(1); |
} |