Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 525 → Rev 526

/programy/C/ix86/signals/correlation
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/programy/C/ix86/signals/correlation.c
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.
}