Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<math.h>
- #include<stdlib.h>
- #include<time.h>
- #include<math.h>
- #include<string.h>
- #define PI 3.141592653591
- void ZapisCSV(float **, int, char *);
- void RysujWykres(float **, int, char *);
- float *generator_szumu(int);
- float **generator(int, int, int, int);
- void OdczytCSV(char *, float**);
- float *Srednia(float **, int);
- void Skuteczna(float **, int);
- void Sortuj(float *, int);
- int main() {
- int f, fp, n, i, N;
- float **dane;
- float **tab;
- printf("Podaj czestotliwosc - f, czestotliwosc probkowania - fp, ilosc okresow - n: \n");
- scanf("%d%d%d", &f, &fp, &n);
- N = (fp / f)*n;
- dane = generator(f, fp, n, N);
- dane[2] = generator_szumu(N);
- for (i = 0; i<N; i++) {
- printf("szum= %f\n", generator_szumu(N)[i]);
- dane[3][i] = dane[1][i] + dane[2][i];
- }
- //for(i=0;i<N;i++) printf("t=%f y=%f\n",dane[0][i], generator(f,fp,n,N)[1][i]);
- printf("Menu:\n");
- printf("1. Rysuj wykres.\n2. Zapis do pliku\n3. Odczyt z pliku\n4.Odszumianie\n5.Filtr medianowy\n");
- int znak = 0;
- do
- {
- printf("Twoj wybor to: ");
- scanf("%d", &znak);
- switch (znak)
- {
- case 1: RysujWykres(dane, N, "wykres_google.html");
- system("wykres_google.html");
- break;
- case 2: ZapisCSV(dane, N, "plikCSV.csv");
- break;
- case 3: char nazwa[20];
- printf("Podaj nazwe pliku do odczytu: ");
- scanf("%s", &nazwa);
- OdczytCSV(nazwa,dane);
- system(nazwa);
- break;
- case 4:
- dane[3] = Srednia(dane, N);
- break;
- case 5: Skuteczna(dane, N);
- break;
- default: break;
- }
- } while (znak != 0);
- system("pause");
- return 0;
- }
- void ZapisCSV(float **dane, int N, char *nazwa) {
- FILE *Wsk_do_pliku;
- int i;
- Wsk_do_pliku = fopen(nazwa, "w");
- for (i = 0; i<N; i++) {
- fprintf(Wsk_do_pliku, "%f;%f\n", dane[0][i], dane[1][i]);
- }
- fclose(Wsk_do_pliku);
- }
- void OdczytCSV(char *nazwa, float **dane) {
- int i, l_wierszy;
- FILE *wsk;
- float **tab;
- char znak;
- wsk = fopen(nazwa, "r");
- l_wierszy = 0;
- while (!feof(wsk)) {
- znak = fgetc(wsk);
- if (znak == '\n')
- l_wierszy++;
- }
- printf("\nW pliku jest %d linii\n", l_wierszy);
- rewind(wsk);
- for (i = 0; i < l_wierszy; i++)
- {
- float a, b;
- fscanf(wsk, "%f;%f\n", &a, &b);
- dane[0][i] = a;
- dane[1][i] = b;
- }
- fclose(wsk);
- }
- void RysujWykres(float **dane, int l_linii, char *nazwa) {
- FILE *Wsk_do_pliku;
- int i;
- Wsk_do_pliku = fopen(nazwa, "w");
- fprintf(Wsk_do_pliku, "<html>\n");
- fprintf(Wsk_do_pliku, "<head>\n");
- fprintf(Wsk_do_pliku, "<script_ type=\"text/javascript_\" src=\"https://www.google.com/jsapi\"></script_>\n");
- fprintf(Wsk_do_pliku, "<script_ type=\"text/javascript_\">\n");
- fprintf(Wsk_do_pliku, "google.load(\"visualization\", \"1\", {packages:[\"corechart\"]});\n");
- fprintf(Wsk_do_pliku, "google.setOnLoadCallback(drawChart);\n");
- fprintf(Wsk_do_pliku, "function drawChart() {\n");
- fprintf(Wsk_do_pliku, "var data = google.visualization.arrayToDataTable([\n");
- fprintf(Wsk_do_pliku, "['i', 'sinus','sinus+szum']");
- //
- for (i = 0; i<l_linii; i++) {
- fprintf(Wsk_do_pliku, ",\n[%f, %f, %f]", dane[0][i], dane[1][i], dane[3][i]); //przekazanie danych na wykres
- }
- //
- fprintf(Wsk_do_pliku, "\n]);\n");
- fprintf(Wsk_do_pliku, "var options = {\n");
- fprintf(Wsk_do_pliku, "title: 'rozklad Gaussa'\n");
- fprintf(Wsk_do_pliku, "};\n");
- fprintf(Wsk_do_pliku, "var chart = new google.visualization.LineChart(document.getElementById('chart_div'));\n");
- fprintf(Wsk_do_pliku, "chart.draw(data, {\n");
- fprintf(Wsk_do_pliku, "colors: ['red']\n");
- fprintf(Wsk_do_pliku, "}\n");
- fprintf(Wsk_do_pliku, ");\n");
- fprintf(Wsk_do_pliku, "}\n");
- fprintf(Wsk_do_pliku, "</script_>\n");
- fprintf(Wsk_do_pliku, "</head>\n");
- fprintf(Wsk_do_pliku, "<body>\n");
- fprintf(Wsk_do_pliku, "<div id=\"chart_div\" style=\"width: 1280px; height: 720px;\"></div>\n");
- fprintf(Wsk_do_pliku, "</body>\n");
- fprintf(Wsk_do_pliku, "</html>\n");
- fclose(Wsk_do_pliku);
- }
- float *generator_szumu(int N) {
- int i;
- float *szum;
- srand(time(NULL));
- szum = (float*)calloc(N, sizeof(float));
- for (i = 0; i<N; i++) {
- szum[i] = (rand() % 1000)*1.0 / 5000;
- }
- return szum;
- }
- float **generator(int f, int fp, int n, int N)
- {
- float tp;
- int i, j;
- float **tab;
- tp = 1.0 / fp;
- // alokacja pamięci (tablica 2D)//
- tab = (float**)calloc(2, sizeof(float*));
- for (i = 0; i<4; i++) {
- tab[i] = (float*)calloc(N, sizeof(float));
- }
- // generator sinusa
- for (j = 0; j<n; j++) {
- for (i = 0; i<(fp / f); i++) {
- tab[0][j*(fp / f) + i] = tp*(j*(fp / f) + i); //czas
- tab[1][j*(fp / f) + i] = fabs(sin(2 * PI*(f / 2)*tp*i)); //wartosci
- //printf("t=%f y=%f \n",tab[0][j*(fp/f)+i], tab[1][j*(fp/f)+i]);
- }
- }
- return tab;
- }
- float *Srednia(float **dane, int n)
- {
- float *odfiltrowany;
- odfiltrowany = (float*)calloc(n, sizeof(float));
- int i;
- for (i = 0; i < n - 1; i++)
- {
- odfiltrowany[i] = (dane[3][i] + dane[3][i + 1]) / 2;
- printf("%lf\n", odfiltrowany[i]);
- }
- return odfiltrowany;
- }
- void Skuteczna(float ** dane, int n)
- {
- int i;
- for (i = 0; i < n - 2; i++)
- {
- float *tmp;
- tmp = (float*)calloc(3, sizeof(float));
- tmp[0] = dane[3][i];
- tmp[1] = dane[3][i + 1];
- tmp[2] = dane[3][i + 2];
- Sortuj(tmp,3);
- dane[3][i] = tmp[1];
- }
- }
- void Sortuj(float *dane, int n)
- {
- int i,j;
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n - 1; j++)
- {
- if (dane[j] > dane[j + 1])
- {
- float temp = dane[j + 1];
- dane[j + 1] = dane[j];
- dane[j] = temp;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement