5,11 → 5,14 |
#include <stdlib.h> |
#include <math.h> |
|
int sample[100]; |
int signal[500]; |
#define SAMPLES 1000 |
#define SIGNAL_SAMPLES SAMPLES*20 |
|
double correlation[1000]; |
int sample[SAMPLES]; |
int signal[SIGNAL_SAMPLES]; |
|
double correlation[SIGNAL_SAMPLES]; |
|
int obdelnik(int *pole, int delka_pole, int delka_pulsu, int spozdeni) //generuje testovaci lichobeznikovy puls do zadaneho pole |
{ |
int i; |
27,36 → 30,51 |
} |
} |
|
int linear_chirp(int *pole, int delka_pole, int delka_pulsu, int spozdeni){ |
int linear_chirp(int *pole, int delka_pole, int delka_pulsu, int spozdeni){ // vygeneruje linearni chirp a vzorky ulozi do pole |
|
static const double pi = 3.141592653589793238462643383279502884197; // Archimedes constant pi |
static const float f0 = 1; |
static const float k = 1; |
static const float f0 = 0.01; |
static const float k = 0.0001; |
|
int t; |
float ble; |
if((spozdeni+delka_pulsu) < delka_pole) |
for(t=0;t < delka_pulsu;t++) pole[spozdeni+t] = round ( 100*sin(2*pi*t*(f0+(k/2)*t)) ); |
else return 0; |
|
// 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 exp_chirp(int *pole, int delka_pole, int delka_pulsu, int spozdeni){ // vygeneruje linearni chirp a vzorky ulozi do pole |
|
static const double pi = 3.141592653589793238462643383279502884197; // Archimedes constant pi |
static const float f0 = 0.01; |
static const float k = 0.0001; |
|
int t; |
float ble; |
if((spozdeni+delka_pulsu) < delka_pole) |
for(t=0;t < delka_pulsu;t++) pole[spozdeni+t] = round ( 100*sin(2*pi*t*(f0+(k/2)*t)) ); |
else return 0; |
|
} |
|
|
int main (void) |
{ |
int i,n,m,delay; |
double r; |
|
linear_chirp(sample,100,10,0); // vyrobi vzorek signalu |
obdelnik(signal,500,10,100); // vyrobi signal ve kterem se vzorek hleda |
linear_chirp(sample,SAMPLES,100,0); // vyrobi vzorek signalu |
linear_chirp(signal,SIGNAL_SAMPLES,500,1000); // vyrobi signal ve kterem se vzorek hleda |
|
for(n=0; n < 400;n++){ //spocita korelaci pro mozna spozdeni |
for(n=0; n < (SIGNAL_SAMPLES - SAMPLES);n++){ //spocita korelaci pro mozna spozdeni |
r=0; |
for(m=0;m < 100;m++) r += sample[m]*signal[m+n]; |
for(m=0;m < SAMPLES;m++) r += sample[m]*signal[m+n]; |
correlation[n]=r; |
} |
|
r=0; |
for(n=0; n < 400;n++){ //najde nejvetsi shodu (pro nazornost v samostatnem cyklu) |
for(n=0; n < (SIGNAL_SAMPLES - SAMPLES);n++){ //najde nejvetsi shodu (pro nazornost v samostatnem cyklu) |
if (r < correlation[n]){ |
delay = n; |
r = correlation[n]; |
64,10 → 82,10 |
} |
|
|
for(i=0;i<400;i++) |
for(i=0;i<SAMPLES;i++) |
{ |
fprintf(stdout,"%3u ",i); // vypise cislo bunky v poli (spozdeni) |
fprintf(stdout,"%2d ",sample[i]); |
// fprintf(stdout,"%3u ",i); // vypise cislo bunky v poli (spozdeni) |
fprintf(stdout,"%2i ",sample[i]); |
// fprintf(stdout,"%2d ",signal[i]); |
// fprintf(stdout,"%3.2f\n",correlation[i]); // vypise hodnotu korelace nejvissi cislo je nejvetsi korelace. |
} |