SHARE
TWEET

Untitled

a guest Nov 19th, 2019 77 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include<math.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5.  
  6.  
  7. #define PI 3.14159265
  8. #define OKRES_PROBKOWANIA_s 0.000001 //10Hz
  9. #define ILOSC_PROBEK 10000
  10. #define PREDKOSC_DZWIEKU_m_s 340  //Predkosc dziwieku 340 m/s
  11. #define LICZBA_KATOW 181  //Liczba kątów odpowiadająca ilosci iteracji
  12.  
  13.  
  14. double mikrofon1[ILOSC_PROBEK]={0};
  15. double mikrofon2[ILOSC_PROBEK]={0};
  16. double mikrofon3[ILOSC_PROBEK]={0};
  17. double mikrofon4[ILOSC_PROBEK]={0};
  18. double opoznienia_mikrofon1[LICZBA_KATOW];
  19. double opoznienia_mikrofon2[LICZBA_KATOW];
  20. double opoznienia_mikrofon3[LICZBA_KATOW];
  21. double opoznienia_mikrofon4[LICZBA_KATOW];
  22.  
  23.  
  24. void print(double sig[], char* nazwa )//zapisuje do pliku sygnał o
  25. {
  26.  
  27.  
  28.   FILE *fp;
  29.   char* rozwiniecie = ".dat";
  30.   char fileSpec[strlen(nazwa)+strlen(rozwiniecie)+1];
  31.  
  32.   snprintf( fileSpec, sizeof( fileSpec ), "%s%s", nazwa, rozwiniecie );
  33.   fp = fopen (fileSpec,"w");
  34.  
  35.   for(int i=0;i<ILOSC_PROBEK;i++)
  36.   {
  37.       fprintf(fp,"%d   %f\n",i,sig[i]);
  38.   }
  39. }
  40.  
  41. void print_max(double sig[])//zapisuje do pliku.dat maksima korelacji dla każdego z kątów
  42. {
  43.   FILE *fp;
  44.   fp = fopen ("max.dat","w");
  45.  
  46.   for(int i=0;i<181;i++)
  47.   {
  48.       fprintf(fp,"%d   %f\n",i,sig[i]);
  49.   }
  50. }
  51.  
  52. void Symuluj(double mic[], int delay, int szum_delay) //funkcja tworząca sygnał do symulacji
  53. {
  54.     for(int i=0;i<delay;i++)
  55.     {
  56.         mic[i] = 0;
  57.     }
  58.     for(int i=delay;i<1000+delay;i++)
  59.     {
  60.         mic[i]=i-delay;
  61.     }
  62.     for(int i=1000+delay;i<2000+delay;i++)
  63.     {
  64.         mic[i]=2000+delay-i;
  65.     }
  66.     for(int i=2000+delay;i<5000;i++)
  67.     {
  68.         mic[i]=0;
  69.     }
  70.     for(int i=5000;i<5500;i++)
  71.     {
  72.       mic[i]=i-5000;
  73.     }
  74.     for(int i=5000+szum_delay;i<5500+szum_delay;i++)
  75.     {
  76.         mic[i]=i-szum_delay-5000;
  77.     }
  78.     for(int i=5500+szum_delay;i<6000+szum_delay;i++)
  79.     {
  80.         mic[i]=6000+szum_delay-i;
  81.     }
  82.     for(int i=6000+szum_delay;i<ILOSC_PROBEK;i++)
  83.     {
  84.         mic[i]=0;
  85.     }
  86. }
  87.  
  88. double DegToRad(int kat) //konwersja stopni na radiany
  89. {
  90.  
  91.   double przelicznik= PI/180;
  92.  
  93.   return kat*przelicznik;
  94.  
  95. }
  96. int Count_Delay() //obliczanie opóżnień dla mikrofonów względem mic1
  97. {
  98.  
  99.  
  100.  
  101.       for(int i=0, stopnie=-90; i<181 && stopnie<91 ;i++,stopnie++)
  102.       {
  103.  
  104.           opoznienia_mikrofon2[i]=(0.02*sin(DegToRad(stopnie)))/PREDKOSC_DZWIEKU_m_s;
  105.           opoznienia_mikrofon3[i]=(0.04*sin(DegToRad(stopnie)))/PREDKOSC_DZWIEKU_m_s;
  106.           opoznienia_mikrofon4[i]=(0.06*sin(DegToRad(stopnie)))/PREDKOSC_DZWIEKU_m_s;
  107.  
  108.       }
  109.       for(int i=0;i<181;i++)
  110.       {
  111.          //printf("%d\n",i );
  112.          //printf("%lf\n",opoznienia_mikrofon2[i] );
  113.       }
  114.   return 0;
  115. }
  116.  
  117. double Determinate_Singal( double Sig[ILOSC_PROBEK], double t, double tdelay,
  118.                            double OkresProbkowania_s)
  119. {
  120.        if (t<tdelay) return 0;
  121.  
  122.        int Idx= floor((t-tdelay)/OkresProbkowania_s);
  123.        double S=Sig[Idx];
  124.        if (Idx>=ILOSC_PROBEK) return 0;
  125.  
  126.  
  127.        return (((Sig[Idx+1]-Sig[Idx])/OkresProbkowania_s)
  128.                  *((t-tdelay)-Idx*OkresProbkowania_s))+Sig[Idx];
  129.  
  130. }
  131.  
  132. double Beamforming(int argument)
  133. {
  134.  
  135.   double czas;
  136.   double bufor[180]; //bufor przechowujący rozwiazania dla kazdej iteracji
  137.   double sygnal1, sygnal2, sygnal3, sygnal4, suma_sygnalow;
  138.   double maksimum_korelacji=0;
  139.   int kat_sygnalu=0;
  140. printf("%d",argument);
  141.   for(int i=0;i<181;i++)
  142.   {
  143.  
  144.   if (argument==116)  maksimum_korelacji = -2147483648; //Zerowanie zmiennej do rysowania wykresu maksimum
  145.   double opoznienie_mikrofon1_s=0;
  146.   double opoznienie_mikrofon2_s=opoznienia_mikrofon2[i];
  147.   double opoznienie_mikrofon3_s=opoznienia_mikrofon3[i];
  148.   double opoznienie_mikrofon4_s=opoznienia_mikrofon4[i];
  149.  
  150.  
  151.       for(int indeks=0;indeks<ILOSC_PROBEK;indeks++)
  152.       {
  153.           czas=indeks*OKRES_PROBKOWANIA_s;
  154.           sygnal1=Determinate_Singal(mikrofon1,czas,opoznienie_mikrofon1_s,OKRES_PROBKOWANIA_s);
  155.           sygnal2=Determinate_Singal(mikrofon2,czas,opoznienie_mikrofon2_s,OKRES_PROBKOWANIA_s);
  156.           sygnal3=Determinate_Singal(mikrofon3,czas,opoznienie_mikrofon3_s,OKRES_PROBKOWANIA_s);
  157.           sygnal4=Determinate_Singal(mikrofon4,czas,opoznienie_mikrofon4_s,OKRES_PROBKOWANIA_s);
  158.           suma_sygnalow= sygnal1+sygnal2+sygnal3+sygnal4;
  159.  
  160.           if (maksimum_korelacji<suma_sygnalow)
  161.           {
  162.               maksimum_korelacji=suma_sygnalow;
  163.               kat_sygnalu=i;
  164.           }
  165.  
  166.       }
  167.     bufor[i]=maksimum_korelacji;
  168. //printf("%f\n",max );
  169. //printf("%d\n",i );
  170.   }
  171.  printf("%f\n",maksimum_korelacji);
  172.  printf("%d\n",kat_sygnalu);
  173.  print_max(bufor);
  174.    return kat_sygnalu;//print(mic1);
  175.  
  176. }
  177.  
  178.  
  179.  
  180. int main(int argc,char* argv[])
  181. {
  182.   Symuluj(mikrofon1,00,0);
  183.   Symuluj(mikrofon2,20,40);
  184.   Symuluj(mikrofon3,40,80);
  185.   Symuluj(mikrofon4,60,120);
  186.   Count_Delay();
  187.  
  188.     if(argc>1)
  189.        Beamforming(atoi(argv[1]));
  190.     else
  191.        Beamforming(0);
  192.   print(mikrofon3,"syg1");
  193.   print(mikrofon3,"syg2");
  194.   print(mikrofon3,"syg3");
  195.   print(mikrofon3,"syg4");
  196.  
  197.    return 0;
  198. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top