Advertisement
Hadix

zaszumienie

Nov 6th, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.39 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. #include <time.h>
  7. #include <locale.h>
  8.  
  9.  
  10. #define SIZE 2
  11.  
  12. int *wczytywanieWspolczynnikow();
  13. int *wczytywanieZakresuDziedziny();
  14. float *generaowaniePrzebiegu();
  15. int wczytanieRozmiaruTablicyWyinikowej();
  16. void zapisywanieDoPliku();
  17. float *wczytywanieszumu();
  18. void odczytZpliku();
  19. void filtry();
  20.  
  21. int main()
  22. {
  23.     setlocale(LC_ALL, "polish_poland");
  24.     float *taberiusz;
  25.     float *tab3;                              //tablica pobierajaca dane
  26.     float *tab2;
  27.     float *mediany;
  28.     float *zaszumiona;
  29.     float *srednie;
  30.     int tab[SIZE];                            //rozmiar tablicy zawierajacej wspolczynniki A i B
  31.     int tab1[SIZE];                          //rozmiar tablicy zawierajacej elementy okreslajace zakres dziedziny
  32.     char wybor[10], ponownie[10];
  33.     int a = 1;
  34.  
  35.     int *ab = wczytywanieWspolczynnikow(tab);
  36.     int *dz = wczytywanieZakresuDziedziny(tab1);
  37.     int roz = wczytanieRozmiaruTablicyWyinikowej();
  38.     puts("Wpisz:\nq - zmiana wspolczynnikow\ne - zmiana ilosci wynikow\na - generuj przebieg\nw - wczytanie szumu\nr - filtry\nk - jak koniec");
  39.     while (a == 1) {
  40.         do {
  41.             scanf("%s", &wybor);
  42.         } while (wybor[0] != 'q' && wybor[0] != 'k' && wybor[0] != 'e' && wybor[0] != 'w' && wybor[0] != 'a');
  43.         switch (wybor[0]) {
  44.         case 'q':
  45.             ab = wczytywanieWspolczynnikow(tab);
  46.             break;
  47.         case 'a':
  48.             taberiusz = calloc(roz, roz * sizeof(int));
  49.             float *gen = generaowaniePrzebiegu(ab, *dz, *(dz + 1), taberiusz, roz);
  50.             break;
  51.         case 'w':
  52.             tab2 = malloc(roz * sizeof(int));
  53.             //mediany = malloc((roz) * sizeof(int));
  54.             //srednie = malloc((roz) * sizeof(int));
  55.             float *val = generaowaniePrzebiegu(ab, *dz, *(dz + 1), tab2, roz);
  56.             //float *zaszumiona;
  57.             zaszumiona = malloc(roz * sizeof(int));
  58.             for (int i = 0; i < roz; i++)
  59.                 *(zaszumiona + i) = *(tab2 + i);
  60.             wczytywanieszumu(zaszumiona, roz);
  61.             for (int j = 0; j < roz; j++)
  62.             printf("%.3f \n", zaszumiona[j]);
  63.         case 'r':
  64.             mediany = malloc((roz) * sizeof(int));
  65.             srednie = malloc((roz) * sizeof(int));
  66.             filtry(zaszumiona, roz, mediany, srednie);
  67.             //zapisywanieDoPliku(zaszumiona, roz, mediany, srednie);
  68.             //free(zaszumiona);
  69.             //odczytZpliku();
  70.             break;
  71.         case 'e':
  72.             roz = wczytanieRozmiaruTablicyWyinikowej();   //wywołanie funkcji wczytujace rozmiar tablicy wynikowej
  73.             break;
  74.         case 'k':
  75.             a = 0;
  76.             break;
  77.         }
  78.         if (a == 1)
  79.             puts("Wpisz:\nq - zmiana wspolczynnikow\ne - zmiana ilosci wynikow\na - generuj przebieg\nw - wczytanie szumu\nr - filtry\nk - jak koniec");
  80.     }
  81. }
  82.  
  83.  
  84. float *generaowaniePrzebiegu(int x, int y, int z, float *arr2, int siz)   //funkcja pobiera tablice wspolczynnikow, dwa parametry określające dziedzine,
  85.                                                                           //tablice wynikową, rozmiar tablicy wynikowej
  86. {
  87.     int *a = x;                                                                //sprawdzenie czy zostaly przkazane prawidlowe parametry
  88.     int  b = y;
  89.     int  c = z;
  90.     int siiz = siz;       //rozmiar tablicy wynikowej
  91.     float *war;
  92.     war = arr2;
  93.     for (int i = 0; i < siiz; i++) {
  94.         //printf("nr %d %.3f \n", i, a[0] * sin(a[1] * (b + i)));
  95.         war[i] = a[0] * sin(a[1] * (b + i));
  96.         printf("%.3f\n", war[i]);
  97.     }
  98.     return war;
  99.  
  100.  
  101. }
  102.  
  103. int *wczytywanieWspolczynnikow(int arr[SIZE])
  104. {
  105.     int *wsp;
  106.     wsp = arr;
  107.     puts("Podaj wspolczynnik A:");
  108.     scanf("%d", wsp);
  109.     puts("Podaj wspolczynnik B:");
  110.     scanf("%d", (wsp + 1));
  111.     return wsp;
  112.  
  113. }
  114.  
  115. int *wczytywanieZakresuDziedziny(int arr1[SIZE])
  116.  
  117. {
  118.     int *wsp1;
  119.     wsp1 = arr1;
  120.     int a = 1;
  121.     int b = 100;
  122.     wsp1[0] = a;
  123.     wsp1[1] = b;
  124.     return wsp1;
  125. }
  126.  
  127. int wczytanieRozmiaruTablicyWyinikowej()
  128. {
  129.     int rozmiar;
  130.     puts("Podaj rozmiar tablicy wynikowej");
  131.     scanf("%d", &rozmiar);
  132.     return rozmiar;
  133. }
  134.  
  135. float *wczytywanieszumu(float *szum, int size)
  136. {
  137.     int numer, amplituda;
  138.     int roz = size;
  139.     float *tmp;
  140.     tmp = szum;
  141.     srand(time(NULL));
  142.     int iloscp = rand() % roz;
  143.     for (int i = 0; i < iloscp; i++) {
  144.         numer = rand() % roz;
  145.         amplituda = -5 + rand() % 9;
  146.         *(tmp + numer) += amplituda;
  147.     }
  148. }
  149.  
  150. void odczytZpliku()
  151. {
  152.     int x = 0;
  153.     int h = 0;
  154.     float *owyn = malloc(sizeof(float));
  155.     int *kol = malloc(sizeof(int));
  156.     FILE* plik = fopen("G:/dopobrania.csv", "r");
  157.     while (fscanf(plik, "%d;%f", &*(kol + x), &*(owyn + x)) != EOF)
  158.     {
  159.         printf("%d %f\n", *(kol + x), *(owyn + x));
  160.         owyn = realloc(owyn, (x + 1) * sizeof(float*));
  161.         kol = realloc(kol, (x + 1) * sizeof(int));
  162.         x++;
  163.     }
  164. }
  165.  
  166. void filtry(float *szum, int roz, float *med, float *sred)
  167. {
  168.     float *dof = szum; //wskaznik tablicy do filtracji
  169.     int size = roz;
  170.     float temp;
  171.     float pomoc[5];
  172.     int x = 0;
  173.     int wyborf = 0;
  174.     float suma = 0;
  175.     puts("Filtr medianowy wcisnij 1");
  176.     puts("Filtr sredniej ruchomej wcisnij 2");
  177.     do {
  178.         scanf("%d", &wyborf);
  179.     } while (wyborf != 1 && wyborf != 2);
  180.  
  181.     switch (wyborf) {
  182.  
  183.     case 1:
  184.         puts("Filtr medianowy");
  185.         for (int h = 0; h < size; h++) {
  186.             printf("%d %.3f\n", h, dof[h]);
  187.         }
  188.         med[0] = dof[0];
  189.         med[1] = dof[1];
  190.         med[size - 1] = dof[size - 1];
  191.         med[size - 2] = dof[size - 2];
  192.         for (int i = 0; i < size - 4; i++) {
  193.             x = 0;
  194.             for (int j = i; j < 5 + i; j++, x++)
  195.                 pomoc[x] = dof[j];
  196.  
  197.             for (int q = 0; q < 5; q++) {
  198.                 for (int w = 0; w < 4; w++) {
  199.                     if (pomoc[w] > pomoc[w + 1]) {
  200.                         temp = pomoc[w];
  201.                         pomoc[w] = pomoc[w + 1];
  202.                         pomoc[w + 1] = temp;
  203.  
  204.                     }
  205.                 }
  206.             }
  207.             med[i + 2] = pomoc[2];
  208.         }
  209.         for (int t = 0; t < size; t++) {
  210.             printf("%.3f\n", med[t]);
  211.         }
  212.         break;
  213.     case 2:
  214.         puts("Filtr sredniej ruchomej");
  215.         sred[0] = dof[0];
  216.         sred[1] = dof[1];
  217.         sred[size - 1] = dof[size - 1];
  218.         sred[size - 2] = dof[size - 2];
  219.         for (int i = 0; i < size - 4; i++) {
  220.             x = 0;
  221.             suma = 0;
  222.             for (int j = i; j < 5 + i; j++, x++) {
  223.                 pomoc[x] = dof[j];
  224.                 suma += pomoc[x];
  225.             }
  226.             sred[i + 2] = suma / 5;
  227.             //printf("%.3f\n", sred[i + 2]);
  228.         }
  229.         for (int h = 0; h < size; h++) {
  230.             printf("%.3f\n", sred[h]);
  231.         }
  232.         break;
  233.     }
  234. }
  235.  
  236. void zapisywanieDoPliku(float *wyn, int size, float *med, float *sred)
  237. {
  238.     int roz1 = size;
  239.     float *sum = wyn;
  240.     //printf("%.3f", *(sum));
  241.     FILE* plik;
  242.     plik = fopen("G:\wykres.csv", "w");
  243.     //fprintf(plik, "%.3f", *(sum));
  244.     for (int i = 0; i < roz1; i++) {
  245.         fprintf(plik, "%d;%.3f\n", i, *(sum + i));
  246.     }
  247.     for (int j = 0; j < size; j++) {
  248.         fprintf(plik, "%d;%.3f\n", j, med[j]);
  249.     }
  250.     for (int h = 0; h < size; h++) {
  251.         fprintf(plik, "%d;%.3f\n", h, sred[h]);
  252.     }
  253.     fclose(plik);
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement